Bible API MCP server that provides access to Bible translations, books, chapters, and verses with language filtering and verse search capabilities
Server defines 5 Bible query tools with consistent naming (all verb_noun: get_*, search_*). All tools have descriptions and input schemas with types. However, descriptions are formulaic and lack actionable context. Output schemas are not explicitly documented. Error handling is present but generic. No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Parameter descriptions are minimal. The server reads from a public Bible API and has no write operations, but this read-only nature is not formally declared.
Get list of books available in a specific Bible translation. The user will see the response of this tool call.
Get the full text of a Bible chapter with verse numbers and formatting preserved. The user will see the response of this tool call.
Get list of available Bible translations. The user will see the response of this tool call.
Get a specific verse or verse range from the Bible. The user will see the response of this tool call.
Search for verses containing specific words or phrases across a translation. The user will see the response of this tool call.
Output schemas not documented. Tools accept structured inputs but do not declare what they return (field names, types, structure). LLMs cannot plan downstream tool chains or extract required data.
Descriptions are generic and repetitive ('The user will see the response of this tool call'). They do not explain WHEN to call each tool, WHY one differs from another (get_chapter vs get_verse), or what the response structure is. Descriptions should be 50-200 chars and LLM-optimized.
No tool annotations. All tools are read-only but lack readOnlyHint annotation. This prevents clients from inferring safe retry behavior or displaying read-only badges.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 58 | <=2025-11-25 | v2 |
Parameter descriptions are minimal (1-5 words). E.g., 'The translation ID' does not explain what format is expected, how to discover valid translation IDs, or what happens if an invalid ID is passed. Descriptions should clarify format, constraints, and dependencies.
Optional parameter handling is unclear. 'end_verse' in get_verse is marked nullable but the description does not explain what happens when it is omitted (defaults to single verse vs range). Dependencies between parameters (chapter → verse availability) are undocumented.
search_verses 'limit' parameter is optional with no documented default. Baseline rubric states tools returning lists should accept limit and document the default/cap. Without knowing the default, LLMs cannot plan token budgets.
Error messages use JSON-wrapped format (full_details + user_message) but are not formal to the MCP spec. Errors should include recovery guidance: 'Translation ID invalid. Call get_translations() first to find valid IDs.'