内容
# bibelstudium-mcp
[](https://github.com/fidpa/bibelstudium-mcp/releases)
[](LICENSE)
[](https://www.typescriptlang.org/)
[](https://bun.sh/)
[](https://bun.sh/)
[](https://github.com/fidpa/bibelstudium-mcp/commits/)

本地MCP服务器,用于忠实地研究德语圣经:四种免费许可的翻译,基础文本逐字逐句地跨越四种版本,具有完整的形态学,词汇索引,交叉引用,全文本搜索和文本批评的版本比较 — 所有这些都离线存储在一个SQLite数据库文件中。
> **语言提示**:本文档全部为德语,因为服务器面向德语地区。工具名称和字段标识符保持英文或德语,如代码中所示 - 它们是API接口,而不是散文(参见[设计决策](#设计决策))。
## 问题
语言模型从记忆中引用经文。他们混合翻译,改述,有时甚至编造整个诗节 - 这是在文字至关重要时不应该发生的事情。当一个问题涉及基础文本时(“是单数还是复数?”,“哪些手稿包含这一节?”),模型如果没有数据就只能猜测。
这个服务器代替模型提供数据:准确的德语经文,希腊语或希伯来语基础文本,带有解析的形态学,以及每个单词在八个版本中的凭证 - 每个声明都可以针对本地数据库进行检查。
## 功能
- **准确的德语经文** (`bible_lookup`) — 四种免费许可的翻译:路德1912(默认),施拉赫特1951,艾尔伯费尔德1871,门格
- **基础文本逐字逐句** (`bible_original`) — 整个圣经:希伯来语威斯敏斯特伦敦抄本(旧约),希腊语拜占庭多数文本/SBLGNT/Textus Receptus(新约);每个单词都有基本形式,强号和完全解码的形态学(三 native 形态学方案:罗宾逊,MorphGNT,OSHB)
- **词汇索引/单词研究** (`bible_concordance`) — 所有基础文本单词的出现,根据强号或基本形式,分布在每个书卷中,变形和词典数据(泰恩代尔词典,强号定义,完整的阿博特-史密斯希腊词典条目)
- **交叉引用** (`bible_crossrefs`) — 经文知识宝库(扩展版,OpenBible.info),按社区投票加权,每个目标文本都有德语翻译;多节目标还按节分解(`verse_einzeln`)
- **全文搜索** (`bible_search`) — FTS5,带有变音符号折叠,短语和前缀搜索,可按翻译和书籍筛选;`treffer`计算诗节,`vorkommen_gesamt`计算单词出现次数,带有`⟦…⟧`标记的经文位置
- **版本比较** (`bible_compare`) — 新约诗节的逐字差异,跨越三个完整的希腊版本 **以及八个版本对每个单词的凭证** (NA27/28,泰恩代尔之家,SBL,西斯科特-霍特,特雷格莱斯,TR,拜占庭;STEPBible TAGNT)- 显示诸如约翰福音Comma之类的变体及其完整的凭证
- **引导工作流** — 三个MCP提示(`word-study`,`variant-check`,`translation-compare`),它们将工具链接成完整的研究工作流
- **内置来源验证** — 每个下载都记录源URL,请求次数和SHA-256校验和在数据库中
## 已知限制
> **重要**:此仓库 **不附带数据库**。初始构建下载所有数据来自原始来源(约20-25分钟,约145 MB的完整数据库)。这是故意的:STEPBible要求不要分享他们的数据文件 - 下载脚本和来源表使构建可复制和可验证。
>
> - **词典数据** (强号,阿博特-史密斯,词典)是 **英文**的 - 没有免费许可的类似深度的德语词典
> - 新约的默认设置为 **拜占庭多数文本** - 一个有文档记录的编辑决策,而不是关于研究共识的声明;SBLGNT(批判性)和Textus Receptus是一个参数
> - 四个德语翻译是较旧的(1871-1951年);当代翻译不受免费许可
> - 工具名称和工具描述是 **英文**(开发人员界面),输出字段是德语(`bedeutung`,`bezeugung`,`verweise`等)
## 要求
| 需求 | 目的 |
| --- | --- |
| [Bun](https://bun.sh/) 1.2+ | 直接运行TypeScript,内置SQLite - 无需构建步骤,无需编译器。1.2是最低版本,因为仓库提供文本`bun.lock` |
| `unzip` | 用于交叉引用下载。macOS预安装,在最小的Linux镜像中不可用(`sudo apt install unzip`) |
| 约1 GB可用存储空间 | 约145 MB的完整数据库加上构建过程中的临时副本 |
| 互联网访问 | 仅用于一次性数据构建 - 之后服务器完全离线运行 |
## 快速入门
```bash
git clone https://github.com/fidpa/bibelstudium-mcp.git
cd bibelstudium-mcp
bun install # 一个运行时依赖:@modelcontextprotocol/sdk
# 构建数据库 - 按顺序,绝不并行:
bun run download # 4个德语翻译(~20分钟)- 必须先运行
bun run download:byz # 希腊语:拜占庭多数文本(版本'byzantine')
bun run download:sblgnt # 希腊语:SBLGNT + MorphGNT(版本'sblgnt')
bun run download:tr # 希腊语:Textus Receptus(版本'tr')
bun run download:heb # 希伯来语:威斯敏斯特伦敦抄本(版本'wlc')
bun run download:crossrefs # 交叉引用(OpenBible.info)
bun run download:tagnt # 八个版本对每个单词的凭证(STEPBible TAGNT)
bun run download:lexicon # 词典(强号 + STEPBible词典/阿博特-史密斯)
```
为什么顺序执行?每个脚本都在当前数据库的副本上工作,并在最后原子地交换它。如果两个脚本同时运行,最后一个交换会获胜 - 其他脚本的数据将被丢失。
## 使用
通常,您不会直接调用工具:您向助手提出问题,助手获取数据。以下是一些示例:
> “希腊语约翰福音1:1中究竟写着什么?”
助手调用`bible_original`并获得每个单词的细分(缩写):
```json
{
"reference": "约翰福音 1,1",
"texttyp": "byzantine",
"edition": "拜占庭多数文本(罗宾逊-皮尔庞特2005)",
"woerter": [
{ "wort": "εν", "grundform": "ἐν", "morphologie": "介词", "strong": "G1722" },
{ "wort": "αρχη", "grundform": "ἀρχή", "morphologie": "名词,单数,阴性,属格", "strong": "G746" },
{ "wort": "ην", "grundform": "εἰμί", "morphologie": "动词,过去时,主动语态,单数,第三人称", "strong": "G1510" },
{ "wort": "λογος", "grundform": "λόγος", "morphologie": "名词,单数,阳性,主格", "strong": "G3056" }
]
}
```
> “约翰福音5:7中的Comma Johanneum是否真实?”
`bible_compare`比较版本并提供凭证 - 附加文本仅存在于Textus Receptus中,所有受影响的单词都带有`typ: "K"`(KJV/TR传统),并且凭证专属`TR`:
```json
{
"reference": "约翰福音 5,7",
"vergleiche": [
{ "paar": "byzantine ↔ sblgnt", "ergebnis": "相同(标准化后)" },
{ "paar": "byzantine ↔ tr",
"unterschiede": ["仅在tr中:\"εν τω ουρανω ο πατηρ ο λογος και το αγιον πνευμα …\""] }
],
"bezeugung": {
"woerter_gesamt": 22,
"von_allen_acht_bezeugt": 5,
"abweichend": [
{ "wort": "οὐρανῷ", "typ": "K", "editionen": "TR" },
{ "wort": "πατήρ", "typ": "K", "editionen": "TR" }
]
}
}
```
## 工具
| 工具 | 目的 |
| --- | --- |
| `bible_lookup` | 按位置查找准确的经文(书籍/章节/诗节,可选翻译) |
| `bible_original` | 按位置查找准确的经文(书籍/章节/诗节,可选翻译) |
| `bible_concordance` | 所有基础文本单词的出现,统计和词典数据 |
| `bible_crossrefs` | 一个诗节的交叉引用,按投票加权,带有德语目标文本 |
| `bible_search` | 全文搜索(单词,“短语”,前缀),变音符号折叠,按翻译/书籍 |
| `bible_compare` | NT诗节的逐字差异,跨越3个希腊版本 + 8个版本的凭证 |
## 提示
| 提示 | 参数 | 工作流 |
| --- | --- | --- |
| `word-study` | `word`(必填),`reference` | 基础文本单词→词汇索引→关键位置→含义谱 |
| `variant-check` | `reference`(必填) | 版本差异→凭证→版本阅读→清醒评估 |
| `translation-compare` | `reference`(必填) | 所有加载的翻译并排检查,与基础文本核对 |
## 翻译
| 缩写 | 翻译 | 许可 |
| --- | --- | --- |
| `LUT` | 路德1912(默认) | 公共领域 |
| `SCH` | 施拉赫特1951 | CC BY 4.0(日内瓦圣经协会) |
| `ELB` | 艾尔伯费尔德1871 | 公共领域 |
| `MB` | 门格 | 公共领域 |
## 版本&默认值
`bible_original`涵盖整个圣经并路由到书籍:
| `texttyp` | 版本 | 范围 | 角色 |
| --- | --- | --- | --- |
| `wlc` | 威斯敏斯特伦敦抄本(马索雷蒂,OSHB形态学) | 旧约(书籍1-39) | 唯一的旧约来源→主要 |
| `byzantine` | 拜占庭多数文本(罗宾逊-皮尔庞特2005) | 新约(40-66) | **新约默认值** |
| `sblgnt` | SBL Greek New Testament(批判性,Nestle-Aland附近) | 新约 | 次要/比较 |
| `tr` | Textus Receptus(Scrivener-/Stephanus传统) | 新约 | 比较(TR特定阅读) |
`bible_compare`还报告每个单词的八个版本凭证(NA28,NA27,Tyndale House,SBL,西斯科特-霍特,特雷格莱斯,TR,拜占庭 - 来自STEPBible TAGNT的数据)。
## 架构
| 文件 | 任务 |
| --- | --- |
| `server.ts` | MCP服务器:六个工具,三个提示,三个形态解码器,版本/测试路由 |
| `translations.ts` | 翻译注册表(缩写,名称,许可证,别名) |
| `schema.ts` | 表格模式+FTS重建 |
| `atomic-db.ts` | 原子数据库写操作(临时副本+重命名)- 并行读取安全 |
| `provenance.ts` | 来源/校验和协议每个下载 |
| `aliases.ts` | 德语书籍名称/缩写→书籍ID |
| `download*.ts` | 每个数据源的脚本,附加,原子交换 |
| `data/bible.db` | SQLite(gitignored,本地构建) |
### 设计决策
**为什么没有附带数据库?** 三个原因:STEPBible要求不要分享他们的数据文件;自建数据库带有`provenance`表格(源URL + SHA-256每个下载)是一种可验证的方式,就像下载的数据块永远无法实现一样;构建脚本还记录了每个单词的来源。
**为什么以路德1912为默认值?** 这是最知名的免费德语翻译。施拉赫特1951(CC BY),艾尔伯费尔德1871和门格是一个参数 - 而`translation-compare`将它们并排显示。
**为什么拜占庭多数文本是新约的默认值?** 服务器用于忠实的工作,这里提供的德语翻译站在多数文本传统(路德和施拉赫特跟随TR/拜占庭线)。关键的SBLGNT通过`texttyp: "sblgnt"`完全可用 - 而`bible_compare`显示确切的分歧以及凭证来评估每个变体。
**为什么使用英文工具名称和德语输出?** MCP工具名称是开发人员界面(英文约定);内容为人所读的内容是德语,因为输出的圣经文本是德语。
**为什么只有一个依赖项且没有构建步骤?** `bun:sqlite`包含在Bun中,而Bun直接执行TypeScript。唯一的运行时依赖项是MCP SDK。攻击面更少,无需编译,无需编译失败。
## 文档
| 文档 | 内容 |
| --- | --- |
| [docs/FEHLERBEHEBUNG.md](docs/FEHLERBEHEBUNG.md) | 数据构建和服务器启动时的错误图片,每个都有原因和解决方案 |
| [docs/TYPESCRIPT.md](docs/TYPESCRIPT.md) | 代码样式规则,类型检查,不采用的约定 |
| [AGENTS.md](AGENTS.md) | 存储库的工作规则:命令,架构,测量的陷阱 |
| [|CONTRIBUTING.md](CONTRIBUTING.md) | 参与:基本规则,检查步骤,拉取请求流程 |
| [THIRD_PARTY_LICENSES.md](THIRD_PARTY_LICENSES.md) | 完整的源代码和许可证表,适用于所有圣经数据 |
| [SECURITY.md](SECURITY.md) | 安全模型和漏洞报告方式 |
## 数据来源&许可证
所有数据源均为公共领域或CC-BY(-SA);完整的表格位于 [THIRD_PARTY_LICENSES.md](THIRD_PARTY_LICENSES.md) 中 - 包括施拉赫特1951的指定署名(CC BY 4.0,© 日内瓦圣经协会)和STEPBible关于传播的说明。
## 贡献
贡献欢迎 - 参见 [CONTRIBUTING.md](CONTRIBUTING.md)。请注意数据质量规则:每个关于文本的陈述必须可针对数据库进行验证(规则是“证据而不是主张”)。
## 许可
MIT许可证 - 参见 [LICENSE](LICENSE)。许可证涵盖代码;圣经数据在本地下载并受其自身许可证的约束(参见上文)。
## 作者
**Marc Allgeier** ([@fidpa](https://github.com/fidpa))
**为什么我要建这个?** 我想要一个像细心的读者一样处理经文的AI助手 - 准确引用,在基础文本中查找而不是猜测,并诚实地报告手稿的分歧。公共MCP生态系统中已有英文服务器,带有优秀的词典,但没有德语,无法离线使用多个基础文本版本,也没有显示文本变体的证据。这个空白由服务器填补。
## 参见
- [lydia-bible-bot](https://github.com/fidpa/lydia-bible-bot) - 用于电报群组的强化安全AI圣经助手(使用此服务器的早期嵌入式版本)
- [cc-telegram-bot](https://github.com/fidpa/cc-telegram-bot) - 用于Claude Code的电报机器人基础
- [bash-production-toolkit](https://github.com/fidpa/bash-production-toolkit) - 生产就绪的bash模式