Swiss Grounding MCP
Provides Swiss place facts such as municipality, canton, BFS number, postcodes, population, and official website, using Wikidata as one of the sources for place metadata.
Click on "Deploy 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 Grounding MCPWhat are the 2026 health insurance premiums in Geneva?"
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.
Swiss Grounding MCP
An MCP server that gives AI assistants authoritative, cited, jurisdiction-correct answers about Switzerland — from federal, cantonal and municipal sources, in German, French, Italian, Romansh and English. Built for the Swisscom Swiss Grounding MCP challenge (Swiss AI Weeks, Zurich 2026).
No API keys, no accounts. Everything is public Swiss open data or official web pages.
13 read-only tools, one response contract, citations on every result.
Honest by design: asks back only for missing essentials (e.g. the municipality), says clearly when something is not covered or not in Switzerland, never fills gaps from memory.
Runs locally over stdio or as a Streamable HTTP service (
/mcp,/health).
Quick start
Requires uv (it installs Python 3.13 automatically).
git clone https://github.com/Gastaan/swiss-grounding-mcp && cd swiss-grounding-mcp
uv sync # installs dependencies
uv run swiss-grounding-mcp # stdio (for local MCP clients)
uv run swiss-grounding-mcp --transport http --port 8000 # HTTP: http://localhost:8000/mcp
curl localhost:8000/healthThe prebuilt data (municipality register, health premiums, search index) ships in the repository; the first start unpacks the index (~1 s). Nothing else to download or configure.
Docker:
docker build -t swiss-grounding-mcp .
docker run -p 8000:8000 swiss-grounding-mcp # http://localhost:8000/mcpRelated MCP server: mcp-i14y
Connect an MCP client
Use absolute paths. Replace /path/to/swiss-grounding-mcp with your clone.
OpenCode (opencode.json):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"swiss": {"type": "local", "command": ["uv", "run", "--directory", "/path/to/swiss-grounding-mcp", "swiss-grounding-mcp"], "enabled": true},
"swiss-http": {"type": "remote", "url": "http://localhost:8000/mcp", "enabled": false}
}
}Claude Code:
claude mcp add swiss -- uv run --directory /path/to/swiss-grounding-mcp swiss-grounding-mcp
claude mcp add --transport http swiss-http http://localhost:8000/mcpClaude Desktop (claude_desktop_config.json; give the full path to uv, e.g. from which uv):
{"mcpServers": {"swiss": {"command": "/full/path/to/uv", "args": ["run", "--directory", "/path/to/swiss-grounding-mcp", "swiss-grounding-mcp"]}}}VS Code (.vscode/mcp.json):
{"servers": {"swiss": {"type": "stdio", "command": "uv", "args": ["run", "--directory", "/path/to/swiss-grounding-mcp", "swiss-grounding-mcp"]}}}Cursor (.cursor/mcp.json):
{"mcpServers": {"swiss": {"command": "uv", "args": ["run", "--directory", "/path/to/swiss-grounding-mcp", "swiss-grounding-mcp"]}}}Any client that speaks MCP over stdio or Streamable HTTP works. Tested with Claude Code, OpenCode,
the MCP Inspector CLI and the FastMCP client, including the legacy initialize handshake
(protocol 2025-06-18) and the stateless 2026-07-28 protocol. The server sends usage instructions.
Coverage (declared scope)
Topic | Geography | Source (authority) | Freshness / reference period |
Procedures, rules, fees, deadlines — permits & migration, moving & registration, taxes, social insurance (AHV/IV), unemployment, driving licences & vehicles, customs & parcels, schools, housing, voting, civil status… | Federal (ch.ch in de/fr/it/rm/en, federal offices, AHV/IV, arbeit.swiss), cantonal portals of 23 cantons (see limitations), 12 largest cities | Full-text index of 10,630 official pages / 46,952 passages, plus live reading of any official page | Index built 2026-09-25, refreshed weekly; |
Federal law — any act and article, current consolidated version | Federal | Fedlex (Federal Chancellery) | Live; version in force today |
Mandatory health insurance premiums (cheapest offers per municipality, age, deductible, model) | All 2,110 municipalities (premium regions) | FOPH premium open data (same data as priminfo.admin.ch) | 2026 premiums; 2027 added when FOPH publishes them (end of September) |
School holidays and public holidays | All 26 cantons; municipality level where published (e.g. Scuol, Zürich) | OpenHolidays (aggregated official lists), EDK list, municipality website | 2025–2027 |
Waste collection dates | City of Zürich (by postcode), Basel/Riehen/Bettingen (by address), St. Gallen (by street); by collection zone: Winterthur, Uster, Wetzikon, Dübendorf, Horgen, Wädenswil, Adliswil, Thalwil and 13 more | Municipal open data (ERZ Zürich via OpenERZ, data.bs.ch, daten.stadt.sg.ch) | Live, next 120 days |
Public transport connections and departure boards | All of Switzerland | Official timetable (opentransportdata.swiss via transport.opendata.ch) | Live |
Federal popular votes — upcoming subjects, results (national + canton) | Federal | FSO vote-day open data, Federal Chancellery | Live |
Mortgage reference interest rate (rents); SNB exchange rates | Federal | BWO; Swiss National Bank | Live (cached 6 h) |
Company registration — UID, legal seat, commercial register and VAT status | All of Switzerland | Federal UID register (FSO) | Live |
Place facts — municipality, canton, BFS number, postcodes, population, official website | All 2,110 municipalities, 26 cantons | BFS register & STATPOP, swisstopo, Wikidata (websites) | Population 2025; register 2026-09-25 |
Current weather measurements | Nearest MeteoSwiss automatic station | MeteoSwiss open data | Live (10-minute values) |
Not covered / limitations
Anything outside Switzerland — e.g. the German Rundfunkbeitrag in Konstanz. The server says so.
Cantons GR, BL and SH block or do not serve text to automated clients, so their cantonal pages are not in the index (ch.ch and federal pages still apply;
read_official_pagereports the block honestly). VS and TI are only partially indexed.Municipal web pages are indexed only for the 12 largest cities; for other municipalities the server returns the official website and can read a given page live.
Cantonal law texts, individual tax calculations and weather forecasts are not provided.
Waste calendars exist only where municipalities publish open data (list above); elsewhere the server says so and links the municipality.
School holidays come from OpenHolidays, which aggregates official lists; the official EDK list and the municipality site are cited alongside for verification.
Search is keyword-based (SQLite FTS5/BM25 over all national languages); it works best with the key nouns of the question, in any national language.
Tools
Tool | Use it for |
| "How do I…", rules, deadlines, fees — verbatim excerpts from official pages, filtered to federal + the given canton/municipality |
| Live text of an official page (allowlisted Swiss government domains only), focused on given words |
| Federal law articles (SR number or abbreviation such as OR/CO, ZGB, SVG, AIG) |
| Cheapest KVG/LAMal premiums |
| School or public holidays |
| Next collection dates by waste type |
| Connections and departures |
| Next vote subjects or results |
| Reference interest rate, SNB exchange rates |
| Company lookup by name or UID |
| Municipality facts, population, website |
| Latest MeteoSwiss measurements |
| The scope above, for the assistant |
Response contract
Every tool returns the same JSON object (as structuredContent with an outputSchema, and as text):
{
"status": "ok | needs_context | not_covered | not_found | source_error",
"summary": "One factual sentence, ending with 'Source: <publisher> – <url>'",
"data": {"...": "tool-specific facts"},
"citations": [{"title": "", "url": "", "publisher": "", "level": "federal|cantonal|municipal|semi-official|community",
"jurisdiction": "CH | CH-VD | CH-VD-5586", "retrieved_at": "", "valid_for": "", "excerpt": "verbatim"}],
"missing_context": [{"field": "municipality", "question": "…", "options": ["Buchs (ZH)", "Buchs (SG)"]}],
"guidance": "what the assistant should do next"
}needs_context— ask the user exactlysummary(e.g. which municipality; which of three Buchs).not_covered— outside Switzerland or outside the declared scope; the assistant should say so.not_found/source_error— nothing found / source unreachable; never answer from memory.Places can be given as the user wrote them: Genf, Ginevra, Genève, Schuls → Scuol, 8003, Zurich 8003, Bahnhofstrasse 1, Zürich. Ambiguous names return options; foreign places are flagged.
Invalid arguments are returned with
isError: trueand a readable message.
Configuration
Variable | Default | Meaning |
|
| Respect robots.txt of every website fetched (RFC 9309, via Protego). Set |
|
| Only use sources whose terms allow automated access (e.g. zefix.ch's web backend is not used; the official UID web service is). |
|
| Serve from cache only, never hit the network. |
|
| HTTP response cache. |
|
| Seconds per upstream request. |
|
| Minimum seconds between requests to the same host. |
| browser-compatible string identifying | Sent with every request. |
|
| Same as |
|
| Logs go to stderr: one line per tool call (tool, status, bytes, ms) and per upstream fetch. |
No credentials are required.
Source etiquette, caching, resilience
robots.txt is checked per host and cached for 24 h; an unreachable robots.txt (5xx) means "disallow". Documented APIs (geo.admin.ch, Fedlex SPARQL, SNB, OpenHolidays, transport.opendata.ch, open-data portals) are called as APIs; website pages always go through the robots check.
Requests to the same host are paced (
SGM_MIN_INTERVAL), identify the project in the User-Agent, and are cached on disk with per-source TTLs (timetables 1 min, votes 10 min, rates 6 h, pages 6–24 h, law 7 days). Expired entries are never served except inSGM_OFFLINEmode.Upstream failures become
status: "source_error"with the official link; no stack traces reach the model.read_official_pageonly accepts recognised Swiss government domains (admin.ch, ch.ch, 26 cantons, 2,100+ municipal websites, bodies with a legal mandate), which also prevents SSRF.
Data and refresh
File (in | Built by | Contents |
|
| 2,110 municipalities: BFS number, canton, district, premium region, postcodes, localities, population, website, holiday region |
|
| Official FOPH premium table, insurer and plan names, municipality restrictions |
|
| FTS5 index of official pages (robots.txt respected, per-host pacing) |
uv run --group build python scripts/build_places.py
uv run --group build python scripts/build_premiums.py 2026 2027
uv run --group build python scripts/build_index.py # ~20 min cold, a few minutes when cached.github/workflows/refresh-data.yml rebuilds everything weekly and opens a pull request.
Architecture
MCP client ──stdio / Streamable HTTP──▶ server.py (FastMCP, 13 tools, one ToolResult contract)
│
places.py (register, exonyms, postcodes, geocoding) · authorities.py (domain → level/jurisdiction)
│
sources/ search (FTS5 index + live pages) · fedlex · premiums · holidays · waste · transport
votes · economy · companies · weather
│
http.py: robots.txt · per-host pacing · disk cache with TTLPython 3.13, fastmcp 4 (on the official mcp 2.x SDK), httpx, protego, trafilatura, SQLite FTS5.
Adding a source = one module in sources/ returning ToolResult, plus one decorated function in server.py.
Testing
uv run pytest -q # offline: MCP contract, place resolution, premiums, honesty rules
uv run pytest -q -m live # live checks against every real source
uv run ruff check src scripts tests
npx -y -p node@22 -p @modelcontextprotocol/inspector -- mcp-inspector --cli http://127.0.0.1:8000/mcp -- --method tools/listEnd-to-end with real MCP clients and LLMs (mirrors the evaluation: 2 clients × 2 LLMs):
OPENAI_API_KEY=... uv run python scripts/e2e_eval.py # Claude Code (sonnet, haiku) + OpenCode (gpt-5.4-mini, gpt-4.1-mini)It runs eval/questions.json — the 5 published sample questions plus 11 more (de/fr/it/rm/en,
including ask-back, out-of-scope and not-covered cases) — and writes eval/results/<date>.md.
Latest end-to-end results (2026-09-25, eval/results/2026-09-25T0159.md)
Client + LLM | Pass (content + citation) | Content correct | Published samples | Avg tool calls | Avg seconds |
Claude Code + Sonnet | 14/16 | 14/16 | 5/5 | 1.2 | 12 |
Claude Code + Haiku | 14/16 | 15/16 | 5/5 | 0.9 | 11 |
OpenCode + gpt-5.4-mini | 13/16 | 15/16 | 4/5 | 1.4 | 9 |
OpenCode + gpt-4.1-mini | 13/16 | 14/16 | 5/5 | 1.0 | 7 |
Remaining misses, honestly reported: some answers are correct but name the source without the URL (Q8, one S3 run); two answers to the parcel-VAT question (Q12) reach the right conclusion with the travellers' allowance instead of the CHF 5 parcel rule; and a general non-Swiss question (Q15, "capital of Australia") is answered from model knowledge without calling any tool — a server cannot intercept questions it is never asked (the published non-Swiss sample S5, Konstanz, passes in all four).
License
Code: MIT. Data retrieved from the sources remains under their terms (Swiss open government data, mostly "open use, must provide the source"); every answer carries its source.
Available Tools
13 toolscompany_registerCompany register (UID)ARead-onlyIdempotent
Check whether a company is registered: UID, legal seat, commercial register and VAT status, from the federal UID register.
| Name | Required | Description | Default |
|---|---|---|---|
| name_or_uid | Yes | Company name or UID (CHE-123.456.789). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| status | Yes | |
| summary | Yes | |
| guidance | No | |
| citations | No | |
| missing_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful context about the data source and returned fields, but does not disclose additional behavioral details such as error cases or whether the result is a simple boolean or full record. This is adequate but not exceptional.
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?
A single, front-loaded sentence communicates the action, the resource, the specific data fields, and the authoritative source. There is no filler or redundant phrasing.
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 one-parameter, read-only, idempotent lookup tool with a high-coverage schema and an output schema present, the description conveys all needed selection and invocation information. The source is named, and annotations cover safety and behavior, leaving no critical gap.
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 100%, and the parameter description already explains that name_or_uid accepts a company name or UID format. The tool description adds little beyond echoing 'UID' and the general purpose, so it does not significantly enhance what the schema already provides. Baseline 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 states a specific verb ('check'), a resource ('whether a company is registered'), and the exact data points returned (UID, legal seat, commercial register, VAT status). It clearly singles out the federal UID register, making it easy to distinguish from sibling tools like search_official_info or swiss_place_info.
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 scope is clear: this tool is specifically for checking Swiss company registration via the federal UID register. Although it does not explicitly name excluded alternatives, the domain is narrow and distinct from the other Swiss information tools, so an agent can infer when it should be selected.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
current_weatherCurrent weather (MeteoSwiss)ARead-onlyIdempotent
Latest measured weather (temperature, humidity, precipitation, wind) at the MeteoSwiss station nearest to a Swiss municipality. Measurements only, no forecasts.
| Name | Required | Description | Default |
|---|---|---|---|
| place | No | Municipality, postcode, address or canton as the user said it, in any language (e.g. 'Lugano', '8003', 'Genf', 'Bahnhofstrasse 1, Zürich'). | |
| language | No | Language of the user's question. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| status | Yes | |
| summary | Yes | |
| guidance | No | |
| citations | No | |
| missing_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds that it returns measured data only (no forecasts) and clarifies the source (MeteoSwiss station) and the selection criterion (nearest to a Swiss municipality). This adds context beyond 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?
A single, information-dense sentence that front-loads the core purpose and immediately clarifies the scope and limitation. No wasted words, and the structure is easy to parse.
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 an output schema, so return format is covered. The description explains what data it returns, where it comes from, and what it doesn't do. With annotations handling safety and the schema handling parameters, nothing essential is missing for an agent to use it 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 input schema has 100% description coverage for both parameters, including examples for 'place' and an enum with default for 'language'. The description adds no additional parameter-specific meaning, which is acceptable since the schema already fully documents them. Baseline 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 the tool returns the latest measured weather (temperature, humidity, precipitation, wind) at the MeteoSwiss station nearest to a Swiss municipality. It also explicitly notes 'Measurements only, no forecasts,' which sharply distinguishes it from any forecast tool. No sibling covers weather, so this is 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 provides a clear context: for current measured weather at a Swiss location. It explicitly excludes forecasts ('Measurements only, no forecasts'), which tells the agent when not to use this tool. While it doesn't name an alternative, none exists among siblings, so the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
federal_votesFederal votesARead-onlyIdempotent
Subjects of the next federal popular vote, or official results of a past vote.
| Name | Required | Description | Default |
|---|---|---|---|
| place | No | Canton to add its result, optional. | |
| language | No | Language of the user's question. | de |
| vote_date | No | ISO date of a vote; omit for the next vote (or the latest if none is scheduled). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| status | Yes | |
| summary | Yes | |
| guidance | No | |
| citations | No | |
| missing_context | No |
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 the dual-mode behavior (subjects for next vote vs. results for past vote), which is not in annotations. It does not disclose any other behavioral traits like data freshness or error handling, but given the strong annotation coverage, this is adequate.
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 a single, well-structured sentence that front-loads the two primary outcomes. There is no filler or repetition; every word contributes to the 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?
With a complete schema (100% param descriptions), an output schema, and strong annotations, the description adequately covers the tool's purpose. It mentions the key distinction between future subjects and past results, which is the main contextual nuance. It does not need to detail return structure since an output schema exists.
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 provides full descriptions for all three parameters (place, language, vote_date) with 100% coverage. The description does not add any additional parameter semantics beyond what the schema already conveys, so a baseline 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 states the tool's core function: returning subjects of the next federal popular vote or official results of a past vote. It clearly identifies the resource (federal votes) and the two operational modes. It does not explicitly distinguish from siblings, but the sibling list (transport, weather, law) makes the purpose distinct enough.
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 when to use the tool: when a user asks about federal vote subjects or results. However, it does not explicitly mention alternatives or exclusions, such as 'use search_official_info for other federal topics'. The usage context is clear from the description but not formally stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
public_transportPublic transport timetableARead-onlyIdempotent
Swiss public transport connections or next departures (official timetable data).
| Name | Required | Description | Default |
|---|---|---|---|
| when | No | ISO date-time (Europe/Zurich), e.g. 2026-10-01T08:30; default now. | |
| limit | No | ||
| origin | No | Departure station or place, e.g. 'Zürich HB'. | |
| arrival | No | Interpret `when` as arrival time. | |
| destination | No | Destination; omit for a departure board. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| status | Yes | |
| summary | Yes | |
| guidance | No | |
| citations | No | |
| missing_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive, idempotent behavior, so the description only needs to add value beyond those hints. It adds that the data is 'official timetable data' and that the tool supports two modes, which is useful context about the result nature. 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?
One sentence with no filler; the geographic scope, data source, and dual modes are front-loaded. It is as concise as possible while giving the essential 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?
For a read-only query tool with an output schema and well-documented optional parameters, the description is nearly complete: it names the domain, scope, and modes. A small gap is not explicitly instructing when to use 'connections' vs 'next departures', but the schema's destination parameter covers this.
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 80%, so the schema carries most parameter documentation; the description does not repeat or add parameter-level detail. The one undocumented parameter (limit) is adequately constrained by min/max/default in the schema, so this is acceptable.
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 names a specific resource ('Swiss public transport') and the two main operations ('connections or next departures'), making the tool's purpose immediately recognizable. It lacks an explicit verb such as 'search' or 'get' and does not explicitly contrast with sibling tools, but no other sibling covers public transport.
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 when to use the tool: whenever a user needs Swiss public transport connections or a departure board. It does not state exclusions or compare with alternatives such as swiss_place_info or swiss_coverage, so usage guidance is inferred rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_official_pageRead an official pageARead-onlyIdempotent
Fetch the current text of an official Swiss page (live, respecting robots.txt) and return the
passages around focus. Only official Swiss domains are allowed.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL on an official Swiss domain (admin.ch, ch.ch, a cantonal or municipal site), typically from search_official_info. | |
| focus | No | Words to focus on, e.g. 'délai 12 mois'. | |
| max_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| status | Yes | |
| summary | Yes | |
| guidance | No | |
| citations | No | |
| missing_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations: it mentions the tool is 'live, respecting robots.txt', which is not covered by readOnlyHint or idempotentHint. It also clarifies the output behavior (passages around focus). While it doesn't discuss rate limits or error handling, the annotations already cover safety, and the added details are useful. 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 two sentences, with the primary action and restriction front-loaded. Every phrase serves a purpose: it states the action, the live/robots.txt behavior, the focus-passage output, and the domain restriction. No fluff or 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 that an output schema exists, the description does not need to detail return values. It covers the tool's purpose, the key behavioral nuance (robots.txt), and the focus mechanism. The only minor gap is the lack of explicit guidance on error cases or what happens when the URL is not on an official domain, but these are not critical for an agent to call 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?
Schema coverage is 67% (url and focus have descriptions, max_chars does not). The description adds value for the 'focus' parameter by explaining it is used to return surrounding passages, which complements the schema's example. However, it does not explain 'max_chars' or its constraints, and the description does not fully compensate for the missing schema description on that parameter.
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 verb 'Fetch', the resource 'official Swiss page', and the specific behavior of returning passages around a focus word. It also imposes a domain restriction, which distinguishes it from generic web-fetch tools and sibling tools like search_official_info. The purpose is unmistakable.
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 does not explicitly state when to use this tool versus alternatives, nor does it name any sibling tool. It implies usage for reading a specific official page (since it says 'typically from search_official_info' in the parameter schema, but not in the main description). The guidance is implicit, relying on the agent to infer that this is for fetching a known URL rather than searching.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_official_infoSearch official Swiss informationARead-onlyIdempotent
Full-text search over official Swiss web pages: ch.ch (all languages), federal offices, the 26
cantons and large cities. Use for procedures, rules, deadlines, fees and "how do I…" questions
(permits, moving, taxes, social insurance, driving licences, customs, schools, housing, voting).
Give place to restrict results to federal + that canton/municipality. Returns verbatim excerpts
with URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| place | No | Municipality, postcode, address or canton as the user said it, in any language (e.g. 'Lugano', '8003', 'Genf', 'Bahnhofstrasse 1, Zürich'). | |
| query | Yes | Key words of the question, ideally in the language of the source (e.g. 'permis de conduire étranger échanger'). | |
| language | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| status | Yes | |
| summary | Yes | |
| guidance | No | |
| citations | No | |
| missing_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/destructive safety, and the description adds substantive behavioral context: it scopes place-based filtering ('federal + that canton/municipality') and reveals the output shape ('Returns verbatim excerpts with URLs'). This goes beyond what annotations and schema alone convey.
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, front-loaded with the core purpose, and each sentence adds useful detail (scope, use cases, place behavior, output format). 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?
With an output schema present and rich annotations, the description covers the main operational points: scope, use cases, place filtering, and output format. It omits details like pagination and rate limits, but for a read-only search tool with output schema, this is near-complete. It could still benefit from an explicit pointer to sibling tools (e.g., swiss_federal_law) for law-specific queries.
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 only 50%, so the description should help clarify parameters. It adds meaning for `place` by explaining its filtering effect. It does not mention `limit` or `language` behavior, and the schema already documents `query`, `place`, and `language`. The description's extra value is moderate.
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 ('Full-text search') and a precise resource ('official Swiss web pages: ch.ch, federal offices, the 26 cantons and large cities'), making the tool's purpose immediately clear. It does not explicitly name sibling tools to distinguish from, so it stops short of a 5.
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 says 'Use for procedures, rules, deadlines, fees and "how do I…" questions' and lists concrete example topics. This gives clear context for when the tool is appropriate, though it does not state when not to use it or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
swiss_coverageWhat this server coversARead-onlyIdempotent
List the topics, geography, sources and freshness this server covers, and what it does not. Call this only when unsure whether a question is in scope.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| status | Yes | |
| summary | Yes | |
| guidance | No | |
| citations | No | |
| missing_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already convey read-only, idempotent, and open-world behavior, so the description's burden is low. It adds value by specifying which coverage dimensions the tool reports and explicitly mentioning that it also states what is not covered, which helps set expectations about the response.
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?
Two short sentences carry the full meaning: the first states what the tool lists, the second states precisely when to call it. There is no filler, and the key scoping guidance 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?
For a parameterless coverage tool with rich annotations and an output schema, the description is complete. It tells the agent what to expect from the tool and when to use it, leaving no meaningful gap for selection or 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 tool has zero parameters, so the description cannot add parameter-level meaning. The baseline for parameterless tools is 4, and the description correctly focuses on what information the tool returns instead of inputs.
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 names a specific verb ('List') and a concrete resource: the server's coverage across topics, geography, sources, and freshness. It also explicitly states what the tool does not cover, which clearly differentiates it from the domain-specific sibling 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 gives an explicit condition for use: 'Call this only when unsure whether a question is in scope.' This tells the agent exactly when to invoke this meta-coverage tool and implies that confident, in-scope questions should go to the relevant sibling tools instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
swiss_federal_lawSwiss federal law (Fedlex)ARead-onlyIdempotent
Quote federal law from the official consolidated text on Fedlex (version currently in force), with article links. Federal law only; cantonal law is not included.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Title words to find an act, or (with sr_number) a topic to find the relevant articles, e.g. 'Kündigungsfrist'. | |
| article | No | Article number, e.g. '335c', '42'. | |
| language | No | Language of the user's question. | de |
| sr_number | No | SR number or abbreviation: '220' or 'OR'/'CO', 'ZGB'/'CC', 'SVG', 'VZV', 'AIG', 'KVG', 'AHVG', 'MWSTG'… |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| status | Yes | |
| summary | Yes | |
| guidance | No | |
| citations | No | |
| missing_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the tool's safety profile is clear. The description adds valuable behavioral context beyond annotations by specifying the source is the official consolidated text, that it is the version currently in force, and that article links will be included.
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?
Two sentences carry substantial, non-redundant information: source, version, output feature, and scope limitation. Nothing is wasted, and the key purpose 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 full input schema, the presence of an output schema, and the annotation set, the description covers the essential context: what source is used, which version, and what the output includes. It is not exhaustive about edge cases or parameter combinations, but the structured fields already handle those, so the description is complete enough for an agent to invoke 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?
Schema description coverage is 100%, so the baseline is 3 even though the tool description adds no detailed parameter semantics. The description's mention of 'article links' and 'federal law' loosely maps to the article and sr_number/query parameters, but it does not materially enrich the schema's parameter explanations.
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 operation ('Quote federal law'), the specific source ('official consolidated text on Fedlex'), the version ('currently in force'), and a distinctive output feature ('with article links'). It also distinguishes itself from broader legal or informational tools by explicitly limiting scope to federal law and excluding cantonal law.
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 when to use the tool: quoting federal law from Fedlex. The 'Federal law only; cantonal law is not included' statement gives an explicit when-not-to-use boundary. It does not name alternative sibling tools, so it falls short of a 5, but the usage scope is more than merely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
swiss_holidaysSchool and public holidaysBRead-onlyIdempotent
School holidays by canton or municipality, or public holidays, for a year.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | School holidays or public holidays. | school |
| year | No | Calendar year; default current year. | |
| place | No | Municipality, postcode, address or canton as the user said it, in any language (e.g. 'Lugano', '8003', 'Genf', 'Bahnhofstrasse 1, Zürich'). | |
| language | No | Language of the user's question. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| status | Yes | |
| summary | Yes | |
| guidance | No | |
| citations | No | |
| missing_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds no behavioral details beyond the schema, such as data coverage limitations or how conflicts between place and year are resolved. No contradiction with annotations exists.
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 a single, compact sentence that front-loads the core resource and its main scoping dimensions. Every word earns its place, and there is no redundant restating of the title or parameter names.
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 read-only query tool with a rich output schema and complete parameter documentation, the description is sufficient for selection and invocation. A minor gap is that it does not clarify whether 'place' only applies to school holidays or also to public holidays, but this is not critical given the schema context.
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 covers 100% of parameters with detailed descriptions, so the baseline is 3. The description adds only a slight mapping by saying 'canton or municipality' for place and 'public holidays' for kind, which is already reflected in the schema text. No new semantic meaning is added.
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 the resource (school/public holidays) and the key scoping dimensions (place, year), which clearly distinguishes it from all sibling tools. It lacks an explicit verb like 'get' or 'list', but the intent is unmistakable and the title reinforces the subject.
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?
There is no explicit guidance on when to use this tool versus alternatives, or any exclusions. The use case is implied by the name and description, but the description does not state 'use this when the user asks for holidays' or mention any sibling it replaces or complements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
swiss_place_infoSwiss place factsARead-onlyIdempotent
Resolve a Swiss place to its official municipality: BFS number, canton, district, postcodes, permanent resident population (latest BFS figure) and official website. Use for "how many people live in X", "which canton is X in", or to find a municipality's website.
| Name | Required | Description | Default |
|---|---|---|---|
| place | No | Municipality, postcode, address or canton as the user said it, in any language (e.g. 'Lugano', '8003', 'Genf', 'Bahnhofstrasse 1, Zürich'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| status | Yes | |
| summary | Yes | |
| guidance | No | |
| citations | No | |
| missing_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safe read-only nature is covered. The description adds useful behavioral context: it returns the 'latest BFS figure' and resolves to 'official municipality' data, clarifying that results are standardized and current. It does not discuss edge cases like ambiguous place names, but the annotation coverage lowers the burden.
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 and every part earns its place: a clear capability statement, an explicit list of returned fields, and concrete example use cases. It is front-loaded with the core action and output list before the usage examples.
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-optional-parameter lookup tool with a rich parameter schema, an output schema, and safety annotations, the description covers what the tool does, what it returns, and when to invoke it. Nothing essential is missing for an agent to select and call it 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?
Schema description coverage is 100%, and the parameter's schema already explains accepted forms ('Lugano', '8003', 'Genf', 'Bahnhofstrasse 1, Zürich') and languages. The tool description adds no new parameter-level meaning beyond what the schema provides, so baseline 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?
Description states a specific action ('Resolve a Swiss place to its official municipality') and a concrete resource, then enumerates the exact outputs: BFS number, canton, district, postcodes, population, and website. It also gives representative queries, making the tool's purpose unmistakable and distinguishing it from sibling tools like search_official_info.
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 lists trigger questions: 'how many people live in X', 'which canton is X in', and finding a municipality's website, which tells an agent when to use it. It does not explicitly state when not to use it or name alternatives, but the provided use cases are sufficient for a single-purpose lookup tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
swiss_ratesReference interest rate and exchange ratesARead-onlyIdempotent
Current mortgage reference interest rate for rents (BWO) or SNB CHF exchange rates.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Mortgage reference rate for rents (BWO), or SNB exchange rate. | |
| currency | No | For exchange_rate: EUR, USD, GBP… | |
| language | No | Language of the user's question. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| status | Yes | |
| summary | Yes | |
| guidance | No | |
| citations | No | |
| missing_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds modest value by stating the data is current and sourced via BWO/SNB, but it does not describe pagination, units, or any time-dependence beyond the word 'Current'.
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?
A single front-loaded sentence that covers both data modes with no filler. Every word contributes to the agent's ability to choose the right kind.
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 lookup with a full output schema and complete parameter schema, this description is sufficient. The only minor gap is that 'BWO' is not expanded in the description itself, though the schema's kind description also uses the acronym.
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 100%, so the schema documents all three parameters. The description adds the BWO/SNB context but essentially restates what the kind parameter's description already contains, so it provides no significant extra parameter semantics.
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 identifies the tool as providing two specific data products: the current BWO mortgage reference rate and SNB CHF exchange rates. It lacks an explicit retrieval verb, but 'Current ... or ...' makes the query intent clear and the two modes are distinct.
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 clearly separates the two use cases (reference interest rate vs exchange rate), which tells an agent when to select this tool. It does not mention when not to use it, but none of the sibling tools covers this data domain, so exclusion guidance is less critical.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
waste_collectionWaste collection datesARead-onlyIdempotent
Next waste collection dates (cardboard, paper, household waste, green waste…) from municipal open data. Needs the municipality; some cities also need postcode or street (the tool will say).
| Name | Required | Description | Default |
|---|---|---|---|
| place | No | Municipality, postcode, address or canton as the user said it, in any language (e.g. 'Lugano', '8003', 'Genf', 'Bahnhofstrasse 1, Zürich'). | |
| street | No | Street (and number) if the user gave one. | |
| from_date | No | ISO date to start from; default today. | |
| waste_type | No | e.g. Karton/carton/cartone, Papier, Kehricht, Grüngut, Metall. Omit for all types. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| status | Yes | |
| summary | Yes | |
| guidance | No | |
| citations | No | |
| missing_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering safety. The description adds behavioral context beyond that: it mentions the tool may request additional input ('the tool will say') and specifies the data source ('municipal open data'), which is not in annotations. This is useful supplementary information.
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 a single, compact sentence that front-loads the core function and then gives a concise usage note. Every word serves a purpose, with no redundancy or filler.
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 (4 optional, well-documented parameters, output schema present, safety annotations), the description is complete. It covers what the tool returns, what input is needed, and how it handles missing information. No critical operational detail is missing.
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 100%, so the baseline is 3. The description adds value by clarifying that a municipality is effectively required ('Needs the municipality') and that additional parameters may be needed conditionally, which is not captured in the schema's optional flags. This supplements the parameter documentation meaningfully.
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 ('Next waste collection dates') and resource (municipal waste data), and lists example waste types. It clearly differentiates from sibling tools like public_transport or current_weather, which address entirely different domains.
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 'Needs the municipality' and notes that some cities need postcode or street, giving practical input requirements. It does not explicitly name alternatives or state when not to use it, but the tool name and sibling context make the intended use obvious. Slight gap in explicit exclusion guidance.
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.
13 tool updates
v0.1.0- First observed
company_register - First observed
current_weather - First observed
federal_votes - First observed
health_insurance_premiums - First observed
public_transport - First observed
read_official_page - First observed
search_official_info - First observed
swiss_coverage - First observed
swiss_federal_law - First observed
swiss_holidays - First observed
swiss_place_info - First observed
swiss_rates - First observed
waste_collection
TDQS
Scored across 13 tools
Each tool addresses a clearly distinct domain (e.g., transport, legal texts, health premiums, weather, company registry). The only related pair is search_official_info and read_official_page, but one is for finding pages and the other for reading specific content, so no ambiguity.
All tools use lowercase with underscores, but they mix prefixes ('swiss_' vs none) and verb/alNoun patterns (e.g., 'public_transport' vs 'search_official_info'). Still, the naming is readable and follows a consistent snake_case convention, so minor deviations do not cause confusion.
With 13 tools, the server covers a broad range of Swiss official information without being excessive. Each tool serves a distinct purpose and fits the stated goal of Swiss grounding, making the count appropriate.
The server covers major Swiss information domains: transport, official search, laws, health insurance, holidays, waste, votes, rates, companies, and weather. It also includes a coverage tool to handle out-of-scope queries, mitigating potential gaps. The lifecycle is appropriate for a read-only grounding server.
Maintenance
Related MCP Connectors
Swiss federal law (Fedlex) and political data (LINDAS) for agents, every answer with sources
Swiss weather data for AI assistants — forecasts, measurements, stations, pollen.
Search and verify Swiss companies, UID status and register changes with dated official sources.
Official Swiss living-cost & relocation data for all 26 cantons — taxes, rent, premiums, jobs.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceVerified knowledge base for AI agents. Stop hallucinations with certified, source-backed facts. Covers Swiss law, health, finance, climate, AI/ML, and more. 8 tools, no API key needed, public and free.MIT
- AlicenseNot gradedqualityDmaintenanceConnects AI assistants to the Swiss I14Y Interoperability Platform, enabling natural language exploration of government datasets, APIs, codelists, and public services.MIT
- FlicenseNot gradedqualityBmaintenanceA production-minded Agentic RAG backend for informational guidance about Swiss immigration and administrative procedures, using only official Swiss government sources with evidence metadata.1-
- AlicenseNot gradedqualityBmaintenanceProvides AI assistants with citable access to Bernese laws (BSG) and administrative court rulings (Verwaltungsgericht Bern) via search, retrieval by number, and article extraction.MIT