Markdown Bible Enricher
FreeNot checkedMCP server for Catholic Bible study. Enriches markdown with Bible Gateway links (NRSVCE), Obsidian wiki-links, and CCC Catechism references. Supports all 73 boo
About
MCP server for Catholic Bible study. Enriches markdown with Bible Gateway links (NRSVCE), Obsidian wiki-links, and CCC Catechism references. Supports all 73 books of the Catholic Bible including 7 deuterocanonical books.
README
Bible Enrichment MCP Server - NRSVCE (New Revised Standard Version Catholic Edition)
Turns plain-text Bible references in your Markdown notes into Bible Gateway links and Obsidian wiki-links.
GitHub Release Catholic Bible License: GPL v3 Node.js Version TypeScript Model Context Protocol Obsidian
Quick Start • Installation • Usage • Configuration • Contributing • Changelog
Bible Enrichment MCP Server is a Model Context Protocol server that transforms plain-text Bible and Catechism references in your Markdown documents into linked references with Bible Gateway URLs and Obsidian wiki-links. It supports all 73 books of the Catholic Bible, including the 7 deuterocanonical books absent from Protestant translations.
Transform this:
Read CCC 528. Also see 1 Samuel 16:1, 16:4-13 and Matthew 2:6.
Into this:
Read [CCC 528](https://www.catholiccrossreference.online/catechism/#!/search/528).
Also see [1 Samuel 16:1, 16:4-13](https://www.biblegateway.com/passage/?search=1%20Samuel%2016%3A1%2C%2016%3A4-13&version=NRSVCE) ( [[1 Sam-16#v1]] , [[1 Sam-16#v4]] - [[1 Sam-16#v13]] )
and [Matthew 2:6](https://www.biblegateway.com/passage/?search=Matthew%202%3A6&version=NRSVCE) ( [[Matt-02#v6]] ).
Enrichment is deterministic — regex-based parsing with no LLM guessing involved in the transformation itself.
Features
- Bible Gateway links — every Scripture reference becomes a clickable link (NRSVCE by default)
- Obsidian wiki-links — generates
[[Book-Ch#vN]]format for vault cross-referencing - CCC links — Catechism of the Catholic Church references link to Catholic Cross Reference
- Pattern recognition — handles complex patterns like
1 Samuel 16:1, 16:4-13andCCC 528-530, 610-612 - Idempotent — already-linked references are skipped; safe to run the same document multiple times
- Complete Catholic Bible — all 73 books including Tobit, Judith, Wisdom, Sirach, Baruch, 1-2 Maccabees
Quick Start
git clone https://github.com/psenger/mcp-markdown-bible-enricher.git
cd mcp-markdown-bible-enricher
npm install
npm run build
npm run inspect
In the MCP Inspector, call bible_enrich_markdown with:
Genesis 1:1 says "In the beginning..."
Installation
Prerequisites
- Node.js >= 18.0.0
Claude Desktop
Locate your config file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
- macOS:
Add the server:
{
"mcpServers": {
"mcp-markdown-bible-enricher": {
"command": "node",
"args": ["/absolute/path/to/mcp-markdown-bible-enricher/dist/index.js"]
}
}
}
- Restart Claude Desktop.
To set a custom Bible version or Obsidian format, add env to the config:
{
"mcpServers": {
"mcp-markdown-bible-enricher": {
"command": "node",
"args": ["/absolute/path/to/mcp-markdown-bible-enricher/dist/index.js"],
"env": {
"BIBLE_VERSION": "NRSVCE",
"OBSIDIAN_FORMAT": "[[Bible/{abbrev}/{chapter}#v{verse}]]"
}
}
}
}
Claude Code CLI
claude mcp add --transport stdio mcp-markdown-bible-enricher -- node /absolute/path/to/mcp-markdown-bible-enricher/dist/index.js
With environment variables:
claude mcp add mcp-markdown-bible-enricher \
-e BIBLE_VERSION=NRSVCE \
-e 'OBSIDIAN_FORMAT=[[{abbrev}-{chapter2}#v{verse}]]' \
-- node /absolute/path/to/mcp-markdown-bible-enricher/dist/index.js
Use --scope user to install globally across all projects:
claude mcp add --transport stdio --scope user mcp-markdown-bible-enricher -- node /absolute/path/to/mcp-markdown-bible-enricher/dist/index.js
Verify:
claude mcp list
Cursor / VS Code
Add to .cursor/mcp.json:
{
"mcp-markdown-bible-enricher": {
"command": "node",
"args": ["/absolute/path/to/mcp-markdown-bible-enricher/dist/index.js"]
}
}
Usage
Process text in a conversation
Use the bible_enrich_markdown tool to process this text:
"According to Romans 8:28 and CCC 313, all things work together for good."
Result:
According to [Romans 8:28](https://www.biblegateway.com/passage/?search=Romans%208%3A28&version=NRSVCE) ( [[Rom-08#v28]] ) and [CCC 313](https://www.catholiccrossreference.online/catechism/#!/search/313), all things work together for good.
Process a file directly
Use bible_enrich_file with input_path: "/Users/me/Documents/bible-study.md"
The file is enriched in place. Supply output_path to write to a different location and keep the original.
Supported reference patterns
| Pattern | Example | What it matches |
|---|---|---|
| Single verse | John 3:16 |
One verse |
| Verse range | Matthew 5:3-12 |
Consecutive verses |
| Multiple verses | Psalm 23:1, 4, 6 |
Individual verses |
| Chapter + ranges | 1 Samuel 16:1, 16:4-13 |
Mixed chapter:verse patterns |
| Bare chapter | Isaiah 53 |
Entire chapter |
| Single-chapter book verse | Jude 9 |
Verse in a single-chapter book |
| Single-chapter book range | Jude 9-14 |
Verse range in single-chapter book |
| CCC single | CCC 528 |
Single paragraph |
| CCC range | CCC 528-530 |
Paragraph range |
| CCC multiple | CCC 528-530, 610-612 |
Multiple ranges |
Configuration
All configuration is via environment variables, loaded once at server startup. Restart the MCP server after any change.
| Variable | Default | Description |
|---|---|---|
BIBLE_VERSION |
NRSVCE |
Bible translation. NRSVCE and NABRE include deuterocanonical books; Protestant translations (ESV, NIV, KJV) do not. |
OBSIDIAN_FORMAT |
[[{abbrev}-{chapter2}#v{verse}]] |
Wiki-link template. Placeholders: {abbrev}, {chapter}, {chapter2} (zero-padded), {verse} |
INCLUDE_OBSIDIAN_LINKS |
true |
Set to false for Bible Gateway links only |
Example configurations
Bible Gateway links only, non-default translation:
"env": {
"BIBLE_VERSION": "ESV",
"INCLUDE_OBSIDIAN_LINKS": "false"
}
Custom vault folder structure:
"env": {
"OBSIDIAN_FORMAT": "[[Bible/{abbrev}/{chapter2}#v{verse}]]"
}
API Reference
Tools
bible_enrich_markdown
Enriches a Markdown string with Bible and CCC links.
| Parameter | Type | Required | Description |
|---|---|---|---|
markdown |
string | yes | The Markdown content to enrich |
Returns the enriched Markdown string.
bible_enrich_file
Reads a Markdown file, enriches it, and writes the result.
| Parameter | Type | Required | Description |
|---|---|---|---|
input_path |
string | yes | Absolute path to the input file |
output_path |
string | no | Absolute path for output (defaults to overwriting input) |
Returns a success message with the output path.
Prompts
bible_enrich_document
A convenience prompt that instructs Claude to call bible_enrich_markdown on the supplied content.
| Parameter | Type | Required |
|---|---|---|
markdown |
string | yes |
help
Displays all available tools, configuration options, and usage examples. Call it with no arguments.
Supported Books
All 73 books of the Catholic Bible are supported.
Translation note for deuterocanonical books (Tobit, Judith, Wisdom, Sirach, Baruch, 1-2 Maccabees): these books are only available on Bible Gateway through Catholic translations. NRSVCE (default) and NABRE both include them. NCB and all Protestant translations do not.
Old Testament (46 books)
Protestant Canon (39 books):
- Pentateuch: Genesis, Exodus, Leviticus, Numbers, Deuteronomy
- Historical: Joshua, Judges, Ruth, 1-2 Samuel, 1-2 Kings, 1-2 Chronicles, Ezra, Nehemiah, Esther
- Wisdom: Job, Psalms, Proverbs, Ecclesiastes, Song of Solomon
- Prophets: Isaiah, Jeremiah, Lamentations, Ezekiel, Daniel, Hosea, Joel, Amos, Obadiah, Jonah, Micah, Nahum, Habakkuk, Zephaniah, Haggai, Zechariah, Malachi
Deuterocanonical (7 books — Catholic only):
- Historical: Tobit, Judith, 1-2 Maccabees
- Wisdom: Wisdom, Sirach (Ecclesiasticus)
- Prophetic: Baruch
New Testament (27 books)
- Gospels: Matthew, Mark, Luke, John
- History: Acts
- Pauline Epistles: Romans, 1-2 Corinthians, Galatians, Ephesians, Philippians, Colossians, 1-2 Thessalonians, 1-2 Timothy, Titus, Philemon
- General Epistles: Hebrews, James, 1-2 Peter, 1-2-3 John, Jude
- Apocalypse: Revelation
Complete abbreviation list (all 73 books)
Old Testament (46 books):
Pentateuch: Genesis → Gen, Exodus → Exod, Leviticus → Lev, Numbers → Num, Deuteronomy → Deut
Historical: Joshua → Josh, Judges → Judg, Ruth → Ruth, 1 Samuel → 1 Sam, 2 Samuel → 2 Sam, 1 Kings → 1 Kings, 2 Kings → 2 Kings, 1 Chronicles → 1 Chron, 2 Chronicles → 2 Chron, Ezra → Ezr, Nehemiah → Neh, Tobit → Tob, Judith → Jdt, Esther → Esth, 1 Maccabees → 1 Macc, 2 Maccabees → 2 Macc
Wisdom: Job → Job, Psalms → Ps, Proverbs → Prov, Ecclesiastes → Eccles, Song of Solomon → Song, Wisdom → Wis, Sirach → Sir
Prophetic: Isaiah → Isa, Jeremiah → Jer, Lamentations → Lam, Baruch → Bar*, Ezekiel → Ezek, Daniel → Dan, Hosea → Hos, Joel → Joel, Amos → Am, Obadiah → Obad†, Jonah → Jonah, Micah → Micah, Nahum → Nah, Habakkuk → Hab, Zephaniah → Zeph, Haggai → Hag, Zechariah → Zech, Malachi → Mal
New Testament (27 books):
Gospels: Matthew → Matt, Mark → Mark, Luke → Luke, John → John
History: Acts → Acts
Pauline Epistles: Romans → Rom, 1 Corinthians → 1 Cor, 2 Corinthians → 2 Cor, Galatians → Gal, Ephesians → Ephes, Philippians → Phil, Colossians → Col, 1 Thessalonians → 1 Thess, 2 Thessalonians → 2 Thess, 1 Timothy → 1 Tim, 2 Timothy → 2 Tim, Titus → Titus, Philemon → Philem†
General Epistles: Hebrews → Heb, James → James, 1 Peter → 1 Pet, 2 Peter → 2 Pet, 1 John → 1 John, 2 John → 2 John†, 3 John → 3 John†, Jude → Jude†
Apocalypse: Revelation → Rev
* deuterocanonical — requires NRSVCE or NABRE translation† single-chapter book — supports both Jude 1:9 and Jude 9 forms
Alternative names: Song of Solomon = Song of Songs; Sirach = Ecclesiasticus = Wisdom of Ben Sira
How It Works
The enrichment function processes Markdown in five sequential regex passes:
- Backtick unwrapping — removes backticks around references like
`1 Samuel 16:1:`before processing - Bible references — matches
chapter:versepatterns not already inside Markdown links - Single-chapter bare verse — matches bare verse citations in single-chapter books (e.g.,
Jude 9) - Bare chapter — matches chapter-only citations (e.g.,
Isaiah 53) - CCC references — matches Catechism paragraph numbers
Key implementation details:
- Negative lookbehind/lookahead prevents double-enriching already-linked text
- Implicit chapter inheritance:
16:1, 4-13uses chapter 16 for both groups - Single-chapter books use a different Obsidian link format (
[[Jude#v9]]rather than[[Jude-01#v9]]) - YAML front matter is stripped before enrichment and reattached unchanged
Output format
| Reference | Bible Gateway link | Obsidian wiki-link |
|---|---|---|
John 3:16 |
[John 3:16](https://www.biblegateway.com/...) |
[[John-03#v16]] |
Matthew 5:3-12 |
[Matthew 5:3-12](https://www.biblegateway.com/...) |
[[Matt-05#v3]] - [[Matt-05#v12]] |
Jude 9 |
[Jude 9](https://www.biblegateway.com/...) |
[[Jude#v9]] |
Isaiah 53 |
[Isaiah 53](https://www.biblegateway.com/...) |
[[Isa-53]] |
CCC 528 |
[CCC 528](https://www.catholiccrossreference.online/...) |
(none) |
Obsidian Integration
Bible references are enriched with wiki-links matching Obsidian's [[Note#heading]] convention. If your vault uses a different file-naming structure, set OBSIDIAN_FORMAT to match:
# Flat structure: "Gen 1:1" → [[Gen 1#v1]]
OBSIDIAN_FORMAT="[[{abbrev} {chapter}#v{verse}]]"
# Nested folders: "Gen 1:1" → [[Bible/Gen/01#v1]]
OBSIDIAN_FORMAT="[[Bible/{abbrev}/{chapter2}#v{verse}]]"
# Chapter-only files: "Gen 1:1" → [[Gen-01#verse-1]]
OBSIDIAN_FORMAT="[[{abbrev}-{chapter2}#verse-{verse}]]"
Available placeholders: {abbrev}, {chapter}, {chapter2} (zero-padded), {verse}.
Agentic Usage
This server is built to work with agentic workflows. Claude Code, Claude Desktop, and other MCP clients can call the tools directly from within a conversation.
Calling tools from Claude Code
Once the server is registered, Claude Code picks up the tools automatically. You can instruct it directly:
Use bible_enrich_file with input_path: "/Users/me/vault/notes/week-1.md"
Or use the built-in bible_enrich_document prompt for interactive enrichment of text you paste in.
agent-os/ directory
The agent-os/ directory contains machine-readable specs and standards that help AI agents work with this codebase consistently across sessions.
agent-os/
├── specs/ # Change-specific specs (one per feature/fix)
│ ├── 2026-03-18-1600-single-chapter-bare-verse-refs
│ ├── 2026-03-18-1700-bare-chapter-refs
│ └── 2026-03-19-0900-frontmatter-protection
└── standards/ # Durable conventions for the codebase
├── index.yml # Index of all standards with descriptions
├── books/ # BOOK_MAP key casing, abbreviation sources, alternative names
├── config/ # Config loading lifecycle, opt-out patterns
├── enrichment/ # Regex pass ordering, lookbehind guards, chapter inheritance
├── global/ # Cross-cutting principles (DRY, SOLID, TDD, etc.)
└── testing/ # Jest config module cache limitations
When proposing changes to the codebase, consult the relevant standard in agent-os/standards/ before writing code. The enrichment/three-pass-ordering standard, for example, explains why the regex pass order is fixed and must not change.
CLAUDE.md
CLAUDE.md at the project root provides Claude Code with project-specific guidance: TypeScript conventions, regex testing requirements, import extension rules, and the book-mapping schema. It is loaded automatically by Claude Code at the start of each session.
Error handling
| Scenario | Behaviour |
|---|---|
| Unrecognised book name | Reference is left unchanged |
| Invalid chapter/verse numbers | Enriched, but the resulting Bible Gateway link may 404 |
| File not found | Returns Error: ENOENT: no such file or directory |
| Permission denied | Returns Error: EACCES: permission denied |
All tool errors are returned with isError: true and a user-readable message.
Limitations
- File size — files are loaded entirely into memory; keep inputs under 10 MB
- Encoding — UTF-8 only; non-UTF-8 input produces incorrect output
- Code blocks — triple-backtick blocks are still enriched; only inline single-backtick references are unwrapped then enriched
- CCC format — requires a space:
CCC 528, notCCC528 - Configuration — loaded once at startup; restart the server after changing env vars
- Deuterocanonical on Bible Gateway — NRSVCE and NABRE only; NCB and Protestant translations lack these books
Development
Project structure
mcp-markdown-bible-enricher/
├── src/
│ ├── __tests__/ # unit tests
│ ├── config.ts # env var loading
│ ├── index.ts # MCP server entry point
│ ├── enrichment.ts # core regex logic
│ └── books.ts # Bible book → abbreviation map
├── agent-os/ # agentic specs and standards
├── dist/ # compiled output (generated)
├── CLAUDE.md # Claude Code project guidance
├── CONTRIBUTING.md # contributor guide
├── CHANGELOG.md # release history
└── package.json
Scripts
npm run build # compile TypeScript
npm run start # run the compiled server
npm run dev # watch mode (tsx)
npm run inspect # MCP Inspector browser GUI
npm test # run tests
npm run test:watch # watch mode
npm run test:coverage # coverage report
npm run lint # ESLint
npm run format # Prettier
npm run format:check # check formatting without writing
npm run clean # remove dist/
TypeScript notes
- Module system: ES Modules (
"type": "module") - Import extensions: always use
.jsin imports even though source files are.ts— required for Node16 module resolution - Target: ES2022, strict mode enabled
Adding a new Bible book or alias
See agent-os/standards/books/ for the book-map conventions and src/books.ts for the implementation. The key rules are in BOOK_MAP key casing and the singleChapter flag.
Troubleshooting
Server not appearing in Claude Desktop
- Verify the path in
claude_desktop_config.jsonis an absolute path - Confirm the build succeeded:
npm run build - Check MCP logs via Help → Developer Tools in Claude Desktop
- Fully quit and restart Claude Desktop
References not being detected
- Book names are case-insensitive but must be spelled correctly
- Format must be
Book chapter:verse— confirm there is no extra punctuation - References already inside Markdown links
[text](url)are skipped intentionally - For deuterocanonical books, confirm you are using NRSVCE or NABRE
Deuterocanonical books not working
Set BIBLE_VERSION to NRSVCE (default) or NABRE. NCB does not include these books on Bible Gateway despite being a Catholic translation. Protestant translations (ESV, NIV, KJV) also lack them.
Configuration changes not taking effect
Configuration is loaded once at startup. After editing env vars: save the config file, fully quit Claude Desktop, then restart it.
File permission or encoding errors
# Check encoding
file -I /path/to/file.md
# Convert to UTF-8 if needed
iconv -f ISO-8859-1 -t UTF-8 input.md > output.md
Build errors
rm -rf node_modules package-lock.json
npm install
npm run clean
npm run build
Contributing
Contributions are welcome. See CONTRIBUTING.md for:
- Development setup and local testing
- Regex pattern conventions and testing requirements
- How to add new Bible books or aliases
- Commit message and PR conventions (Conventional Commits)
- How to use
agent-os/specs when proposing changes
To report a bug or request a feature, open an issue.
Changelog
See CHANGELOG.md for the full release history. This project follows Keep a Changelog v1.1.0 and Semantic Versioning.
License
Licensed under the GNU General Public License v3.0. See LICENSE for full details.
Acknowledgments
- Anthropic MCP SDK — Model Context Protocol implementation
- Bible Gateway — Scripture text and passage linking
- Catholic Cross Reference — Catechism paragraph linking
- Obsidian — wiki-link format inspiration
Built for Catholic Bible study and agentic Markdown workflows
Installing Markdown Bible Enricher
This server has no published package — it is built from source. Open the repository and follow its README.
▸ github.com/psenger/mcp-markdown-bible-enricherFAQ
Is Markdown Bible Enricher MCP free?
Yes, Markdown Bible Enricher MCP is free — one-click install via Unyly at no cost.
Does Markdown Bible Enricher need an API key?
No, Markdown Bible Enricher runs without API keys or environment variables.
Is Markdown Bible Enricher hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install Markdown Bible Enricher in Claude Desktop, Claude Code or Cursor?
Open Markdown Bible Enricher on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
GitHub
PRs, issues, code search, CI status
by GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
by mcpdotdirectCompare Markdown Bible Enricher with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All development MCPs
