swiss-academic-libraries-mcp
This server provides read-only access to Swiss academic library infrastructure, enabling search and retrieval of bibliographic and digitised content β no API key required.
Swisscovery Union Catalogue: Search 10M+ records across 500+ Swiss libraries using full-text or CQL syntax (title, author, subject, ISBN/ISSN); retrieve individual records by MMS-ID with full MARC21-parsed metadata.
e-rara (Historical Prints): List and retrieve 250k+ digitised historical prints, filtered by date range or library/collection. Browse all participating libraries and collections to discover valid filters.
e-periodica (Periodicals): List and retrieve 1M+ digitised Swiss journal articles (1750βpresent), filtered by date range or journal set, with full Dublin Core metadata.
e-manuscripta (Manuscripts): List and retrieve 100k+ digitised manuscripts and archival materials, filtered by date range or archive/collection. Browse all participating archives and collections.
Output flexibility: All tools return results in human-readable Markdown or machine-readable JSON, with pagination via resumption tokens for large result sets.
Built-in Prompts: Includes
research-workflowandeducation-researchprompts for guided queries.Library Info Tool: An entry point overview of all available data sources and tools, requiring no network access.
Provides tools for searching preprints on arXiv across categories (cs, physics, math, stats, etc.) with automatic phrase quoting and request throttling. Returns metadata including arXiv ID, category, date, and linked journal DOI for bridging to full publication and Swiss library holdings.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@swiss-academic-libraries-mcpFind books on Swiss education in swisscovery"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
π¨π Part of the Swiss Public Data MCP Portfolio
π swiss-academic-libraries-mcp
MCP server providing access to Swiss academic libraries β swisscovery, e-rara, e-periodica, e-manuscripta. No API key required.
Demo
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 swisscovery3 built-in prompts:
research-workflow,education-researchanddoi-to-swiss-shelfMarkdown and JSON output for all tools
97 unit/mocked tests (no network) + 30 live smoke tests
Data Sources
Source | Protocol | Content | Records |
SRU / MARC21 | 500+ Swiss libraries | 10M+ | |
OAI-PMH / Dublin Core | Digitised historical prints | 250k+ | |
OAI-PMH / Dublin Core | Digitised periodicals (1750βtoday) | 1M+ articles | |
OAI-PMH / Dublin Core | Manuscripts & archival material | 100k+ |
Open-Access legal literature (metadata only)
Source | Protocol | Content | DOI coverage |
OAI-PMH / Dublin Core | OA legal journal & non-profit publisher | ~100 % ( | |
OAI-PMH / Dublin Core | Peer-reviewed journal for (young) legal scholarship, multilingual | none (persistent URL) | |
Supabase / PostgREST (JSON) | Subject repository for Swiss law | partial |
International metadata layer (metadata only)
Source | Protocol | Content | Licence |
REST / JSON | DOI resolution + international research literature | Metadata CC0 1.0 (public domain) | |
Atom / XML | Preprints (CS, physics, maths, stats, β¦) | Metadata CC0 1.0; preprints per author licence |
Tools
Tool | Source | Function |
| β | Entry point: overview of all sources and tools |
| swisscovery | Full-text / CQL search across the union catalogue |
| swisscovery | Single record by MMS-ID |
| e-rara | Prints filtered by date / collection |
| e-rara | Single item by OAI identifier |
| e-rara | All participating libraries |
| e-periodica | Articles filtered by date |
| e-periodica | Single article by OAI identifier |
| e-manuscripta | Manuscripts filtered by date / collection |
| e-manuscripta | Single object by OAI identifier |
| e-manuscripta | All archives / collections |
| OA legal (all 3) | Search OA legal scholarship (title/abstract/author) with source, language, year and peer-review filters |
| OA legal (all 3) | Single OA legal article by DOI or resolvable URL |
| Crossref | Resolve a DOI to full metadata (title/ISSN/ISBN/authors β pivot into swisscovery) |
| Crossref | Search international research literature; every hit carries a DOI |
| arXiv | Search preprints with automatic phrase quoting; linked journal DOIs bridge to |
Example Use Cases
Query | Tool |
"Which books about Swiss primary schools are held in Swiss libraries?" |
|
"Show digitised historical works from ETH Library" |
|
"Which Swiss periodicals were digitised in 2023?" |
|
"What manuscript collections does e-manuscripta hold?" |
|
"Which OA legal articles exist on facial recognition?" |
|
"Resolve DOI 10.1038/nature14539 and give me its ISSN" |
|
"Find recent preprints on model context protocol" |
|
"Find this paper's DOI, check for a preprint, and see if a Swiss library holds it" |
|
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.organdexport.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.
licenceis 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 withOA_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
languagefield 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 |
|
|
arXiv treats spaces as OR, not phrase |
|
|
arXiv returns Atom XML, throttles, and 301-redirects | Response is Atom, not JSON; arXiv asks for ~3 s between requests; the plain | Parser reuses |
SHARE (share.osf.io) β evaluated, not built | The | 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
Claude Desktop (recommended)
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.0only when running behind a reverse proxy that provides authentication and per-IP rate limits (e.g. nginx withlimit_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 = 11Configuration
No API keys required. All environment variables are optional.
Parameter | Default | Description |
| off | Enable Streamable HTTP transport |
| 8000 | Port for HTTP transport |
|
| Log verbosity ( |
|
| OA legal: DOIβlicence enrichment via Crossref; set |
| (public key) | OA legal: override for Repositorium.ch's public read-only Supabase anon key (allows rotation without a code change) |
| (unset) | International: contact e-mail for Crossref's "polite pool" (better throughput). If unset, requests use the anonymous pool β functional, just slower. |
|
| 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 versionMCP 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 |
|
| What today's clients speak. The server answers with the revision asked for, or with the |
Per-request envelope |
| A request carrying the |
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-recordThis 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_dateand keepmax_recordsreasonable. 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
Credits & Related Projects
Data (catalogue): swisscovery / SLSP Β· e-rara Β· e-periodica Β· e-manuscripta
Data (OA legal literature): sui generis Β· ex/ante Β· Repositorium.ch β licence enrichment via Crossref. Each source's metadata is used under its own terms; open-access status does not imply an open reuse licence.
Protocol: Model Context Protocol β Anthropic / Linux Foundation
Related: eth-library-mcp β ETH Library Discovery & Persons API
Portfolio: Swiss Public Data MCP Portfolio
Server | Description |
City of Zurich Open Data | |
ETH Library Discovery & Persons API | |
Swiss Federal Statistics (BFS) | |
Swiss Federal Law via Fedlex SPARQL | |
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 toolsemanuscripta_get_recordARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_collectionsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_recordsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_recordARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_recordsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_recordARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_collectionsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_recordsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_infoARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_getARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
oa_law_searchARead-onlyIdempotent
Durchsucht frei zugΓ€ngliche schweizerische rechtswissenschaftliche BeitrΓ€ge.
Quellen: sui generis (OA-Rechtszeitschrift), ex/ante (peer-reviewt, mehrsprachig) und Repositorium.ch (Fachrepositorium Schweizer Recht). Geliefert werden ausschliesslich Metadaten (Titel, Autorschaft, Jahr, Lizenz, DOI, Link, Abstract falls vorhanden) β kein Volltext.
Das Feld license ist immer gesetzt; fehlt eine maschinenlesbare Lizenz, steht
dort "unknown" (Open Access heisst frei lesbar, nicht zwingend frei
weiterverwendbar). Sprache wird gefΓΌhrt, aber nur gefiltert, wenn language
ausdrΓΌcklich gesetzt ist.
Args: params (OaLawSearchInput): query, source, language, year_from, year_to, peer_reviewed, max_records, response_format.
Returns: str: Trefferliste mit Titel, Autorschaft, Jahr, Lizenz, DOI und Link, inklusive Quellen-Status (nicht erreichbare Quellen werden ausgewiesen).
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds value by clarifying that only metadata is returned (no full text), the license field is always set with 'unknown' for missing machine-readable licenses, and language filtering works only when explicitly set. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with three clear paragraphs: purpose/sources, behavioral notes, and parameter list. It is front-loaded with the main purpose. While it could be slightly more concise, every sentence adds necessary context for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of a comprehensive input schema and annotations, the description covers the essential contextual aspects: purpose, source list, return type (metadata only), license behavior, and parameter overview. The return value description is brief, but an output schema exists, so no further detail is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides detailed descriptions for all parameters. The main description only lists the parameter names without additional context. Since the schema covers parameter semantics well, the description adds minimal value. Baseline 3 is appropriate given schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches freely accessible Swiss legal scholarly articles, specifying four specific sources. The verb 'Durchsucht' and resource 'frei zugΓ€ngliche schweizerische rechtswissenschaftliche BeitrΓ€ge' are precise. While it doesn't explicitly differentiate from siblings, the domain is so specific that it implicitly stands apart from generic search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for Swiss open-access legal literature but provides no explicit guidance on when to use this tool versus alternatives like 'search_preprints' or 'swisscovery_search'. There are no when-not-to-use instructions or references to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_doiARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_preprintsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_publicationsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_recordARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
swisscovery_searchARead-onlyIdempotent
Durchsucht den swisscovery-Gesamtkatalog (500+ Schweizer Bibliotheken) via SRU.
UnterstΓΌtzt einfache Volltextsuche und CQL-Feldsuche:
Volltextsuche: "Volksschule ZΓΌrich"
Titelsuche: title = "Bildungsreform"
Autorensuche: creator = "Pestalozzi"
Schlagwortsuche: subject = "PΓ€dagogik"
Kombiniert: title = "Schule" AND creator = "Pestalozzi"
Args: params (SwisscoverySearchInput): Suchparameter: - query (str): CQL-Suchanfrage - max_records (int): Maximale Ergebnisanzahl (1β50, Standard: 10) - start_record (int): Startposition fΓΌr Pagination (Standard: 1) - response_format (str): 'markdown' oder 'json'
Returns: str: Formatierte Liste der Treffer mit Titel, Autor, Erscheinungsinfo, Sprache, ISBN/ISSN, MMS-ID und swisscovery-Link. Bei JSON: vollstΓ€ndiges MARC-geparsertes Dict pro Eintrag. EnthΓ€lt Gesamttrefferanzahl und next_record_position fΓΌr Pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. The description adds behavioral context about the SRU protocol, return formats (markdown/json), and pagination details, but does not disclose rate limits or authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear front-loaded statement, followed by examples and parameter details. It is appropriately sized for the tool complexity, though the examples could be trimmed slightly without losing value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the detailed input schema, comprehensive annotations (including readOnlyHint), and an output schema described in the Returns section, the description covers all necessary context for selecting and invoking the tool correctly. Pagination is explained, and the output format is specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has detailed descriptions and examples for each parameter. The tool description's parameter section adds no new meaning beyond what the schema provides, meeting the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches the swisscovery union catalog via SRU, and lists supported field-specific searches. It effectively distinguishes itself from sibling tools like swisscovery_get_record by focusing on search capabilities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides numerous examples of CQL queries and mentions pagination, giving good usage context. However, it does not explicitly state when not to use this tool or provide alternatives for different scenarios.
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.
9 tool updates
v1.2.0- Added
emanuscripta_get_record - Added
emanuscripta_list_records - Added
eperiodica_get_record - Added
eperiodica_list_records - Added
erara_get_record - Added
erara_list_collections - Added
erara_list_records - Added
oa_law_get - Added
swisscovery_get_record
12 tool updates
v1.1.0- Removed
emanuscripta_get_record - Removed
emanuscripta_list_records - Removed
eperiodica_get_record - Removed
eperiodica_list_records - Removed
erara_get_record - Removed
erara_list_collections - Removed
erara_list_records - Added
oa_law_search - Added
resolve_doi - Added
search_preprints - Added
search_publications - Removed
swisscovery_get_record
11 tool updates
v1.0.2- First observed
emanuscripta_get_record - First observed
emanuscripta_list_collections - First observed
emanuscripta_list_records - First observed
eperiodica_get_record - First observed
eperiodica_list_records - First observed
erara_get_record - First observed
erara_list_collections - First observed
erara_list_records - First observed
library_info - First observed
swisscovery_get_record - First observed
swisscovery_search
TDQS
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 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.
Seven tools is an appropriate number for the domain, covering multiple Swiss academic library resources without being overwhelming or sparse.
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
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
Academic literature search, retrieval, and private library management on top of OpenAlex.
Federated search of books and papers, BibTeX/RIS citations, open-access retrieval and reading.
Search arXiv/Semantic Scholar/OpenAlex + medical evidence (PubMed/Europe PMC) + LaTeX/PDF tools.
Scholarly search: OpenAlex, Crossref, arXiv, OpenCitations and PubMed in one endpoint.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to search and retrieve EU research outputs including publications, datasets, software, and funded projects from OpenAIRE.11MIT
- AlicenseAqualityAmaintenanceEnables AI-native access to Swiss cultural heritage data from SIK-ISEA (artists), Nationalmuseum (collections), and Nationalbibliothek (bibliography) via MCP tools, without authentication.11MIT
- AlicenseNot gradedqualityDmaintenanceConnects AI assistants to the Swiss I14Y Interoperability Platform, enabling natural language exploration of government datasets, APIs, codelists, and public services.MIT
- AlicenseAqualityCmaintenanceConnects AI agents to the OpenAlex scholarly database, enabling search and retrieval of works, authors, institutions, and sources via natural language.9MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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