关于 Bibelstudium MCP
Bibelstudium MCP 面向需要可核验经文和原文细节的读者与研究者,提供精确的德语圣经研读工具。它结合多个德语版本、词法信息、词汇索引、交叉引用、搜索和版本比较;本地数据库完成初始化后可离线运行。
主要功能
- 01跨版本查询德语经文
- 02带词法信息的希伯来语和希腊语原文
- 03词汇索引与词语研究
- 04交叉引用与平行经文
- 05全文搜索
- 06希腊语版本比较
适用场景
- 01核对经文的准确措辞
- 02研究词语的形态和出现位置
- 03比较希腊语新约版本
- 04查找段落的交叉引用
MCP 相关
向 MCP 客户端提供经文查询、原文、词汇索引、交叉引用、搜索和版本比较工具,并包含三个引导式 MCP 提示词。本地安装使用 SQLite 数据库,完成初始设置后可离线运行。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://mcp.bibelstudium-mcp.de/mcpclaude mcp add --transport http de-bibelstudium-mcp-bibelstudium https://mcp.bibelstudium-mcp.de/mcp{"mcpServers":{"de-bibelstudium-mcp-bibelstudium":{"type":"http","url":"https://mcp.bibelstudium-mcp.de/mcp"}}}在 Cursor 中打开{"servers":{"de-bibelstudium-mcp-bibelstudium":{"type":"http","url":"https://mcp.bibelstudium-mcp.de/mcp"}}}在 VS Code 中打开{"mcpServers":{"de-bibelstudium-mcp-bibelstudium":{"type":"http","url":"https://mcp.bibelstudium-mcp.de/mcp"}}}{"mcpServers":{"de-bibelstudium-mcp-bibelstudium":{"serverUrl":"https://mcp.bibelstudium-mcp.de/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
7| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| book | string | 是 | 德语书名(例如 "Jesaja"、"1. Mose"、"Römer"、"Ps"、"Mt") |
| verses | string | 否 | 节:单节 "4"、范围 "16-17"、列表 "1,3,5" 或组合 "1-3,7"。省略则表示整章。某些版本限制单次调用可引用的节数;此时响应会在 `hinweis` 和 `gekuerzt` 中说明,并由 `reference` 标明所含内容。 |
| chapter | number | 是 | 章节编号 |
| translation | string | 否 | 译本:"LUT"(Luther 1912)、"SCH"(Schlachter 1951)、"ELB"(Elberfelder 1871)、"MB"(Menge 1939)、"SLT"(Schlachter 2000)。默认值:"SLT"(Schlachter 2000)。也接受 "luther"、"schlachter" 等别名。只能请求此实例实际加载的版本;可通过 bible_server_info 查看这些版本。 |
详细介绍
Bibelstudium MCP
用于以德语逐字研读《圣经》的 MCP 服务。它通过四种版本逐词提供原文,并附有完整的形态学信息,以及经文索引、交叉引用、全文搜索和文本校勘版本对比。可在本地运行,包含四种采用自由许可的译本,所有数据均离线存储在单个 SQLite 文件中;使用托管服务还可访问 Schlachter 2000。
语言说明:本文档全篇使用德语,因为该服务面向德语地区。工具名称和字段标识符保留代码中的英语或德语,因为它们属于 API 界面,而非说明文字(见设计决策)。
为何开发此服务
大模型会凭记忆引用经文。它们会混合不同译本、改述原文,有时甚至编造整节经文。若需准确引用原文,这些情况绝不能发生。而一旦问题涉及原文(“这里是单数还是复数?”“哪些抄本包含这节经文?”),没有数据的模型就只能猜测。
因此,此服务会向模型提供数据:准确的德语经文、经过词法分析的希腊文或希伯来文原文,以及每个词在八种版本中的见证。这样一来,每一项说法都可以通过本地数据库核验。
功能
- 精确的德语经文文本(
bible_lookup):每次安装均包含 Luther 1912、Schlachter 1951、Elberfelder 1871 和 Menge 1939;通过托管服务还可使用 Schlachter 2000 - 原文逐词查询(
bible_original):整本圣经,希伯来文 Westminster Leningrad Codex(旧约)、希腊文拜占庭多数文本 / SBLGNT / Textus Receptus(新约);每个词都附有词元、Strong 编号,以及从三种原生体系(Robinson、MorphGNT、OSHB)完整解码的形态信息 - 串珠和词语研究(
bible_concordance):按 Strong 编号或词元查询原文词的所有出现位置,包含各卷分布、屈折形式和词典数据(Tyndale 释义、Strong 定义、完整的希腊文 Abbott-Smith 条目) - 交叉引用和平行经文(
bible_crossrefs):Treasury of Scripture Knowledge(扩展版,OpenBible.info),按社区投票加权,并附德语目标经文文本;多节经文的目标还会按节拆分 - 全文搜索(
bible_search):支持变音符号折叠的 FTS5、短语和前缀搜索,可按译本和书卷筛选;treffer统计经文节数,vorkommen_gesamt统计词语出现次数,verteilung按书卷或章节细分统计,命中位置会在经文文本中用⟦…⟧标出 - 版本比较(
bible_compare):对新约经文的三个完整希腊文版本进行逐词差异比较,并显示每个词在八个版本中的见证情况(列表见版本和预设)。显示逗号约翰一书等异文及其完整见证集,并统计各版本和各异文的词数 - 引导式工作流:三个 MCP 提示词(
word-study、variant-check、translation-compare),将这些工具串联成完整的研究工作流 - 内置来源追溯:每次下载都会在数据库中记录来源 URL、请求数和 SHA-256 校验和;
bun run pruefe:quellen会将其与仓库中quellen-pruefsummen.json记录的预期值进行校验 - 每个回答均注明来源:
quellen字段列出作品、许可证及许可证要求的署名,而且只列出该回答实际使用的来源。如果输出要求署名,同一回答的hinweis字段还会说明:凡是采用该文本的文档都必须附上署名
平行经文值得单独说明,因为它们回答的问题不同于加权交叉引用,因此不应与之混为一谈。对于 UBS 平行经文数据库中收录的经文,bible_crossrefs还会列出其平行组:由平行经文组成的封闭集合,例如对观福音中的叙事段落、《列王纪》和《历代志》中的重复记载、新约中的旧约引文,以及公式化的重复内容。对于《马可福音》2:12,排名最高的十条引用中没有《路加福音》5:25-26 或《约翰福音》5:9,但平行组会列出两者。如果回答进行了删减,会明确说明并注明省略的数量。
已知限制
重要:数据库不会随项目提供,而是从原始来源一次性加载(完整数据库约 145 MB)。这是有意为之,原因见设计决策。无需使用终端,因为服务可以自行完成构建。
- 词典数据(Strong、Abbott-Smith、词汇释义)为英文,因为不存在深度相当且采用自由许可的德语词典
- 新约默认使用拜占庭多数文本,这是有记录的编辑决定,并非对学界共识的表态;SBLGNT(批判版)和公认文本只需更改一个参数即可使用
- 四种采用自由许可的德语译本年代较早(1871 年至 1951 年);当代译本并未采用自由许可。例外是通过托管服务提供的 Schlachter 2000
- 两种 Schlachter 版本每次最多按原文输出 20 节(
src/translations.ts中的VERSE_MAX_GBG),与使用哪种工具无关。这是对授权这些文本的 Genfer Bibelgesellschaft 的配合。如果触及此限制,响应会在gekuerzt字段和hinweis中说明;包含哪些经文则由reference指明。三种公版译本不受此限制,且bible://uebersetzungen会列出每种版本的verse_max- 各版本的章节计数并不完全一致。在 1190 章中,有 140 章的节数存在差异(《利未记》6 章在 Elberfelder、Menge 和 Schlachter 2000 中有 23 节,而在 Luther 和 Schlachter 1951 中有 30 节)。在这些章节中,相同的经文编号在不同版本中会指向不同的文本;
bible_lookup会在hinweis中说明,并列出各版本的长度。没有逐节对应关系,匹配依据是文本内容- 工具名称和工具描述为英文(开发者界面),输出字段为德文(
bedeutung、bezeugung、verweise等)
本服务并非用于
- 不提供释经。 服务提供文本、形态信息和文本见证。经文的含义由阅读者判断;服务只提供相应的依据。
- 不是多用户服务。 服务是为单个用户通过 stdio 运行而构建的。HTTP 传输既不提供 TLS,也不提供访问保护,因此绑定到
127.0.0.1;如需将其开放访问,用户必须自行配置这两项(见 SECURITY.md)。 - 不是圣经应用。 它没有界面、阅读程序或笔记功能。服务是供 MCP 客户端使用的工具箱。
- 自有安装中不包含当代译本。 采用自由许可的译本年代都较早;经审核的选项及其费用见 docs/UEBERSETZUNGEN.md。
前提条件
对于 Claude Desktop,只需使用已构建好的 Bundle(见下文)。它已包含运行时,因此无需安装 Bun。
| 要求 | 适用方式 | 用途 |
|---|---|---|
| Bun 1.2+ | 从仓库运行 | 可直接运行 TypeScript,并内置 SQLite,因此无需构建步骤或编译器。1.2 是最低版本,因为仓库附带文本格式的 bun.lock,且已实测。在 1.2.0 上,整个测试集于 08.08.2026 通过 |
unzip | 两种方式 | 用于下载交叉引用。macOS 已预装,但精简版 Linux 镜像中没有(sudo apt install unzip)。如果缺少它,只有这一步会失败;数据库的其余部分仍会生成 |
| 约 1 GB 可用空间 | 两种方式 | 约 145 MB 的最终数据库,加上构建时的临时副本 |
| 互联网连接 | 两种方式 | 仅用于首次构建数据库,之后服务可完全离线运行 |
各平台的测试情况:
| 平台 | 状态 |
|---|---|
| Linux(x64) | 已验证可运行。 每次推送都会在 ubuntu-latest 上运行类型检查、无数据库及数据库不完整时的启动行为检查,以及 test:http(见 .github/workflows/lint.yml) |
| macOS(arm64) | 已验证可运行。 开发平台;目前仅为 bun-darwin-arm64 构建并安装过 MCPB Bundle |
| Windows(x64) | 应该可以运行,但未经测试。 src/db-path.ts 支持 APPDATA 路径,且 bun run build:mcpb bun-windows-x64 可生成 Bundle。尚无人试用 |
Golden 测试(bun run test)需要已构建好的数据库,因此不会在 CI 中运行,而是手动运行。
快速开始
git clone https://github.com/fidpa/bibelstudium-mcp.git
cd bibelstudium-mcp
bun install # eine Laufzeit-Abhängigkeit: @modelcontextprotocol/sdk
# Datenbank aufbauen, alle neun Schritte auf einmal:
bun run setup
# ...oder einzeln, streng der Reihe nach, niemals parallel:
bun run download # 4 deutsche Übersetzungen, MUSS zuerst laufen
bun run download:byz # Griechisch: Byzantinischer Mehrheitstext (Edition 'byzantine')
bun run download:sblgnt # Griechisch: SBLGNT + MorphGNT (Edition 'sblgnt')
bun run download:tr # Griechisch: Textus Receptus (Edition 'tr')
bun run download:heb # Hebräisch: Westminster Leningrad Codex (Edition 'wlc')
bun run download:crossrefs # Querverweise (OpenBible.info)
bun run download:parallels # Parallelstellen (UBS Parallel Passage Database)
bun run download:tagnt # Bezeugung über acht Editionen (STEPBible TAGNT)
bun run download:lexicon # Lexika (Strong + STEPBible-Glossen/Abbott-Smith)
为什么要按顺序执行?每个脚本都会在当前数据库的副本上操作,并在最后以原子方式替换数据库。如果两个脚本同时运行,后执行的替换会生效,另一个脚本的数据就会丢失。
在 MCP 客户端中注册服务,例如为 Claude Code 配置 .mcp.json:
{
"mcpServers": {
"bibelstudium": {
"command": "bun",
"args": ["run", "/pfad/zu/bibelstudium-mcp/src/server.ts"]
}
}
}
数据库的位置由 db-path.ts 决定。BIBLE_DB_PATH 优先级最高;否则使用仓库旁的 data/bible.db;如果使用已安装的 Bundle,则使用用户目录(macOS 下为 ~/Library/Application Support/bibelstudium-mcp/)。客户端的工作目录在任何情况下都不会产生影响。
托管服务:无需安装
我们提供了一个公开运行的实例。它无需 Bun、下载或数据库:
https://mcp.bibelstudium-mcp.de/mcp
传输方式为 Streamable HTTP。对于支持通过 URL 添加自定义 MCP 服务的客户端(claude.ai 中位于 Connectors),只需填写此地址。该服务在官方 MCP-Registry 中登记为 de.bibelstudium-mcp/bibelstudium。
与自行安装相比,有三点不同:
- 默认使用 Schlachter 2000 版本,自行构建的数据库中没有此版本。数据库中也包含四个采用自由许可的版本,可通过
translation参数选择。 - 无需身份验证,这是有意为之: 只有这样,客户端才会将服务作为连接器添加。服务前方设有隧道和速率限制,并绑定到
127.0.0.1;详情见 SECURITY.md。服务仅提供圣经文本。 - 不保证服务可用性。 如果必须依赖此服务,请自行运行;该服务正是为此而构建的。
Claude Desktop:使用 Bundle,而非配置文件
对于 Claude Desktop,可以将服务器作为 MCPB Bundle 安装,而不必手动编辑 claude_desktop_config.json:
bun run build:mcpb # erzeugt tmp/bibelstudium-mcp-<version>-<plattform>.mcpb
通过 设置 > Extensions > Advanced settings > Extension Developer > Install Extension 安装。
安装对话框会询问是否有现成的 bible.db。此字段可以留空。服务器随后会自行下载数据:首次询问圣经相关问题时,它会提示数据缺失,并询问是否获取。确认后,它会从原始来源下载约 145 MB 的数据,并将其存放在用户文件夹中。之后需要重启一次 Claude Desktop,因为正在运行的服务器进程无法再读取新文件。
这样,设置时不需要终端、Bun 或脚本。如果已经构建好数据库,也可以在对话框中填写数据库路径,跳过下载。
耗时方面:最近一次测得的完整构建耗时 26 秒,当时分为八个步骤,且尚未包含平行经文。耗时取决于与九个外部来源的连接情况,这并非承诺。
如果九个来源中有一个无法访问,其他来源仍会继续处理。报告会指出哪个步骤失败、因此缺少哪项功能,以及可以使用哪个命令补上。只有德语译本是必需的;没有它们就无法生成数据库。
与 JSON 方式相比有两个优点:Bundle 自带独立的二进制文件,计算机无需安装 Bun;此外,即使 Claude Desktop 在退出时重写配置文件并丢弃未知键,它也不受影响。
一个 Bundle 只包含一个二进制文件,因此只能在构建它所针对的平台和架构上运行。要构建其他目标,请运行:bun run build:mcpb bun-windows-x64(输入未知目标时,脚本会列出已知目标)。打包本身使用 npx @anthropic-ai/mcpb,因此需要一次性安装 Node。
**建议:**在 Claude Desktop 中,还可以将 docs/anweisungen/claude-desktop.txt 中的文本添加到 设置 > Claude 指令。是否调用某个工具以及如何呈现其结果,由客户端决定,因为服务器只能提供工具。该文本的作用说明见 docs/anweisungen/README.md。
运行
如果必须使用无法启动子进程的客户端,可以启用 HTTP 传输:
MCP_HTTP_PORT=8931 bun run src/server.ts # /mcp und /health, gebunden an 127.0.0.1
绑定到 127.0.0.1 是有意为之。若要从外部访问,必须在前面配置 TLS 和访问保护,因为服务本身不提供这两项功能。
八个环境变量控制运行方式,全部为可选项:
| 变量 | 作用 | 未指定时 |
|---|---|---|
BIBLE_DB_PATH | 数据库所在位置 | Repository 旁的 data/;对于已安装的 Bundle,则为用户目录 |
BIBLE_DEFAULT_TRANSLATION | 未指定 translation 时,检索结果使用的译本。如果值未知或译本未加载,则使用 Luther;服务会在 stderr 上记录此情况 | LUT(Luther 1912) |
MCP_HTTP_PORT | 设置后启用 HTTP 传输 | stdio |
MCP_HTTP_HOST | HTTP 传输绑定的地址 | 127.0.0.1 |
MCP_HTTP_ALLOWED_ORIGINS | HTTP 传输额外允许的 Origin 值列表,以逗号分隔。如果浏览器客户端(如 claude.ai)否则会遇到 403,则需要设置此项(参见 docs/FEHLERBEHEBUNG.md) | 空,仅适用内置规则 |
MCP_HTTP_ALLOWED_HOSTS | 允许的 Host 值列表,以逗号分隔,须包含端口,格式与客户端发送的值一致(127.0.0.1:8931)。设置后,任何 Host 不同的请求都会收到 421;这也能防止 GET /health 遭受 DNS 重绑定攻击。位于隧道或代理之后时,必须填入公开主机名和本地地址(参见 docs/FEHLERBEHEBUNG.md) | 空,不进行校验 |
MCP_METRICS_PORT | 设置后会在第二个端口开放 /metrics,供 Prometheus 使用 | 无指标端口 |
MCP_METRICS_HOST | 指标端口绑定的地址 | 127.0.0.1 |
指标端口有意设为独立端口,而不是 /mcp 旁边的一个路径。 如果隧道或反向代理将整个主机名转发到 MCP 端口,/metrics 就可能被公开访问;而且来源检查也无济于事,因为代理连接时使用的是 127.0.0.1。
仅统计各工具、提示词和资源类型的调用次数,并汇总显示:不记录参数、圣经经文、搜索词、资源 URI 或来源地址。此外还会显示两个关于进程本身的信息:启动时间和版本;它们分别说明计数器从何时开始运行,以及填充计数器时使用的是哪个版本。如果无法绑定端口,服务会在 stderr 上报告,但仍会继续运行。
HTTP 模式下不提供 bible_setup: 它会从外部来源下载 145 MB 数据并替换数据库,这应由运营方负责,而不是交给任意调用者。每次调用 /health 时,都会检查数据库;如果数据库已不可用,则返回 503,并说明原因。有关该端点的其他行为(允许的方法、Origin 检查、协议版本),请参阅 docs/ENTSCHEIDUNGEN.md。
可以在服务器上运行 bun run setup 来构建数据库;如果服务器上没有 Bun,也可以直接运行二进制文件:
./bibelstudium-server --setup # dieselben neun Schritte, danach beendet sich der Prozess
使用方法
你无需亲自调用工具。只要向助手提问,它就会获取数据。
“约翰福音 1:1 的希腊原文是什么?” “约翰一书 5:7 中的 Comma Johanneum 是真的吗?” “新约中哪些地方出现了 ἀγάπη?” “展示所有译本中的约翰福音 3:16。” “罗马书 8:1 有哪些交叉引用?”
对于第一个问题,它会逐词给出内容,包括词根形式、解析后的形态信息和 Strong 编号。对于第二个问题,它会并列展示三个希腊版本,并说明八个版本中哪些见证了每个词。这个补充内容只出现在 Textus Receptus 中,回答会根据见证版本来说明,而不是给出主观判断。
docs/BEISPIELE.md 展示了回答的样子,也介绍了如何在不使用 MCP 客户端的情况下试用服务。
工具
| 工具 | 用途 |
|---|---|
bible_lookup | 根据经文出处(书卷/章/节,可选译本)精确查找经文;对于有经文措辞上限的译本,最多返回至其 verse_max。答案会两次列出出处:reference 使用数据库中的书卷名称,kurzref 使用便于引用的德文简称 |
bible_original | 逐词显示一节经文的希伯来语/希腊语原文,附词元、Strong 编号和解码后的形态信息 |
bible_concordance | 列出原文词语(Strong 编号/词元)的所有出现位置,并附统计信息和词典数据 |
bible_crossrefs | 提供一节经文的交叉引用,按引用次数加权,并附 UBS 数据库中的平行经文组;在输出的经文措辞上限允许时,提供德文目标文本 |
bible_search | 全文搜索(单词、“短语”、前缀*),忽略变音符号,可按译本/书卷筛选 |
bible_compare | 对照 3 个希腊文版本,显示一节新约经文的词语差异,并列出 8 个版本中的见证情况 |
bible_server_info | 提供此服务的版本、已加载的圣经数据和所提供的资源,并列出各译本的许可证、要求的署名方式、verse_max 以及正典范围。不提供圣经文本 |
bible_setup | 如果尚未加载圣经数据,则进行加载。仅通过 stdio 提供,且仅在数据库缺失时出现;只有获得明确确认后才会加载 |
提示词
| 提示词 | 显示名称 | 参数 | 流程 |
|---|---|---|---|
word-study | 词语研读 | word(必填),reference | 原文词语,然后是经文索引、关键经文,最后是含义范围 |
variant-check | 检查文本异文 | reference(必填) | 版本差异,然后是见证情况、各版本的读法,最后是审慎的分析 |
translation-compare | 比较译本 | reference(必填) | 并列显示所有已加载的译本,并与原文对照检查 |
显示名称位于 title 字段中,是客户端在选择菜单中显示的名称;调用提示词时仍需使用第一列中的标识符。
资源
模型负责选择工具和提示词,资源则由用户自行附加。以下四个固定条目描述可用内容:
| URI | 内容 |
|---|---|
bible://buecher | 66 卷书卷,附编号、名称、章节数和所属圣约 |
bible://uebersetzungen | 已加载的译本,附许可证、要求的署名方式和 verse_max |
bible://editionen | 已加载的原文版本,附语言、拼写特点和许可证 |
bible://quellen | 此实例实际使用的所有数据来源 |
圣经文本本身通过 URI 模板提供。书卷名称中的特殊字符会进行百分号编码(R%C3%B6mer),也允许使用缩写:
| 模板 | 内容 | 示例 |
|---|---|---|
bible://kapitel/{uebersetzung}/{buch}/{kapitel} | 整章内容,逐节列出;对于有经文措辞上限的译本,最多返回至其 verse_max | bible://kapitel/LUT/Psalter/23 |
bible://vers/{uebersetzung}/{buch}/{kapitel}/{verse} | 单节、范围或列表 | bible://vers/SCH/Johannes/3/16-17 |
bible://grundtext/{edition}/{buch}/{kapitel}/{vers} | 逐词显示一节经文 | bible://grundtext/wlc/1%20Mose/1/1 |
每个提供文本的资源都会附带其 quellen,与工具响应相同。数据库尚未建立时,这两个列表都为空,获取请求也会被拒绝。
在 Claude Code 中,使用 @ 附加资源(@bibelstudium:bible://quellen)。所提供的资源未附带内容,有两个已知原因;相应的解决方法也一并列于 docs/FEHLERBEHEBUNG.md 中。
译本
| 缩写 | 译本 | 许可 | 可用范围 |
|---|---|---|---|
SLT | Schlachter 2000 | 经 Genfer Bibelgesellschaft 许可 | 托管服务(默认译本) |
LUT | Luther 1912 | 公共领域 | 所有环境(内置默认译本) |
SCH | Schlachter 1951 | CC BY 4.0(Genfer Bibelgesellschaft / ebible.org) | 所有环境 |
ELB | Elberfelder 1871 | 公共领域 | 所有环境 |
MB | Menge 1939 | 公共领域 | 所有环境 |
“许可”列对应 src/translations.ts 中的 license 字段,
也就是每条回复中 quellen 下显示的内容。
bible_setup 会从原始来源下载四个自由许可的译本。
Schlachter 2000 并非通过下载获取:自行构建的数据库中不包含它,因此
SLT 会显示“未加载”提示。正在运行的实例实际包含哪些译本,可通过 bible_server_info 查看。
版本和默认设置
bible_original 覆盖整部圣经,并按书卷路由:
texttyp | 版本 | 范围 | 角色 |
|---|---|---|---|
wlc | Westminster Leningrad Codex(马所拉文本,OSHB 形态学标注) | 旧约(第 1 至 39 卷) | 唯一的旧约来源,因此为主要版本 |
byzantine | 多数文本(Robinson-Pierpont 2018) | 新约(第 40 至 66 卷) | 新约默认版本 |
sblgnt | SBL Greek New Testament(批判版,接近 Nestle-Aland) | 新约 | 次要版本,用于比较 |
tr | Textus Receptus(Robinson;遇到双重异文时采用 Stephanus 1550) | 新约 | 用于比较(TR 特有读法) |
bible_compare 还会报告每个词见证该词的八个版本中的哪些版本。这八个版本分别是 NA28、NA27、Tyndale House、SBL、Westcott-Hort、Tregelles、Textus Receptus 和拜占庭文本;它们来自 STEPBible TAGNT 的见证注释,并以模式形式列于 src/greek-diff.ts 的 TAGNT_WITNESS_RE 中。数据库中有四个版本的完整文本,其余四个仅作为校勘记中的见证。
TAGNT 的见证注释只列出其自身校勘记中的见证,而其中的“Byz”与此处加载的 Robinson-Pierpont 2018 并非同一版本。对随机抽取的 400 多节新约经文进行测量后发现,约 11% 的情况下,注释与版本文本相矛盾。服务器会对照两者,并将矛盾作为 warnung 放在回复开头,而不是藏在脚注中。对于“这个版本写了什么”这一问题,应以版本文本为准。
架构
使用 Bun 运行的 TypeScript,只有一个运行时依赖(MCP SDK),无需构建步骤。数据存放在一个以只读方式打开的 SQLite 文件中;scripts/ 下的所有内容仅用于一次性构建数据,绝不会在服务器运行期间执行。HTTP 传输位于独立文件中,不了解工具的相关信息。各文件的用途详见
CONTRIBUTING.md。
设计决策
为什么不附带数据库? 有三个原因。STEPBible 要求只从其自有仓库分发其数据文件。自行构建的数据库包含 provenance 表(记录每次下载的来源 URL 和 SHA-256),可以重新核查;下载来的一大块数据则永远无法做到这一点:bun run pruefe:quellen 会将每项校验和与 quellen-pruefsummen.json 比对,并分别报告缺少和多出的内容。构建脚本还会同时记录每个词的来源。
以前,这意味着要在终端中执行一步操作。自从有了 bible_setup,这一步就由服务来完成。
为什么服务要等到收到请求后才构建数据? 构建过程会从九个外部来源下载约 145 MB 数据。这不应该因为模型询问了某节经文就启动,而应该等用户同意后才开始。未经确认,bible_setup 只会说明它将执行哪些操作。
为什么默认使用 Luther 1912? 它是最广为人知的公有领域德语译本,而且每个安装中都有,因为 bun run download 会无一例外地下载它。这才是关键原因,因为如果某个实例没有加载默认译本,那么任何未指定 translation 的查询都会报错。只需更改一个参数即可使用 Schlachter 1951(CC BY)、Elberfelder 1871 和 Menge 1939,translation-compare 会并列展示这些译本。
无需修改代码,端点也可以使用不同的默认值:只要输出版本已加载,BIBLE_DEFAULT_TRANSLATION 就能将默认值设为其他缩写。bible://uebersetzungen 会在 voreinstellung 字段中说明实际生效的默认值;托管服务将此项设为 Schlachter 2000。
为什么新约默认使用拜占庭多数文本? 此服务面向逐字研究,而这里附带的德语译本都遵循多数文本传统(Luther 和 Schlachter 均遵循公认文本/拜占庭传统)。批判版 SBLGNT 可通过 texttyp: "sblgnt" 完整获取;bible_compare 会展示各版本的具体差异,并提供证据,供用户判断每种异文。
为什么德语输出却使用英文工具名称? MCP 工具名称属于开发者界面(遵循英文惯例);供人阅读的内容则是德语,因为提供的圣经文本是德语。
为什么只有一个依赖项,而且没有构建步骤? bun:sqlite 已内置于 Bun 中,Bun 可以直接运行 TypeScript。唯一的运行时依赖是 MCP SDK。这样可以缩小攻击面,不需要编译,也没有会出故障的构建步骤。
文档
| 文档 | 内容 |
|---|---|
| docs/README.md | 文档索引:各分支的用途、status: 的含义、哪些地方有 Frontmatter,哪些地方没有 |
| docs/anweisungen/claude-desktop.txt | 可直接用于 Claude Desktop 中 设置 > Claude 指示 的文本 |
| docs/anweisungen/README.md | 客户端指示的用途、应放置的位置,以及为什么必须简短,因为每次会话都会加载,即使没有提出圣经相关问题 |
| docs/BEISPIELE.md | 答案示例:基本文本、文本批判、诗歌文本,以及一种不使用 MCP 客户端试用服务的方法 |
| docs/ENTSCHEIDUNGEN.md | 代码为何如此设计:实测结果、放弃的替代方案、客户端和外部来源方面的经验 |
| docs/FEHLERBEHEBUNG.md | 数据构建和服务启动时的故障表现,以及各自的原因和解决方法 |
| docs/TYPESCRIPT.md | 代码风格规则、类型检查,以及有意不采用的惯例 |
| docs/UEBERSETZUNGEN.md | 经核实的其他译本选项:许可情况、开放候选译本、纳入所需成本 |
| mcpb/manifest.json | Claude Desktop 的 MCPB Bundle 清单源文件;使用 bun run build:mcpb 构建 |
| CONTRIBUTING.md | 参与贡献:基本规则、检查步骤、Pull Request 流程 |
| CHANGELOG.md | 各版本的变更内容,以及相关理由和测量值 |
| THIRD_PARTY_LICENSES.md | 所有圣经数据的完整来源和许可表 |
| SECURITY.md | 安全模型和漏洞报告渠道 |
数据来源和许可
本仓库加载的所有数据来源均为 Public Domain 或 CC-BY(-SA);完整表格见 THIRD_PARTY_LICENSES.md,其中包括 Schlachter 1951 必须遵守的署名要求(CC BY 4.0,© Genfer Bibelgesellschaft)以及 STEPBible 的再分发说明。Schlachter 2000 基于单独的授权:它不属于本仓库,仅通过托管服务提供,并已获得 Genfer Bibelgesellschaft 的许可。
参与贡献
欢迎贡献,详见 CONTRIBUTING.md。请遵守数据质量规则:所有关于文本的陈述都必须能通过数据库核实(项目的规则是“提供证据,而非断言”)。
许可
MIT 许可,详见 LICENSE。该许可适用于代码;圣经数据会在本地下载,并受其各自许可约束(见上文)。
作者
Marc Allgeier(@fidpa)
我为什么构建它:我想要一位能像认真读者一样对待经文的 AI 助手:准确引用、查阅原文而不是猜测,并如实指出不同手稿之间的差异。在公共 MCP 生态中,虽有词典优良的英语服务,却没有德语服务、没有可离线使用且提供多个原文版本的服务,也没有能展示文本异文及其见证抄本的服务。这个服务填补了这一空白。
另请参阅
- lydia-bible-bot:面向 Telegram 群组、经过安全强化的 AI 圣经助手,通过本服务的托管服务获取圣经文本
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。