Skip to main content
Glama
malkreide

swiss-academic-libraries-mcp

by malkreide

πŸ‡¨πŸ‡­ Part of the Swiss Public Data MCP Portfolio

πŸ“š swiss-academic-libraries-mcp

PyPI version License: MIT Python 3.11+ MCP No Auth Required CI

MCP server providing access to Swiss academic libraries β€” swisscovery, e-rara, e-periodica, e-manuscripta. No API key required.

πŸ‡©πŸ‡ͺ Deutsche Version

Demo

Demo: Claude using swisscovery_search and erara_list_records


Overview

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.

It also adds the international metadata layer: DOI resolution and international research literature via Crossref, and preprints via arXiv. This lets one conversation answer both "is this held in Switzerland?" (national layer) and "what is this, and where else does it live?" (international layer). Every resolved DOI returns title, ISSN, ISBN and authors as clean top-level fields, so you can pivot straight into swisscovery.

Anchor demo query (national ↔ international): "Find the original publication for this DOI, check whether a preprint version exists, and show whether a Swiss library holds it." β†’ resolve_doi β†’ search_preprints β†’ swisscovery_search(query="<ISSN from resolve_doi>").

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.


Related MCP server: swiss-cultural-heritage-mcp

Features

  • 16 tools across 4 catalogue sources + 3 open-access legal-literature sources + 2 international metadata sources β€” all read-only, no API key required

  • swisscovery search with full CQL syntax: full-text, title, author, subject, ISBN/ISSN

  • OAI-PMH harvesting with date range and collection filters plus pagination via resumption tokens

  • MARC21 parser extracting 20+ fields (title, creator, publication info, subjects, abstract, URLs)

  • Dublin Core parser for all three digitalisation portals

  • Dual transport: stdio for Claude Desktop Β· Streamable HTTP for cloud/self-hosted deployments

  • OA legal-literature search across sui generis, ex/ante and Repositorium.ch with a declarative source registry (new sources = one config entry), best-effort Crossref licence enrichment, and graceful per-source degradation

  • International metadata layer: DOI resolution and bibliographic search via Crossref (polite pool via CROSSREF_MAILTO), preprint search via arXiv with automatic phrase quoting and request throttling β€” clean title/ISSN/ISBN/author fields for pivoting into swisscovery

  • 3 built-in prompts: research-workflow, education-research and doi-to-swiss-shelf

  • Markdown and JSON output for all tools

  • 97 unit/mocked tests (no network) + 30 live smoke tests


Data Sources

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

International metadata layer (metadata only)

Source

Protocol

Content

Licence

Crossref

REST / JSON

DOI resolution + international research literature

Metadata CC0 1.0 (public domain)

arXiv

Atom / XML

Preprints (CS, physics, maths, stats, …)

Metadata CC0 1.0; preprints per author licence


Tools

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

resolve_doi

Crossref

Resolve a DOI to full metadata (title/ISSN/ISBN/authors β†’ pivot into swisscovery)

search_publications

Crossref

Search international research literature; every hit carries a DOI

search_preprints

arXiv

Search preprints with automatic phrase quoting; linked journal DOIs bridge to resolve_doi

Example Use Cases

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

"Resolve DOI 10.1038/nature14539 and give me its ISSN"

resolve_doi

"Find recent preprints on model context protocol"

search_preprints

"Find this paper's DOI, check for a preprint, and see if a Swiss library holds it"

resolve_doi β†’ search_preprints β†’ swisscovery_search


Architecture

Three independent paths share one HTTP client (retry with exponential backoff, shared connection pool, project User-Agent):

                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚            swiss-academic-libraries-mcp               β”‚
                    β”‚            (FastMCP Β· stdio / HTTP)                   β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                             β”‚               β”‚                β”‚
          β”Œβ”€β”€ CATALOGUE β”€β”€β”€β”€β”€β”˜   β”Œβ”€β”€ OA-LEGAL β”˜     β”Œβ”€β”€ INTERNATIONAL ──┐
          β”‚   (api_client.py)    β”‚   (oa_legal.py)  β”‚  (intl_metadata.py)β”‚
          β”‚                      β”‚                  β”‚                    β”‚
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
 β”‚ swisscovery SRU β”‚   β”‚ source registry     β”‚   β”‚ Crossref  REST/JSON  β”‚ β”‚
 β”‚ e-rara      OAI β”‚   β”‚  β”œ sui generis  OAI β”‚   β”‚  β”œ resolve_doi        β”‚ β”‚
 β”‚ e-periodica OAI β”‚   β”‚  β”œ ex/ante      OAI β”‚   β”‚  β”” search_publicationsβ”‚ β”‚
 β”‚ e-manuscripta   β”‚   β”‚  β”” Repositorium RESTβ”‚   β”‚ arXiv     Atom/XML   β”‚ β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚ harvestβ†’cacheβ†’filterβ”‚   β”‚  β”” search_preprints   β”‚ β”‚
          β”‚            β”‚ Crossref licence ⟳  β”‚   β”‚ (phrase-quote+throttle)β”‚ β”‚
 MARC21 / Dublin Core  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
 β†’ catalogue records   OaLegalPublication         CrossrefWork / Preprint β”‚
                       (metadata, no full text)   (metadata, no full text) β”‚
  • Catalogue path returns bibliographic records (books, digitised prints, periodicals, manuscripts).

  • OA-legal path harvests OA legal-scholarship metadata once, caches it in memory (small corpus), and filters locally β€” because OAI-PMH has no keyword search of its own. Adding a fourth OA source is a single registry entry, not new code.

  • International path resolves DOIs and searches Crossref/arXiv live (Architecture A β€” the endpoints are small, stable and public, so no dump/cache is needed). Each response carries its own source attribution (Crossref CC0 Β· arXiv acknowledgement), never a pooled one, and returns clean top-level title/ISSN/ISBN/author fields so the model can pivot into the catalogue path. A code-layer egress allow-list restricts outbound calls to api.crossref.org and export.arxiv.org.


Licensing & Scope

This server is deliberately conservative about what it emits β€” a portfolio that treats governance as a feature cannot be careless here.

  • Metadata, not full text. For OA legal literature the server returns title, authorship, year, licence, DOI/link and β€” where the source provides it as a metadatum β€” the abstract. It never ingests, stores, or outputs the article body. The full-text PDF path exposed by Repositorium.ch is intentionally not carried into any field.

  • 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.

  • Citation integrity. Every result carries a resolvable reference β€” a DOI where present, otherwise a persistent URL. No result is emitted without one. A fabricated citation in legal literature is worse than no citation, so the server prefers one hit fewer over one hit invented.

  • Language is carried, never silently filtered. ex/ante and Repositorium.ch are multilingual (DE/FR/IT/EN). The 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.

  • Attribution per source, not pooled. Crossref, arXiv and the OA-legal sources have different licence and citation conditions, so each response carries the attribution of the source it actually came from. Crossref bibliographic metadata is distributed under CC0 1.0 (facts are free); arXiv metadata is CC0 1.0 with the requested acknowledgement "Thank you to arXiv for use of its open access interoperability"; preprint and article full texts remain under their own per-work licences (never emitted here).

  • Scope boundary. OA legal literature belongs here because it is the same capability already in this server β€” authentication-free bibliographic-metadata harvesting of Swiss scholarly sources over standard protocols β€” with the same output contract (metadata, not full text). It is institution-independent and subject-focused, which is why it does not overlap 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.


Known Limitations

  • Small, focused corpus. The three OA sources together hold on the order of a few hundred articles. Results are ranked by relevance β€” articles matching all query terms first, then partial matches β€” so a topical query like "Datenschutz im Bildungsbereich" returns the privacy-law corpus (ranked) rather than nothing; if no article covers the full topic intersection, the closest real matches are returned, never a fabricated one. A query that matches no term at all still returns an honest empty result.

  • No full-text search. Matching runs over metadata (title, abstract, authorship) only β€” never the article body.

  • Uneven DOI coverage. sui generis β‰ˆ 100 %, Repositorium.ch partial, ex/ante has no DOIs (persistent URLs only). Aggregators (Crossref/OpenAlex) therefore cover sui generis well but miss ex/ante entirely and do not index Repositorium.ch as a source β€” which is why the server harvests each source natively rather than relying on an aggregator.

  • Licence gaps. The native metadata rarely carries a machine-readable licence; "unknown" is common and only lifted where a DOI resolves in Crossref.

  • Not a substitute for a paid legal database. This surfaces freely accessible Swiss legal scholarship only β€” it is not Swisslex/Weblaw and does not cover commercial or paywalled legal publishing.

Known findings β€” international layer (live probe 2026-07-20)

Finding

Detail

Consequence

Crossref is weak for German-language CH education literature

query.bibliographic=Lehrplan 21 returns a book chapter from 1881 as the top hit; other CH-education queries surface millions of irrelevant results with off-topic/old top hits. Crossref is strong for DOI resolution and international research, not for CH education publishing.

search_publications documents this and points to swisscovery_search / oa_law_search for CH education topics.

arXiv treats spaces as OR, not phrase

all:model context protocol β†’ ~1,296,686 hits (OR); all:"model context protocol" β†’ 462 hits (phrase).

search_preprints quotes the query automatically; users need no arXiv syntax. Field syntax (ti:, au:) and explicit quotes are respected.

arXiv returns Atom XML, throttles, and 301-redirects http→https

Response is Atom, not JSON; arXiv asks for ~3 s between requests; the plain http:// endpoint 301-redirects.

Parser reuses defusedxml (already a dependency β€” no new one); a module-level throttle (ARXIV_MIN_INTERVAL_SECONDS, default 3 s) enforces spacing; the client calls the https:// endpoint directly.

SHARE (share.osf.io) β€” evaluated, not built

The _search endpoint responds (β‰ˆ58.9 M records, Elasticsearch-style), but SHARE wound down harvesting in 2020, archived its database in CurateND, and carries no API-maintenance commitment ("shutting down / new phase", now the "trove" search-api). For a portfolio positioned on reliability, an index without a support guarantee is a poor dependency.

Not implemented.

Open Library β€” evaluated, gate failed

A 10-ISBN probe of real Swiss/German-language Lehrmittel (Lehrmittelverlag ZΓΌrich, Klett und Balmer; ISBNs harvested from swisscovery) returned 0/10 = 0 % (threshold 60 %). Controls confirm Open Library works (English + mainstream German trade books resolve), so it is a genuine coverage gap, not a connectivity artefact.

Not implemented. swisscovery already covers CH Lehrmittel; for the book trade, GVI or a publisher directory is the fitting route.


Prerequisites

  • Python 3.11 or higher

  • uv / uvx (recommended) or pip

  • Internet access (all APIs are publicly available)


Installation

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.

Cloud / Self-hosted (Streamable HTTP)

uvx swiss-academic-libraries-mcp --http --port 8000 [--host 127.0.0.1]

Security & Deployment Notes

  • Default binding is 127.0.0.1 (loopback only). The server has no built-in authentication.

  • Use --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.

  • Logs go to stderr; set verbosity with MCP_LOG_LEVEL=DEBUG|INFO|WARNING.

Development

git clone https://github.com/malkreide/swiss-academic-libraries-mcp
cd swiss-academic-libraries-mcp
pip install -e .

Quickstart

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."

CQL Search Syntax (swisscovery)

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

Configuration

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)

CROSSREF_MAILTO

(unset)

International: contact e-mail for Crossref's "polite pool" (better throughput). If unset, requests use the anonymous pool β€” functional, just slower.

ARXIV_MIN_INTERVAL_SECONDS

3.0

International: minimum spacing between arXiv requests (arXiv asks for restraint).


Project Structure

swiss-academic-libraries-mcp/
β”œβ”€β”€ src/
β”‚   └── swiss_academic_libraries_mcp/
β”‚       β”œβ”€β”€ __init__.py       # Package init
β”‚       β”œβ”€β”€ server.py         # FastMCP server, 16 tools, 3 prompts, 3 resources
β”‚       β”œβ”€β”€ api_client.py     # HTTP client (+ retry), MARC21 + OAI-PMH/DC parsers
β”‚       β”œβ”€β”€ oa_legal.py       # OA legal-literature registry, adapters, model
β”‚       └── intl_metadata.py  # International layer: Crossref + arXiv adapters, models
β”œβ”€β”€ 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)
β”‚   └── test_intl_metadata.py # International-layer 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

MCP Protocol Version

This server speaks two protocol eras over the same endpoint. The client's first request on a connection decides which one applies; a later claim from the other era is refused.

Era

Revision

Who reaches it

initialize handshake

2024-11-05 … 2025-11-25

What today's clients speak. The server answers with the revision asked for, or with the 2025-11-25 ceiling when the request asks for something newer.

Per-request envelope

2026-07-28

A request carrying the 2026-07-28 _meta envelope opens a modern connection.

Both revisions are pinned in tests/test_protocol_version.py and asserted against the installed SDK, so a Dependabot bump of mcp cannot move either one silently. This server builds no ASGI app to send an initialize through, so the gate asserts the SDK constants rather than a measured response β€” the weaker form, named rather than left unsaid.

Note that the SDK's LATEST_PROTOCOL_VERSION is an alias for the modern era, not for the handshake era β€” pinning against it alone would leave the era that current clients actually negotiate free to drift.

Update policy. When the gate fails, do not edit the constant blindly: read the spec changelog between the two revisions, verify the server still behaves, then move the constant, this section, README.de.md and CHANGELOG.md together.


Testing

# Unit tests (no network required)
PYTHONPATH=src pytest tests/ -m "not live"

# Live smoke tests (internet required)
PYTHONPATH=src pytest tests/ -m "live"

Where the test data comes from

The fixtures under tests/fixtures/ are recorded from the live sources, with the same request parameters the production code sends, and dated. Source, retrieval date, selection rule and SHA-256 for every file: tests/fixtures/PROVENANCE.md.

python scripts/record_fixtures.py   # re-record

This matters because a hand-written mock encodes its author's assumption and can therefore never refute it β€” production code and fixture come from the same reading of the docs. The invented ListSets response carried no resumptionToken, so no test could notice that nobody followed one: e-rara serves 105 collections in pages of 10, and the tool reported 10.

Where a fixture is trimmed, the count fields (numberOfRecords, completeListSize, total-results) and the resumptionToken keep their real values β€” they say how much is not in the file.

tests/fixtures/oai_ex_ante_listrecords.xml is deliberately not well-formed XML: ex/ante emits a raw control character inside a dc:description, and recording it verbatim is what proves strip_invalid_xml_chars is load-bearing.


Safety & Limits

  • Read-only: All tools perform HTTP GET requests against public SRU and OAI-PMH endpoints β€” no data is written, modified, or deleted.

  • No personal data: The APIs return bibliographic metadata (titles, authors, publication info, subject headings) and public digitisation records. No personally identifiable information (PII) about library users is processed or stored.

  • Rate limits: swisscovery SRU and the OAI-PMH endpoints are public and have no documented hard limits, but OAI-PMH harvesting is paginated via resumption tokens β€” use from_date / until_date and keep max_records reasonable. The server enforces a 30s timeout per request.

  • Data freshness: Results reflect the upstream catalogues at query time. No caching is performed by this server; indexing latency is controlled by SLSP and the digitisation platforms.

  • Terms of service: Data is subject to the ToS and licences of each source β€” swisscovery / SLSP, e-rara, e-periodica, e-manuscripta. Most digitised material is in the public domain or under Creative Commons licences; always check the rights statement on the individual record before redistribution.

  • No guarantees: This is a community project, not affiliated with SLSP, ETH Library, or any of the participating institutions. Availability depends on the upstream APIs.


Contributing

Contributions are welcome! Please read CONTRIBUTING.md for guidelines on:

  • Reporting bugs and requesting features

  • Setting up the development environment

  • Code style and test requirements

  • Submitting pull requests

This project follows the conventions of the Swiss Public Data MCP Portfolio.


Security

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.


Changelog

See CHANGELOG.md


Deployment for Swiss Public Administration

If you self-host this server for a Swiss school authority, archive, or municipal use case:

  • Data residency: prefer on-premise or a CH-based cloud provider. The query patterns themselves (which library searches a civil servant runs) may reveal ongoing research and are best kept on Swiss infrastructure.

  • Upstream calls go exclusively to CH-hosted services: SLSP / swisscovery, ETH-Bibliothek (e-rara, e-periodica, e-manuscripta). No data leaves Switzerland.

  • Logging: logs are written to stderr; configure your IT retention policy accordingly (e.g. systemd-journal MaxRetentionSec).

  • HTTP transport must run behind a reverse proxy with authentication and per-IP rate limits (see Security & Deployment Notes above).


License

MIT License β€” see LICENSE


Author

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

Installation

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"
      ]
    }
  }
}

Available Tools

16 tools
emanuscripta_get_recordA
Read-onlyIdempotent

Ruft ein einzelnes Handschriften-Objekt aus e-manuscripta ab.

Die OAI-Identifier stammen aus den Ergebnissen von emanuscripta_list_records. Format: 'oai:www.e-manuscripta.ch:{id}'

Args: params (OaiGetRecordInput): Input mit: - oai_identifier (str): OAI-Identifier des Objekts - response_format (str): 'markdown' oder 'json'

Returns: str: VollstΓ€ndige Dublin-Core-Metadaten: Titel, Autor(en), Datum, Sammlung/Archiv, Typ, Themen, Beschreibung, Relationen und URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds useful behavioral context beyond annotations: it specifies the return value as 'VollstΓ€ndige Dublin-Core-Metadaten' and lists the included fields (title, author, date, etc.), plus it explains the provenance of identifiers. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear opening sentence, a note on identifier origin, and separate Args/Returns sections. It is reasonably concise, though the Args section repeats schema property descriptions. No unnecessary fluff, and the most important information (what it does, where identifiers come from) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (single object fetch, two parameters, output schema exists), the description is complete enough: it covers purpose, input source, identifier format, and return content. It does not mention error handling or edge cases, but these are not critical for this type of read-only tool. Annotations cover safety profile, and the output schema likely describes the return structure further.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema descriptions for both parameters are present, but the tool description adds meaning by explaining that the oai_identifier originates from list_records and providing a concrete format example. It also clarifies the response_format options ('markdown' oder 'json') and the default. This compensates for the reported 0% schema coverage and adds value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Ruft ab' = retrieve), a specific resource ('einzelnes Handschriften-Objekt' = single manuscript object), and a specific source ('e-manuscripta'). It clearly distinguishes from sibling list tools by emphasizing 'einzelnes' (single) and from sibling get_record tools by naming the platform.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for usage by explaining that OAI identifiers come from emanuscripta_list_records and giving the identifier format. It does not explicitly name alternative tools or say when not to use it, but the context is sufficient for a simple fetch operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

emanuscripta_list_collectionsA
Read-onlyIdempotent

Listet alle in e-manuscripta vertretenen Archive und Sammlungen auf.

Die Set-Bezeichner kΓΆnnen als set_spec in emanuscripta_list_records verwendet werden.

Args: params (ListCollectionsInput): Input mit: - filter_name (str): Filter nach Sammlungsname (optional)

Returns: str: Tabellarische Übersicht aller Sammlungen mit Set-Bezeichner und Name.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. Description adds that it returns a tabular overview, which is consistent. No additional behavioral traits beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise, includes a docstring-style args/returns section. No wasted sentences, but slightly verbose for a simple tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given rich annotations and existing output schema, description is adequate. It provides key purpose and usage context. Could mention return format more explicitly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter (params) with nested filter_name. Schema description coverage is 0% because description does not explain parameters beyond what is in the schema. The description does not add value for parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states it lists archives and collections in e-manuscripta, with specific mention of set-spec usage. It clearly distinguishes from sibling tools like emanuscripta_list_records.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description explicitly mentions that set specifiers can be used in emanuscripta_list_records, providing context for when to use the tool. However, it does not explicitly state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

emanuscripta_list_recordsA
Read-onlyIdempotent

Listet digitalisierte Handschriften und Archivalien aus e-manuscripta (OAI-PMH).

e-manuscripta bietet Zugriff auf digitalisierte Handschriften, NachlΓ€sse, Briefe und andere Archivmaterialien aus Schweizer Bibliotheken und Archiven. Darunter BestΓ€nde der ETH-Bibliothek, ZB ZΓΌrich, UB Basel u.a.

VerfΓΌgbare Sammlungen mit emanuscripta_list_collections() abrufen.

Args: params (OaiSearchInput): Filterparameter: - from_date (str): Startdatum YYYY-MM-DD (optional) - until_date (str): Enddatum YYYY-MM-DD (optional) - set_spec (str): Sammlung/Archiv (optional) - resumption_token (str): Pagination-Token (optional) - response_format (str): 'markdown' oder 'json'

Returns: str: Liste der Objekte mit Titel, Autor(en), Datum, Sammlung, Typ, URL. EnthΓ€lt resumption_token und Gesamtanzahl fΓΌr Pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey safety (readOnlyHint, idempotentHint, destructiveHint). The description adds behavior beyond annotations: it specifies the return format (title, author, date, collection, type, URL), pagination via resumption_token, and total count. It also notes the response_format option (markdown/json).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with Args and Returns sections. The introductory paragraph about e-manuscripta includes useful context but could be trimmed without losing essential meaning. Overall, it is reasonably concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, repository background, parameter options, and return structure including pagination. It does not mention potential errors or rate limits, but with annotations and an output schema this is a minor gap. It is complete enough for effective tool selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description lists parameters with types and optionality in an Args section, but the input schema already provides detailed descriptions for each property (dates format, set examples, resumption token semantics). The description adds minimal new meaning beyond the schema; it mostly repeats it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource statement: 'Listet digitalisierte Handschriften und Archivalien aus e-manuscripta (OAI-PMH).' It clearly distinguishes this tool from siblings like erara_list_records by naming the e-manuscripta repository and the type of material.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the context of e-manuscripta (Swiss libraries/archives) and instructs to use emanuscripta_list_collections() for available collections. It provides a clear use case, though it does not explicitly state when not to use it or name alternative list tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eperiodica_get_recordA
Read-onlyIdempotent

Ruft einen einzelnen Zeitschriftenartikel aus e-periodica ab.

Die OAI-Identifier stammen aus den Ergebnissen von eperiodica_list_records. Format: 'oai:agora.ch:{zeitschrift}:{jahr}:{heft}::{seite}'

Args: params (OaiGetRecordInput): Input mit: - oai_identifier (str): OAI-Identifier des Artikels - response_format (str): 'markdown' oder 'json'

Returns: str: VollstΓ€ndige Dublin-Core-Metadaten: Titel, Autor(en), Datum, Quelle, Themen, Beschreibung, Sprache und Digitalisat-URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds the exact return content (Dublin-Core metadata fields) and the identifier format, which is useful behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured with clear 'Args' and 'Returns' sections. It front-loads the main purpose and each sentence contributes relevant information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only get_record tool, the description covers the source of identifiers, the input parameters, and the return format. The annotations provide safety semantics, and the output schema (if present) likely covers return structure. This is complete given the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the schema already describes both parameters with examples, the tool description explicitly lists them and restates the response_format options and identifier pattern. This reinforces the schema info and adds the formatted pattern string, which slightly exceeds the schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches a single journal article from e-periodica ('Ruft einen einzelnen Zeitschriftenartikel aus e-periodica ab'). This distinguishes it from sibling tools like eperiodica_list_records (listing) and other get_record tools for different platforms (erara, emanuscripta).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains that OAI identifiers come from eperiodica_list_records results, providing a clear prerequisite and workflow. It does not explicitly name alternatives or exclusions, but the connection to the sibling tool offers strong contextual guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eperiodica_list_recordsA
Read-onlyIdempotent

Listet digitalisierte Zeitschriftenartikel und Periodika aus e-periodica (OAI-PMH).

e-periodica bietet Zugriff auf ΓΌber 1 Million digitalisierte Artikel aus Schweizer Zeitschriften (1750–heute), darunter Fachzeitschriften, Kulturzeitschriften und historische Periodika.

OAI-Identifier-Format: 'oai:agora.ch:{zeitschrift}:{jahr}:{heft}::{seite}'

Args: params (OaiSearchInput): Filterparameter: - from_date (str): Startdatum YYYY-MM-DD (optional) - until_date (str): Enddatum YYYY-MM-DD (optional) - set_spec (str): Zeitschriften-Set (optional) - resumption_token (str): Pagination-Token (optional) - response_format (str): 'markdown' oder 'json'

Returns: str: Liste der Artikel mit Titel, Autor(en), Datum, Quelle/Zeitschrift, URL. EnthΓ€lt resumption_token und Gesamtanzahl fΓΌr Pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds behavioral context by explaining that the tool uses OAI-PMH, returns a list with metadata, and includes resumption_token and total count for pagination. It does not contradict annotations and provides useful operational details beyond the safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear 'Args:' and 'Returns:' sections and a front-loaded purpose. The background paragraph about e-periodica and the OAI identifier format is informative but not strictly necessary for invocation, adding slight verbosity. Overall, it is efficient and organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the tool's purpose, parameters, and return value, and the output schema and annotations provide additional structure and safety information. It lacks explicit guidance on distinguishing from sibling tools, but that is partially addressed by the repository-specific naming and context. The description is complete enough for invoking the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description lists the parameters (from_date, until_date, set_spec, resumption_token, response_format) with brief one-line meanings, but the input schema already contains detailed descriptions for each, including examples, patterns, and notes on behavior (e.g., resumption_token overriding date filters). Thus the description adds little semantic value beyond the schema, meriting the baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Listet digitalisierte Zeitschriftenartikel und Periodika aus e-periodica (OAI-PMH)', clearly stating the verb (list), resource (digitized journal articles and periodicals), and repository (e-periodica). This distinguishes it from sibling tools like erara_list_records and emanuscripta_list_records, which target different repositories.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context that this tool is for e-periodica and mentions the OAI-PMH protocol, but it does not explicitly state when to use this versus alternatives such as erara_list_records or swisscovery_search. The sibling names themselves signal different repositories, but no direct comparisons or exclusionary guidance are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

erara_get_recordA
Read-onlyIdempotent

Ruft ein einzelnes digitalisiertes Druckwerk aus e-rara ab.

Die OAI-Identifier stammen aus den Ergebnissen von erara_list_records. Format: 'oai:www.e-rara.ch:{id}' (z.B. 'oai:www.e-rara.ch:29725195')

Args: params (OaiGetRecordInput): Input mit: - oai_identifier (str): OAI-Identifier des Werks - response_format (str): 'markdown' oder 'json'

Returns: str: VollstΓ€ndige Dublin-Core-Metadaten: Titel, Autor(en), Datum, Verlag, Typ, Themen, Beschreibung, Relationen und Digitalisat-URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds valuable context about the identifier format and the return content (Dublin-Core metadata), which goes beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections: purpose, identifier source/format, arguments, and return value. Every sentence provides useful information, and the formatting makes it easy to scan. It is appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-record retrieval tool, the description covers all necessary aspects: what it does, where identifiers come from, what parameters to pass, and what the return value contains. The presence of an output schema further reduces the need for return-structure details. It is complete within its scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description includes an 'Args' section that explains both parameters: oai_identifier and response_format, including the allowed values ('markdown' or 'json') and an example identifier format. This adds meaning beyond the schema, which though also descriptive, is reinforced by the tool description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Ruft ein einzelnes digitalisiertes Druckwerk aus e-rara ab' (retrieves a single digitized work from e-rara), specifying the exact action, resource, and scope. This distinguishes it from sibling list tools and other repository get_record tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly mentions that OAI identifiers come from erara_list_records results, giving a clear workflow context. However, it does not explicitly state when not to use this tool or mention alternatives like eperiodica_get_record, so it falls short of a full usage guideline.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

erara_list_collectionsA
Read-onlyIdempotent

Listet alle in e-rara vertretenen Bibliotheken und Sammlungen auf.

Die Set-Bezeichner (spec) kΓΆnnen als set_spec in erara_list_records verwendet werden, um die Suche auf eine bestimmte Bibliothek einzuschrΓ€nken.

Args: params (ListCollectionsInput): Input mit: - filter_name (str): Filter nach Bibliotheksname (optional)

Returns: str: Tabellarische Übersicht aller Sammlungen mit Set-Bezeichner und Name.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey read-only, idempotent, and non-destructive behavior. The description adds the return format (tabular overview with set identifier and name) and clarifies that the optional filter narrows by library name, providing useful behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear purpose statement, usage note, and an Args/Returns section. It is slightly verbose for a tool with one optional parameter, but every section contributes useful information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (one optional parameter, no nesting), the description covers the essential aspects: what it lists, how the output can be used with a sibling tool, and what the return looks like. It does not discuss pagination or limits, but these are not significant concerns for this type of listing operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description restates the filter_name parameter and its purpose, but the input schema already provides an equivalent description with additional constraints (maxLength, default null). No new semantic meaning is added beyond what the schema supplies, so a baseline score is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all libraries and collections represented in e-rara. It also differentiates from the sibling erara_list_records by explaining that the returned set specifiers can be used there, making the purpose and scope unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the user that the set-spec values can be used as set_spec in erara_list_records to filter records by library. This provides clear usage context and a direct connection to a related tool, though it does not explicitly discuss when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

erara_list_recordsA
Read-onlyIdempotent

Listet digitalisierte historische Druckwerke aus e-rara (OAI-PMH).

e-rara enthΓ€lt ΓΌber 250'000 digitalisierte Werke aus Schweizer Bibliotheken, darunter historische BΓΌcher, Karten, FlugblΓ€tter und Einblattdrucke.

VerfΓΌgbare Sammlungen (set_spec) mit erara_list_collections abrufen. Bekannte Sets: 'zut' (ETH-Bibliothek), 'bau_1' (UB Basel), 'bge_g' (BGE Genf), 'stibi' (Stiftsbibliothek St. Gallen).

Args: params (OaiSearchInput): Filterparameter: - from_date (str): Startdatum YYYY-MM-DD (optional) - until_date (str): Enddatum YYYY-MM-DD (optional) - set_spec (str): Sammlung/Bibliothek (optional) - resumption_token (str): Pagination-Token (optional) - response_format (str): 'markdown' oder 'json'

Returns: str: Liste der EintrΓ€ge mit Titel, Autor, Datum, Verlag, Typ, URL. EnthΓ€lt resumption_token fΓΌr weitere Seiten und Gesamtanzahl.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint, idempotentHint, and openWorldHint, and the description adds useful context: it lists return fields (title, author, date, publisher, type, URL), pagination via resumption_token, and total count. It also clarifies the response_format option. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections: purpose, context, collection guidance, Args, and Returns. It is not overly verbose, though the repetition of collection examples in both the description and schema is somewhat redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and annotations, the description sufficiently covers the tool's role: listing records with filter options, pagination, and output formats. It lacks only explicit error/edge-case behavior or rate limits, but for a read-only list tool with rich schema, this is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description enumerates all parameters with brief semantics and provides additional collection examples ('bge_g', 'stibi') beyond the schema's examples. The schema has detailed descriptions for each nested property, but the tool text effectively summarizes and supplements them, acting as a quick reference.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Listet digitalisierte historische Druckwerke aus e-rara (OAI-PMH)', a specific verb and resource that clearly distinguishes this from siblings like erara_get_record (single record retrieval) and erara_list_collections (listing collections). It also provides context about the collection contents and known sets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states that available set_specs can be retrieved with erara_list_collections, pointing to an alternative tool for that part. It gives examples of collections and mentions OAI-PMH, which implies this is for listing records. However, it does not explicitly state when to use this over erara_get_record or exclude cases where other tools are preferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

library_infoA
Read-onlyIdempotent

Übersicht aller verfügbaren Datenquellen und Tools dieses MCP-Servers.

Empfohlen als Einstiegspunkt: zeigt alle vier Bibliotheksquellen, die verfΓΌgbaren Tools mit kurzen Beschreibungen und Beispielanfragen. Kein Netzwerkzugriff erforderlich.

Returns: str: Markdown-Dokumentation mit Datenquellen, Tool-Übersicht und Beispielen.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds value beyond annotations by stating it requires no network access and returns Markdown documentation. Annotations already indicate readOnly, destructive, and idempotent hints, and the description provides additional behavioral context without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loading the purpose and usage recommendation. Every sentence adds value, no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters, an output schema exists, and annotations are rich, the description is complete. It covers purpose, usage, output format, and behavioral aspects, making it fully informative for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With no parameters, the baseline is 4. The description mentions no input is needed, which aligns with the schema. No further parameter details are necessary.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it provides an overview of all available data sources and tools on this MCP server, acting as an entry point. It specifically mentions showing all four library sources, available tools with descriptions and example queries, distinguishing it from sibling tools that handle individual record retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly recommends it as an entry point, implying it should be used first to get an overview before using specific tools. While it doesn't state when not to use, the context and sibling tools make the usage clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

oa_law_getA
Read-onlyIdempotent

Ruft einen einzelnen OA-Rechtsbeitrag ΓΌber DOI oder auflΓΆsbare URL ab.

Identifier stammen aus den oa_law_search-Ergebnissen (DOI oder Link). Geliefert werden Metadaten inkl. Lizenz β€” kein Volltext.

Args: params (OaLawGetInput): identifier (DOI oder URL), response_format.

Returns: str: Detailmetadaten des Beitrags oder ein Hinweis, wenn nichts gefunden wurde.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral details beyond the readOnly and idempotent annotations: it returns metadata including license, explicitly excludes full text, and returns a hint if nothing is found. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured with a clear opening sentence, a note on source, an Args section, and a Returns section. Every sentence provides useful information without unnecessary repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has rich annotations, a detailed input schema, an output schema, and the description adds return behavior and the no-full-text caveat. For a single-record retrieval tool, this is complete and unambiguous.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description names both parameters (identifier and response_format) and adds that the identifier comes from oa_law_search results, which is helpful. However, it does not go into details like defaults or allowed values; the input schema itself provides those, but given the reported 0% schema description coverage, the description could compensate more.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches a single OA law article via DOI or resolvable URL, using a specific verb and resource. It also differentiates from the sibling oa_law_search by emphasizing it retrieves one result with metadata, not full text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says identifiers come from oa_law_search results, implying it should be used after searching. It explicitly states that it returns metadata and no full text, which provides a clear exclusion. It does not explicitly name alternative tools, but the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resolve_doiA
Read-onlyIdempotent

LΓΆst eine DOI ΓΌber Crossref zu vollstΓ€ndigen Publikationsmetadaten auf.

Beantwortet Β«was ist das ΓΌberhaupt?Β» fΓΌr eine DOI und liefert die BrΓΌcke zur nationalen Ebene: Titel, ISSN, ISBN und Autor:innen kommen als saubere Top-Level-Felder zurΓΌck. Damit lΓ€sst sich direkt in swisscovery prΓΌfen, ob eine Schweizer Bibliothek den Titel fΓΌhrt β€” z.B. swisscovery_search(query="<ISSN>") oder mit Titel/Autor:in kombiniert.

Stark bei internationaler Forschungsliteratur; fΓΌr deutschsprachige CH-Bildungspublikationen ist Crossref schwach (siehe Known findings).

Args: params (ResolveDoiInput): doi (blank oder als URL), response_format.

Returns: str: Metadaten inkl. Lizenz und auflΓΆsbarem Link, oder ein Hinweis, wenn die DOI bei Crossref nicht auflΓΆsbar ist. EnthΓ€lt einen konkreten Vorschlag zur Weitersuche in swisscovery.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it as read-only and idempotent. The description adds further context: it returns metadata in markdown or JSON, includes a link, and provides a fallback hint when a DOI is not resolvable. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and includes necessary usage details. It is slightly verbose but every sentence adds value, and the structure (purpose, usage, limitations) is clear. Could be reduced by a sentence or two without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one required parameter, clear output), the description is complete. It explains the return format (metadata with license and link), usage boundaries, and provides a concrete chaining example. No missing information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already includes descriptions for both parameters (doi and response_format). While schema description coverage is reported as 0%, the actual schema has good descriptions. The description does not add significant meaning beyond the schema, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it resolves a DOI via Crossref to full publication metadata (title, ISSN, ISBN, authors). It specifies the verb 'auflΓΆsen' and resource 'DOI', and distinguishes from siblings by explaining how its output feeds into swisscovery_search, a sibling tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells when to use ('Stark bei internationaler Forschungsliteratur') and when not ('fΓΌr deutschsprachige CH-Bildungspublikationen ist Crossref schwach'). It also provides a concrete alternative workflow using swisscovery_search, which is a sibling tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_preprintsA
Read-onlyIdempotent

Durchsucht Preprints auf arXiv (Naturwissenschaften, Informatik, Mathematik u.a.).

Beantwortet Β«gibt es davon eine frΓΌhe/offene Fassung?Β». Die Anfrage wird automatisch als exakte Phrase gesucht β€” du musst keine arXiv-Syntax kennen (arXiv wΓΌrde Leerzeichen sonst als OR interpretieren). Wo arXiv eine verknΓΌpfte Journal-DOI fΓΌhrt, ist sie im Feld doi enthalten und lΓ€sst sich mit resolve_doi zur peer-reviewten Fassung auflΓΆsen β€” die sich wiederum in swisscovery gegen den Schweizer Bestand prΓΌfen lΓ€sst.

Args: params (SearchPreprintsInput): query, category (optional, z.B. 'cs.CL'), limit, response_format.

Returns: str: Trefferliste mit arXiv-ID, Kategorie, Datum, ggf. Journal-DOI und Abstract, oder ein Hinweis bei null Treffern.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare safe read-only, idempotent behavior. The description adds that queries are auto-treated as exact phrases, details return format, and explains DOI resolution, providing useful context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is informative and well-structured, starting with purpose, then usage context, then parameter details. It is somewhat lengthy but each sentence adds value, making it efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (nested input, output schema, related tools), the description covers purpose, usage, behavior, and parameter nuances. It references sibling tools in workflow, making it nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite schema descriptions present for all parameters, the tool description adds significant value for the query parameter (auto-phrasing, arXiv syntax handling). Schema coverage is indicated as 0% but descriptions exist; the description compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches arXiv preprints in sciences and answers if an early/open version exists. It does not explicitly differentiate from sibling tools like search_publications, but mentions related tools and workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for finding preprints and explains query handling (auto-phrasing). It mentions using resolve_doi and swisscovery for follow-up, but lacks explicit when-to-use vs. alternatives or exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_publicationsA
Read-onlyIdempotent

Durchsucht die internationale Forschungsliteratur ΓΌber Crossref (bibliografisch).

Liefert pro Treffer Titel, Autor:innen, Jahr, Typ, ISSN/ISBN, Lizenz und DOI. Jeder Treffer trΓ€gt eine DOI, die sich mit resolve_doi vertiefen und mit ISSN/ISBN/Titel in swisscovery gegen den Schweizer Bestand prΓΌfen lΓ€sst.

Wichtige EinschrΓ€nkung: Crossref ist stark bei internationaler Forschungsliteratur, aber schwach bei deutschsprachiger CH-Bildungs- literatur (z.B. Lehrplan-21-Umfeld). FΓΌr CH-Bildungspublikationen ist swisscovery_search oder oa_law_search die bessere Wahl.

Args: params (SearchPublicationsInput): query, year_from, year_to, limit, response_format.

Returns: str: Trefferliste mit DOI je Eintrag, oder ein Hinweis bei null Treffern.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations include readOnlyHint, idempotentHint, destructiveHint, indicating safe read-only behavior. The description adds context about Crossref's strengths/weaknesses and result details, without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections for purpose, returns, limitations, and parameters. It is informative without excessive verbosity, though could be slightly more compact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, the description covers all necessary aspects: purpose, returns, limitations, parameter hints, and relationship to sibling tools. Annotations provide safety context, and output schema is noted. Complete for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is 0% per context, the schema actually includes descriptions for all parameters. The description adds value for the query parameter by explaining Crossref's coverage and suggesting alternatives, going beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Durchsucht die internationale Forschungsliteratur ΓΌber Crossref (bibliografisch)' and specifies the returned fields. It distinguishes itself from sibling tools by mentioning its weakness for CH education literature and suggesting alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises when not to use (for CH education literature) and recommends `swisscovery_search` or `oa_law_search`. It also explains how to use the results with `resolve_doi` and swisscovery, providing clear usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

swisscovery_get_recordA
Read-onlyIdempotent

Ruft einen einzelnen Titel aus swisscovery via MMS-ID ab.

Die MMS-ID wird aus den Ergebnissen von swisscovery_search (Feld 'mms_id') entnommen.

Args: params (SwisscoveryGetRecordInput): Input mit: - mms_id (str): MMS-ID des Titels (z.B. '991134165199705501')

Returns: str: Detaillierter MARC-Eintrag als Markdown inkl. aller verfΓΌgbaren Felder: Titel, Autor, Erscheinungsinfo, Umfang, Sprache, ISBN/ISSN, Schlagworte, Abstract, URLs und swisscovery-Permalink.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive. The description adds value by detailing the return format (Markdown MARC entry) and the fields included (title, author, etc.), giving the agent a clear expectation of the output without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is succinct and well-structured: a one-sentence purpose, a source note, a clear Args section, and a Returns section with a field list. Every sentence adds value and is front-loaded with the most important information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get-by-ID tool, the description covers all essentials: what it does, where the ID comes from, the return format, and the content of the response. With output schema and annotations already present, no additional context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite the context signal showing 0% schema description coverage, the description fully compensates by explaining mms_id with a concrete example ('991134165199705501') and stating its source (swisscovery_search results). The single parameter is richly described, making it easy for the agent to supply correct input.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: 'Ruft einen einzelnen Titel aus swisscovery via MMS-ID ab' (fetches a single title from swisscovery via MMS-ID). This distinguishes it from sibling tools like erara_get_record or eperiodica_get_record by specifying the swisscovery source and the MMS-ID mechanism.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states that the MMS-ID is taken from swisscovery_search results, giving clear context on when to use this tool (after a search). It doesn't explicitly mention alternatives or exclusions, but the dependency on search results is a strong usage signal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 9 tool updatesv1.2.0
    • Addedemanuscripta_get_record
    • Addedemanuscripta_list_records
    • Addedeperiodica_get_record
    • Addedeperiodica_list_records
    • Addederara_get_record
    • Addederara_list_collections
    • Addederara_list_records
    • Addedoa_law_get
    • Addedswisscovery_get_record
  2. 12 tool updatesv1.1.0
    • Removedemanuscripta_get_record
    • Removedemanuscripta_list_records
    • Removedeperiodica_get_record
    • Removedeperiodica_list_records
    • Removederara_get_record
    • Removederara_list_collections
    • Removederara_list_records
    • Addedoa_law_search
    • Addedresolve_doi
    • Addedsearch_preprints
    • Addedsearch_publications
    • Removedswisscovery_get_record
  3. 11 tool updatesv1.0.2
    • First observedemanuscripta_get_record
    • First observedemanuscripta_list_collections
    • First observedemanuscripta_list_records
    • First observedeperiodica_get_record
    • First observedeperiodica_list_records
    • First observederara_get_record
    • First observederara_list_collections
    • First observederara_list_records
    • First observedlibrary_info
    • First observedswisscovery_get_record
    • First observedswisscovery_search

TDQS

A4.2/5.0
Disambiguation5/5

Each tool targets a distinct source or operation: e-manuscripta archives, law search, DOI resolution, arXiv preprints, Crossref publications, and swisscovery catalog. library_info provides an overview. No overlapping purposes.

Naming Consistency3/5

Naming conventions are mixed: some tools start with source (emanuscripta_, swisscovery_), others with verbs (resolve_, search_), and library_info is a noun phrase. Not fully consistent but still readable.

Tool Count5/5

Seven tools is an appropriate number for the domain, covering multiple Swiss academic library resources without being overwhelming or sparse.

Completeness4/5

Covers major sources for Swiss academic libraries including archives, law research, international publications, and the national catalog. Minor gaps like detailed record fetching are absent, but core workflows are supported.

Maintenance

ActivityActive
ResponsivenessWithin a week

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to search and retrieve EU research outputs including publications, datasets, software, and funded projects from OpenAIRE.
    11
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI-native access to Swiss cultural heritage data from SIK-ISEA (artists), Nationalmuseum (collections), and Nationalbibliothek (bibliography) via MCP tools, without authentication.
    11
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects AI assistants to the Swiss I14Y Interoperability Platform, enabling natural language exploration of government datasets, APIs, codelists, and public services.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Connects AI agents to the OpenAlex scholarly database, enabling search and retrieval of works, authors, institutions, and sources via natural language.
    9
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/malkreide/swiss-academic-libraries-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server