ETH Library Discovery and Persons APIs
Valid MCP server (1 strong, 4 medium validity signals). No known CVEs in dependencies. Package registry verified. Imported from the Official MCP Registry.
4 files analyzed Β· 1 issue found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-malkreide-eth-library-mcp": {
"args": [
"eth-library-mcp"
],
"command": "uvx"
}
}
}From the project's GitHub README.
π¨π Part of the Swiss Public Data MCP Portfolio
π English | Deutsch
MCP server giving AI models direct access to 30M+ resources at ETH Library Zurich β books, maps, images, archival material, and linked-data person records.
eth-library-mcp connects AI assistants like Claude to the largest natural-science library in Switzerland. It exposes full-text search, archive-level queries, resource-type filtering, and person lookups via the ETH Library's Discovery and Persons APIs β all through a single, standardised MCP interface.
7 Tools Β· 3 APIs Β· 2 Resources Β· 2 Prompts
MCP Protocol Version: 2025-06-18 (via mcp[cli]>=1.0.0,<2.0.0).
β οΈ Known issue (BUG-02): The tool
eth_search_personsis currently non-functional because the Persons API endpoint returns HTTP 404. The correct URL needs to be verified at developer.library.ethz.ch. All other 6 tools work correctly.
Anchor demo query: "Find historical documents about Zurich school history in the ETH Library archives."
# Clone the repository
git clone https://github.com/malkreide/eth-library-mcp.git
cd eth-library-mcp
# Install
pip install -e .
# Or with uv (recommended)
uv pip install -e .
# Set the API key
export ETH_LIBRARY_API_KEY=your_key_here # macOS / Linux
# $env:ETH_LIBRARY_API_KEY = "your_key_here" # Windows (PowerShell)
# Start the server (stdio mode for Claude Desktop)
python -m eth_library_mcp.server
Without an API key the server returns a helpful error message with the registration link β no crashes.
Try it immediately in Claude Desktop:
"Find books about Swiss education history in the ETH Library." "Search the Max Frisch archive for manuscripts about Zurich."
β More use cases by audience β
| Variable | Description | Required |
|---|---|---|
ETH_LIBRARY_API_KEY | API key for Discovery & Persons API | β |
{
"mcpServers": {
"eth-library": {
"command": "python",
"args": ["-m", "eth_library_mcp.server"],
"env": {
"ETH_LIBRARY_API_KEY": "your_key_here"
}
}
}
}
Config file locations:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonFor use via claude.ai in the browser (e.g. on managed workstations without local software):
python -m eth_library_mcp.server --http --port 8000
The HTTP transport binds to 127.0.0.1 by default. To expose it on another
interface, pass --host explicitly:
# Only behind a reverse-proxy / firewall that terminates TLS and enforces auth.
python -m eth_library_mcp.server --http --host 0.0.0.0 --port 8000
β οΈ Do not bind to
0.0.0.0without a reverse proxy. The server has no built-in auth, rate-limiting or TLS β any LAN neighbour could call your tools.
π‘ "stdio for the developer laptop, HTTP for the browser β behind a proxy."
| Tool | Description |
|---|---|
eth_search_resources | Full-text search over 30M+ resources with fields, operators, facets |
eth_get_resource | Full metadata for a specific resource via MMS-ID |
eth_search_archive | Search within a specific archive (University Archives, Max Frisch, Thomas Mann, etc.) |
eth_search_by_type | Filter by resource type (books, maps, images, archival material, etc.) |
eth_search_education | Curated search for education topics (pedagogy, school history, etc.) |
| Tool | Description |
|---|---|
eth_search_persons | Person search with linked-data enrichment (Wikidata, GND, Metagrid) β β οΈ BUG-02 |
| Tool | Description |
|---|---|
eth_library_info | Server overview: all types and archives at a glance |
| Item | Type | Description |
|---|---|---|
eth://resource-types | Resource | All available resource types |
eth://archives | Resource | All available archives and collections |
research-workflow | Prompt | Structured research workflow |
education-research | Prompt | Education topics workflow (Schulamt-optimised) |
The Discovery API uses structured queries:
field,operator,value
| Field | Meaning |
|---|---|
any | All fields (recommended for starters) |
title | Title only |
creator | Author / creator |
sub | Subject headings / topics |
| Operator | Meaning |
|---|---|
contains | Term is present |
exact | Exact match |
begins_with | Starts with |
Examples:
any,contains,Volksschule ZΓΌrich
title,contains,PΓ€dagogik
creator,exact,Einstein Albert
sub,contains,Bildungsforschung
title,contains,Schule;sub,contains,Geschichte
| Identifier | Description |
|---|---|
ETH_Hochschularchiv | Institutional memory of ETH Zurich |
ETH_MaxFrischArchiv | Estate of Swiss author Max Frisch |
ETH_ThomasMannArchiv | Letters and documents of Thomas Mann |
ETH_GraphischeSammlung | Prints, drawings, graphic works |
ETH_Bildarchiv | Science/technology history, Swissair (E-Pics) |
| Query | Tool |
|---|---|
| "Find books about Zurich school history" | eth_search_education |
| "What's in the Max Frisch archive?" | eth_search_archive |
| "Find historical maps of Switzerland" | eth_search_by_type |
| "Get full metadata for resource ID 991170525863705501" | eth_get_resource |
| "Which archives does the ETH Library hold?" | eth_library_info |
eth-library-mcp/
βββ src/
β βββ eth_library_mcp/
β βββ __init__.py # Package init, version
β βββ server.py # FastMCP server, all tools
βββ tests/
β βββ test_server.py # Unit tests
βββ CHANGELOG.md
βββ CONTRIBUTING.md # Contribution guide (English)
βββ CONTRIBUTING.de.md # Contribution guide (German)
βββ SECURITY.md # Security posture (English)
βββ SECURITY.de.md # Security posture (German)
βββ LICENSE
βββ README.md # This file (English)
βββ README.de.md # German version
βββ claude_desktop_config.json # Example Claude Desktop configuration
βββ pyproject.toml # Build configuration
# Unit tests (no API key required)
PYTHONPATH=src pytest tests/ -m "not live"
# Integration tests (API key required)
ETH_LIBRARY_API_KEY=xxx pytest tests/ -m "live"
ETH_LIBRARY_API_KEY environment variable and never logged or transmitted to third parties.limit and offset parameters conservatively.eth_search_persons returns HTTP 404 β the Persons API endpoint URL needs verification. All other 6 tools work correctly.Contributions are welcome! See CONTRIBUTING.md (Deutsch) for guidelines.
Read-only, no PII, a single upstream API key, and a fixed egress allow-list of ETH Library endpoints. See SECURITY.md (Deutsch) for the full security posture and accepted-risk decisions.
See CHANGELOG.md
Powered by Model Context Protocol β’ 2 APIs β’ 7 Tools β’ 2 Resources β’ 2 Prompts
Run via uv's uvx β no clone or manual install needed. Add to your MCP client config (mcpServers for Claude Desktop, Cursor and Windsurf; use a top-level servers key for VS Code in .vscode/mcp.json):
{
"mcpServers": {
"eth-library-mcp": {
"command": "uvx",
"args": [
"eth-library-mcp"
]
}
}
}
Be the first to review this server!
by Modelcontextprotocol Β· Developer Tools
Web content fetching and conversion for efficient LLM usage
by Toleno Β· Developer Tools
Toleno Network MCP Server β Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace Β· Developer Tools
Create, build, and publish Python MCP servers to PyPI β conversationally.