mcpField
G
GOV Historical Gazetteer

GOV Historical Gazetteer

本地服务
github.com/ianderso地图与出行03 周前更新

关于 GOV Historical Gazetteer

面向德国及历史上德意志地区家谱研究的 GOV 历史地名录 MCP 服务,按年份查询地点名称、行政隶属、教区和民事登记处。结果附 GOV 条目引用信息,帮助研究者定位档案登记簿。

主要功能

  1. 01按名称搜索历史地点
  2. 02查询指定年份的行政区划
  3. 03查找教区与民事登记处
  4. 04获取带日期的地点隶属关系
  5. 05查看 GOV 条目引用信息

适用场景

  1. 01确认历史事件发生时所属的行政区
  2. 02查找某地点对应的教区登记簿
  3. 03构建按年代变化的家谱地点树

MCP 相关

通过 MCP over stdio 向客户端提供 GOV 地点查询工具。所有工具均为只读,并读取 GOV 的公开服务。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"ianderso-gov-gazetteer": {
"command": "uvx",
"args": [
"gov-gazetteer-mcp"
],
"env": {
"GOV_GAZETTEER_CACHE_DIR": "<GOV_GAZETTEER_CACHE_DIR>",
"GOV_GAZETTEER_TIMEOUT": "<GOV_GAZETTEER_TIMEOUT>",
"GOV_GAZETTEER_MIN_INTERVAL": "<GOV_GAZETTEER_MIN_INTERVAL>",
"GOV_GAZETTEER_CONTACT": "<GOV_GAZETTEER_CONTACT>"
}
}
}
}
启动命令uvx gov-gazetteer-mcp
需要配置的环境变量
GOV_GAZETTEER_CACHE_DIRDirectory for the on-disk response cache.
GOV_GAZETTEER_TIMEOUTHTTP timeout in seconds for one request.
GOV_GAZETTEER_MIN_INTERVALLeast seconds between two requests to GOV. Never below 1.
GOV_GAZETTEER_CONTACTAn email address or URL appended to the User-Agent, so CompGen can reach whoever runs the server.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypigov-gazetteer-mcp0.1.0

工具

6

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

参数类型必填说明
namestring是地点名称,例如 'Quedlinburg'。每次调用使用一种拼写。
limitinteger否最多返回的候选项数(1-100)。
withinstring否仅限 GOV 记录为在任意日期位于此对象内的地点:Kreis、省或州的 GOV ID,例如 'adm_133152'。
refreshboolean否要求 GOV 重新查询,而不是使用 7 天缓存。
place_typestring否保留这些类型:ID、GOV 的德语名称('Dorf'、'Kirchspiel'、'Standesamt'),或 settlement、civil、parish、standesamt、court;以逗号分隔。

详细介绍

gov-gazetteer-mcp

CI PyPI

一个面向 GOV(Geschichtliches Orts-Verzeichnis) 的 MCP 服务:GOV 是 Verein für Computergenealogie(CompGen)的历史地名录,收录约 120 万个地点,主要分布在德国以及曾属于德国或普鲁士的地区。GOV 会记录地点相关信息的历史变化:名称、地点类型,以及曾管辖该地点的所有民政和教会机构。

因此,它能回答德国系谱研究者关于每个德国村庄都会提出的问题:在事件发生的那一年,该村属于哪个 Kreis、哪个省和哪个州?哪些教区和 Standesamt 保存着相关登记簿? 波森的一个村庄在 1919 年以前属于普鲁士,1920 年以后属于波兰;波美拉尼亚的一个村庄则在 1945 年以前属于德国。Kreis 曾更名,Amt 曾解散,教区曾合并。该服务读取 GOV 的公共网络服务,按年份逐年查询,并提供有日期的管辖关系,帮助系谱软件构建在每个日期都准确的地点树。

它的工作方式和严谨的系谱研究者一样。地名录条目是检索线索,不是证据。 GOV 由志愿者编辑:教区或 Standesamt 的关联信息会指出应查阅哪个登记簿,而登记簿本身的标题才是确认依据。每条结果都会注明 GOV 和 CompGen,并附上 GOV 中每个对象页面的地址,因为引用时应引用该页面。

此处不会写入任何内容,也不会保存家谱。它可以与 familysearch-mcp 配合使用;后者的地点工具可以按日期解析地点,但不包含教区或 Standesamt 信息。也可以与 us-places-mcp 配合使用,后者是面向美国县的对应工具。

这是一个独立项目,与 Verein für Computergenealogie 无关,也未获其认可或支持。

工具

该服务提供六种工具,全部为只读工具。

工具用途
gov_search按名称查找地点:GOV ID、名称、类型、坐标和当前上级地点。within 可将搜索范围限制在任意日期的某个 Kreis、省或州内;place_type 可筛选村庄、教区、Standesamt 等类型。
gov_object查看单个对象的完整信息:所有名称及其语言和日期、所有类型及其日期、坐标、外部 ID,以及每条 part-of、located-in 和 represents 关系及其日期和 GOV 的来源 ID。children 会列出该对象所包含的地点,例如教区内的村庄。可使用 GOV ID、GOV 页面地址或外部 ID(例如 geonames:2851465)查询。
gov_place_at_date查询某地点在某一年的情况:当时的名称,以及一直向上到州的民政管辖链;每一级都包含类型和关系日期。对于 GOV 未标注日期,或只在其他年份有佐证的关系,会特别标明。
gov_registers查询某地点在某一年所属的教区(如果 GOV 有记录,则按教派区分)和 Standesamt、可能保存各教区登记簿的上级机构,以及当地法院。若 GOV 未记录教区或 Standesamt,会明确说明。
gov_enclosures查询某地点及其每个上级民政地点的所有有日期的管辖关系,为按日期构建地点树提供数据:每个上级地点对应一条记录,并附有其时间范围,当前的记录排在最前;每条记录还包含类似 from 1871-01-01 to 1937-03-31 的 gramps_date,以及建议的 Gramps 地点类型。
cache_status按操作列出此会话对 GOV 的请求和缓存使用情况。不会发出请求。

设置

你需要 Python 3.11 或更高版本,以及 uv。无需申请密钥。

无需克隆。 uvx 会从 PyPI 获取并一步运行:

uvx gov-gazetteer-mcp

从克隆的仓库运行,如果你要修改它,就应该这样做:

git clone https://github.com/ianderso/gov-gazetteer-mcp
cd gov-gazetteer-mcp
uv sync
uv run gov-gazetteer-mcp   # stdio server, usually launched by the client

无论采用哪种方式,服务都会通过 stdio 使用 MCP 通信,因此通常应让 MCP 客户端启动它,而不是手动运行。

Claude Desktop
{
  "mcpServers": {
    "gov": {
      "command": "uvx",
      "args": ["gov-gazetteer-mcp"]
    }
  }
}

桌面应用不一定会继承 shell 的 PATH。如果服务因找不到 uvx 而无法启动,请将 which uvx 输出的完整路径填入 command。

Claude Code
claude mcp add gov -- uvx gov-gazetteer-mcp

配置

无需进行任何配置。服务启动所在目录中的 .env 文件可以提供环境中未设置的值;服务只会读取该目录中的文件。

变量含义
GOV_GAZETTEER_CACHE_DIR响应缓存目录。默认值为 ~/.cache/gov-gazetteer-mcp。
GOV_GAZETTEER_TIMEOUT单次请求的 HTTP 超时时间,单位为秒。默认值为 30。
GOV_GAZETTEER_MIN_INTERVAL向 GOV 发出的两次请求之间的最短间隔秒数。默认值为 1,且不会低于 1。
GOV_GAZETTEER_CONTACT添加到 User-Agent 中的电子邮件地址或 URL,以便在你的使用造成问题时,CompGen 能联系到你。可选,建议填写。

若某个值不可用,首次调用工具时会返回 not_configured 结果,并指出相应变量。服务不会写入任何文件,缓存除外。

做一位友好的访客

GOV 由志愿者在 CompGen 自有的服务器上运行。客户端一次只发送一个请求,两次请求间隔至少一秒;并发中的两个相同调用会共用一个请求。对象会缓存 30 天,搜索结果会缓存 7 天;每个答案包含的对象(搜索会返回完整对象,而非 ID)都会在本次会话中保留,因此已经查看过的地点不会再次请求。查询某一年的信息时,每个上级对象只会读取一次;之后查询另一年的同一地点无需再请求。每次遍历最多读取 40 个对象,若因此停止,会明确说明。遇到 429、5xx 或连接中断时会重试一次,并遵守 Retry-After;SOAP 故障就是 GOV 的答复,不会重试。User-Agent 会标明软件包名称、版本和此仓库。

使用条款

GOV 网站没有使用条款页面;页脚链接到 CompGen 的 Impressum 和 隐私声明。主页称该项目的启动初衷是“qualitativ hochwertige Daten für jedermann bereitzustellen”(为所有人提供高质量数据, gov.genealogy.net),并在 gov.genealogy.net/services 上公开其 SOAP 服务,无需密钥。CompGen 将 GOV 的数据描述为可自由获取的 Linked Open Data;GOV 在 GenWiki 上的文档设有机器人检查,因此本项目未查阅该文档。每条结果都会注明“GOV — Geschichtliches Orts-Verzeichnis, Verein für Computergenealogie (CompGen)”,并链接到相应对象的页面。

客观而言:GOV 的 robots.txt 禁止访问少数网站路径(编辑和历史记录页面、KML 和 GeoJSON 导出、距离搜索),并列出多个被完全屏蔽的爬虫;但其中没有提及 /services/,而本服务正是通过该 Web 服务运行。

如何解读返回结果

  • 查询时使用事件发生年份。 gov_place_at_date 和 gov_registers 会针对某一年作答。如果一个地方在该年内更换了县或所属州,结果会显示这两个行政单位及其对应日期;请根据事件的具体日期选择。
  • 教区或民事登记处的链接只是线索。 GOV 由志愿者编辑。请在登记册本身中确认教区或登记处;登记册的标题或扉页会列出其名称及所服务的地方,并请引用该登记册。
  • 结果会标明确定性。 链接标为 dated,表示其日期范围涵盖该年份;标为 undated,表示 GOV 未提供日期,系统假定其在该年有效;标为 attested in another year only,表示 GOV 仅在另一年份的名录中记录了该链接。优先采用第一种。
  • 如果 GOV 未将教区链接到某个地方, gov_registers 会列出教堂位于该地方的教区,并说明这一点;这些通常是、但不总是该地方所属的教区。**如果 GOV 未将民事登记处链接到某个地方,**它会列出同一县内同名的民事登记处作为候选,并说明 GOV 并未将两者链接起来。在建模完善的地区(例如波美拉尼亚),GOV 会直接链接两者。
  • 名称搜索按字面匹配。 搜索会匹配完整单词和单词开头,不区分大小写和重音符号(Lubeck 可以找到 Lübeck),但不会匹配拼写变体:德语、波兰语和旧拼法(Cöslin、Köslin、Koszalin)都需要分别查询。零结果仅适用于所搜索的拼写和区域。GOV 每次搜索最多返回 500 个对象。
  • 名称随年份变化。 GOV 标注为 1945 年起使用的波兰语名称,不会用于 1900 年。对于当时有效的名称,language(默认值为 deu;波兰统治下的地方使用 pol)会选择显示的名称;names_at_date 会列出所有名称。
  • 1874 年之前,普鲁士没有民事登记处(帝国其他地区为 1876 年;莱茵河左岸更早)。对于这些年份,gov_registers 会说明这一点。
  • 不包含邦联组织。 GOV 将德意志邦联、莱茵邦联、国际联盟、欧盟和联合国的成员关系记录为包容关系;它们不是政府层级,因此层级链会在其下方终止,并附有说明。
  • 引用对象页面。 请使用每条结果附带的 citation:其中包含来源署名、条目标题、GOV id 和地址、GOV 最近修改日期以及读取日期。

刻意不包含的内容

  • 编辑 GOV。 GOV 的 ChangeService 需要账号;此服务不会为其构建信封。
  • GenWiki 文档。 这些文档位于机器人验证(Anubis)之后,本项目不会绕过验证。本项目的所有内容均基于 WSDL 和 GOV 的实时响应构建;请参阅 docs/API-NOTES.md。
  • 批量导出。 此服务一次读取一个地方,用于研究,而非读取整个区域。

安全

工具参数由模型编写,而模型会读取此服务无法控制的文本,包括 GOV 自身的名称和注释。服务假定这些文本可能会引导模型,并限制被引导的模型能够执行的操作。

  • 单一地址。 每个请求都是对 gov.genealogy.net/services/ComplexService 的 https POST 请求;请求钩子会拒绝 其他任何请求,参数只能选择要查询的内容,不能选择目标地址。 不跟随重定向。
  • 仅限读取操作。 客户端仅为七种读取操作构建信封,不支持其他操作。
  • 仅限公共地址。 连接只会指向经过检查的公共地址,因此如果 DNS 解析结果指向 私有网络,就会被拒绝。不会使用环境中的代理设置。
  • 答案有界且为纯文本。 答案超过 10 MB 时,会在流式接收过程中被拒绝;包含文档类型声明的答案则会在解析前被拒绝。
  • 参数经过验证(GOV ID、外部 ID、年份、类型名称) 后才会用于请求。
  • GOV 的文本不可信。 名称和注释会原样传递给模型。服务的指令会告诉模型,将这些 文本视为需要权衡的材料,而非指令;但最终仍由模型决定,因此请审查它提出的操作。

如需报告漏洞,请参阅 SECURITY.md。

开发

uv sync --extra dev
uv run pytest                      # mocked with respx; never touches GOV
uv run ruff check .
uv run ruff format --check .
uv run python -m tests.live_check  # paced calls to GOV itself

实时检查会向 GOV 发起查询,验证已记录的测试数据无法验证的内容:其答案是否仍符合服务读取的格式。有关测试套件的组织方式,请参阅 CONTRIBUTING.md;有关服务的观测结果及观测时间,请参阅 docs/API-NOTES.md;有关服务采用这种设计的原因,请参阅 docs/DESIGN.md。

致谢

数据属于 GOV——Geschichtliches Orts-Verzeichnis,这是 Verein für Computergenealogie e.V.(CompGen) 的一个项目,由其志愿者构建。GOV 的软件由 Jesper Zedlitz 编写。

许可证

MIT。

评论

支持 Markdown

第一次接触 MCP?

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

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