mcpField
M
mcp-databnf

mcp-databnf

本地服务
github.com搜索与检索0今天更新

关于 mcp-databnf

mcp-databnf 将法国国家图书馆 data.bnf.fr 的开放目录接入聊天客户端,供研究作者、作品和版本的人使用。它还可查找 Gallica 中关联的数字化副本,并呈现记录状态;无需 API 密钥或账户。

主要功能

  1. 01按名称搜索作者
  2. 02按标题搜索作品
  3. 03读取作者和作品记录
  4. 04列出作者作品与作品版本
  5. 05查找 Gallica 数字化副本

适用场景

  1. 01查找作者的生平与作品
  2. 02查看某部作品的出版版本
  3. 03确认记录是否关联 Gallica 副本

MCP 相关

这是一个 MCP 服务,向聊天客户端提供作者和作品搜索、记录读取、作品及版本列表,以及 Gallica 数字化副本查找工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
npmmcp-databnf2.2.0
mcpbmcp-databnf-2.2.0.mcpb2.2.0

工具

7

收录的工具列表 · 更新于 今天

参数类型必填说明
namestring是人物姓名,例如 'Rimbaud' 或 'Arthur Rimbaud'。
pageinteger否
limitinteger否

详细介绍

mcp-databnf

npm CI license MCP Registry Glama M8ven LobeHub Install in Cursor Install in VS Code

data.bnf.fr 是法国国家图书馆的开放数据服务。它发布该国家图书馆维护的规范记录:图书馆编目的个人及其生卒日期、所在地、语言和活动领域;他们创作的作品及各作品的出版版本;以及指向 Gallica 数字化副本的链接。记录会注明图书馆认为该记录已确立还是仍属暂定。

此服务将聊天客户端连接到该数据服务。你可以按名称搜索作者或作品、阅读完整记录、列出某位作者的作品、列出某部作品的版本,并查找与之相关的数字化副本。它不需要 API 密钥或账号。

法语版


安装

一键安装

Install in Cursor Install in VS Code

Claude Code

claude mcp add databnf -- npx -y mcp-databnf

Claude Desktop、Cursor,以及使用标准配置格式的任何客户端

{
  "mcpServers": {
    "databnf": {
      "command": "npx",
      "args": ["-y", "mcp-databnf"]
    }
  }
}

需要 Node 24 或更高版本,无需设置环境变量。

使用 Docker
{
  "mcpServers": {
    "databnf": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-databnf:2.1.2"]
    }
  }
}

-i 会保持 stdin 开启,协议通过它传输;不使用 -t,因为 TTY 会改写数据流。容器需要能够通过 HTTPS 访问 data.bnf.fr,除此之外不需要任何东西:无需卷、端口或凭据。

打包安装,无需 npm

从最新版本下载 mcp-databnf-2.1.2.mcpb 并打开。支持 MCP bundle 的客户端会自行安装,无需 npm,也无需编辑配置文件。该 bundle 包含其依赖项,因此安装时不会下载任何内容。

你可以这样提问

  • « BnF 对 Colette 有什么记载? »
  • “列出 Marguerite Duras 写过的所有作品。”
  • “图书馆收藏了这部作品的哪些版本?”
  • “其中有版本在 Gallica 中数字化了吗?”
  • “这条记录上次确立是什么时候?”

通常的操作流程是从搜索到记录:搜索结果行包含一个 id,然后由 get_author 或 get_work 读取该记录。

工具

工具功能
search_authors按姓名在规范记录中查找人物。
get_author完整读取一位人物的记录。
search_works按标题查找作品。
get_work完整读取一部作品的记录。
list_works列出某人署名的作品。
list_editions列出某部作品的版本。
find_digitised查找 Gallica 中某位人物或某部作品的数字化副本。
search_authors

按姓名在规范记录中查找人物。

参数类型必填功能
name字符串,1 到 200 个字符是要查找的姓名。
limit整数,1 到 50,默认值为 10否返回的行数。
page整数,1 到 100,默认值为 1否要返回的行所在页。

返回内容: authors,其中每项包含 id,可供 get_author、list_works 和 find_digitised 使用;name 为服务记录的姓名;label 为规范标题,通常包含年代; birth_year 和 death_year,若记录未注明则为 null;role;以及 source_url。 words_searched 表示实际发送的查询内容,has_more 表示是否还有后续页面, index_window_full 表示索引已返回此次搜索可提供的全部内容。

get_author

完整读取一位人物的记录。

参数类型必填功能
author_id字符串,1 到 200 个字符是某一行记录所含的标识符。
include_depictions布尔值,默认值为 false否添加记录指向的肖像。

返回内容: 人物信息,包括记录中公布的 name、label、given_name、family_name、 other_names、birth_date 和 death_date,以及数字形式的 birth_year 和 death_year、birth_place、death_place、biographical_information、 occupation、ISO 639-2 代码形式的 languages,以及记录所用措辞中的 countries 和 fields。记录中留空的字段为 null。

search_works

按标题查找作品。

参数类型必填功能
title字符串,1 到 200 个字符是要查找的标题文字。
limit整数,1 到 50,默认值为 10否返回的行数。
page整数,1 到 100,默认值为 1否要返回的行所在页。

返回内容: works,其中每项包含 id,可供 get_work、list_editions 和 find_digitised 使用;title;date,即记录中注明的作品年份,按原记录提供; creators;status,值为 established 或 provisional;以及 source_url。 返回数据还包含与人物搜索相同的 words_searched、has_more 和 index_window_full。

get_work

完整读取一部作品的记录。

参数类型必填作用
work_id字符串,1 至 200 个字符是条目所带的标识符。
include_depictions布尔值,默认 false否添加记录指向的插图。

**返回内容:**作品的 title、出版时的 label 和 date、first_year、以 { id, name } 表示的 creators、languages、forms、记录原文中的 subjects 和 dewey_classes、expression_count、BnF 与之关联的登记记录的 same_as,以及 catalogue_url。status 的值为 established 或 provisional,status_statement 说明图书馆对此状态的含义:临时记录是图书馆尚未完成核查的记录。

list_works

列出某人署名的作品。

参数类型必填作用
author_id字符串,1 至 200 个字符是此人的标识符。
limit整数,1 至 50,默认 10否返回的条目数。
page整数,1 至 100,默认 1否条目所在的页码。

返回内容:works,每项包含 id、title、出版时的 date、记录中有值时以数字表示的 year、forms、status 和 source_url,以及用于继续获取结果的 has_more。

list_editions

列出一部作品的各个版本。

参数类型必填作用
work_id字符串,1 至 200 个字符是作品的标识符。
limit整数,1 至 50,默认 10否返回的条目数。
page整数,1 至 100,默认 1否条目所在的页码。

返回内容:editions,每项包含其在 BnF 目录中的 id、该版本所载的 title、date 和 year、publisher、place、edition_statement、extent、isbn、编目人员所写的 note、catalogue_url、digitised 和 source_url。记录中为空的字段值为 null。

find_digitised

查找与某人或某部作品关联、已在 Gallica 数字化的副本。

参数类型必填作用
id字符串,1 至 200 个字符是某人或某部作品的标识符。
kindauto、person 或 work,默认 auto否标识符所指的对象。
limit整数,1 至 200,默认 40否返回的链接数。

返回内容:kind,说明目录将该记录归为哪种类型;以及 links,每项包含 Gallica 的 ark、url、rendering 和该人物在其中担任的 role。links_returned_by_role 按角色统计链接数量。此服务仅描述数字化文档,不会打开文档。

已核实和临时记录

记录带有 status。established 表示图书馆已核查该记录;provisional 表示尚未完成核查,status_statement 会用图书馆自己的措辞说明这一点。引用临时记录中的任何内容时,请同时注明其状态。

许可,以及许可要求

BnF 对这些元数据规定了一项条件:

这些元数据可免费自由使用,但须保留其来源说明 并注明获取日期。

使用免费,但须注明来源并说明获取日期。每个回答的载荷中都包含 retrieved_at,且文本末尾会注明来源和日期。缓存回答会报告其最初读取的时间,因为那就是获取时间。每次展示所获取的内容时,都要同时注明来源和日期。

配置

所有变量都是可选的。在客户端配置的 env 块中设置它们。

VariableDefaultWhat it does
BNF_USER_AGENT项目标识向 BnF 标识你的应用,并提供一个可联系到具体人员的地址。
BNF_MIN_INTERVAL_MS3000两次请求之间的间隔,范围为 3000 到 120000。
BNF_TIMEOUT_MS60000单次请求的截止时间,范围为 1000 到 300000。
BNF_MAX_RETRIES3临时故障后的重试次数,范围为 0 到 8。
BNF_CACHE_TTL_MS900000回答在内存中的保留时长,范围为 0 到 86400000。
BNF_CACHE_MAX_ENTRIES200同时保存在内存中的回答数量,范围为 1 到 5000。
BNF_LOG_LEVELerrorsilent、error、info 或 debug,写入 stderr。

超出范围的值会回退到默认值,原因会写入 stderr。

错误

每个失败都带有六种代码之一和一条消息;在有帮助时,还会附上说明下一步操作的提示。

CodeWhat happenedWhat to do
not_found服务已响应,但没有该记录。使用 search_authors 或 search_works 检查标识符。
invalid_input请求发出前,参数已被拒绝。阅读消息,其中会指出相关参数。
rate_limited服务要求此客户端放慢请求速度。等待提示中指定的秒数,然后使用相同参数再次调用。该记录仍然存在。
parse_failure收到的回答格式无法由此客户端读取。在问题跟踪器中报告。
network_error请求未能完成。稍后重试。
timeout请求超过了截止时间。增大 BNF_TIMEOUT_MS,或减少请求的行数。

作为库使用

读取服务的这一层单独发布,带有自己的请求节流、缓存和错误处理,且不绑定任何协议。

import { BnfClient } from "mcp-databnf/client";

const client = new BnfClient();
const { data, cached } = await client.getAuthor("cb11907966z");
console.log(data.label, cached);

getAuthor 和 getWork 各自返回 { data, cached },并会抛出携带六种代码之一的错误。两次请求之间至少间隔三秒,这里同样适用。

请求频率与来源标注

请求逐个发送,间隔至少三秒,无论服务如何配置,这个下限都不变。每个问题都会通过 SPARQL 查询,向 BnF 自费运行的公共端点发出请求;因此请求间隔较长,超时时限也较长。User-Agent 始终以项目标识和可联系到工作人员的地址结尾。

每个回答都会附带来源和 retrieved_at,许可证要求在展示元数据的任何地方注明这两项。

此 MCP 服务是一个非官方项目,与法国国家图书馆没有关联。

隐私

此服务不会收集任何关于你的信息,也不会向其作者发送任何信息。它在你的机器上运行,只会联系 data.bnf.fr,不会联系其他任何地方;运行期间会将回答保存在内存中,也不会写入磁盘。 PRIVACY.md 说明了请求会携带哪些内容,以及哪些设置会影响这些内容。

开发

npm install
npm run build:fixtures
npm test
npm run check

测试使用生成的 fixture 运行,不会发出网络请求。在线测试套件 npm run test:live 会针对每个路由发出一个请求,并每晚对服务本身运行。

贡献

漏洞、问题和想法请提交到问题跟踪器。欢迎提交拉取请求;先创建问题有助于商定更改方案。请参阅 CONTRIBUTING.md。

许可证

MIT,详见 LICENSE。元数据归法国国家图书馆所有,可免费使用,但必须注明来源和检索日期。


mcp-databnf(法语版)

英文版

data.bnf.fr 是法国国家图书馆的开放数据服务。它发布由国家图书馆维护的规范记录:图书馆编目的个人及其生卒日期、地点、语言和活动领域;他们创作的作品,以及每部作品出现过的版本;还有指向 Gallica 数字化副本的链接。记录会标明图书馆认定其为已确认还是暂定。

此服务将对话客户端连接到该服务。你可以按名称搜索作者或作品、阅读完整记录、列出作者的作品、列出作品的版本,以及查找与其中任一对象关联的数字化副本。无需 API 密钥,也无需账户。

安装

一键安装

在 Cursor 中安装 在 VS Code 中安装

Claude Code

claude mcp add databnf -- npx -y mcp-databnf

Claude Desktop、Cursor 及所有采用标准配置格式的客户端

{
  "mcpServers": {
    "databnf": {
      "command": "npx",
      "args": ["-y", "mcp-databnf"]
    }
  }
}

需要 Node 24 或更高版本,无需设置任何环境变量。

使用 Docker
{
  "mcpServers": {
    "databnf": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-databnf:2.1.2"]
    }
  }
}

-i 会保持标准输入处于打开状态,它是协议通道;省略 -t 是因为 TTY 会重写数据流。容器只需能够通过 HTTPS 访问 data.bnf.fr,除此之外不需要任何东西:无需卷、端口或凭据。

Bundle,无需 npm

从最新发布版本下载 mcp-databnf-2.1.2.mcpb 并打开它。支持 MCP bundle 的客户端会自动安装,无需 npm,也无需修改配置文件。Bundle 包含其依赖项,因此安装时不会下载任何内容。

可以询问的内容

  • “BnF 对 Colette 有何介绍?”
  • “列出 Marguerite Duras 写过的所有作品。”
  • “图书馆收藏了这部作品的哪些版本?”
  • “其中有在 Gallica 上数字化的版本吗?”
  • “这条记录是已审核还是临时记录?”

常规路径是先搜索,再查看记录:搜索结果中的一行带有一个 id,之后可用 get_author 或 get_work 读取该记录。

工具

工具功能
search_authors按姓名在规范记录中查找人物。
get_author完整读取人物记录。
search_works按标题查找作品。
get_work完整读取作品记录。
list_works列出归属于某人的作品。
list_editions列出某部作品的版本。
find_digitised查找 Gallica 中某个人物或作品的数字化副本。
search_authors

按姓名在规范记录中查找人物。

参数类型必填功能
name字符串,1 到 200 个字符是要搜索的姓名。
limit整数,1 到 50,默认值为 10否返回的行数。
page整数,1 到 100,默认值为 1否要返回的结果页码。

返回内容: authors,其中每项都包含 id,可供 get_author、list_works 和 find_digitised 使用;name 是服务显示的姓名;label 是规范标题,通常附带日期; 若记录未注明,则 birth_year 和 death_year 为 null;还有 role 和 source_url。 words_searched 表示实际发送的搜索内容,has_more 表示是否还有其他页面,而 index_window_full 表示索引已返回该搜索所能提供的全部结果。

get_author

完整读取人物记录。

参数类型必填功能
author_id字符串,1 到 200 个字符是搜索结果行中的标识符。
include_depictions布尔值,默认值为 false否添加记录所链接到的肖像。

返回内容: 此人物的 name、label、given_name、family_name、 other_names、birth_date 和 death_date(以发布内容为准),以数字表示的 birth_year 和 death_year,以及 birth_place、death_place、 biographical_information、occupation、采用 ISO 639-2 代码的 languages、 countries 和记录中使用的 fields。记录中留空的字段值为 null。

search_works

按标题查找作品。

参数类型必填说明
title字符串,1 至 200 个字符是要查找的标题词语。
limit整数,1 至 50,默认值为 10否返回的行数。
page整数,1 至 100,默认值为 1否返回第几页。

返回: works,其中每项包含 id,供 get_work、list_editions 和 find_digitised 使用;title;date,即作品记录中给出的作品出版年份; creators;status,值为 established 或 provisional;以及 source_url。外层对象包含与人员搜索相同的 words_searched、 has_more 和 index_window_full。

get_work

读取作品的完整记录。

参数类型必填说明
work_id字符串,1 至 200 个字符是行中所含的标识符。
include_depictions布尔值,默认值为 false否添加记录所指向的插图。

返回: 作品信息,包含 title、label、记录所载的 date、 first_year、格式为 { id, name } 的 creators、languages、forms、 subjects 和记录中的 dewey_classes、expression_count、same_as(用于 与 BnF 对应的登记信息),以及 catalogue_url。status 的值为 established 或 provisional,status_statement 说明图书馆对此的定义: 临时记录是指尚未完成核验的记录。

list_works

列出归属于某人的作品。

参数类型必填说明
author_id字符串,1 至 200 个字符是此人的标识符。
limit整数,1 至 50,默认值为 10否返回的行数。
page整数,1 至 100,默认值为 1否返回第几页。

返回: works,其中每项包含 id、title、记录所载的 date、 year(如果记录中有年份,则以数字表示)、forms、status 和 source_url, 并提供用于继续查询的 has_more。

list_editions

列出某部作品的版本。

参数类型必填说明
work_id字符串,1 至 200 个字符是作品的标识符。
limit整数,1 至 50,默认值为 10否返回的行数。
page整数,1 至 100,默认值为 1否返回第几页。

返回: editions,其中每项包含其在 BnF 目录中的独立 id、该版本所载的 title、date 和 year、publisher、place、edition_statement、 extent、isbn、编目员撰写的 note、catalogue_url、digitised 和 source_url。记录中留空的字段值为 null。

find_digitised

查找 Gallica 中关联到某个人物或作品的数字化馆藏。

参数类型必填作用
id字符串,1 到 200 个字符是人物或作品的标识符。
kindauto、person 或 work,默认值为 auto否标识符所指的对象类型。
limit整数,1 到 200,默认值为 40否返回的链接数。

返回内容: kind 表示目录中记录的条目类型;links 中的每项都包含 Gallica ark、url、rendering,以及该人物在其中所担任的 role。links_returned_by_role 按角色统计链接数。此服务只描述数字化文档,不会打开任何文档。

已确认和暂定条目

条目带有 status。established 表示图书馆已核实该条目;provisional 表示尚未完成核实,status_statement 会用图书馆自己的措辞说明这一点。凡是来自暂定条目的内容,都要注明其状态。

许可及其要求

BnF 对这些元数据的使用提出了以下条件:

这些元数据可自由免费使用,但须保留来源说明,并注明获取日期。

每条响应的有效载荷中都包含 retrieved_at,且文本末尾会注明来源和该日期。对于从缓存返回的响应,记录的是最初读取该响应的时间,因为这就是其获取日期。凡是展示所获取的内容,都要一并提供来源和日期。

配置

所有变量均为可选项。请在客户端配置的 env 块中设置。

变量默认值作用
BNF_USER_AGENT项目标识向 BnF 标识您的应用,并提供可联系到相关人员的地址。
BNF_MIN_INTERVAL_MS3000两次请求之间的间隔,范围为 3000 到 120000。
BNF_TIMEOUT_MS60000请求超时时间,范围为 1000 到 300000。
BNF_MAX_RETRIES3临时故障后的重试次数,范围为 0 到 8。
BNF_CACHE_TTL_MS900000响应在内存中的保留时长,范围为 0 到 86400000。
BNF_CACHE_MAX_ENTRIES200同时保存在内存中的响应数量,范围为 1 到 5000。
BNF_LOG_LEVELerrorsilent、error、info 或 debug,输出到错误输出流。

超出范围的值将回退为默认值,原因会写入错误输出流。

错误

每个失败都带有六种代码之一、一条消息,以及在有帮助时提供的下一步操作提示。

代码发生了什么该怎么做
not_found服务已响应,但没有这条记录。使用 search_authors 或 search_works 核对标识符。
invalid_input参数在发出任何请求前就被拒绝。阅读消息,其中会指出出错的参数。
rate_limited服务要求此客户端放慢速度。等待指定的秒数,然后使用相同的参数重试。记录仍然存在。
parse_failure响应已到达,但格式在这里无法读取。请在问题跟踪页报告。
network_error请求未能完成。稍后重试。
timeout请求超时。增大 BNF_TIMEOUT_MS,或减少请求的行数。

作为库使用

读取服务的这一层单独发布,带有自己的节流、缓存和错误处理,不附带任何协议。

import { BnfClient } from "mcp-databnf/client";

const client = new BnfClient();
const { data, cached } = await client.getAuthor("cb11907966z");
console.log(data.label, cached);

getAuthor 和 getWork 都会返回 { data, cached },并抛出带有六种代码之一的错误。这里同样会确保两次请求之间至少间隔三秒。

请求节流与署名

请求会逐个发出,且至少间隔三秒,无论配置如何,这个最短间隔都不会改变。每个查询都会通过 SPARQL 请求公共端点,该端点由法国国家图书馆自费运行,因此查询间隔较长,超时时间也较长。User-Agent 始终以项目身份和可联系到负责人的地址结尾。

每个响应都带有来源和 retrieved_at,根据许可要求,凡是展示元数据的地方都必须注明这两项。

此 MCP 是一个非官方项目,与法国国家图书馆无关联。

隐私

此服务不会收集您的任何信息,也不会向其作者发送任何信息。它在您的计算机上运行,只连接到 data.bnf.fr,在运行期间将响应保存在内存中,并且不会写入磁盘。PRIVACY.md 说明了请求会携带哪些信息,以及哪些设置会改变这一点。

开发

npm install
npm run build:fixtures
npm test
npm run check

测试使用生成的 fixtures 运行,不会发出任何请求。实时测试套件 npm run test:live 会为每个路由发出一个请求,并且每晚都会直接针对服务运行。

贡献

问题、疑问和想法都欢迎提交到问题跟踪页。欢迎提出修改建议;先创建工单有助于就修改方案达成一致。请参阅 CONTRIBUTING.md。

许可证

MIT,详见 LICENSE。元数据属于法国国家图书馆,可自由使用,但须注明来源和检索日期。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。