关于 mcp-databnf
mcp-databnf 将法国国家图书馆 data.bnf.fr 的开放目录接入聊天客户端,供研究作者、作品和版本的人使用。它还可查找 Gallica 中关联的数字化副本,并呈现记录状态;无需 API 密钥或账户。
主要功能
- 01按名称搜索作者
- 02按标题搜索作品
- 03读取作者和作品记录
- 04列出作者作品与作品版本
- 05查找 Gallica 数字化副本
适用场景
- 01查找作者的生平与作品
- 02查看某部作品的出版版本
- 03确认记录是否关联 Gallica 副本
MCP 相关
这是一个 MCP 服务,向聊天客户端提供作者和作品搜索、记录读取、作品及版本列表,以及 Gallica 数字化副本查找工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
7收录的工具列表 · 更新于 今天
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 人物姓名,例如 'Rimbaud' 或 'Arthur Rimbaud'。 |
| page | integer | 否 | |
| limit | integer | 否 |
详细介绍
mcp-databnf
data.bnf.fr 是法国国家图书馆的开放数据服务。它发布该国家图书馆维护的规范记录:图书馆编目的个人及其生卒日期、所在地、语言和活动领域;他们创作的作品及各作品的出版版本;以及指向 Gallica 数字化副本的链接。记录会注明图书馆认为该记录已确立还是仍属暂定。
此服务将聊天客户端连接到该数据服务。你可以按名称搜索作者或作品、阅读完整记录、列出某位作者的作品、列出某部作品的版本,并查找与之相关的数字化副本。它不需要 API 密钥或账号。
安装
一键安装
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 个字符 | 是 | 某人或某部作品的标识符。 |
kind | auto、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 块中设置它们。
| Variable | Default | What it does |
|---|---|---|
BNF_USER_AGENT | 项目标识 | 向 BnF 标识你的应用,并提供一个可联系到具体人员的地址。 |
BNF_MIN_INTERVAL_MS | 3000 | 两次请求之间的间隔,范围为 3000 到 120000。 |
BNF_TIMEOUT_MS | 60000 | 单次请求的截止时间,范围为 1000 到 300000。 |
BNF_MAX_RETRIES | 3 | 临时故障后的重试次数,范围为 0 到 8。 |
BNF_CACHE_TTL_MS | 900000 | 回答在内存中的保留时长,范围为 0 到 86400000。 |
BNF_CACHE_MAX_ENTRIES | 200 | 同时保存在内存中的回答数量,范围为 1 到 5000。 |
BNF_LOG_LEVEL | error | silent、error、info 或 debug,写入 stderr。 |
超出范围的值会回退到默认值,原因会写入 stderr。
错误
每个失败都带有六种代码之一和一条消息;在有帮助时,还会附上说明下一步操作的提示。
| Code | What happened | What 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 密钥,也无需账户。
安装
一键安装
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 个字符 | 是 | 人物或作品的标识符。 |
kind | auto、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_MS | 3000 | 两次请求之间的间隔,范围为 3000 到 120000。 |
BNF_TIMEOUT_MS | 60000 | 请求超时时间,范围为 1000 到 300000。 |
BNF_MAX_RETRIES | 3 | 临时故障后的重试次数,范围为 0 到 8。 |
BNF_CACHE_TTL_MS | 900000 | 响应在内存中的保留时长,范围为 0 到 86400000。 |
BNF_CACHE_MAX_ENTRIES | 200 | 同时保存在内存中的响应数量,范围为 1 到 5000。 |
BNF_LOG_LEVEL | error | silent、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。元数据属于法国国家图书馆,可自由使用,但须注明来源和检索日期。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。