Bible MCP Server
Uses FastAPI framework to provide REST API endpoints alongside MCP protocol support for Bible passage retrieval
Integrates with GitHub Copilot to enable AI-assisted Bible passage lookup and retrieval through natural language queries
Uses Pydantic models for data validation and type safety in Bible passage requests and configuration management
Built with Python 3.10+ runtime environment for Bible passage retrieval and MCP server functionality
Provides OpenAPI documentation through Swagger UI for exploring and testing Bible passage retrieval REST API endpoints
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Bible MCP Servershow me John 3:16 in ESV"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Bible MCP Server
A Model Context Protocol (MCP) server that provides Bible passage retrieval, built on mcp-service-kit.
This server lets AI assistants read Bible passages from various translations. It runs in two modes:
--mode stdio(default): MCP over stdin/stdout, for local AI assistant integration--mode http: MCP over streamable HTTP at/mcp, for networked access
Features
MCP Tools (for AI assistants)
get_passage(passage, version): retrieves Bible passages. Pass several references separated by semicolons (e.g., "John 3:16; Romans 8:28") to get them all at once. Ifversionis omitted, the configured default (ESV) is used.
Bible Versions
version is passed to BibleGateway as-is, so any version abbreviation it offers works (e.g. ESV, NIV, KJV, NASB, LSB); there is no list to maintain here. See BibleGateway's versions page. If a version isn't available, the tool returns success: false with the error.
Related MCP server: bible-mcp
Installation
Prerequisites
Python 3.11+
uvpackage manager
Installing uv
On Linux/macOS:
curl -LsSf https://astral.sh/uv/install.sh | shOn Windows:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"Alternatively, you can install uv using pip:
pip install uvAfter installation, restart your terminal or run source ~/.bashrc (Linux/macOS) or restart your command prompt (Windows).
Step 1: Install Dependencies
# From this directory
cd mcp-bible
# Install dependencies (including mcp-service-kit from GitHub)
uv syncStep 2: Configure Environment (optional)
# Copy example configuration
cp .env.example .env
# Edit .env with your settings
vi .envUsage
Mode 1: stdio (Default) - Local AI Assistant Integration
# Default mode - MCP over stdin/stdout
uv run mcp-bible
# Explicitly specify stdio mode
uv run mcp-bible --mode stdioUse this mode to integrate directly with AI assistants such as GitHub Copilot or Claude Desktop.
Mode 2: http - MCP over HTTP
uv run mcp-bible --mode http --port 3000 --no-authThis serves MCP at http://localhost:3000/mcp for networked AI assistants.
No authentication provider is configured, so HTTP mode needs --no-auth (or MCP_AUTH_ENABLED=false). Without it, mcp-service-kit refuses to start rather than serve the tools unauthenticated. To protect the endpoint, override create_auth_provider() in mcp_bible/server.py (see Authentication in the kit's README).
Connect an MCP Client
You can test the MCP tools by connecting GitHub Copilot or another MCP client:
// .vscode/mcp.json
{
"servers": {
"bible": {
"type": "http",
"url": "http://localhost:3000/mcp"
}
}
}Then ask Copilot:
"Show me John 3:16"
"What does Romans 8 say?"
"Read Psalm 23 in NIV"
To debug interactively, run npx @modelcontextprotocol/inspector and point it at either transport.
CLI Help and Options
# See all available options
uv run mcp-bible --help
# Usage examples:
uv run mcp-bible # stdio mode (default)
uv run mcp-bible --mode http --no-auth --port 4000 # HTTP on port 4000
uv run mcp-bible --mode http --no-auth --log-level DEBUG # verbose loggingEnvironment Variables
Settings are read from the environment and from .env. Command-line flags take precedence.
Variable | Default | Description |
|
| Transport: |
|
| Host to bind to in HTTP mode ( |
|
| Port in HTTP mode ( |
|
| Require an auth provider in HTTP mode; set |
|
| BibleGateway passage URL |
|
| Version used when none is requested |
|
| HTTP request timeout in seconds |
Testing
# Unit and in-memory MCP tests (offline; BibleGateway is mocked)
uv run pytestLive smoke test against a running HTTP server (this calls BibleGateway.com):
uv run mcp-bible --mode http --port 3000 --no-auth &
uv run python examples/client_example.py "John 3:16"
uv run python examples/client_example.py --url http://localhost:4000/mcp "Romans 8:28"Project Structure
mcp_bible/
├── __init__.py # Package metadata (version)
├── config.py # Configuration (BibleAPIConfig + kit's BaseServerConfig)
├── bible_service.py # Business logic (BibleGateway client and parser)
├── service.py # MCP service wrapper (automatic feature discovery)
├── server.py # Server and CLI entry point (mcp-service-kit)
└── features/ # Feature modules
├── __init__.py
└── get_passage/ # Get passage feature
├── __init__.py
├── instructions.md # Tool documentation (injected into the docstring)
├── models.py # Feature-specific models
└── tool.py # MCP tool definition (uses @inject_docstring)
tests/ # pytest suite
examples/
└── client_example.py # Live MCP client smoke testHow It Works
Features Pattern (Automatic Discovery)
BibleMCPService discovers every package under features/ and calls the register_tool(mcp, bible_service) function in its tool.py.
Add a new feature in 3 steps:
Create feature directory:
features/my_feature/Add instructions.md: The tool's documentation in markdown
Add tool.py: With a
register_tool(mcp, service)function
# features/my_feature/tool.py
from mcp_service_kit.utils import inject_docstring, load_instruction
def register_tool(mcp, bible_service):
@mcp.tool()
@inject_docstring(lambda: load_instruction("instructions.md", __file__))
async def my_tool(param: str) -> dict:
"""Documentation loaded from instructions.md"""
return {"result": param}You don't need to register anything by hand.
1. Configuration Layer (config.py)
Each section is a pydantic-settings model that reads its own environment variables:
from mcp_service_kit import BaseServerConfig
class BibleAPIConfig(BaseSettings): # BIBLE_* variables
api_url: str
default_version: str
class AppConfig(BaseModel):
server: BaseServerConfig # MCP_* variables
bible_api: BibleAPIConfig2. Business Logic Layer (bible_service.py)
Business logic that knows nothing about MCP:
class BibleService:
def __init__(self, api_config: BibleAPIConfig): ...
async def fetch_passage(self, passage: str, version: str | None = None) -> dict:
...3. MCP Service Wrapper (service.py)
Implements the kit's BaseService to expose the business logic via MCP:
from mcp_service_kit import BaseService
class BibleMCPService(BaseService):
def register_mcp_tools(self, mcp: FastMCP) -> None:
# Automatic feature discovery and registration4. Server Implementation (server.py)
Extends the kit's BaseMCPServer and builds the CLI with create_main_with_modes:
from mcp_service_kit import BaseMCPServer, create_main_with_modes
class BibleMCPServer(BaseMCPServer):
service_title = ... # plus service_description, service_version
main = create_main_with_modes(
BibleMCPServer, create_bible_service, AppConfig, "mcp-bible", "..."
)Customization
Add New Configuration
Edit mcp_bible/config.py:
class BibleAPIConfig(BaseSettings):
my_new_field: str = Field(default="value") # read from BIBLE_MY_NEW_FIELDAdd Middleware or Auth
BibleMCPServer can override the kit's hooks: instructions, create_middleware() (e.g. FastMCP's ResponseCachingMiddleware), create_auth_provider() and validate_configuration(). See Server hooks.
Next Steps
Add authentication (e.g. a
JWTVerifierfor Authentik viacreate_auth_provider())Add more Bible API sources (Bible API, ESV API)
Implement passage search and concordance
Add daily verses and reading plans
Add Redis caching (
mcp-service-kit[redis])Add metrics and monitoring
Learn More
License
This project is provided as-is for use and modification.
Available Tools
1 toolget_passageA
Bible Passage Retrieval Tool
Get Bible passages from multiple translations with automatic content parsing and cleaning.
This tool retrieves Bible passages from BibleGateway.com, supporting multiple Bible versions and passage formats. The content is automatically cleaned and formatted for easy reading.
Legal Notice: All Bible text content is sourced from BibleGateway.com. All copyright, licensing, and other legal concerns regarding the Bible translations and text content are covered by BibleGateway.com's terms of service and licensing agreements with the respective publishers. This tool serves as an interface to publicly available content and respects all applicable copyright restrictions.
Parameters
passage (required)
Type: string
Description: Bible reference(s) to retrieve
Format: Book Chapter:Verse or Book Chapter
Examples:
"John 3:16"- Single verse"John 3:16-21"- Verse range"John 3"- Entire chapter"Mark 2:1-12"- Specific verse range"John 3:16; Romans 8:28"- Multiple references
version (optional)
Type: string
Default: "ESV"
Description: Bible translation version
Supported versions: ESV, NIV, KJV, NASB, NKJV, NLT, AMP, MSG
Usage Examples
Single verse:
{
"passage": "John 3:16",
"version": "NIV"
}Chapter range:
{
"passage": "Mark 2:1-12",
"version": "ESV"
}Entire chapter:
{
"passage": "Psalm 23",
"version": "KJV"
}Multiple passages:
{
"passage": "John 3:16; Romans 8:28; Philippians 4:13",
"version": "ESV"
}Response Format
Returns a structured response containing:
success: Whether the request was successfulpassage: The requested Bible referenceversion: The Bible version usedtext: The passage text (cleaned and formatted)error: Error message if request failed
Supported Bible Versions
ESV - English Standard Version (default)
NIV - New International Version
KJV - King James Version
NASB - New American Standard Bible
NKJV - New King James Version
NLT - New Living Translation
AMP - Amplified Bible
MSG - The Message
When to Use This Tool
Scripture study and research
Sermon preparation and biblical analysis
Cross-referencing verses across translations
Gathering biblical supporting material
Comparing different translation renderings
Content Processing
The tool automatically:
Removes HTML formatting and ads
Cleans up spacing and formatting
Preserves verse numbers and structure
Handles chapter headings appropriately
Supports multi-passage requests
Legal Compliance and Copyright
Content Source: All Bible text is retrieved from BibleGateway.com (https://www.biblegateway.com/)
Copyright Protection: BibleGateway.com handles all copyright, licensing, and legal compliance for Bible translations. Each translation (ESV, NIV, KJV, etc.) has specific copyright holders and licensing terms that are managed and enforced by BibleGateway.com.
Fair Use: This tool accesses publicly available content through BibleGateway.com's web interface for educational, research, and personal study purposes. All copyright and licensing obligations are covered by BibleGateway.com's agreements with publishers.
Compliance: Users should be aware that while this tool provides access to Bible content, all legal responsibilities regarding copyright, attribution, and proper use remain with the respective copyright holders as managed by BibleGateway.com.
| Name | Required | Description | Default |
|---|---|---|---|
| passage | Yes | ||
| version | No | ESV |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and excels by disclosing critical behavioral traits: it specifies the data source (BibleGateway.com), describes content processing (removes HTML, cleans spacing), handles multi-passage requests, and includes legal compliance details like copyright management and fair use. This provides comprehensive operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Parameters, Usage Examples, Response Format, etc.), but it is overly verbose with redundant information (e.g., listing supported versions twice) and extensive legal disclaimers that could be condensed. While front-loaded with purpose, some sentences like the repeated version lists do not earn their place efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (external API integration, content processing) and lack of annotations, the description is highly complete: it covers purpose, usage, parameters, examples, response format, legal compliance, and processing details. The output schema is noted as present, so the description appropriately focuses on operational context without needing to explain return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, but the description fully compensates with detailed parameter documentation: it explains the 'passage' parameter with format rules, examples, and support for multiple references, and the 'version' parameter with default value, supported versions list, and optional status. This adds substantial meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('retrieves', 'get') and resources ('Bible passages', 'BibleGateway.com'), including key capabilities like multiple translations and content cleaning. It distinguishes itself by mentioning automatic parsing and cleaning, which is specific and actionable for an AI agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides a 'When to Use This Tool' section with specific scenarios like 'Scripture study and research', 'Sermon preparation', and 'Cross-referencing verses across translations'. It also includes legal context about when usage is appropriate (educational, research, personal study), offering clear guidance despite no sibling tools to differentiate from.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- First observed
get_passage
TDQS
Scored across 1 tool
With only one tool, there is no possibility of confusion or overlap between tools. The tool 'get_passage' has a clearly defined and singular purpose of retrieving Bible passages, making disambiguation perfect.
Since there is only one tool, naming consistency is inherently perfect. The tool name 'get_passage' follows a clear verb_noun pattern, but with no other tools to compare, consistency is not applicable in a meaningful way.
A single tool for a Bible server is too minimal for the domain's scope. While 'get_passage' handles retrieval well, typical Bible-related tasks like searching, comparing translations, or accessing metadata are missing, making the tool count feel insufficient and limiting for comprehensive use.
The server is severely incomplete for a Bible domain. It only provides passage retrieval, lacking essential operations such as search, cross-referencing, translation comparison, or access to book/chapter lists. This creates significant gaps that will hinder agents in performing common Bible study tasks.
Maintenance
Related MCP Connectors
Automate 1,000+ services from any MCP-compatible AI agent: build Applets, run actions and queries.
Your memory, everywhere AI goes. Build knowledge once, access it via MCP anywhere.
Use AI models for chat, image, and video generation from Claude Code and other MCP hosts.
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceProvides structured access to Scripture through the BibleBridge API, enabling semantic search, contextual verse retrieval, and cross-reference analysis. It supports natural language reference normalization and comparative theological exploration across different passages.1-
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to look up Bible verses, search across translations, and compare different versions locally without API keys.1-
- AlicenseAqualityAmaintenanceFree, no-key MCP server for reading scripture from 35+ public-domain translations in 8 languages. Lets users fetch verses, chapters, and passages via natural language from any MCP client.7126 npm1MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI to access Bible translations in hundreds of languages, original Greek and Hebrew texts with morphology, word-level interlinear alignments, and lexicons.CC BY-SA 4.0