sru-mcp logo

sru-mcp

codefzer/sru-mcp
0 starsUpdated 2026-03-16Community
Deploy on Hostinger, 20% off →Your friend gets 20% off too, using this linkFree API →SearchsearchView on GitHubGitHub repositoryReport an issue

Is this your server?

Add your score badge to your README and get your server in front of 45k+ builders a month.

Works with

Claude CodeClaude DesktopCursorVS CodeClineCodex CLIOpenClaw+ any MCP client

Install to Claude Code

This server doesn't publish a one-line install command. Follow the setup in the source repository.

Summary

An MCP server that searches library catalogs worldwide using the SRU protocol, enabling bibliographic search without API keys.

README.md

sru-mcp

An MCP server that searches library catalogs worldwide using the SRU (Search/Retrieve via URL) protocol. No API keys required — SRU is an open standard supported by national libraries, university catalogs, and consortia.

Features

  • 5 tools for LLM-driven bibliographic search
  • 7 pre-configured servers including Library of Congress, BnF, DNB, and more
  • Parses MARCXML and Dublin Core record formats
  • Supports any SRU-compliant server — pass a URL or use a built-in server ID
  • Raw CQL queries or high-level field-based search (title, author, ISBN, subject, etc.)

Quick Start

Install

pip install mcp[cli] httpx xmltodict

Run

python server.py

Claude Desktop

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "sru": {
      "command": "python",
      "args": ["/path/to/sru-mcp/server.py"]
    }
  }
}

Tools

| Tool | Description | |------|-------------| | sru_list_servers | List all pre-configured library catalog servers | | sru_explain | Get a server's capabilities, supported schemas, and indexes | | sru_list_indexes | List available search indexes on a server | | sru_search | Execute a raw CQL query | | sru_search_books | Search by title, author, ISBN, subject, publisher, year, or keyword |

Example Usage

Search the Library of Congress for books by Melville:

sru_search_books(server="loc", author="Melville", title="Moby Dick")

Search the French national library with a raw CQL query:

sru_search(server="bnf", cql_query='dc.title = "Les Misérables"')

Pre-configured Servers

| ID | Name | Notes | |----|------|-------| | loc | Library of Congress | US national catalog | | loc-names | LC Name Authority | Personal and corporate names | | loc-subjects | LC Subject Authority | Subject headings and genre terms | | bnf | Bibliothèque nationale de France | French national library | | dnb | Deutsche Nationalbibliothek | German national library | | kb | Koninklijke Bibliotheek | Netherlands national library | | bibsys | BIBSYS | Norwegian academic libraries |

To add a server, edit servers.json.

Development

# Install dev dependencies
pip install pytest pytest-asyncio respx

# Run tests
python3 -m pytest test_sru.py test_server.py -v

# Test with MCP Inspector
npx @modelcontextprotocol/inspector python server.py

Project Structure

server.py       FastMCP server — tool definitions
sru.py          SRU protocol client — HTTP, parsing, formatting
servers.json    Server registry
test_sru.py     Tests for sru.py (92 tests total)
test_server.py  Tests for server.py

License

MIT

See related servers & alternatives →

Related MCP servers

Browse all →

Related guides

Hand-picked reading to help you choose and use Search servers.