dprr-mcp
对罗马共和国的自然语言前景查询。生成经过验证的SPARQL DPRR RDF数据集,并使用不确定性标志和源引用综合结果。
开始之前
强烈推荐阅读: 使用须知 --DPRR数据集中固有的风险、偏见和推理谬误的详细指南。该数据库记录了罗马共和国社会中一个狭窄的精英阶层,经过多层现代学术解释。没有证据并不意味着没有证据,命名约定含糊不清,覆盖范围因时期而异。在从查询结果中得出结论之前,请阅读本文档。
设置
来源
需要Python 3.13+和 紫外线.
uv sync
uv run dprr-server码头工人
每次发布时,预构建的图像都会发布到GHCR:
docker run -p 8000:8000 ghcr.io/gillisandrew/dprr-mcp:latest或者在本地构建:
docker build -t dprr-mcp .
docker run -p 8000:8000 dprr-mcp要在容器重新启动时持久保存自动下载的数据,请装载一个卷:
docker run -p 8000:8000 -v dprr-data:/app/data ghcr.io/gillisandrew/dprr-mcp:latest数据
首次启动时,服务器会自动从最新的GitHub版本下载DPRR RDF数据集,并初始化本地Oxigraph存储。无需手动设置数据。
为什么要捆绑数据? 上游DPRR现场(romanrepublic.ac.uk)经历频繁的停机,并提供阻止程序访问的工作量证明挑战页面。在每个版本中捆绑RDF导出的快照可确保服务器能够可靠地初始化,而不依赖于上游可用性。数据集按其原始分布 CC BY NC 4.0 许可证。
数据存储在 $XDG_DATA_HOME/dprr-mcp/ (默认为 ~/.local/share/dprr-mcp/).覆盖 DPRR_DATA_DIR.
用法
MCP服务器
服务器使用 streamable-http 传输——它作为一个独立的HTTP进程运行,MCP客户端通过网络连接到该进程。
# From source:
uv run dprr-server
# Custom host/port:
uv run dprr-server --host 0.0.0.0 --port 9000
# Docker:
docker run -p 8000:8000 ghcr.io/gillisandrew/dprr-mcp:latest服务器正在监听 http://127.0.0.1:8000/mcp 默认情况下。健康检查端点位于 /healthz.超过超时的查询(默认600秒,可通过配置 DPRR_QUERY_TIMEOUT)返回结构化错误,而不是使连接崩溃。
MCP工具
| 工具 | 说明 |
|---|---|
get_schema | 返回DPRR本体前缀、可用类和常规查询提示 |
validate_sparql | 语法检查、自动修复缺失的PREFIX声明、根据本体进行语义验证 |
execute_sparql | 对本地Oxigraph RDF存储进行完全验证+执行 |
Claude代码配置
启动服务器,然后配置Claude Code进行连接。增添 .claude/settings.json:
{
"mcpServers": {
"dprr": {
"type": "http",
"url": "http://127.0.0.1:8000/mcp"
}
}
}Claude桌面配置
启动服务器,然后添加到 claude_desktop_config.json:
{
"mcpServers": {
"dprr": {
"type": "http",
"url": "http://127.0.0.1:8000/mcp"
}
}
}克劳德代码技能
配置MCP服务器后,使用内置技能:
/dprr Who held the office of praetor in 150 BC?Claude将加载DPRR模式,生成SPARQL查询,验证并执行它,然后将结果综合成带有源引用和不确定性标志的学术摘要。
输出示例
# 公元前150年的执政官:来自DPRR的证据 罗马共和国的数字专业地理(DPRR)汇集了现代中等学术——主要是布劳顿的 _罗马共和国法官_ (_平均倒数排名_)布伦南的 _罗马共和国的执政权_ (2000)-进入可查询的数据库。因此,结果反映了现代编辑对古代地方法院的判断,而不是未经中介的古代证词。以下报道了DPRR的消息来源记录的可追溯到公元前150年的执政官。 ## 经过严格认证的裁判官 C.利维厄斯(14)M.f.M.n.德鲁苏斯 (LIVI1519)在公元前150年被记录为执政官(布劳顿, _平均倒数排名_ 一、DPRR的一份学术报告指出,这代表了“他担任执政官的最新可能日期”(Broughton, _平均倒数排名_ I) ,表明日期本身有些不精确——公元前150年是 _终点前_ 而不是一个固定的年份。Brennan(2000年,第737页)也证明了这一执政地位。 P.Sextilius (SEXT2976,不在RE中)被记录为执政官,日期为公元前150年,尽管DPRR旗帜 开始和结束日期都不确定 (布劳顿, _平均倒数排名_ II、 附录2)。随附的学术说明解释说,他“可能是在塞萨利特里卡拉发现的参议院零碎法令中被任命为议长”(Giannopoulos, _Eph。拱门。_ 1934–35149,第二名;参见L.罗伯特, _EPIG研究。还有菲尔。_ 287f。注1),并将他的执政日期定为“可能在二世纪中叶之前”。总体说法也被标记为不确定。Brennan(2000年,第756页,脚注504)提供了额外的讨论。 ## 关于无证据问题的说明 该查询仅返回两名拥有精确追溯到公元前150年的执政官职位的人。更广泛的日期范围搜索捕获的其余结果是其执政权属于宽时间窗口(例如,公元前200-101年或公元前509-31年)的个人,并且都被标记为不确定——这些代表了已知在这些范围内的某个不确定的时间点担任执政权的人,而不是公元前150年。其中包括布伦南(2000)和布劳顿记录的数字(_平均倒数排名_ II、 附录2; _平均倒数排名_ III) 例如,Cn.Aufidius、(Cornelius)Sulla、Domitius Calvinus、L.Furius、A.(Manlius)Torquatus、M.Marcius、Octavius和C.Rabirius,但将其中任何一位指定为公元前150年都将超出资料来源的保证范围。 今年经认证的裁判官人数不应被视为很少有裁判官任职的证据。在此期间,每年选举六名执政官。稀疏的记录反映了公元前二世纪中叶我们的资料来源的零碎状态,这一时期介于李维幸存的叙述(公元前167年后中断)和共和国晚期更丰富的文献之间。DPRR只能记录现代学术界能够从幸存的证据中重建的东西。 ## 参考文献 - 布拉德利,约翰。“作为链接的开放数据的前景。” _DHQ_ 14.2 (2020). - 布伦南,T.C。 _罗马共和国的执政官制度_.2航班。牛津(2000年)。 - T.R.S.布劳顿。 _罗马共和国的裁判官_.3卷。 (1951–1986). - 吉安诺普洛斯。 _星历古生物学_ (1934–35). - 罗伯特·L。 _书信和语言学研究_巴黎(1938年)。
建筑
flowchart TB
A["Claude Code Skill (/dprr)\nSystem prompt with DPRR domain knowledge\nOrchestrates: analyze → generate\n→ validate → execute → synthesize"]
B["MCP Server (dprr-server)\nPython, streamable-http\n3 tools: get_schema, validate_sparql,\nexecute_sparql"]
C["Local Oxigraph Store\nRDF triples from DPRR dataset"]
A -- "MCP protocol (streamable-http)" --> B
B --> CMCP服务器+技能路径使Claude能够在不需要额外API调用的情况下编排管道。
环境变量
| 变量 | 描述 |
|---|---|
DPRR_DATA_DIR | 覆盖数据目录(默认: $XDG_DATA_HOME/dprr-mcp) |
DPRR_DATA_URL | 覆盖自动下载数据tarball的URL |
DPRR_QUERY_TIMEOUT | 查询超时(秒)(默认值:600) |
参考文献
此工具从以下位置查询数据 罗马共和国的数字地理 (DPRR),它利用了以下二手资料:
@misc{dprr,
author = {Mouritsen, Henrik and Mayfield, Jamie and Bradley, John},
title = {Digital Prosopography of the Roman Republic ({DPRR})},
year = {2017},
publisher = {King's Digital Lab, King's College London},
url = {https://romanrepublic.ac.uk/},
note = {AHRC grant AH/K007211/1}
}
@book{broughton1951,
author = {Broughton, T. Robert S.},
title = {The Magistrates of the Roman Republic},
volume = {1: 509 B.C.--100 B.C.},
series = {Philological Monographs},
number = {15},
publisher = {American Philological Association},
address = {New York},
year = {1951}
}
@book{broughton1952,
author = {Broughton, T. Robert S.},
title = {The Magistrates of the Roman Republic},
volume = {2: 99 B.C.--31 B.C.},
series = {Philological Monographs},
number = {15},
publisher = {American Philological Association},
address = {New York},
year = {1952}
}
@book{broughton1986,
author = {Broughton, T. Robert S.},
title = {The Magistrates of the Roman Republic},
volume = {3: Supplement},
series = {Philological Monographs},
number = {15},
publisher = {Scholars Press},
address = {Atlanta, GA},
year = {1986}
}
@book{rupke2008,
author = {R{\"u}pke, J{\"o}rg},
title = {Fasti Sacerdotum: A Prosopography of Pagan, Jewish, and Christian Religious Officials in the City of Rome, 300 {BC} to {AD} 499},
translator = {Richardson, David M. B.},
publisher = {Oxford University Press},
address = {Oxford},
year = {2008},
isbn = {978-0-19-929113-7}
}
@book{zmeskal2009,
author = {Zmeskal, Klaus},
title = {Adfinitas: Die Verwandtschaften der senatorischen F{\"u}hrungsschicht der r{\"o}mischen Republik von 218--31 v.~Chr.},
publisher = {Verlag Karl Stutz},
address = {Passau},
year = {2009},
isbn = {978-3-88849-304-1}
}引用此工具
如果您在研究中使用dprr-mcp,请引用:
@software{dprr_mcp,
author = {Gillis, Andrew},
title = {dprr-mcp: Natural Language {SPARQL} Queries for the Digital Prosopography of the Roman Republic},
year = {2025},
url = {https://github.com/gillisandrew/dprr-mcp}
}发展
uv run pytest
uv run ruff check .