i14y-mcp
This MCP server provides read-only access to Switzerland's national metadata catalogue (I14Y), enabling discovery and detailed retrieval of public datasets, APIs, public services, and harmonized concepts. No authentication is required.
Search the catalogue (
search_catalog): Free-text search to find datasets, publishers, and themes.List all datasets (
list_datasets): Paginated browsing, filterable by publisher or access rights.Get dataset details (
get_dataset): Full metadata including contact points, temporal/spatial coverage, documentation links, and all distributions.Get dataset distributions (
get_dataset_distributions): Download URLs, formats, and licences for each file.List and detail APIs (
list_data_services,get_data_service): Discover official Swiss APIs with endpoint URLs and OpenAPI specs.Explore public services (
list_public_services): Administrative services offered to citizens.Harmonized concepts (
list_concepts,get_concept,search_codelist_entries): Shared definitions and code lists used across federal datasets.List publishers (
list_publishers): Public bodies with Swiss UIDs for cross-referencing.List contributing catalogues (
list_catalogs): Catalogues that feed into I14Y.Check API status (
api_status): Verify upstream endpoints; distinguishes downtime from empty results.
All operations are idempotent and return provenance timestamps and attribution. The server supports five languages (de, fr, it, rm, en). Licence information is per distribution; always check before reusing data.
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., "@i14y-mcpsearch for datasets about special needs education"
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 β a collection of open-source MCP servers connecting AI agents to Swiss public and open data. This is a private project. It is not affiliated with, endorsed by, or operated on behalf of any employer or public authority.
i14y-mcp
MCP server for the I14Y interoperability platform β Switzerland's national metadata catalogue.
π©πͺ Deutsche Version
Why this server exists
The other servers in this portfolio answer Β«what does the data say?Β». This one answers the question that comes first: Β«who publishes data on this topic, through which interface, under which licence?Β»
I14Y is the national data catalogue maintained by the Federal Statistical Office. It describes datasets, registered APIs, public services and harmonised concepts from the Confederation, cantons and communes, using the DCAT-AP-CH profile (eCH-0200).
Mnemonic: Β«Catalogue before shelf.Β» Without a catalogue, an agent has to already know a data source exists. With one, it can find it.
Related MCP server: swiss-food-safety-mcp
π― Anchor Demo Query
Β«Which authority publishes data on special needs education, through which interface is it available, and under which licence?Β»
search_catalog(query="SonderpΓ€dagogik")
β Β«Statistik der SonderpΓ€dagogikΒ» β Federal Statistical Office (BFS), theme: Bildung
get_dataset(dataset_id=...)
β 2 distributions, licence: Β«Opendata BY ASK β attribution required,
commercial use only with permission from the data supplierΒ»
β contact: auskunftsdienst@bfs.admin.chTwo tool calls turn a vague topic into a named authority, a download URL and a
licence you can act on β get_dataset aggregates the distributions, licences
and contact point into one record.
Demo
Architecture
ββββββββββββββββββββββββββββββββ
β MCP Host (Claude) β
βββββββββββββββββ¬βββββββββββββββ
β stdio | streamable-http
βββββββββββββββββΌβββββββββββββββ
β i14y-mcp β
β ββββββββββββββββββββββββββ β
β β server.py (13 tools) β β
β ββββββββββββββββββββββββββ€ β
β β mappers.py β β DCAT β flat, one language
β ββββββββββββββββββββββββββ€ β
β β models.py (Pydantic) β β source + provenance envelope
β ββββββββββββββββββββββββββ€ β
β β client.py β β retry 2s/4s/8s, no-retry 4xx
β ββββββββββββββββββββββββββ β
βββββββββββββββββ¬βββββββββββββββ
β HTTPS, no auth
βββββββββββββββββΌβββββββββββββββ
β api.i14y.admin.ch/api β
β datasets Β· dataservices Β· β
β concepts Β· publicservices Β· β
β catalogs Β· agents Β· search β
ββββββββββββββββββββββββββββββββArchitecture decision
This server uses Architecture A (live API only).
Rationale (verified live on 2026-07-21):
All read endpoints respond without authentication and paginate correctly.
No bulk download of catalogue metadata is offered, and none is needed.
Error responses follow RFC 7807, so failure modes are distinguishable.
Consequences:
Every HTTP call retries transient failures with 2 s / 4 s / 8 s backoff.
search_catalogcaps results client-side because the upstream ignores paging.api_statusalways returns an evaluable state instead of empty records.
Full probe report: docs/probe-i14y.md.
Project phase
This server is in Phase 1 (read-only) of the portfolio's Β«Read-only FirstΒ»
phase architecture: all tools are read-only, there is no authentication and no
personal data. See docs/roadmap.md for the phase model and
the prerequisites for any future write capability.
Tools
Tool | Purpose |
| Free-text search across the catalogue. Entry point. |
| Paginated dataset register (complete, unlike search). |
| Full metadata record for one dataset. |
| Download URLs, formats and licences. |
| Register of official Swiss APIs with endpoint URLs. |
| Full record for one registered interface. |
| Administrative services for citizens. |
| Harmonised concepts and code lists. |
| One concept definition. |
| Individual codes of a code list. |
| Publishing bodies, with Swiss UID. |
| Contributing catalogues. |
| Reachability check with graceful degradation. |
All tools are annotated readOnlyHint: true. Write operations exist in the
upstream API but are deliberately not exposed.
MCP primitives
This server exposes Tools only β no Resources, no Prompts. That is a deliberate choice, not an omission: I14Y is queried by free-text search and by opaque UUIDs, so there is no small, stable set of addressable URIs that would map cleanly onto MCP Resources, and the server ships no opinionated prompt templates. Every tool is read-only and idempotent; if a future stable entry point emerges (e.g. a fixed theme list) it is a candidate for a Resource.
MCP protocol version
Built against the MCP Python SDK (mcp >= 1.28.1), which negotiates the protocol
version with the client at initialize time. The tested SDK floor is pinned in
pyproject.toml; Dependabot opens monthly SDK-update
PRs, and any change that bumps the negotiated spec version is called out in
CHANGELOG.md.
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 |
|
| 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. The handshake ceiling is measured against a live initialize through
the assembled ASGI stack, not read off a constant name.
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.
Installation
uvx i14y-mcpOr from source:
git clone https://github.com/malkreide/i14y-mcp
cd i14y-mcp
pip install -e ".[dev]"Claude Desktop
{
"mcpServers": {
"i14y": {
"command": "uvx",
"args": ["i14y-mcp"]
}
}
}Remote deployment (Render, Railway)
I14Y_MCP_TRANSPORT=sse HOST=0.0.0.0 PORT=8000 i14y-mcpI14Y_MCP_TRANSPORT accepts stdio (default), sse or streamable-http. The
HTTP transports bind to HOST, which defaults to 127.0.0.1 (loopback); set
HOST=0.0.0.0 to expose the port on a PaaS (the Docker image already does).
CORS exposes the Mcp-Session-Id header so browser MCP clients keep their session.
Which browser origins may call the server comes from I14Y_MCP_CORS_ORIGINS, a
comma-separated list β unset means no browser client is permitted at all,
which is the default. * is still accepted and logs a warning. stdio and other
non-browser clients are unaffected either way.
Docker
docker compose up --build # SSE transport on http://localhost:8000The image is a hardened multi-stage build: it runs as a non-root user, ships no
build tools, and needs no secrets (the API is unauthenticated). See
Dockerfile and compose.yaml.
Join keys
I14Y is a connector layer. Two identifiers make it composable with the rest of the portfolio:
Key | Field | Joins to |
Swiss UID |
|
|
Endpoint URL |
| any portfolio server wrapping that API |
Known limitations
Verified live on 2026-07-21.
The search index covers roughly half the register.
search_catalogreturns at most 1013 records;list_datasetsreaches about 2003. Uselist_datasetswhen completeness matters.Search returns Datasets only. Filtering by
types=["Concept"]ortypes=["DataService"]yields zero results even though those entities exist. Uselist_conceptsandlist_data_servicesinstead.The upstream ignores paging on search. The full result set is always returned; this server caps it at 200 records and sets
truncated: true.Licences vary per distribution, not per dataset. Most carry Β«Opendata BY ASKΒ», which requires attribution and restricts commercial use. Always read the
licencefield before reuse.Some metadata fields are simply empty. Frequency, temporal coverage and distribution format are optional and frequently unset by publishers. This is a data-quality property of the catalogue, not a bug in this server.
Not every entry with an endpoint has a URL. Entries labelled only Β«OpenAPI SpezifikationΒ» without a URI are surfaced as
(no URI) <label>rather than dropped.
Testing
PYTHONPATH=src pytest tests/ -m "not live" # offline, used in CI
PYTHONPATH=src pytest tests/ -m "live" # hits the real API
PYTHONPATH=src pytest tests/ # everything
python -m ruff check src testsThe live tests are not decoration: fundstΓΌck 4 in the probe report β keywords
nesting their language object under label β was caught by a live test after
the unit tests were already green.
Contributing
See CONTRIBUTING.md for the ground rules (read-only, one
egress host, no secrets) and the local dev loop. Maintainers: PUBLISHING.md
covers the PyPI / MCP Registry release process.
Security
See SECURITY.md for the security posture and how to report a
vulnerability.
License
MIT License β see LICENSE. The catalogue data remains subject to the terms declared by each publisher.
Author
Hayal Oezkan Β· github.com/malkreide
Credits & related projects
Data: I14Y Interoperability Platform, Federal Statistical Office (BFS)
Standard: eCH-0200 / DCAT-AP-CH
Source discovery inspired by rnckp/awesome-ogd-switzerland
Portfolio: swiss-public-data-mcp
Protocol: Model Context Protocol
Licence: MIT. The catalogue data remains subject to the terms declared by each publisher.
MCP Registry
Ownership marker used by the MCP Registry to link this PyPI package to the GitHub namespace:
mcp-name: io.github.malkreide/i14y-mcpAvailable Tools
13 toolsapi_statusARead-onlyIdempotent
Check whether the I14Y API is reachable and which endpoints respond.
Always returns an evaluable status rather than an empty result, so an agent can distinguish Β«no data matchedΒ» from Β«the source is downΒ».
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| source | No | Attribution string. |
| base_url | Yes | |
| reachable | Yes | |
| provenance | No | Where this payload came from. |
| retrieved_at | Yes | UTC timestamp of retrieval. |
| checked_endpoints | Yes | |
| last_successful_call | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, openWorldHint, idempotentHint, destructiveHint), the description adds that it 'always returns an evaluable status rather than an empty result'. This is important behavioral context not captured by annotations, helping the agent interpret results correctly.
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 two sentences, front-loaded with the core purpose and then a clarifying note about return behavior. Every word earns its place, with no redundancy or irrelevant detail.
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 (no parameters), the presence of an output schema, and the annotations, the description fully covers the behavioral nuance that matters: the returned status is evaluable even when empty results occur. Nothing else 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 tool has zero parameters, and the input schema is empty (100% schema description coverage). The baseline for no parameters is 4, and the description appropriately adds no parameter details. It doesn't need to compensate for schema gaps because there are none.
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 function: 'Check whether the I14Y API is reachable and which endpoints respond.' This uses a specific verb ('check') and resource ('I14Y API'), and it distinguishes itself from sibling data retrieval tools by focusing on API status rather than content.
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 when this tool is useful: to distinguish 'no data matched' from 'the source is down'. This implies using it when an empty result may indicate connectivity issues. It doesn't explicitly name alternatives, but the context is clear for an agent choosing between this and data search tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_conceptARead-onlyIdempotent
Retrieve one concept definition, including its value type and version.
Args:
concept_id: UUID from list_concepts.
language: Language for titles and descriptions.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | de | |
| concept_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | No | Attribution string. |
| concept | Yes | |
| provenance | No | Where this payload came from. |
| retrieved_at | Yes | UTC timestamp of retrieval. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, destructiveHint. The description adds actionable detail: returns 'value type and version', which is beyond annotations. 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?
Extremely concise: two lines plus argument list. Every sentence adds value with no redundancy. Front-loaded with the core purpose.
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 (context: has output schema=true) and rich annotations, the description covers essential usage and parameter semantics. Could mention edge cases but 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?
Schema has 0% description coverage, so description compensates by explaining concept_id source (from list_concepts) and language purpose (titles/descriptions), adding meaning beyond schema's regex and enum.
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 'Retrieve one concept definition' with specific return details (value type, version). It distinguishes from sibling 'list_concepts' by implying this is for a single entity.
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 mentions the concept_id comes from list_concepts, implying usage context, but does not explicitly state when to use this tool vs. alternatives like search_catalog or list_concepts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_serviceARead-onlyIdempotent
Retrieve the full record for one registered API, including endpoints.
Args:
data_service_id: UUID from list_data_services.
language: Language for titles and descriptions.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | de | |
| data_service_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | No | Attribution string. |
| provenance | No | Where this payload came from. |
| data_service | Yes | |
| retrieved_at | Yes | UTC timestamp of retrieval. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds meaningful context by specifying the response includes 'full record... including endpoints' and that the language parameter affects 'titles and descriptions', which goes beyond the annotations. No contradiction with 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 extremely concise, with one action-focused sentence and a compact Args block. Every word earns its place, and the structure is easy to scan, making it ideal for agent consumption.
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 tool with two parameters and an output schema, this description is nearly complete. It covers the purpose, parameter semantics, and the prerequisite for the ID. The only minor gap is the absence of explicit alternative/contrast with siblings, but the output schema handles return format details, so the description is sufficient.
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 has no per-property descriptions (0% coverage), so the description must compensate. The Args section does this well: it explains that data_service_id is a UUID from list_data_services and that language controls titles and descriptions, adding practical meaning beyond the raw schema (pattern and enum). Slight imprecision: the schema pattern allows more than UUIDs, but the hint is still helpful.
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 uses the specific verb 'Retrieve' and clearly identifies the resource: 'full record for one registered API, including endpoints'. This distinguishes it from sibling tools like list_data_services (which lists services) and get_dataset (which targets datasets), leaving no ambiguity about what the tool does.
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 an explicit prerequisite by stating that data_service_id is a 'UUID from list_data_services', indicating the tool should be used after listing services. However, it does not explicitly name alternative tools or state when not to use this tool, so it falls short of a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_datasetARead-onlyIdempotent
Retrieve the full, aggregated metadata record for one dataset.
This is the aggregated detail tool: a single call returns the contact
point, temporal and spatial coverage, documentation links and every
distribution with its licence β so search_catalog β get_dataset
answers Β«who publishes it, through which interface, under which licenceΒ»
in two calls, without a separate distributions or contact lookup.
Args:
dataset_id: UUID from search_catalog or list_datasets.
language: Language for titles and descriptions.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | de | |
| dataset_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | No | Attribution string. |
| dataset | Yes | |
| provenance | No | Where this payload came from. |
| retrieved_at | Yes | UTC timestamp of retrieval. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, open-world, idempotent, and non-destructive behavior. The description adds valuable context about the aggregated nature of the response, including what data fields are returned and how the language parameter affects titles/descriptions. It does not mention error handling or null results, but the annotation coverage lowers the bar.
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 primary action, followed by a useful but slightly verbose workflow explanation. All sentences contribute value, but the second paragraph about the two-call workflow could be tightened. Overall, it is well-structured and appropriately sized.
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 is comprehensive for the tool's complexity: it explains the aggregated nature, parameter provenance, and relationship to sibling tools. Since an output schema exists, return value details are not required in the description. With strong annotations and clear usage guidelines, this is a complete package.
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?
Schema description coverage is 0%, so the description must compensate. It explains `dataset_id` as a UUID from sibling tools and `language` as the language for titles/descriptions, which adds meaningful semantics beyond the schema's enumerated values and pattern. Minor gap: no detail on fallback behavior if language is not supported.
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 identifies the tool as retrieving the full aggregated metadata record for one dataset, with specific details (contact point, coverage, documentation, distributions with licences). It distinguishes itself from sibling tools by explaining this is the aggregated detail tool that avoids separate lookups.
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 a workflow: `search_catalog` β `get_dataset` answers key questions in two calls, and states that no separate distributions or contact lookup is needed. It also instructs that `dataset_id` should come from `search_catalog` or `list_datasets`, providing clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dataset_distributionsARead-onlyIdempotent
Get the downloadable files and access URLs for a dataset.
This is the Β«where do I actually get the dataΒ» tool. Each distribution
carries its own format, licence and download URL β licences differ between
distributions of the same dataset, so always read the licence field
before reusing the data. (get_dataset returns these same distributions
alongside the rest of the record.)
Args:
dataset_id: UUID from search_catalog or list_datasets.
language: Language for titles and descriptions.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | de | |
| dataset_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | No | Attribution string. |
| returned | Yes | |
| dataset_id | Yes | |
| provenance | No | Where this payload came from. |
| retrieved_at | Yes | UTC timestamp of retrieval. |
| dataset_title | No | |
| distributions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate read-only, idempotent, non-destructive behavior. The description adds valuable context beyond annotations: it warns that licences differ between distributions of the same dataset and instructs to always read the licence field. This is a meaningful behavioral note that helps the agent avoid misuse.
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: a one-line summary, a clarifying paragraph, and an args section. Every sentence serves a purpose 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 presence of an output schema (not shown but declared), the description does not need to detail return values. It covers purpose, usage context, parameter sourcing, and a critical behavioral note about licences. For a get-by-ID tool with well-annotated safety, this is 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?
Schema coverage is 0%, so description fully carries parameter semantics. It explains that dataset_id is a UUID from search_catalog or list_datasets, and that language controls titles/descriptions. Both parameters are addressed clearly, adding meaning beyond the schema's enums and pattern.
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 'Get the downloadable files and access URLs for a dataset,' which is a specific verb and resource. It distinguishes from sibling tools like search_catalog and list_datasets by focusing on distributions, and mentions that get_dataset returns distributions alongside other data, clarifying the scope.
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 frames the tool as 'the Β«where do I actually get the dataΒ» tool' and advises reading the licence field before reuse. It also specifies that dataset_id comes from search_catalog or list_datasets. However, it does not explicitly state when not to use this tool versus alternatives like get_dataset, though it implies the distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_catalogsARead-onlyIdempotent
List the catalogues that feed into I14Y.
Each catalogue represents one contributing organisation's data collection.
Args: language: Language for titles. page: 1-based page number. page_size: Records per page (1-100).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| language | No | de | |
| page_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| source | No | Attribution string. |
| catalogs | Yes | |
| returned | Yes | |
| page_size | Yes | |
| provenance | No | Where this payload came from. |
| retrieved_at | Yes | UTC timestamp of retrieval. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, open-world, idempotent, non-destructive behavior. The description adds context about the data source (I14Y) and the meaning of catalogues, but does not disclose any behavioral traits beyond what annotations provide. With annotations covering most aspects, a score of 3 is appropriate.
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 exceptionally concise: two lines for purpose/context, then a bullet-like args list. Every sentence adds value, no waste. Front-loaded with the main action.
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 and all parameters. An output schema exists, so return format details are not needed. Given the tool's simplicity (list with pagination), the description is adequately 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?
The input schema has 3 parameters with defaults and constraints, but no descriptions. The description compensates by documenting each parameter: 'Language for titles', '1-based page number', 'Records per page (1-100)'. This adds meaning beyond the schema, meriting a 4 given the low 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 that the tool lists catalogues feeding into I14Y, and explains that each catalogue represents an organization's data collection. While the purpose is specific, it does not explicitly differentiate from sibling tools like search_catalog or list_datasets, which could help an agent choose correctly.
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?
No guidance is provided on when to use this tool versus alternatives (e.g., search_catalog for filtering, list_datasets for sub-resources). The description only explains what catalogues are, not the appropriate context for invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_conceptsARead-onlyIdempotent
List harmonised concepts and code lists of the Swiss administration.
Concepts are the semantic backbone of interoperability: shared definitions
and code lists that different bodies agree to use. Note that these are not
reachable through search_catalog.
Args:
publisher_identifier: Publisher identifier from list_publishers.
language: Language for titles and descriptions.
page: 1-based page number.
page_size: Records per page (1-100).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| language | No | de | |
| page_size | No | ||
| publisher_identifier | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| source | No | Attribution string. |
| concepts | Yes | |
| returned | Yes | |
| page_size | Yes | |
| provenance | No | Where this payload came from. |
| retrieved_at | Yes | UTC timestamp of retrieval. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false. The description adds valuable behavioral context beyond annotations, explaining that concepts are shared definitions and not searchable via catalog, and detailing parameter origins. 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 into a purpose statement, context paragraph, and parameter list. It is concise with no redundant sentences, though the parameter list could be slightly more compact. Still, it earns its place.
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 (not needed to explain return values), the description adequately covers what the tool does, what concepts are, filtering by publisher and language, and pagination. It is sufficient for an agent to use without ambiguity.
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 0% schema description coverage, the description fully compensates by explaining each parameter's meaning: `publisher_identifier` from `list_publishers`, `language` for titles/descriptions, `page` as 1-based, `page_size` range 1-100. This adds critical context beyond the schema's type and constraints.
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 'List harmonised concepts and code lists of the Swiss administration' with a specific verb and resource. It also distinguishes itself from the sibling `search_catalog` by noting that these are not reachable through that tool, making purpose and differentiation explicit.
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 context on when to use this tool (to access shared semantic definitions) and explicitly excludes `search_catalog`. However, it does not compare against other siblings like `list_datasets` or `get_concept`, so usage guidance is good but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_data_servicesARead-onlyIdempotent
List machine interfaces (APIs) registered by Swiss public bodies.
The strategic payload of this server: the national register of official APIs, with endpoint URLs and OpenAPI specification links where the publisher supplied them. Use this to discover whether an interface already exists before building a scraper.
Args:
publisher_identifier: Publisher identifier from list_publishers.
language: Language for titles and descriptions.
page: 1-based page number.
page_size: Records per page (1-100).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| language | No | de | |
| page_size | No | ||
| publisher_identifier | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| source | No | Attribution string. |
| returned | Yes | |
| page_size | Yes | |
| provenance | No | Where this payload came from. |
| retrieved_at | Yes | UTC timestamp of retrieval. |
| data_services | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds valuable context about what the tool returns (endpoint URLs and OpenAPI specs) and pagination details, going 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 concise and well-structured: purpose first, then strategic payload, then usage guidance, then parameter list. Every sentence adds value with no wasted words.
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 (4 optional parameters, annotations, output schema present), the description covers all essential aspects: what is returned, when to use it, and parameter details. The presence of an output schema reduces the need to explain return values.
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 0% schema description coverage, the description fully compensates by explaining each parameter in the Args section: publisher_identifier, language, page (1-based), and page_size (1-100). This adds meaning 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 clearly states 'List machine interfaces (APIs) registered by Swiss public bodies,' using a specific verb and resource. It distinguishes itself from sibling tools by mentioning 'the national register of official APIs' with endpoint URLs and OpenAPI links.
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 explicit usage guidance: 'Use this to discover whether an interface already exists before building a scraper.' It also references the sibling tool `list_publishers` for obtaining the publisher_identifier, though it does not explicitly state 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.
list_datasetsARead-onlyIdempotent
List registered datasets, optionally filtered by publisher.
Unlike search_catalog, this endpoint paginates correctly and covers the
complete register (roughly 2000 datasets as of July 2026), including
records the search index misses.
Args:
publisher_identifier: Publisher identifier from list_publishers.
access_rights: e.g. "PUBLIC", "NON_PUBLIC", "RESTRICTED".
language: Language for titles and descriptions.
page: 1-based page number.
page_size: Records per page (1-100).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| language | No | de | |
| page_size | No | ||
| access_rights | No | ||
| publisher_identifier | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| source | No | Attribution string. |
| datasets | Yes | |
| returned | Yes | |
| page_size | Yes | |
| provenance | No | Where this payload came from. |
| retrieved_at | Yes | UTC timestamp of retrieval. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive hints. The description adds valuable behavioral context: it paginates correctly, covers the complete register (~2000 datasets), and includes records missed by the search index. This enriches transparency beyond annotations, though it could mention potential latency or consistency.
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, starting with the primary purpose, then differentiation from a sibling, followed by a clear parameter list. Every sentence adds value 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 moderate complexity, the description covers the essentials: purpose, differentiation, parameter meanings, and key behavioral traits (pagination, coverage). However, it omits details like sorting order or timeout behavior. An output schema exists, so return values need not be documented.
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 0% schema description coverage, the description carries full burden for parameter semantics. It provides meaningful descriptions for all parameters: `publisher_identifier` from `list_publishers`, `access_rights` examples, `language` values, and pagination details. This compensates well, but lacks specifics on default values (already in schema) or format constraints.
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 registered datasets with optional filtering by publisher. It explicitly distinguishes from the sibling `search_catalog` by highlighting its correct pagination and complete register coverage, providing a specific verb+resource differentiation.
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 explicit guidance on when to use this tool (for complete register and correct pagination) and contrasts with `search_catalog` as an alternative. It also documents parameter examples like `publisher_identifier` from `list_publishers` and `access_rights` values, offering clear context for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_public_servicesARead-onlyIdempotent
List registered public services (administrative offerings for citizens).
Args:
publisher_identifier: Publisher identifier from list_publishers.
language: Language for titles and descriptions.
page: 1-based page number.
page_size: Records per page (1-100).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| language | No | de | |
| page_size | No | ||
| publisher_identifier | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| source | No | Attribution string. |
| returned | Yes | |
| page_size | Yes | |
| provenance | No | Where this payload came from. |
| retrieved_at | Yes | UTC timestamp of retrieval. |
| public_services | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, and destructiveHint=false. The description adds that it lists public services, which is consistent but does not disclose additional behavioral aspects like pagination behavior or rate limits beyond parameter docs.
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: one sentence for purpose followed by a clear docstring with each parameter explained. No fluff, front-loaded with purpose.
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 (list with pagination and optional filter) and the presence of an output schema, the description adequately covers what the tool does and parameter semantics. Missing are potential error conditions or additional output context, but it's sufficient.
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 0% schema description coverage, the description compensates by explaining all 4 parameters: publisher_identifier source, language purpose, page base, and page_size range. This adds context beyond the schema constraints.
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 'registered public services' with the parenthetical 'administrative offerings for citizens', which distinguishes it from sibling tools like list_datasets or list_data_services that list other entity types.
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 no explicit guidance on when to use this tool vs alternatives, but hints at a dependency by noting that publisher_identifier comes from list_publishers. No when-not-to-use or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_publishersARead-onlyIdempotent
List the public bodies that publish into I14Y.
Returns publisher identifiers needed by the other tools, plus the Swiss UID
where available β the UID is the join key to register-mcp (Zefix).
Args: identifier: Filter by exact publisher identifier. uid: Filter by Swiss UID, e.g. "CHE-123.456.789". language: Language for names. page: 1-based page number. page_size: Records per page (1-100).
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | ||
| page | No | ||
| language | No | de | |
| page_size | No | ||
| identifier | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| source | No | Attribution string. |
| returned | Yes | |
| page_size | Yes | |
| provenance | No | Where this payload came from. |
| publishers | Yes | |
| retrieved_at | Yes | UTC timestamp of retrieval. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds that it returns identifiers and the Swiss UID, which is useful but does not significantly extend the safety profile already conveyed by 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 two sentences plus a bullet list of parameters. No word is wasted; every sentence adds unique value: purpose, output context, and parameter details. Structure is clear and 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 has an output schema, the description appropriately mentions the key output fields (identifiers, Swiss UID). It covers all necessary aspects for a listing tool with filters, though could briefly mention pagination behavior (already in schema).
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 0% schema description coverage, the description fully explains each parameter: identifier, uid (with example), language, page (1-based), and page_size (1-100). This compensates entirely for the lack of schema descriptions.
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 'List the public bodies that publish into I14Y', providing a specific verb-resource combination. It distinguishes from sibling tools like list_datasets and list_catalogs by focusing on publishers, and hints at its role supplying identifiers needed by other 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 mentions that the output contains 'publisher identifiers needed by the other tools' and notes the UID as a join key to register-mcp. This gives context for when to use it, but does not explicitly state when not to use it or contrast with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_catalogARead-onlyIdempotent
Search Switzerland's national metadata catalogue for data resources.
The primary entry point: use this to find out who publishes data on a topic before looking for a specific dataset. Returns titles, publishers, themes and portal permalinks.
Known limitation (verified live 2026-07-21): the upstream search index
covers Datasets only. Filtering by types=["Concept"] or
types=["DataService"] returns zero results even though those entities
exist β use list_concepts and list_data_services for those.
Args: query: Free-text search term, e.g. "Sonderpaedagogik" or "Bildung". An empty string returns the full index (over 1000 records) and is not recommended. language: Language for titles and descriptions. types: Restrict to resource types. Effectively only "Dataset" works. themes: Filter by theme identifiers. publishers: Filter by publisher identifiers. limit: Maximum records to return (1-200). Upstream ignores paging, so capping happens in this server.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| types | No | ||
| themes | No | ||
| language | No | de | |
| publishers | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | Actionable next step when match_type is 'none' (e.g. which tool to try). |
| hits | Yes | |
| query | No | |
| source | No | Attribution string. |
| language | Yes | |
| returned | Yes | Records in this payload after capping. |
| truncated | Yes | True when the upstream result set exceeded the cap. |
| match_type | No | 'none' when nothing matched, so the agent never sees a bare empty result. |
| provenance | No | Where this payload came from. |
| retrieved_at | Yes | UTC timestamp of retrieval. |
| total_matched | Yes | Matches reported by the upstream index. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds the server-side capping of limit due to upstream ignoring paging, and the limitation that some type filters yield zero results despite existence. This adds valuable behavioral context beyond annotations, though could mention rate limits or error handling.
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 main paragraph, a limitation note, and parameter list. It is informative but slightly verbose; some sentences could be tightened without loss of clarity.
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 (6 parameters, sibling tools) and presence of output schema, the description covers all essential aspects: purpose, when to use, parameter semantics, known limitations, and alternatives. No gaps in guidance for effective 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?
Despite 0% schema description coverage, the description provides detailed explanations for all 6 parameters in the Args section, including query free-text, language options, types (with known limitation), themes, publishers, and limit behavior. This fully compensates for the schema's lack of descriptions.
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 Switzerland's national metadata catalogue for data resources' and describes it as the primary entry point to find who publishes data on a topic. It lists returned fields (titles, publishers, themes, permalinks) and distinguishes from sibling tools like list_concepts and list_data_services.
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?
Explicitly says 'use this to find out *who* publishes data on a topic before looking for a specific dataset.' Provides a known limitation that types other than 'Dataset' may return zero results and directs to alternative tools (list_concepts, list_data_services). Also warns against empty query returning full index.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_codelist_entriesARead-onlyIdempotent
List the individual codes of a code-list concept.
Use this to resolve official code values β for example the canonical list
of a classification used across several federal datasets. Only concepts
with concept_type == "CodeList" return entries.
Args:
concept_id: UUID of a code-list concept from list_concepts.
language: Language for entry names. Required by the upstream API.
page: 1-based page number.
page_size: Records per page (1-200).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| language | No | de | |
| page_size | No | ||
| concept_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| source | No | Attribution string. |
| entries | Yes | |
| language | Yes | |
| returned | Yes | |
| page_size | Yes | |
| concept_id | Yes | |
| provenance | No | Where this payload came from. |
| retrieved_at | Yes | UTC timestamp of retrieval. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, destructiveHint. Description adds behavioral context beyond annotations: the constraint on concept_type, that language is required by upstream API, and pagination semantics. 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?
Concise yet thorough: a clear introductory sentence, a context paragraph, and structured Args section. Every sentence adds value; no 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 complexity (4 parameters, output schema exists, annotations present), the description is complete. It explains purpose, usage context, parameter details, and a key behavioral condition. Output schema covers return values.
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?
Schema description coverage is 0%, but the description fully compensates by explaining each parameter: concept_id as UUID from list_concepts, language as required by upstream API, page as 1-based, page_size range (1-200). This adds significant meaning beyond the schema types.
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 action ('List the individual codes') and the resource ('a code-list concept'), with a specific use case example. It differentiates from sibling tools (e.g., list_concepts) by focusing on entries within a codelist.
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?
Provides explicit context: 'Use this to resolve official code values' and a condition ('Only concepts with concept_type == "CodeList" return entries'). It does not explicitly state when not to use or list alternatives, but the usage is well implied.
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.
3 tool updates
v0.3.2- Added
api_status - Added
get_data_service - Added
get_dataset
10 tool updates
v0.2.1- First observed
get_concept - First observed
get_dataset_distributions - First observed
list_catalogs - First observed
list_concepts - First observed
list_data_services - First observed
list_datasets - First observed
list_public_services - First observed
list_publishers - First observed
search_catalog - First observed
search_codelist_entries
TDQS
Each tool targets a distinct resource or operation: search vs. paginated listing, datasets, distributions, data services, public services, concepts, codelist entries, publishers, catalogs. Descriptions clearly differentiate purposes.
All tools follow a consistent 'verb_noun' pattern in snake_case (e.g., search_catalog, list_datasets, get_dataset_distributions). No mixing of conventions.
10 tools is well-scoped for a metadata catalogue server covering search, listing, details, publishers, catalogs, concepts, and code lists. Not too few or too many.
The tool set covers the full discovery lifecycle: search, browse, get details, and retrieve distributions for datasets, plus access to related entities like services, concepts, and publishers. No obvious gaps for a read-only catalog interface.
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
opendata.swiss MCP β Switzerland's federal open-data portal (CKAN catalogue).
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
Hosted MCP server for finding authoritative primary data sources and official portals.
This MCP server provides seamless access to Malaysia's government open data, including datasets, wβ¦
Related MCP Servers
- AlicenseAqualityDmaintenanceSwiss open data MCP server β transport, weather, geodata, companies, etc,. Zero API keys.7622722MIT
- AlicenseAqualityAmaintenanceMCP server connecting AI models to Swiss Federal Food Safety and Veterinary Office open data, enabling queries about food recalls, animal disease surveillance, food control results, and more.11MIT
- AlicenseBqualityAmaintenanceAn MCP server providing AI-powered access to Open Data from the City of Zurich, enabling queries to 900+ datasets, real-time environmental and mobility data, geodata, parliamentary proceedings, and more.268MIT
- AlicenseAqualityAmaintenanceMCP server for TERMDAT, the terminology database of the Swiss Federal Administration, giving AI agents officially validated designations of Swiss authorities, departments, and legal acts across DE/FR/IT/EN with source references and validation status.71MIT
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/i14y-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server