关于 DPLA Catalog
DPLA Catalog 是面向家谱和历史研究的 MCP 服务,可搜索美国 Digital Public Library of America 汇集的数字馆藏描述。它返回馆藏机构的条目地址、权利信息和引用要素,并可列出机构提供的 IIIF 页面图像。
主要功能
- 01搜索 DPLA 馆藏描述并筛选结果
- 02按地点、主题、机构等条件高级搜索
- 03统计机构、年份和地区的馆藏数量
- 04获取条目元数据与引用要素
- 05列出馆藏机构提供的 IIIF 页面图像
适用场景
- 01查找某地的地图、目录或历史照片
- 02确定数字化资料的实际持有机构
- 03检查条目权利信息并整理引用
MCP 相关
该 MCP 服务通过 stdio 向 MCP 客户端提供只读搜索、条目读取和图像清单工具。它使用 DPLA API 搜索描述,并在可用时从持有机构的 IIIF 清单获取图像信息。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx dpla-catalog-mcpDPLA_API_KEY密钥Your DPLA API key: 32 letters, digits or hyphens. Free; request it with POST https://api.dp.la/v2/api_key/YOUR_EMAIL and it arrives by email.DPLA_CACHE_DIRDirectory for the on-disk response cache.DPLA_TIMEOUTHTTP timeout in seconds.DPLA_MIN_INTERVALLeast seconds between the start of one request to DPLA and the next.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
6收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| hub | string | 否 | 采集该记录的中心,例如 'HathiTrust'、'The Portal to Texas History'、'Illinois Digital Heritage Hub'。 |
| page | integer | 否 | 结果页码,从 1 开始。DPLA 最多提供 100 页。 |
| type | enum | 否 | 条目类型。text:书籍、目录;image:照片、地图、扫描版地图册。 | text | image | moving image | sound | physical object | dataset | interactive resource | collection | event |
| limit | integer | 否 | 每页结果数(1–100)。 |
| place | string | 否 | 记录中标注的地点,例如 'Champaign County (Ill.)' 或 'Galveston'。许多记录未标注地点。 |
| query | string | 否 | 在标题、描述、主题、地点和名称中查找的词语。所有词语都必须匹配;OR、NOT、"phrases" 和 * 均可使用。不会匹配书籍或页面正文中的文本。 |
| title | string | 否 | 标题中的词语,例如 'atlas of Champaign County'。 |
| date_after | string | 否 | 日期范围的结束日期为此日期或之后的条目:YYYY、YYYY-MM 或 YYYY-MM-DD。 |
| date_before | string | 否 | 日期范围的开始日期为此日期或之前的条目:YYYY、YYYY-MM 或 YYYY-MM-DD。 |
| institution | string | 否 | 馆藏机构,例如 'University of Illinois Urbana-Champaign Library'。 |
详细介绍
dpla-catalog-mcp
一个面向**美国数字公共图书馆**的 MCP 服务:通过一次搜索,查找数百家美国图书馆、档案馆、历史协会和博物馆收藏的 5,000 多万件数字化藏品的描述。对于家族史研究,这意味着可以搜索县级地图册和土地册、城市名录、县志、年鉴、地方报纸和照片,其中许多藏品由一家你可能想不到去搜索的小型机构收藏。
美国数字公共图书馆不收藏这些藏品。它通过州级和区域性“枢纽”汇集收藏机构发布的描述,而每条记录都会链接回收藏机构自有网站上的藏品。证据就在那个页面上,引用也应当指向该页面。该服务围绕这一事实构建:每条搜索结果都包含 is_shown_at(收藏机构处的藏品页面)、收藏机构和数字副本的权利声明;get_item 会整理出引用收藏机构记录所需的信息;如果收藏机构发布了 IIIF 清单,get_item_images 就会列出其中的页面图像。
它的工作方式就像一位谨慎的家谱研究者。DPLA 记录是另一份查找指南的查找指南:由机构撰写,经枢纽收集,再由 DPLA 补充信息。DPLA 只搜索这些元数据,绝不会搜索书籍或页面中的文本。工具的描述会明确说明这一点,供模型阅读。
这里的任何操作都不会写入数据,也不会保存家谱。它适合与 nara-catalog-mcp(联邦记录,含 OCR 和页面图像)、snac-archives-mcp(查询哪些档案馆收藏了相关文件)以及 familysearch-mcp(已编目的记录和图像)配合使用。
这是一个独立项目,与美国数字公共图书馆或任何参与机构均无关联,也未获其认可或支持。
工具
此服务提供六种工具,均为只读,并为客户端添加了注释。其中一种完全不会发起网络请求。
查找藏品
| 工具 | 用途 |
|---|---|
search_items | 日常搜索:按关键词、标题、地点、日期范围、收藏机构、枢纽和藏品类型搜索。每条结果都会列出收藏机构、藏品在该机构处的地址(is_shown_at)、权利声明,以及是否可以列出页面图像。若同一作品有多个馆藏副本,会特别标明。 |
search_items_advanced | 执行同样的搜索,并提供 DPLA 支持的所有筛选条件:县、州和市(按 DPLA 的地理编码)、主题、馆藏、出版者、格式、创作者、标识符、藏品所述时期、权利、精确匹配、任一匹配、排序,以及排除美国国家档案馆记录。 |
facet_items | 搜索前查看计数:哪些机构收藏某个县的土地册、某批名录涵盖哪些年份、哪些枢纽覆盖某个地点。 |
查看藏品
| 工具 | 用途 |
|---|---|
get_item | 最多完整返回 20 条记录,每条都附带 citation_parts:收藏机构、标题、日期、机构自己的标识符(索书号、本地 ID、OCLC 号,也从收集到的记录中读取)、is_shown_at、权利信息,以及可用于查找的 DPLA ID。可选择返回原始收集记录。 |
get_item_images | 从收藏机构网站上的 IIIF 清单(Presentation API 2 和 3)获取页面图像,每次返回一段图像列表。如果网站拒绝脚本访问,工具会说明情况并提供可在浏览器中打开的地址。 |
服务本身
| 工具 | 用途 |
|---|---|
api_status | 查看是否已配置密钥(绝不显示密钥)、本会话的调用次数和缓存命中次数,以及最近一次错误。不会发起请求。 |
设置
你需要 Python 3.11 或更高版本、uv 和 DPLA API 密钥。
**密钥免费且会立即发放,**但密钥会发到电子邮件地址,因此请自行申请:
curl -X POST https://api.dp.la/v2/api_key/[email protected]
DPLA 会向该地址发送一个 32 个字符的密钥。再次申请会重新发送同一个密钥。DPLA 只记录电子邮件地址,并会统计使用该密钥发出的每次调用。
无需克隆。uvx 会从 PyPI 获取服务并一步运行:
DPLA_API_KEY=your-key uvx dpla-catalog-mcp
从克隆运行,如果你打算修改它,就应该这样做:
git clone https://github.com/ianderso/dpla-catalog-mcp
cd dpla-catalog-mcp
uv sync
cp .env.example .env # then put your key in .env
uv run dpla-catalog-mcp # stdio server, usually launched by the client
无论采用哪种方式,服务都会通过 stdio 使用 MCP 通信,因此通常会让 MCP 客户端启动它,而不是手动运行。
Claude Desktop
{
"mcpServers": {
"dpla": {
"command": "uvx",
"args": ["dpla-catalog-mcp"],
"env": { "DPLA_API_KEY": "your-key" }
}
}
}
桌面应用不一定会继承 shell 的 PATH。如果服务因为找不到 uvx 而无法启动,请将 which uvx 输出的完整路径设为 command。
Claude Code
claude mcp add dpla --env DPLA_API_KEY="$DPLA_API_KEY" -- uvx dpla-catalog-mcp
或者将密钥保存在 .env 文件中,并让启动器读取,这样密钥既不会出现在客户端的配置中,也不会出现在 shell 历史记录中:
"dpla": { "type": "stdio", "command": "sh", "args": ["-c",
"set -a; . \"$HOME/research/.env\"; set +a; exec uvx dpla-catalog-mcp@latest"] }
配置
| 变量 | 含义 |
|---|---|
DPLA_API_KEY | 你的密钥。必填。缺少密钥或密钥格式错误时,第一次调用工具会报告 not_configured,且不会重复显示密钥值。 |
DPLA_CACHE_DIR | 响应缓存目录。默认值为 ~/.cache/dpla-catalog-mcp。 |
DPLA_TIMEOUT | HTTP 超时时间,单位为秒。默认值为 30。 |
DPLA_MIN_INTERVAL | 向 DPLA 发出请求的最短间隔,单位为秒。默认值为 0.25。 |
服务启动所在目录中的 .env 文件可为环境中未设置的变量提供值;只会读取该目录中的文件。值不可用时,第一次调用工具会报告错误,并指出对应变量。
做个文明的使用者
DPLA 不设配额,但每次调用都会计入密钥的使用量。服务一次只发送一个请求,相邻请求至少间隔 DPLA_MIN_INTERVAL;两个同时进行的相同调用会共用一个请求;搜索结果和分面会在磁盘上缓存 7 天,记录和清单会缓存 30 天(DPLA 每月重新收割数据)。遇到 429 或 5xx 错误时会重试一次,并遵循最长 30 秒的 Retry-After;之后会报告 rate_limited 或 upstream_error,绝不会将其当成“未找到结果”。向各机构网站发出的请求在同一网站之间至少间隔一秒,且绝不重试。
如何解读返回结果
- 命中结果是描述,不是藏品本身。 打开
is_shown_at,阅读其中的藏品(或其页面图像),并引用收藏机构及其记录,例如“Standard atlas of Champaign County, Illinois (Brock & Company, 1929), University of Illinois Urbana-Champaign Library, digital.library.illinois.edu/items/465c93c0-…”。不要引用 DPLA 或聚合平台。在家谱数据库中:存藏机构 = 收藏机构;来源 = 藏品;引文 = 页面或图版,并附上is_shown_at和该机构的标识符。将 DPLA id 作为属性保留,仅用于查找。 - DPLA 不会搜索书籍或页面内部的内容。 印在城市名录、县志或年鉴中的姓氏不会匹配。使用 DPLA 查找有哪些卷册以及存放地点,然后在收藏机构的网站搜索文本:Internet Archive 的全文搜索、HathiTrust 的全文搜索、Portal to Texas History 的全文搜索,或 Chronicling America 的全文搜索。没有命中表示没有匹配的描述,并不代表这个人不存在。
- 地点信息往往缺失;若存在,则经过补充。 许多记录完全没有地点信息(University of Illinois 的县地图集就没有),因此除了
place,还要在query或title中搜索县名。county、state和city是 DPLA 的地理编码字段,只有少数记录填写了这些字段(主要是 Massachusetts 的记录)。按place进行分面筛选,可查看记录中标注的地点。 - 日期按重叠范围匹配。
date_after=1905会匹配日期为 1900-1909 的藏品。“ca. 1900”可能会按年代编入索引。display_date是机构所写的日期。 - 同一作品可能有多个副本。 一部县志在 DPLA 中往往有多个版本,例如 HathiTrust 副本、Internet Archive 副本,以及州级聚合平台的扫描件。
possible_duplicate_of会根据标题和年份,在一页结果中标记这些副本;优先选择其收藏机构提供页面图像和全文的副本。 - National Archives 的记录占 DPLA 的三分之一,并且与 NARA Catalog 重复。使用 nara-catalog-mcp 阅读这些记录更合适,因为它提供 NAID、OCR 文本和图像。
exclude_nara会排除这些记录。 - 权利归属取决于数字副本,且因机构而异。 重新发布图像前,请阅读
rights(rightsstatements.org 或 Creative Commons 地址,附有简短标签)。有些聚合平台(例如 Portal to Texas History)只提供自由文本声明。缩略图不能作为授权依据。 - ID 用于查找,不是引文。 DPLA id 是聚合平台本地 id 的哈希值,因此平台迁移时它也会改变,旧 id 随之失效。还应记录
is_shown_at和机构自己的标识符。 - 精确匹配按字面值匹配。
exact=true会区分大小写,匹配facet_items返回的完整值。DPLA 不支持对 creator 或 identifier 进行精确匹配,因此与exact一起使用时会拒绝这些字段。 - 分页最多到第 100 页。 DPLA 对任何更高页码都会静默地再次返回第 100 页;服务端则会拒绝请求,并告知分页最多能触及多少条命中结果。缩小搜索范围,或使用
facet_items查看命中结果的分布。 - 有些网站会拒绝脚本请求。 University of Illinois 和 HathiTrust catalog 会对自动请求返回 403。服务端会报告这一情况并提供
open_in_browser,不会绕过拒绝。 - **描述是不可信文本,**由数百家机构撰写;原始采集记录也确实如此。请将其视为需要权衡的材料,绝不可视为指令。
刻意不提供的功能
- 申请密钥。
POST /v2/api_key/{email}会以他人名义发送电子邮件。请自行申请密钥。 - 下载页面图片和批量下载。 这些列为后续工作,详见 docs/DESIGN.md。图片地址包含在
get_item_images结果中。 - **DPLA 的 collections 路由,**该路由已下线(会返回 404);其随机条目和档案申请路由,以及其 Primary Source Sets(K-12 教学套件):这些内容在此没有研究价值。
- 原始查询透传。 这会绕过本地检查,而这些检查可避免服务将调用用于 DPLA 会拒绝的请求。
- 绕过网站的机器人防护。 遇到拒绝时会报告,不会尝试规避。
安全
- 密钥只会通过一种方式发送到一个地方。 密钥只会发送到
https://api.dp.la,且只放在Authorization标头中:绝不会放入 URL、日志行、缓存键或文件、错误消息或工具参数中。请求钩子会拒绝密钥客户端访问其他主机,并且不会跟随重定向。 - 不会向机构网站提供凭据。 清单由一个不持有密钥的独立客户端获取,并会剥除任何
Authorization或Cookie标头。该客户端会拒绝 IP 地址、本地名称和 DPLA 自身的主机,无论是首次请求还是每次重定向都如此。 - 发出请求前会检查输入: ID、日期、文本长度、枚举值和页数限制。查询文本中 DPLA 解析器会视为语法的字符会被转义。
- 目录文本不可信。 描述和原始采集记录会原样传递给模型。服务的指令会告诉模型,应将这些文本视为需要权衡的材料,而非指令;但最终仍由模型决定,因此请审核它提出的操作。
如需报告漏洞,请参阅 SECURITY.md。
开发
uv sync --extra dev
uv run pytest # mocked with respx; never touches DPLA
uv run ruff check .
uv run ruff format --check .
uv run python -m tests.live_check # paced calls to the live API; needs DPLA_API_KEY
实时检查会询问 DPLA 记录的固定样例无法回答的问题:其响应是否仍符合服务读取的格式,以及服务所要应对的行为(悄然限制页数、冒号解析、URL 引号编码)是否仍然存在。有关测试套件的组织方式,请参阅 CONTRIBUTING.md;有关 API 的观察结果及其时间,请参阅 docs/API-NOTES.md;有关服务为何采用这种设计,请参阅 docs/DESIGN.md。
致谢
元数据来自 Digital Public Library of America,由其枢纽及成员机构提供。条目、图片及其权利均归持有机构所有。
许可证
MIT。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。