Skip to main content
Glama
geosp

Bible MCP Server

by geosp

get_passage

Retrieve Bible passages from multiple translations with automatic content cleaning and formatting for study, research, or preparation.

Instructions

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 successful

  • passage: The requested Bible reference

  • version: The Bible version used

  • text: 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

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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
passageYes
versionNoESV

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • The async get_passage function implementing the core tool logic: validates input with GetPassageRequest, fetches passage from BibleService, handles errors, and returns result.
    async def get_passage(passage: str, version: str = "ESV") -> Dict[str, Any]:
        """Get a Bible passage with comprehensive documentation loaded from instructions.md"""
        try:
            logger.info(f"MCP tool called: get_passage(passage='{passage}', version='{version}')")
    
            # Create and validate request
            request = GetPassageRequest(
                passage=passage,
                version=version
            )
    
            # Call bible service
            result = await bible_service.fetch_passage(
                passage=request.passage,
                version=request.version
            )
    
            logger.info(f"Passage retrieval completed: {passage} ({version})")
            return result
    
        except ValueError as e:
            logger.warning(f"Passage validation error: {e}")
            raise
        except Exception as e:
            logger.error(f"Passage retrieval error: {e}")
            raise
  • Pydantic schemas: GetPassageRequest (input with passage and version fields) and GetPassageResponse (output with success, text, error).
    class GetPassageRequest(BaseModel):
        """Request model for getting a Bible passage"""
        passage: str = Field(description="Bible reference(s) (e.g., 'John 3:16', 'Romans 8', or 'John 3:16; Romans 8:28')", min_length=1)
        version: str = Field(
            default="ESV",
            description="Bible translation version (e.g., 'ESV', 'NIV', 'KJV')"
        )
    
    
    class GetPassageResponse(BaseModel):
        """Response model for Bible passage retrieval"""
        success: bool = Field(description="Whether the request was successful")
        passage: str = Field(description="The requested Bible reference")
        version: str = Field(description="The Bible version used")
        text: Optional[str] = Field(default=None, description="The passage text")
        error: Optional[str] = Field(default=None, description="Error message if request failed")
  • The register_tool function that defines and registers the get_passage MCP tool using @mcp.tool() decorator, injecting docstring and defining the handler.
    def register_tool(mcp: FastMCP, bible_service: BibleService) -> None:
        """
        Register the get_passage tool with the MCP server
    
        Args:
            mcp: FastMCP server instance
            bible_service: BibleService instance for Bible operations
        """
        @mcp.tool()
        @inject_docstring(lambda: load_instruction("instructions.md", __file__))
  • Dynamic registration in BibleMCPService.register_mcp_tools: discovers 'get_passage' feature, imports its tool.py, and calls register_tool(mcp, bible_service).
    def register_mcp_tools(self, mcp: FastMCP) -> None:
        """
        Register MCP tools for this service using automatic feature discovery
    
        Discovers and registers tools from all feature modules that have a tool.py
        with a register_tool() function.
        """
        logger.info("Discovering and registering MCP tools from features...")
    
        # Get the features package path
        features_package = "mcp_bible.features"
        features_path = Path(__file__).parent / "features"
    
        if not features_path.exists():
            logger.warning(f"Features directory not found: {features_path}")
            return
    
        # Discover all feature modules
        feature_count = 0
        for _, feature_name, is_pkg in pkgutil.iter_modules([str(features_path)]):
            if not is_pkg:
                continue  # Skip non-package modules
    
            try:
                # Import the tool module from the feature
                tool_module_name = f"{features_package}.{feature_name}.tool"
                tool_module = importlib.import_module(tool_module_name)
    
                # Check if the module has a register_tool function
                if hasattr(tool_module, "register_tool"):
                    # Register the tool, passing the bible service
                    tool_module.register_tool(mcp, self.bible_service)
                    feature_count += 1
                    logger.info(f"✓ Registered tools from feature: {feature_name}")
                else:
                    logger.warning(f"Feature '{feature_name}' has no register_tool() function")
            except ModuleNotFoundError:
                # Feature doesn't have a tool.py, skip it
                logger.debug(f"Feature '{feature_name}' has no tool.py, skipping")
            except Exception as e:
                logger.error(f"Error registering tools from feature '{feature_name}': {e}")
        logger.info(f"Registered MCP tools from {feature_count} features")
Behavior5/5

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.

Conciseness3/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/geosp/mcp-bible'

If you have feedback or need assistance with the MCP directory API, please join our Discord server