mcpField
D
DPLA Catalog

DPLA Catalog

本地服务
github.com/ianderso搜索与检索03 周前更新

关于 DPLA Catalog

DPLA Catalog 是面向家谱和历史研究的 MCP 服务,可搜索美国 Digital Public Library of America 汇集的数字馆藏描述。它返回馆藏机构的条目地址、权利信息和引用要素,并可列出机构提供的 IIIF 页面图像。

主要功能

  1. 01搜索 DPLA 馆藏描述并筛选结果
  2. 02按地点、主题、机构等条件高级搜索
  3. 03统计机构、年份和地区的馆藏数量
  4. 04获取条目元数据与引用要素
  5. 05列出馆藏机构提供的 IIIF 页面图像

适用场景

  1. 01查找某地的地图、目录或历史照片
  2. 02确定数字化资料的实际持有机构
  3. 03检查条目权利信息并整理引用

MCP 相关

该 MCP 服务通过 stdio 向 MCP 客户端提供只读搜索、条目读取和图像清单工具。它使用 DPLA API 搜索描述,并在可用时从持有机构的 IIIF 清单获取图像信息。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"ianderso-dpla-catalog": {
"command": "uvx",
"args": [
"dpla-catalog-mcp"
],
"env": {
"DPLA_API_KEY": "<DPLA_API_KEY>",
"DPLA_CACHE_DIR": "<DPLA_CACHE_DIR>",
"DPLA_TIMEOUT": "<DPLA_TIMEOUT>",
"DPLA_MIN_INTERVAL": "<DPLA_MIN_INTERVAL>"
}
}
}
}
启动命令uvx dpla-catalog-mcp
需要配置的环境变量
DPLA_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+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypidpla-catalog-mcp0.1.1

工具

6

收录的工具列表 · 更新于 2 周前

参数类型必填说明
hubstring否采集该记录的中心,例如 'HathiTrust'、'The Portal to Texas History'、'Illinois Digital Heritage Hub'。
pageinteger否结果页码,从 1 开始。DPLA 最多提供 100 页。
typeenum否条目类型。text:书籍、目录;image:照片、地图、扫描版地图册。 | text | image | moving image | sound | physical object | dataset | interactive resource | collection | event
limitinteger否每页结果数(1–100)。
placestring否记录中标注的地点,例如 'Champaign County (Ill.)' 或 'Galveston'。许多记录未标注地点。
querystring否在标题、描述、主题、地点和名称中查找的词语。所有词语都必须匹配;OR、NOT、"phrases" 和 * 均可使用。不会匹配书籍或页面正文中的文本。
titlestring否标题中的词语,例如 'atlas of Champaign County'。
date_afterstring否日期范围的结束日期为此日期或之后的条目:YYYY、YYYY-MM 或 YYYY-MM-DD。
date_beforestring否日期范围的开始日期为此日期或之前的条目:YYYY、YYYY-MM 或 YYYY-MM-DD。
institutionstring否馆藏机构,例如 'University of Illinois Urbana-Champaign Library'。

详细介绍

dpla-catalog-mcp

CI PyPI

一个面向**美国数字公共图书馆**的 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_TIMEOUTHTTP 超时时间,单位为秒。默认值为 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。

评论

支持 Markdown

第一次接触 MCP?

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

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