World Bank Document and Reports MCP Server
An MCP server for accessing the World Bank's Documents & Reports database. Provides searching, retrieval, and detailed breakdowns of World Bank documents for LLMs and programmatic use.
Repository Structure
document-reports-mcp/
worldbank_dnr_mcp/ # main package
core.py # business logic, models, utilities
factory.py # server creation and tool registration
parsers.py # transport-specific response parsers
__init__.py # package exports
server_stdio.py # STDIO transport server
server_sse.py # SSE transport server
start_server_claude.py # launcher for Claude Desktop
pyproject.toml # project configuration
requirements.txt # legacy requirements file
docs/ # documentation
API Document.pdf
DESIGN_LOGIC.md
STRUCTURE_GUIDE.md
mcp_simulation.mp4 # demonstration video
Project Features
- comprehensive document search with advanced filters
- multi-dimensional filtering (by country, type, language, date range)
- result faceting and category exploration
- metadata and abstract retrieval
- project-based document lookup
- flexible markdown/json output formats
- extensive error handling and validation
- support for both STDIO and SSE transports
Demonstration Video
Watch the MCP server in action:
Note: Click the link above to view the demonstration video. GitHub README files don't support embedded video players, but you can download or view the video directly through the link.
Quick Documentation Index
- API Document (PDF): Official World Bank API documentation
- DESIGN_LOGIC.md: Core design principles and logic explained
- STRUCTURE_GUIDE.md: File structure, configuration, and usage
Installation
Using uv (recommended): ``bash uv sync ``
Using pip: ``bash pip install -r requirements.txt ``
Usage
For Claude Desktop (STDIO Transport)
- Update your Claude Desktop config to use the launcher:
{
"mcpServers": {
"worldbank-dnr": {
"command": "uv",
"args": ["run", "/absolute/path/to/start_server_claude.py"],
"cwd": "/absolute/path/to/document-reports-mcp"
}
}
}
- Restart Claude Desktop
Testing the SSE Server Locally
You can test the SSE server using the MCP Inspector:
- Start the SSE server:
uv run server_sse.py
- In another terminal, run the MCP Inspector:
npx @modelcontextprotocol/inspector@latest
- The inspector will open at
http://localhost:6274
- Select "SSE" as the transport type
- Enter the server URL:
http://localhost:8002/sse
- Click "Connect" to interact with the server and test tools
Alternatively, you can use the simple test client: ``bash uv run test_sse_client.py ``
Available Tools
worldbank_search_documents- primary search with filtersworldbank_get_document_details- retrieve detailed document informationworldbank_explore_facets- discover available filter valuesworldbank_search_by_project- find documents by project ID or name
For detailed tool documentation and API usage, see DESIGN_LOGIC.md.
Development
The codebase follows these principles:
- DRY principle: shared utilities in
core.py, no code duplication - pydantic models: automatic validation for all inputs
- async/await: all I/O operations use async patterns
- transport abstraction: business logic separated from transport-specific code
- factory pattern: centralized server creation with dependency injection
See STRUCTURE_GUIDE.md for detailed architecture explanation.
Code Organization
worldbank_dnr_mcp/core.py: constants, enums, pydantic models, utility functions, formatting helpersworldbank_dnr_mcp/factory.py: server factory, tool registrationworldbank_dnr_mcp/parsers.py: transport-specific response parsing (only transport-dependent code)server_stdio.py: STDIO transport wrapperserver_sse.py: SSE transport wrapper
For full architecture breakdown and troubleshooting, see documentation in the docs/ folder.











