Skip to main content
Glama

:switzerland: Part of the Swiss Public Data MCP Portfolio

:balance_scale: fedlex-mcp

Version License: MIT Python 3.11+ MCP No Auth Required CI

MCP Server for Swiss federal law, consultations & official terminology — search the SR, monitor consultation deadlines, and translate terms across the national languages via Claude Desktop or Claude.ai

:de: Deutsche Version


Overview

fedlex-mcp connects AI assistants (Claude) with three official Swiss SPARQL data sources:

  1. Federal law via the Fedlex SPARQL endpoint — the Systematic Compilation (SR), Official Compilation (AS), Federal Gazette (BBl) and treaties.

  2. Consultations (Vernehmlassungen) via the same Fedlex endpoint (jolux:Consultation) — the pre-parliamentary phase in which anyone can comment on a draft.

  3. TERMDAT, the Federal Chancellery's terminology database, via the LINDAS SPARQL endpoint — official term equivalents across de/fr/it/rm/en.

All three are SPARQL-based, which is exactly why they live in one server rather than three: no new technology stack, only new queries against known patterns.

Metaphor: USB-C for federal law. Fedlex tells you what you have to respond to. TERMDAT tells you what it is called in the other national languages.


Related MCP server: swiss-courts-mcp

Features

  • :balance_scale: 12 tools, 2 resources across federal law, consultations and terminology

  • :mag: SPARQL-powered — two isolated endpoints (Fedlex + LINDAS), no shared failure mode

  • :globe_with_meridians: 5 languages — German, French, Italian, Romansh, plus English for terminology

  • :unlock: No API key required — all data under open reuse licences

  • :cloud: Dual transport — stdio (Claude Desktop) + Streamable HTTP (cloud)


Anchor demo query

"Which education-related consultations are currently open, until when does the deadline run, which office is in charge — and what are the key technical terms in French and Italian for the response?"

A single conversation chains three tools across two endpoints:

fedlex_get_open_consultations(topic="education")
   → fedlex_get_consultation(event_id="proj/2026/71/cons_1")
   → termdat_lookup_term(term="Volksschule", target_languages=["fr","it"])

Every open consultation carries deadline, days_remaining (computed at request time in Europe/Zurich, 0 = deadline is today) and a derived status — an expired consultation never shows up as running. Fedlex says what you must respond to and by when; TERMDAT says how to name it in the other national languages.

Use topic="education", not keyword="Volksschule". Fedlex consultations have no subject taxonomy — filtering is free-text over the title, and the word "Volksschule" appears in zero consultation titles. The topic filter expands to a disclosed keyword union (Bildung, Schule, Berufsbildung, Hochschule, …) and reports exactly which terms it searched.


Prerequisites

  • Python 3.11+

  • uv (recommended) or pip


Installation

Run via uv's uvx — no clone or manual install needed. Add to your MCP client config (mcpServers for Claude Desktop, Cursor and Windsurf; use a top-level servers key for VS Code in .vscode/mcp.json):

{
  "mcpServers": {
    "fedlex-mcp": {
      "command": "uvx",
      "args": [
        "fedlex-mcp"
      ]
    }
  }
}

Installation from source

# Clone the repository
git clone https://github.com/malkreide/fedlex-mcp.git
cd fedlex-mcp

# Install
pip install -e .
# or with uv:
uv pip install -e .

Or with uvx (no permanent installation):

uvx fedlex-mcp

Quickstart

# stdio (for Claude Desktop)
python -m fedlex_mcp.server

# Streamable HTTP (port 8000)
python -m fedlex_mcp.server --http --port 8000

Try it immediately in Claude Desktop:

"Show me all valid federal laws on vocational training" "What does the Data Protection Act say? Is it still in force?" "Which consultations on education are open right now, and until when?" "What is 'Volksschule' called in French and Italian in official terminology?"


Configuration

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "fedlex": {
      "command": "python",
      "args": ["-m", "fedlex_mcp.server"]
    }
  }
}

Or with uvx:

{
  "mcpServers": {
    "fedlex": {
      "command": "uvx",
      "args": ["fedlex-mcp"]
    }
  }
}

Config file locations:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Cloud Deployment (SSE for browser access)

For use via claude.ai in the browser (e.g. on managed workstations without local software):

Render.com (recommended):

  1. Push/fork the repository to GitHub

  2. On render.com: New Web Service -> connect GitHub repo

  3. Set start command: python -m fedlex_mcp.server --http --port 8000

  4. In claude.ai under Settings -> MCP Servers, add: https://your-app.onrender.com/sse

"stdio for the developer laptop, SSE for the browser."


Demo

Demo: Claude using fedlex_search_laws


Available Tools

#

Tool

Source

Description

1

fedlex_search_laws

Fedlex

Search the Systematic Compilation (SR) by keyword in title

2

fedlex_get_law_by_sr

Fedlex

Get a law by its SR number (e.g. 235.1 = Data Protection Act)

3

fedlex_get_recent_publications

Fedlex

Latest publications from the Official Compilation (AS)

4

fedlex_get_upcoming_changes

Fedlex

Laws entering into force soon (legal monitoring)

5

fedlex_search_gazette

Fedlex

Search the Federal Gazette (BBl)

6

fedlex_get_law_history

Fedlex

All versions of a law (version history)

7

fedlex_search_treaties

Fedlex

International treaties (SR numbers starting with 0.)

8

fedlex_get_open_consultations

Fedlex

Deadline monitoring — open consultations (eventEndDate >= today, Europe/Zurich); each with days_remaining + derived status, sorted by shortest deadline; optional topic/keyword

9

fedlex_search_consultations

Fedlex

Full-text search over consultation title/description, with filters (topic, status, deadline range, office)

10

fedlex_get_consultation

Fedlex

Detail for one eventId: deadline, days_remaining, office, derived status, documents

11

termdat_lookup_term

LINDAS

Term → equivalents in de/fr/it/rm/en incl. definition

12

termdat_get_concept

LINDAS

Full TERMDAT entry for a URI or ID

Example Use Cases

Query

Tool

"Show me all valid federal laws on vocational training"

fedlex_search_laws

"What does the Data Protection Act say?"

fedlex_get_law_by_sr

"Which laws enter into force in the next 3 months?"

fedlex_get_upcoming_changes

"Show me the version history of the DSG"

fedlex_get_law_history

"Which consultations on education are open, and until when?"

fedlex_get_open_consultations

"Find closed consultations about the language act"

fedlex_search_consultations

"Give me the full detail and documents for consultation proj/2026/71/cons_1"

fedlex_get_consultation

"What is 'Volksschule' called in French and Italian?"

termdat_lookup_term

"Show the full TERMDAT entry 40109"

termdat_get_concept

→ More use cases by audience →


Architecture

Two isolated SPARQL endpoints behind one server. Separate httpx clients and timeouts mean a LINDAS outage never breaks the fedlex_* tools, and vice versa.

+-------------------+     +------------------------------+     +--------------------------+
|   Claude / AI     |---->|  Fedlex MCP                  |---->|  Fedlex SPARQL Endpoint  |
|   (MCP Host)      |<----|  (MCP Server)                |<----|  fedlex.data.admin.ch    |
+-------------------+     |                              |     |  (law + consultations)   |
                          |  12 Tools . 2 Resources      |     +--------------------------+
                          |  Stdio | SSE                 |
                          |                              |     +--------------------------+
                          |  Isolated clients:           |---->|  LINDAS SPARQL Endpoint  |
                          |   - Fedlex  (law + cons.)     |<----|  lindas.admin.ch/query   |
                          |   - LINDAS  (TERMDAT)         |     |  (fch/termdat, TERMDAT)  |
                          |                              |     +--------------------------+
                          |  No authentication required  |
                          +------------------------------+

Data Model

JOLux Ontology — federal law (Fedlex)

jolux:ConsolidationAbstract  <-  SR entry
  +-- jolux:isRealizedBy  ->  jolux:Expression (URI ends in /de, /fr, /it, /rm)
     +-- jolux:title               "Federal Act of 19 June 1992 on Data Protection"
     +-- jolux:titleShort          "DSG"
     +-- jolux:historicalLegalId   "235.1"

jolux:inForceStatus:  .../0 In force  ·  .../1 No longer published in SR  ·  .../3 No longer in force

JOLux Ontology — consultations (Fedlex, same endpoint)

jolux:Consultation
  +-- jolux:eventId                     "proj/2026/71/cons_1"
  +-- jolux:eventTitle                  multilingual (de/fr/it)
  +-- jolux:eventDescription            multilingual
  +-- jolux:consultationStatus          -> vocabulary URI (0..6, /2 = "Laufend"/running)
  +-- jolux:foreseenImpactToLegalResource  -> the legal resource it will amend (link to SR)
  +-- jolux:hasSubTask  ->  ?t
        +-- jolux:eventStartDate                      <- opened_on
        +-- jolux:eventEndDate                        <- the deadline (xsd:date, calendar day)
        +-- jolux:institutionInChargeOfTheEvent       <- lead department
        +-- jolux:institutionInChargeOfTheEventLevel2 <- lead office
        +-- jolux:opinionHasDraftRelatedDocument      <- consultation documents

There is no subject taxonomy on jolux:Consultation — thematic filtering is free-text over eventTitle only, and status is derived from the deadline (not the source status field).

Legislative lifecycle — where consultations sit (all in this one server):

  Vernehmlassung            Bundesblatt (BBl)          Systematische Sammlung (SR)
  (consultation)     ─────► (dispatch / act text) ───► (consolidated law in force)
  ────────────────         ─────────────────────      ───────────────────────────
  fedlex_get_open_          fedlex_search_gazette      fedlex_search_laws
    consultations           (eli/fga/…)                fedlex_get_law_by_sr
  fedlex_search_                                       fedlex_get_law_history
    consultations                                      (eli/cc/…)
  fedlex_get_consultation
        │  jolux:foreseenImpactToLegalResource
        └───────────────────────────────────────────► links a consultation forward
                                                       to the SR resource it amends

The consultation stage is the earliest public point of influence — the tools above answer what is open and until when, before a draft reaches the Bundesblatt.

schema.org — terminology (TERMDAT via LINDAS, graph fch/termdat)

<concept>  = https://register.ld.admin.ch/termdat/40109      (a schema.ld.admin.ch/Term, ValidatedEntry)
  +-- schema:name         preferred name per language (de/fr/it/en; rm effectively absent)
  +-- schema:description  multilingual definition
  +-- schema:hasPart  ->  <term> = .../termdat/40109/3/de     (synonym/variant, language + position suffix)

SPARQL endpoints: https://fedlex.data.admin.ch/sparqlendpoint · https://lindas.admin.ch/query Licence: Free reuse per fedlex.admin.ch; TERMDAT via LINDAS under open reuse.


Architecture decision

ARCH A — live SPARQL only, for all three data areas, consistent with the existing Fedlex integration (decided 2026-07-18).

Both sources are unauthenticated SPARQL endpoints with acceptable latency, so no dump/offline fallback is needed: if the Fedlex endpoint is down the server cannot function anyway, and adding a cache would only mask that. LINDAS is a separate endpoint, and its outage must not degrade the fedlex_* tools.

Isolation requirement: Fedlex and LINDAS use separate httpx clients, separate timeouts and separate error/status reporting. A LINDAS timeout cannot fail a fedlex_* call and vice versa (covered by an isolation test).


Languages

Code

Language

de

German (default, most complete coverage)

fr

French

it

Italian

rm

Romansh


Project Structure

fedlex-mcp/
+-- src/fedlex_mcp/
|   +-- __init__.py              # Package
|   +-- server.py                # 12 tools, 2 resources (Fedlex + LINDAS)
+-- tests/
|   +-- test_server.py           # Unit tests (mocked)
+-- .github/workflows/ci.yml     # GitHub Actions (Python 3.11/3.12/3.13)
+-- pyproject.toml
+-- CHANGELOG.md
+-- CONTRIBUTING.md               # Contributing guide (English)
+-- CONTRIBUTING.de.md            # Contributing guide (German)
+-- SECURITY.md                   # Security policy (English)
+-- SECURITY.de.md                # Security policy (German)
+-- LICENSE
+-- README.md                    # This file (English)
+-- README.de.md                 # German version

Known Limitations

  • SPARQL complexity: Very broad keyword searches may time out (45s timeout)

  • Language coverage: German has the most complete data; other languages may have gaps

  • Historical data: Not all historical versions of laws have machine-readable metadata

  • Rate limiting: The endpoints may throttle high-frequency requests

Consultations — scope and reliability (read this before relying on it)

  • Federal only. No cantonal consultations. Fedlex holds federal (Bund) consultations. Cantonal consultations — often the more relevant ones for a school authority (Schulamt) — are not in Fedlex and not covered here. This is a hard scope boundary, not a gap to be worked around.

  • This is not a push service. MCP is pull-based: the server answers on request which consultations are open and which expire soon. It cannot notify, schedule, or alert. Recurrence comes from you or an external scheduler — never from the server. "No open consultations" means nothing is open right now, not nothing is coming.

  • Thematic filtering is free-text, and imperfect. jolux:Consultation has no subject/classification taxonomy (verified live 2026-07-20) — filtering is substring search over the title only. topic="education" expands to a disclosed keyword union and deliberately over-matches (a too-narrow filter would falsely reassure); expect some false positives (e.g. "Ausbildung" inside an unrelated title) and, for niche wording, possible false negatives. The response always states which terms were searched.

  • Coverage / latency: ~2,553 consultations; the historical corpus 1960–1991 sits with the Federal Archives, out of scope. Newly opened consultations appear with the upstream Fedlex publication latency (not real-time).

  • Deadlines end on the calendar day in Europe/Zurich; days_remaining is computed at request time, never cached. 0 = the deadline is today.

Live findings (verified 2026-07-20):

Query

Status

Records

Note

COUNT(?s) {?s a jolux:Consultation}

OK

2,553

full inventory

hasSubTask with start/end dates

OK

2,505 of 2,553

48 without any deadline

Open consultations (eventEndDate >= today)

OK

42

deadlines into autumn 2026

consultation-status vocabulary

OK

7 values

/0../6, /2 = running

Title contains "volksschule" / "lehrplan"

OK

0 / 0

anchor term itself finds nothing → use topic

Title contains "bildung" (single) vs topic="education" union

OK

44 vs 66

keyword union is broader

REGEX(LCASE(?t), "a|b") alternation

BROKEN

0

silently empty on this endpoint → OR-chained CONTAINS instead

  • Quirk 1 — the deadline wins over the status field. Status /2 ("Laufend"/running) and eventEndDate are two independent signals. The server derives status from the date: past deadline ⇒ Abgeschlossen, regardless of what the source status claims — so an expired consultation is never listed as running. When the two disagree the record is marked status_conflict: true and keeps the raw label in status_source.

TERMDAT (LINDAS) — findings (verified 2026-07-18)

Query

Status

Records

Note

COUNT(DISTINCT ?s) a schema.ld:Term in graph

OK

77,692

Language tags on schema:name

OK

de/fr/it/en

rm effectively absent (0)

Search schema:name = "Volksschule"

OK

1

returns term URI …/termdat/40109/3/de

Concept URI …/termdat/40109

OK

4 language variants + definition

  • Quirk 2 — reality-check discrepancy (stated plainly). The Federal Chancellery communicates roughly 400,000 TERMDAT entries. LINDAS contains 77,692. The difference is unexplained — presumably only the validated, released subset is published as Linked Data. A negative terminology hit does not mean the term is missing from TERMDAT; it only means it is not in the LINDAS subset. Every TERMDAT response carries this note so the model draws no false conclusion.

  • Quirk 3 — two URI levels. Concept URIs (…/termdat/40109) carry the preferred names and the definition; term URIs with a language/position suffix (…/termdat/40109/3/de) are synonyms/variants linked via schema:hasPart. The tools accept both forms and normalise internally to the concept ID.


What this tool is not

  • Not a subscription or alerting service. It does not watch, notify, e-mail, or remind. It answers when asked. Any recurring check is driven by you or an external scheduler, outside the server.

  • Not a cantonal source. Federal (Bund) consultations only — see Known Limitations.

  • Not legal advice. It returns public metadata and links to official documents. Deadlines and status are derived mechanically from the published data; verify anything decision-critical against the linked Fedlex page.


Swiss federal legislation runs a chain, and this server covers one part of it — the pre-parliamentary consultation. The full chain is representable across three MCP servers:

Vernehmlassung  →  Botschaft  →  Parlament  →  Referendum
(consultation)     (dispatch)    (debate)      (popular vote)
   fedlex-mcp        fedlex-mcp    parlament-mcp   swiss-democracy-mcp
  • Consultation (pre-parliamentary): this server — fedlex_*consultation* tools.

  • Parliamentary phase: parlament-mcp — debates, motions, votes in the Federal Assembly.

  • Popular vote / referendum: swiss-democracy-mcp — federal popular votes. Consultations are a distinct, earlier stage — no overlap, but the same legislative lifecycle.


Project Phase

This server is in Phase 1 (read-only). All tools are annotated readOnlyHint: true / destructiveHint: false and only ever query the public Fedlex SPARQL endpoint — there are no write, send, or filesystem capabilities.

Phase

Scope

Status

1 — Read-only

Query SR/AS/BBl/treaties

✅ current

2 — Write-capable

(none planned)

3 — Multi-agent

(none planned)

A transition to a later phase would require an audit re-run and the human-in-the-loop controls described in the audit catalog before any write-capable tool is added.


MCP Protocol Version

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

Era

Revision

Who reaches it

initialize handshake

2024-11-052025-11-25

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

Per-request envelope

2026-07-28

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

Both revisions are pinned in tests/test_protocol_version.py and asserted against the installed SDK, so a Dependabot bump of mcp cannot move either one silently. 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.

Two consequences of the modern revision are visible in this server:

  • CORS names the routing headers. Mcp-Method, Mcp-Name and Mcp-Protocol-Version ride on every streamable-HTTP request, and a browser may only send a header the server allow-lists. See CORS_ROUTING_HEADERS in server.py.

  • The listing methods carry a freshness hint. tools/list, resources/list, resources/templates/list and server/discover answer with ttlMs 300000 and cacheScope public (CACHE_HINTS). resources/read deliberately does not: it returns federal law, and a client must not treat a repealed enactment as fresh for five minutes.


Testing

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

# Integration tests (live API calls)
pytest tests/ -m "live"

Safety & Limits

  • Read-only: All tools perform SPARQL SELECT queries only — no data is written, modified, or deleted on either endpoint. All 12 tools are annotated readOnlyHint: true / destructiveHint: false / idempotentHint: true.

  • No personal data: Fedlex holds public law, gazettes and consultation metadata; TERMDAT holds official terminology. No personally identifiable information (PII) is processed or stored by this server.

  • Rate limits: The Fedlex and LINDAS SPARQL endpoints are public services without a documented rate limit; use limit parameters conservatively (default 20, max 100). The server enforces a 45s timeout per request per endpoint and retries only transient failures.

  • Endpoint isolation: Fedlex and LINDAS use separate clients and timeouts — a LINDAS outage does not affect the fedlex_* tools.

  • Data freshness: Results reflect the endpoints at query time. No caching is performed by this server.

  • Terms of service: Data is subject to the reuse conditions of fedlex.admin.ch — free reuse for commercial and other purposes.

  • No guarantees: This server is a community project, not affiliated with the Swiss Federal Chancellery. Availability depends on the upstream SPARQL endpoint.


Changelog

See CHANGELOG.md


Contributing

See CONTRIBUTING.md


Security

See SECURITY.md for the security posture, hardening controls, and how to report a vulnerability.


License

MIT License — see LICENSE


Author

Hayal Oezkan . malkreide


Available Tools

12 tools
fedlex_get_consultationA
Read-onlyIdempotent

Detail zu einer Vernehmlassung anhand ihrer eventId. Vollbild zu einem Verfahren: Fristen, federführendes Amt, Status, Vernehmlassungsunterlagen und verknüpfte Rechtsressource — Grundlage für eine Stellungnahme. Führt deadline, days_remaining (zur Laufzeit, Europe/Zurich) und einen abgeleiteten status (Frist gewinnt). Ohne hasSubTask: deadline=null mit Hinweis (wirft nicht). status_conflict markiert einen Widerspruch zwischen Quell-Status und Frist. eventId z.B. aus fedlex_get_open_consultations. event_id='proj/2026/71/cons_1'

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYes
countYes
sourceNo
licenseNo
messageNo
resultsYes
markdownYes
match_typeYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already provide readOnlyHint, idempotentHint, destructiveHint=false. The description adds valuable behavioral context: deadline and days_remaining with timezone, derived status, status_conflict, and handling of missing hasSubTask (deadline=null, no throw). This goes beyond annotations without contradiction.

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

Conciseness5/5

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

Description is short and front-loaded with purpose. Structured tags (use_case, important_notes, example) add value without unnecessary text. Every sentence earns its place.

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

Completeness4/5

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

With an output schema present (not shown), the description need not explain return values. It covers use case, behavioral details, and example. Could be more explicit about the object returned, but it is sufficient for a detail retrieval tool.

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

Parameters3/5

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

Context indicates schema description coverage is 0%, so description must compensate. The description provides an example event_id and mentions its source, but does not elaborate on the language parameter. Although the schema includes descriptions, the tool description adds only marginal meaning. Baseline for low coverage is higher, but the description does not fully compensate.

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

Purpose5/5

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

The description clearly states it retrieves consultation details by event ID. The use_case tag elaborates that it shows full procedure with deadlines, lead office, status, documents, linking to legal resources. This distinguishes it from sibling tools like fedlex_get_open_consultations (list) and fedlex_search_consultations (search).

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

Usage Guidelines3/5

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

The description implies usage after obtaining an eventId from fedlex_get_open_consultations (mentioned in important_notes). However, it does not explicitly state when to use this tool vs alternatives (e.g., search_consultations), nor provides when-not or exclusions. Usage guidance is implied but not explicit.

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

fedlex_get_law_by_srA
Read-onlyIdempotent

Ruft einen Bundeserlass anhand seiner SR-Nummer ab (Detailansicht mit Titel, Abkürzung, Status, Inkrafttreten, Link). Wenn die SR-Nummer bekannt ist (z.B. aus fedlex_search_laws) und vollständige Metadaten zu einem Erlass gebraucht werden. Bei aufgehobenen Erlassen wird — sofern auffindbar — der Nachfolge-Erlass mitgeliefert. SR-Nummer mit Punkt trennen (235.1). sr_number='235.1'

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYes
countYes
sourceNo
licenseNo
messageNo
resultsYes
markdownYes
match_typeYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. Description adds extra behavioral context: it mentions that for repealed decrees, the successor law is provided if available. No contradiction with annotations.

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

Conciseness4/5

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

Description is well-structured with HTML-like tags but remains concise. Front-loaded with purpose and use case. Every sentence adds value, though could be slightly more streamlined.

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

Completeness4/5

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

Given a simple tool with one required parameter and an output schema, description covers what the tool does, when to use it, important usage notes, and expected output fields. Sufficient for correct selection and invocation.

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

Parameters4/5

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

Schema has a description for sr_number parameter with examples. Description adds usage guidance: 'SR-Nummer mit Punkt trennen (235.1)' and an example. Despite 0% schema coverage metric, description compensates well.

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

Purpose5/5

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

Description clearly states it retrieves a federal decree by SR number and lists the details (title, abbreviation, status, etc.). Distinguishes from sibling tools like fedlex_search_laws (which searches) and fedlex_get_law_history (which retrieves history).

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

Usage Guidelines5/5

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

Includes explicit <use_case> tag specifying when to use (when SR number is known, e.g., from fedlex_search_laws) and <important_notes> tag with details about repealed decrees and correct format of SR number.

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

fedlex_get_law_historyA
Read-onlyIdempotent

Ruft die Versionsgeschichte (alle konsolidierten Fassungen) eines Erlasses ab. Nachvollziehen, wann welche Fassung galt — z.B. alte vs. revidierte Gesetzesfassung (DSG 235.1: 1992 vs. nDSG 2020). Sortiert nach Inkrafttreten absteigend, max. 50 Fassungen. SR-Nummer mit Punkt trennen. sr_number='235.1'

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYes
countYes
sourceNo
licenseNo
messageNo
resultsYes
markdownYes
match_typeYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already provide readOnlyHint, idempotentHint, and destructiveHint. The description adds behavioral details: sorted descending by effective date, max 50 versions, and SR number format requirement, which goes beyond annotations.

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

Conciseness5/5

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

The description is concise with a main sentence, followed by structured sections for use case, important notes, and example. Every sentence provides meaningful information with no waste.

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

Completeness4/5

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

Given the output schema exists, the description covers the tool's purpose, usage context, and key constraints. With only one required parameter and clear notes, it is largely complete. Minor omission: no mention of the language parameter default or behavior.

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

Parameters3/5

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

With 0% schema description coverage, the description provides some parameter guidance: example 'sr_number='235.1'' and note to separate SR number with dot. However, the 'language' parameter is not explained. The example adds value but is not comprehensive.

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

Purpose5/5

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

The description clearly states the tool retrieves version history (all consolidated versions) of a law, with a specific use case and example. It distinguishes itself from sibling tools that search laws or get current law by SR number.

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

Usage Guidelines4/5

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

The use case explains when to use it (comparing old vs revised law versions). Important notes provide context on sorting and limits. However, it does not explicitly state when not to use it or mention alternatives.

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

fedlex_get_open_consultationsA
Read-onlyIdempotent

Listet aktuell OFFENE Vernehmlassungen des Bundes (Fristen-Monitoring). «Auf welche Vorlagen kann man jetzt noch Stellung nehmen, und bis wann?» — vorparlamentarisches Verfahren, Frist-Überwachung. Filtert über die Frist (eventEndDate >= heute in Europe/Zurich, Fristtag inklusive), NICHT über den Status — die Frist ist massgebend. Jeder Treffer führt deadline, days_remaining (zur Laufzeit berechnet, 0 = Frist heute) und einen abgeleiteten status; bei Widerspruch zum Quell-Status status_conflict=true. Sortiert nach kürzester Restfrist. Thema via topic='education' (ausgewiesene Stichwort-Union) oder exaktem keyword. Leeres Resultat = «nichts offen», NICHT «nichts kommt». topic='education'

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYes
countYes
sourceNo
licenseNo
messageNo
resultsYes
markdownYes
match_typeYes

TDQS

A4.1/5.0
Behavior5/5

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

Annotations (readOnlyHint, idempotentHint, destructiveHint) are consistent. The description adds key behavioral details: filtering by eventEndDate >= today in Europe/Zurich, computation of days_remaining and status_conflict, and sorting by shortest remaining deadline. 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.

Conciseness3/5

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

The description uses XML-like tags and is somewhat verbose. Each section adds value, but the overall structure could be more concise (e.g., merging use_case and important_notes). It is not minimal, but not overly bloated.

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

Completeness4/5

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

Given the presence of output schema, the description does not need to detail return values. It covers purpose, behavioral logic, and parameter hints adequately. However, it lacks information on rate limits or authentication, though annotations cover safety. Overall, it is fairly complete for the complexity.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It only briefly mentions topic and keyword in important_notes, but does not describe limit, language, or the date-based filtering criteria. The explanation for keyword is helpful but insufficient for full parameter understanding.

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

Purpose5/5

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

The description clearly states 'Listet aktuell OFFENE Vernehmlassungen des Bundes (Fristen-Monitoring)', specifying verb, resource, and context. The use_case reinforces the purpose of deadline monitoring. This distinguishes it from siblings like fedlex_search_consultations, which likely covers all consultations.

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

Usage Guidelines4/5

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

The important_notes explain filtering logic (by deadline, not status), sorting, and interpretation of empty results. It provides an example and guidance on topic vs keyword. However, it does not explicitly compare with siblings or state when to use this tool versus fedlex_get_consultation.

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

fedlex_get_recent_publicationsA
Read-onlyIdempotent

Ruft die neuesten Publikationen der Amtlichen Sammlung (AS) ab. Regelmässiges Monitoring von Rechtsänderungen — was wurde in den letzten N Tagen neu publiziert oder geändert? Liefert Erstpublikationen (AS), nicht den konsolidierten Stand. Zeitfenster über days (1–365). days=30, language='de'

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYes
countYes
sourceNo
licenseNo
messageNo
resultsYes
markdownYes
match_typeYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint, idempotentHint, and destructiveHint are false. The description adds value by explaining it returns 'Erstpublikationen (AS)' and not the consolidated version, which is crucial behavioral information 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.

Conciseness5/5

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

The description is very concise with two sentences and three XML tags. It front-loads the purpose and uses structured tags for use_case, important_notes, and example, making it efficient for an AI agent to parse.

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

Completeness4/5

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

For a straightforward retrieval tool, the description covers the essential behavioral aspects: what is retrieved (AS publications), the time window, and a usage example. The output schema exists, so return values are not needed. The limit parameter is missing, so it's not fully complete.

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

Parameters3/5

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

The description mentions days range in important_notes and provides an example with days and language. However, it does not explain the limit parameter. The schema already describes days and language, so the description adds marginal extra meaning. The parameter coverage in the description is incomplete.

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

Purpose5/5

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

The description clearly states it retrieves the latest publications of the Amtliche Sammlung (AS). The use_case tag provides concrete context for monitoring legal changes. This distinguishes it from sibling tools like fedlex_search_laws or fedlex_get_law_by_sr.

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

Usage Guidelines4/5

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

The description includes a use_case (regular monitoring) and important_notes that clarify it returns first publications, not consolidated law. This gives clear guidance on when to use the tool. However, it does not explicitly mention when to avoid it or name alternative tools.

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

fedlex_get_upcoming_changesA
Read-onlyIdempotent

Ruft Erlasse ab, die in den nächsten N Tagen in Kraft treten. Proaktives Rechtsmonitoring für Verwaltung und Schulen: welche Gesetze werden bald wirksam (Datenschutz, Bildung, Regulierung)? Berücksichtigt nur künftige Inkraftsetzungen (dateEntryInForce > heute). Fenster über days_ahead (1–365). days_ahead=90

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYes
countYes
sourceNo
licenseNo
messageNo
resultsYes
markdownYes
match_typeYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds that it only considers future dates (dateEntryInForce > heute) and the configurable time window via days_ahead. This goes beyond annotations with no contradictions.

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

Conciseness4/5

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

The description is short and front-loaded with the primary action. XML tags structure the additional context effectively. A minor deduction for redundancy (the core sentence repeats the title), but overall concise.

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

Completeness3/5

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

The tool has an output schema, which reduces the need to describe return values. However, the description lacks coverage of two parameters (limit, language) and does not explain behavior at limits. Adequate for a simple retrieval tool but not fully comprehensive.

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

Parameters2/5

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

Schema description coverage is 0%, yet the description only explains days_ahead (via example and note). The limit and language parameters are not described at all, leaving the agent uncertain about their purpose. The description partially compensates for one parameter out of three.

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

Purpose5/5

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

The description clearly states it retrieves upcoming changes to laws ('Ruft Erlasse ab, die in den nächsten N Tagen in Kraft treten'), with a specific verb, resource, and scope (future effective dates). This distinguishes it from sibling tools like fedlex_search_laws or fedlex_get_law_by_sr.

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

Usage Guidelines4/5

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

The <use_case> tag provides explicit guidance for proactive legal monitoring. The <important_notes> ensures only future dates are considered and the window size is constrained. However, it does not mention when not to use this tool or suggest alternative tools.

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

fedlex_search_consultationsA
Read-onlyIdempotent

Volltextsuche über Vernehmlassungen (Titel und Beschreibung), mit Filtern. Recherche im vorparlamentarischen Verfahren — auch abgeschlossene Vernehmlassungen, nach Status, Zeitraum oder federführendem Amt. Filter: topic (Stichwort-Union, ausgewiesen), keyword (Titel+Beschreibung), status (Kurzcode), from_date/to_date auf die Frist, institution (Teilstring im Amt). status ist abgeleitet (Frist gewinnt), days_remaining zur Laufzeit. Für reines Fristen-Monitoring offener Verfahren fedlex_get_open_consultations nutzen. topic='education', status='closed'

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYes
countYes
sourceNo
licenseNo
messageNo
resultsYes
markdownYes
match_typeYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false; description adds behavioral details like status derivation, runtime days_remaining, and filter semantics (e.g., topic is a keyword union). 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.

Conciseness5/5

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

Description is front-loaded with main purpose, then uses structured tags (<use_case>, <important_notes>, <example>) to concisely convey usage, filters, and example, with no redundancy.

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

Completeness5/5

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

Given the tool's complexity (multiple filters, derived fields) and the presence of an output schema, the description covers use case, filters, behavior, and alternatives, making it complete for an agent to use correctly.

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

Parameters4/5

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

Despite schema description coverage reported as 0%, the description explains each filter (topic, keyword, status, dates, institution) and their semantics (e.g., status derived, days_remaining). Adds value beyond the schema's type constraints.

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

Purpose5/5

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

Description clearly states 'Volltextsuche über Vernehmlassungen' (full-text search over consultations) with filters, distinguishing it from sibling tools like fedlex_search_laws and explicitly calling out the alternative fedlex_get_open_consultations.

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

Usage Guidelines5/5

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

Description provides explicit use case (pre-parliamentary research), when to use (with filters), and when not to (pure deadline monitoring, refer to fedlex_get_open_consultations). Also explains derived status and days_remaining.

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

fedlex_search_gazetteA
Read-onlyIdempotent

Durchsucht das Bundesblatt (BBl) nach amtlichen Publikationen. Politisches Frühwarnsystem: Botschaften des Bundesrates, Parlaments- und Volksinitiativen, Vernehmlassungen. BBl ≠ konsolidiertes Recht — für geltende Gesetze fedlex_search_laws nutzen. Optional auf ein Jahr einschränken. keywords='Berufsbildung', year=2024

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYes
countYes
sourceNo
licenseNo
messageNo
resultsYes
markdownYes
match_typeYes

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds context about the specific publication (BBl) and its nature as official publications, but no new behavioral traits beyond annotations.

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

Conciseness5/5

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

Very concise: one sentence for purpose, then structured use_case, important_notes, and example. Every part adds value without redundancy.

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

Completeness5/5

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

Given the output schema exists and annotations cover safety, the description fully covers purpose, usage, differentiation, and key constraints. It is complete for a search tool.

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

Parameters3/5

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

The input schema already includes descriptions for `keywords` and `year`. The tool description adds an example but no additional semantic detail beyond what the schema provides. Baseline 3 applies.

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

Purpose5/5

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

The description clearly states it searches the Federal Gazette for official publications, and distinguishes from `fedlex_search_laws` for consolidated law. The use case tag further specifies political early warning, messages, initiatives, and consultations.

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

Usage Guidelines5/5

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

Explicit guidance on when to use (political early warning) and when not to use (for current laws, use `fedlex_search_laws`). Also hints at optional year restriction.

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

fedlex_search_lawsA
Read-onlyIdempotent

Durchsucht die Systematische Rechtssammlung (SR) des Bundes nach Erlasstiteln und liefert SR-Nummer, Abkürzung, Status und Link. Juristische/verwaltungsbezogene Recherche: konsolidiertes Bundesrecht (Gesetze, Verordnungen, Vereinbarungen) per Stichwort finden. Sucht nur im Titel, nicht im Volltext. Standardmässig nur in Kraft stehende Erlasse (in_force_only=true). Liefert einen strukturierten Envelope (results + markdown). keywords='Datenschutz', language='de'

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYes
countYes
sourceNo
licenseNo
messageNo
resultsYes
markdownYes
match_typeYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds valuable behavioral context: searches only titles (not full text), defaults to in_force_only=true, and returns a structured envelope. 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.

Conciseness5/5

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

The description is concise, front-loading the purpose, and uses structured XML tags for use_case and important_notes. Every sentence provides value, with no wasted words.

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

Completeness4/5

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

For a search tool with 4 parameters and an output schema, the description covers the main use case, important behavioral notes, and return envelope structure. It is complete enough given the existence of an output schema and annotations.

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

Parameters3/5

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

Schema description coverage is 0%, but the input schema itself provides detailed descriptions for each parameter (keywords, limit, language, in_force_only). The description adds an example but does not significantly enhance parameter understanding beyond the schema. Baseline of 3 is appropriate.

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

Purpose5/5

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

The description states the verb 'Durchsucht' (searches) the resource 'Systematische Rechtssammlung (SR)' by title and lists the returned fields (SR-Nummer, Abkürzung, Status, Link). This clearly distinguishes it from sibling tools like fedlex_search_gazette or fedlex_search_treaties.

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

Usage Guidelines4/5

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

The description includes a <use_case> tag specifying legal/administrative research and an <important_notes> section clarifying title-only search and default in_force_only=true. It does not explicitly state when not to use, but the context is clear enough.

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

fedlex_search_treatiesA
Read-onlyIdempotent

Sucht internationale Staatsverträge der Schweiz (SR-Nummern beginnen mit '0.'). Recherche zu bi-/multilateralen Abkommen: EU-Bilaterale, Doppelbesteuerung, Europarats-Konventionen (Datenschutz, Menschenrechte). Ohne Suchbegriff werden die neuesten Verträge gelistet. Sucht nur im Titel. keywords='Datenschutz'

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYes
countYes
sourceNo
licenseNo
messageNo
resultsYes
markdownYes
match_typeYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint false. Description adds essential behavioral context: search scope limited to titles, and empty keyword returns latest treaties. No contradiction with annotations.

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

Conciseness5/5

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

Very concise, structured with use_case and important_notes tags, front-loaded with the main action. Every sentence adds value, no superfluous text.

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

Completeness4/5

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

Given rich annotations and presence of output schema, the description covers purpose, use cases, and key behavioral constraints. Could also mention result format or pagination, but for a search tool it is sufficiently complete.

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

Parameters3/5

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

Schema coverage is 0% per context, but schema actually documents keywords and language. Description adds value by explaining that omitting keywords lists latest treaties, but does not detail limit or language parameters further. Adequate but not complete compensation for low coverage.

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

Purpose5/5

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

Clearly states it searches international state treaties (SR numbers starting with '0.'). Provides specific use cases (EU bilateral, double taxation, Council of Europe conventions) and distinguishes it from sibling tools like fedlex_search_laws by focusing on treaties.

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

Usage Guidelines5/5

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

Explicitly describes when to use (search treaties) and includes important notes: search is title-only, without keywords returns latest treaties. Provides concrete examples and alternatives are implied by sibling context.

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

termdat_get_conceptA
Read-onlyIdempotent

Ruft den vollständigen TERMDAT-Eintrag zu einer ID oder URI ab. Vollbild eines Terminologie-Konzepts: alle Sprachbenennungen, Definitionen, Synonyme und Quellenangaben. Akzeptiert ID ('40109'), Konzept-URI oder Term-URI mit Sprachsuffix ('…/40109/3/de') und normalisiert intern (Quirk 3). Quelle ist der LINDAS-Teilbestand (77'692 von ~400'000 Einträgen). concept='40109'

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYes
countYes
sourceNo
licenseNo
messageNo
resultsYes
markdownYes
match_typeYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, destructiveHint. Description adds value by noting the internal normalization quirk (Quirk 3) and the subset of data source (77,692 of ~400,000 entries), which is useful beyond annotations.

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

Conciseness5/5

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

The description is well-structured with XML tags separating purpose, use case, important notes, and example. Every element serves a purpose without redundancy, and it is front-loaded.

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

Completeness5/5

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

Given the complexity of retrieving a full concept with multiple languages and sources, the description covers purpose, accepted input formats, data source limitations, and internal quirks. With an output schema present, the description is fully adequate for an agent to use correctly.

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

Parameters4/5

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

The single parameter 'concept' has 0% schema description coverage per context, but the tool description explains accepted formats (ID, concept URI, term URI with language suffix) and gives an example, adding meaning beyond the schema's limited description.

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

Purpose5/5

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

Description clearly states it retrieves a full TERMDAT entry by ID or URI, including all language designations, definitions, synonyms, and sources. It distinguishes from siblings like termdat_lookup_term and FedLex tools by specifying the 'full entry' use case.

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

Usage Guidelines4/5

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

The <use_case> tag specifies when to use ('full view of a terminology concept'), and <important_notes> provides format details. It does not explicitly mention alternatives or when not to use, but the context is clear and aids decision-making.

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

termdat_lookup_termA
Read-onlyIdempotent

Schlägt einen Fachbegriff in TERMDAT nach und liefert die Entsprechungen in den anderen Landessprachen (de/fr/it/rm/en) samt Definition. «Wie heisst dieser Begriff auf Französisch/Italienisch?» — amtliche Terminologie der Bundeskanzlei, z.B. für mehrsprachige Stellungnahmen. Datenquelle ist der LINDAS-Teilbestand von TERMDAT: 77'692 von ~400'000 Einträgen. Ein Negativtreffer heisst NICHT, dass der Begriff in TERMDAT fehlt, sondern nur, dass er nicht im publizierten Linked-Data-Teil liegt. 'rm' ist im Teilbestand praktisch leer. term='Volksschule', target_languages=['fr','it']

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYes
countYes
sourceNo
licenseNo
messageNo
resultsYes
markdownYes
match_typeYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations indicate readOnly, idempotent, non-destructive. The description adds transparency about data source subset (77,692 of ~400,000 entries) and that 'rm' is practically empty. This goes beyond annotations by disclosing data limitations that affect results. No contradiction with annotations.

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

Conciseness5/5

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

The description is concise and structured with clear tags: use_case, important_notes, example. Each section adds essential information without redundancy. Front-loaded with main action. No wasted words.

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

Completeness4/5

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

Given the output schema exists, the description need not detail return values. It covers data source limitations, language coverage, and provides an example. It could mention pagination or result format but is sufficiently complete for typical use.

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

Parameters3/5

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

The input schema has detailed descriptions for all parameters (term, limit, target_languages). The tool description adds value with an example usage and context but doesn't significantly enhance clarity beyond what schema already provides. Schema coverage is effectively high, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb ('nachschlagen'), resource (TERMDAT), and what it returns (equivalents in other languages with definition). It distinguishes from sibling tools like termdat_get_concept by focusing on term lookup for translations.

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

Usage Guidelines5/5

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

The use_case tag explicitly provides a typical query ('Wie heisst dieser Begriff auf Französisch/Italienisch?') and context (amtliche Terminologie, mehrsprachige Stellungnahmen). Important_notes clarify the data source limitations and that a negative result doesn't mean absence. This gives clear when-to-use guidance and expectations.

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

Tool Schema Changelog

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

  1. 12 tool updatesv1.2.0
    • First observedfedlex_get_consultation
    • First observedfedlex_get_law_by_sr
    • First observedfedlex_get_law_history
    • First observedfedlex_get_open_consultations
    • First observedfedlex_get_recent_publications
    • First observedfedlex_get_upcoming_changes
    • First observedfedlex_search_consultations
    • First observedfedlex_search_gazette
    • First observedfedlex_search_laws
    • First observedfedlex_search_treaties
    • First observedtermdat_get_concept
    • First observedtermdat_lookup_term

TDQS

A4.3/5.0
Disambiguation5/5

Each tool targets a distinct operation: law search, law detail, history, recent publications, upcoming changes, gazette search, treaty search, open consultations, consultation search, consultation detail, term lookup, and concept detail. No overlap in functionality.

Naming Consistency5/5

All tools follow a consistent prefix (fedlex_ or termdat_) followed by verb_noun pattern (e.g., fedlex_search_laws, fedlex_get_law_by_sr, termdat_lookup_term). Naming is uniform and predictable.

Tool Count5/5

12 tools cover a broad domain (laws, treaties, gazette, consultations, terminology) without being excessive. Each tool serves a clear purpose, and the count is well-scoped for the server's function.

Completeness4/5

Core workflows are covered: search, detail, history, monitoring for laws and consultations, plus terminology lookup. Minor gaps: no full text retrieval for laws (only link provided) and no treaty detail tool, but agents can work around with links.

Maintenance

ActivityActive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

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

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

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