Server data from the Official MCP Registry
swisscovery, e-rara, e-periodica, e-manuscripta via SRU/OAI-PMH
swisscovery, e-rara, e-periodica, e-manuscripta via SRU/OAI-PMH
Valid MCP server (2 strong, 3 medium validity signals). No known CVEs in dependencies. Package registry verified. Imported from the Official MCP Registry.
3 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-swiss-academic-libraries-mcp": {
"args": [
"swiss-academic-libraries-mcp"
],
"command": "uvx"
}
}
}From the project's GitHub README.
π¨π Part of the Swiss Public Data MCP Portfolio
MCP server providing access to Swiss academic libraries β swisscovery, e-rara, e-periodica, e-manuscripta. No API key required.
swiss-academic-libraries-mcp connects AI models to the full Swiss academic library infrastructure via standardised, open protocols. It covers the swisscovery union catalogue (500+ libraries, 10M+ records) and three digitalisation platforms: historical prints (e-rara), periodicals (e-periodica) and manuscripts (e-manuscripta).
All data sources use open, authentication-free protocols (SRU/MARC21, OAI-PMH/Dublin Core). The server supports both local use via Claude Desktop (stdio transport) and cloud deployment (Streamable HTTP).
Beyond the catalogue, the server also covers Swiss open-access legal literature β freely readable legal scholarship from sui generis, ex/ante and Repositorium.ch β as metadata (title, authorship, year, licence, DOI, link), never full text.
Anchor demo query (catalogue): "Which Swiss university dissertations on primary school pedagogy are held in Swiss libraries, and are any of them digitised in e-rara?"
Anchor demo query (OA legal literature): "Which freely accessible legal-scholarship articles exist on data protection in education? Give me title, authorship, year, licence and DOI." β oa_law_search(query="Datenschutz im Bildungsbereich") β results are ranked by relevance: articles matching all terms rank first, articles matching only the core term (Datenschutz) follow, so the query returns the real privacy-law corpus rather than an empty set.
research-workflow and education-research| Source | Protocol | Content | Records |
|---|---|---|---|
| swisscovery (SLSP) | SRU / MARC21 | 500+ Swiss libraries | 10M+ |
| e-rara | OAI-PMH / Dublin Core | Digitised historical prints | 250k+ |
| e-periodica | OAI-PMH / Dublin Core | Digitised periodicals (1750βtoday) | 1M+ articles |
| e-manuscripta | OAI-PMH / Dublin Core | Manuscripts & archival material | 100k+ |
| Source | Protocol | Content | DOI coverage |
|---|---|---|---|
| sui generis | OAI-PMH / Dublin Core | OA legal journal & non-profit publisher | ~100 % (10.21257/β¦) |
| ex/ante | OAI-PMH / Dublin Core | Peer-reviewed journal for (young) legal scholarship, multilingual | none (persistent URL) |
| Repositorium.ch | Supabase / PostgREST (JSON) | Subject repository for Swiss law | partial |
| Tool | Source | Function |
|---|---|---|
library_info | β | Entry point: overview of all sources and tools |
swisscovery_search | swisscovery | Full-text / CQL search across the union catalogue |
swisscovery_get_record | swisscovery | Single record by MMS-ID |
erara_list_records | e-rara | Prints filtered by date / collection |
erara_get_record | e-rara | Single item by OAI identifier |
erara_list_collections | e-rara | All participating libraries |
eperiodica_list_records | e-periodica | Articles filtered by date |
eperiodica_get_record | e-periodica | Single article by OAI identifier |
emanuscripta_list_records | e-manuscripta | Manuscripts filtered by date / collection |
emanuscripta_get_record | e-manuscripta | Single object by OAI identifier |
emanuscripta_list_collections | e-manuscripta | All archives / collections |
oa_law_search | OA legal (all 3) | Search OA legal scholarship (title/abstract/author) with source, language, year and peer-review filters |
oa_law_get | OA legal (all 3) | Single OA legal article by DOI or resolvable URL |
| Query | Tool |
|---|---|
| "Which books about Swiss primary schools are held in Swiss libraries?" | swisscovery_search |
| "Show digitised historical works from ETH Library" | erara_list_records |
| "Which Swiss periodicals were digitised in 2023?" | eperiodica_list_records |
| "What manuscript collections does e-manuscripta hold?" | emanuscripta_list_collections |
| "Which OA legal articles exist on facial recognition?" | oa_law_search |
Two independent paths share one HTTP client (retry with exponential backoff, shared connection pool, project User-Agent):
βββββββββββββββββββββββββββββββββββββββββββββββ
β swiss-academic-libraries-mcp β
β (FastMCP Β· stdio / HTTP) β
βββββββββββββββββ¬βββββββββββββββ¬βββββββββββββββ
β β
ββββββ CATALOGUE path βββ βββ OA-LEGAL path ββββββ
β (api_client.py) (oa_legal.py) β
β β
βββββββββββ΄ββββββββββ ββββββββββββββββββββββββββ΄ββββββββββββ
β swisscovery SRU β β declarative source registry β
β e-rara OAI β β ββ sui generis β OAI-PMH β
β e-periodica OAI β β ββ ex/ante β OAI-PMH β
β e-manuscripta OAI β β ββ Repositorium β PostgREST/JSON β
βββββββββββ¬ββββββββββ β harvest β in-memory cache β filter β
β β Crossref DOIβlicence enrichment β³ β
MARC21 / Dublin Core β (best-effort, OA_LAW_CROSSREF_ENRICH)β
β catalogue records ββββββββββββββββββββββ¬βββββββββββββββββ
OaLegalPublication (metadata only,
licence never empty, no full text)
This server is deliberately conservative about what it emits β a portfolio that treats governance as a feature cannot be careless here.
licence is always set. Open Access means free to read, not free to reuse. Licences range from CC0 and CC BY to CC BY-NC-ND, and some articles are simply "free to read" with no open licence at all. When no machine-readable licence is available, the field is "unknown" β never guessed, never omitted. The native OAI metadata of all three sources carries only copyright statements, so "unknown" is the default; a best-effort Crossref lookup upgrades it to the real CC licence where a DOI resolves (e.g. sui generis β CC BY-SA 4.0). Disable with OA_LAW_CROSSREF_ENRICH=0.language field is always populated, but results are only filtered by language when you explicitly ask β otherwise half the Romandie would vanish from the results.eth-library-mcp (ETH-institution Discovery & Persons) β the catalogue finds the book, the OA-legal path finds the freely readable article with its licence and DOI."unknown" is common and only lifted where a DOI resolves in Crossref.Add to claude_desktop_config.json:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"swiss-academic-libraries": {
"command": "uvx",
"args": ["swiss-academic-libraries-mcp"]
}
}
}
Restart Claude Desktop β the server starts automatically on first use.
uvx swiss-academic-libraries-mcp --http --port 8000 [--host 127.0.0.1]
Security & Deployment Notes
127.0.0.1 (loopback only). The server has no
built-in authentication.--host 0.0.0.0 only when running behind a reverse proxy that
provides authentication and per-IP rate limits (e.g. nginx with
limit_req + OAuth2-Proxy). Non-loopback bindings emit a WARN log.MCP_LOG_LEVEL=DEBUG|INFO|WARNING.git clone https://github.com/malkreide/swiss-academic-libraries-mcp
cd swiss-academic-libraries-mcp
pip install -e .
Start by calling library_info for a full overview. Then:
"Which books about Swiss primary schools are held in Swiss libraries?"
β swisscovery_search(query='subject = "Volksschule"', max_records=20)
"Show digitised historical works from ETH Library"
β erara_list_records(set_spec="zut")
"Which Swiss periodicals were digitised in 2023?"
β eperiodica_list_records(from_date="2023-01-01", until_date="2023-12-31")
"What manuscript collections does e-manuscripta hold?"
β emanuscripta_list_collections()
β [More use cases by audience](EXAMPLES.md) β
π‘ "No API key β just install and query."
Full text: Volksschule ZΓΌrich
Title: title = "education reform"
Author: creator = "Pestalozzi"
Subject: subject = "pedagogy"
ISBN: isbn = "978-3-05-006234-0"
Combined: title = "school" AND creator = "Pestalozzi"
Pagination: start_record = 11
No API keys required. All environment variables are optional.
| Parameter | Default | Description |
|---|---|---|
--http | off | Enable Streamable HTTP transport |
--port | 8000 | Port for HTTP transport |
MCP_LOG_LEVEL | INFO | Log verbosity (DEBUG/INFO/WARNING) |
OA_LAW_CROSSREF_ENRICH | 1 | OA legal: DOIβlicence enrichment via Crossref; set 0 to disable |
OA_LAW_REPOSITORIUM_ANON_KEY | (public key) | OA legal: override for Repositorium.ch's public read-only Supabase anon key (allows rotation without a code change) |
swiss-academic-libraries-mcp/
βββ src/
β βββ swiss_academic_libraries_mcp/
β βββ __init__.py # Package init
β βββ server.py # FastMCP server, 13 tools, 2 prompts, 2 resources
β βββ api_client.py # HTTP client (+ retry), MARC21 + OAI-PMH/DC parsers
β βββ oa_legal.py # OA legal-literature registry, adapters, model
βββ tests/
β βββ test_server.py # catalogue unit tests + live smoke tests
β βββ test_20_scenarios.py # end-to-end catalogue scenarios
β βββ test_oa_legal.py # OA legal-literature tests (mocked + live)
βββ pyproject.toml
βββ CHANGELOG.md
βββ CONTRIBUTING.md # Contributing guide (English)
βββ CONTRIBUTING.de.md # Contributing guide (German)
βββ SECURITY.md # Security policy (English)
βββ SECURITY.de.md # Security policy (German)
βββ LICENSE
βββ README.md # This file (English)
βββ README.de.md # German version
# Unit tests (no network required)
PYTHONPATH=src pytest tests/ -m "not live"
# Live smoke tests (internet required)
PYTHONPATH=src pytest tests/ -m "live"
from_date / until_date and keep max_records reasonable. The server enforces a 30s timeout per request.Contributions are welcome! Please read CONTRIBUTING.md for guidelines on:
This project follows the conventions of the Swiss Public Data MCP Portfolio.
To report a vulnerability, please follow the responsible disclosure process in SECURITY.md. The server is read-only and requires no API key; see the Safety & Limits section above for the security model.
See CHANGELOG.md
If you self-host this server for a Swiss school authority, archive, or municipal use case:
MaxRetentionSec).MIT License β see LICENSE
Hayal Oezkan Β· github.com/malkreide
| Server | Description |
|---|---|
zurich-opendata-mcp | City of Zurich Open Data |
eth-library-mcp | ETH Library Discovery & Persons API |
swiss-statistics-mcp | Swiss Federal Statistics (BFS) |
fedlex-mcp | Swiss Federal Law via Fedlex SPARQL |
swiss-transport-mcp | OJP journey planning, SIRI-SX disruptions |
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": {
"swiss-academic-libraries-mcp": {
"command": "uvx",
"args": [
"swiss-academic-libraries-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.