Skip to main content
Glama
malkreide

amtsblatt-mcp

by malkreide

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
MCP_HOSTNoSSE bind address. Set to 0.0.0.0 to expose on all interfaces.127.0.0.1
LOG_LEVELNoLog level: DEBUG, INFO, WARNING, ERRORINFO
MCP_API_KEYNoBearer token for SSE authentication. Required when MCP_TRANSPORT is sse; fails loud if unset.
RUBRICS_TTLNoTaxonomy cache TTL in seconds86400
MCP_TRANSPORTNoTransport protocol: stdio or ssestdio
MCP_RATE_LIMITNoSliding-window rate limit (number of requests)60
MCP_RATE_WINDOWNoSliding-window rate limit window in seconds60
MCP_CORS_ORIGINSNoComma-separated origins allowed to call the SSE endpoint from a browser. Unset means no cross-origin browser access.

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
gazette_get_publicationA

Retrieve the full text of one publication once you have its id from a search. Refuses ids whose rubric is not released, after fetching — the rubric is not knowable from the id alone.

Einzelne Publikation inkl. amtlichem Volltext (aus dem XML, defensiv geparst).

Die Listen-API liefert nur Metadaten — der eigentliche Inhalt steht ausschliesslich im rubrikspezifischen XML unter /publications/{id}/xml. Das Schema ist pro Subrubrik verschieden; Pflichtfelder sind meta und der Publikationstext, bei HR-Rubriken zusätzlich die Firmenangaben. Alles Übrige landet best-effort in additional_fields.

Nach dem Abruf wird die Rubrik der Publikation erneut gegen die Freigabe-Liste geprüft: eine ID aus einer gesperrten Rubrik liefert die Scope-Erklärung statt des Inhalts.

Args: params (PublicationInput): - id (str): Publikations-ID (UUID) - response_format (str): 'markdown' oder 'json'

Returns: str: Volltext, Metadaten, allfällige Eingabefrist und Zusatzfelder.

gazette_list_rubricsA

Discover which rubrics exist and which this server serves, before searching. Call this when a search returns nothing to tell "no such publications" apart from "that rubric is deliberately not served".

Rubrik-Taxonomie des Amtsblattportals mit Ampel-Klassierung.

Voraussetzung für gültige Filter: Rubrik-Codes werden in den Such-Tools gegen diese Taxonomie UND gegen die Freigabe-Liste validiert. Standardmässig werden nur die erschlossenen («grünen») Rubriken gezeigt.

Mit rubric_class='all' erscheint die vollständige Taxonomie inklusive der gesperrten Rubriken mit Begründung — zur Transparenz über den Scope-Entscheid. Aufgeführt zu sein bedeutet nicht durchsuchbar zu sein; nur 🟢 ist abfragbar.

Args: params (RubricsInput): - language (str): 'de', 'fr', 'it', 'en' - rubric_class (str): 'green' (Standard) oder 'all' - response_format (str): 'markdown' oder 'json'

Returns: str: Rubriken mit Code, Name, Ampel-Klasse und Subrubriken.

gazette_search_publicationsA

Search the released gazette rubrics by keyword, rubric, canton and date — the general entry point when the question is "what was officially published about X?". Combine rubric with canton: a bare rubric filter is silently ignored upstream.

Sucht amtliche Publikationen im Amtsblattportal (SHAB + kantonale Amtsblätter).

Durchsucht ausschliesslich die freigegebenen («grünen») Rubriken: Handels- register, öffentliche Beschaffung, kantonale und kommunale Bekanntmachungen, Beschlüsse und Rechtsetzung, politische Rechte, Raumplanung sowie Umwelt/ Verkehr/Energie. Rubriken mit systematischen Personendaten — Konkurse, Schuldbetreibungen, Erbschaft, Zivilstand, gerichtliche Vorladungen, Baugesuche — sind bewusst nicht erschlossen und liefern eine Erklärung statt Daten. Ein Personennamen-Sucheinstieg existiert nicht.

Ohne rubric werden alle freigegebenen Rubriken injiziert, sodass eine reine Stichwortsuche niemals eine gesperrte Rubrik erreichen kann.

Args: params (SearchInput): - keyword (Optional[str]): Volltext-Suchbegriff - rubric / sub_rubric (Optional[str]): freigegebene Codes - canton (Optional[str]): Kantonskürzel - date_start / date_end (Optional[str]): Zeitraum YYYY-MM-DD - limit (int): 1–100 (Standard 20), page (int): 0-basiert - language (str): bevorzugte Sprache - only_language (bool): nur diese Sprachfassung - response_format (str): 'markdown' oder 'json'

Hinweis zur Trefferzahl: Das Portal publiziert eine Bekanntmachung je Sprache als eigenen Datensatz mit eigener Publikationsnummer. Sprachfassungen mit identischem Titel werden zusammengefasst, übersetzte bleiben getrennt — die Trefferzahl kann daher über der Zahl verschiedener Bekanntmachungen liegen. language_mix weist die Verteilung aus, only_language=True erzwingt eine einzelne Sprachfassung.

Returns: str: Trefferliste mit Datum, Kanton, Rubrik, Titel, Sprache, ID und URL.

gazette_search_detailedA

Answer a question needing both the hit list and each hit's full text in one step. Prefer this over a search followed by N gazette_get_publication calls.

Sucht Publikationen UND liefert den Volltext der obersten Treffer — ein Aufruf.

Aggregierter Einstieg für den häufigen Fall «finde Bekanntmachungen und zeig mir, was drinsteht». Ohne dieses Tool braucht dieselbe Frage 1 + N Aufrufe: einmal gazette_search_publications, dann gazette_get_publication je Treffer. Hier laufen die Detailabrufe parallel, die Wartezeit ist also die des langsamsten Einzelabrufs statt ihrer Summe.

Filter und Semantik sind identisch mit gazette_search_publications — einschliesslich der Freigabeliste: ohne rubric werden alle freigegebenen Rubriken injiziert, und jeder abgerufene Volltext durchläuft dasselbe Post-Fetch-Green-Gate. Eine Publikation aus gesperrter Rubrik wird auch hier verworfen und nie gerendert.

Für Ausschreibungen mit Volltext in einem Aufruf: rubric='OB-<Kanton>' setzen, z.B. rubric='OB-TI'. gazette_search_procurement bleibt der bequemere Einstieg, wenn nur die Trefferliste gebraucht wird — es kennt die Kanton-zu-Rubrik-Auflösung und die inaktiven Kantone.

Wann stattdessen die Einzeltools:

  • Nur die Trefferliste gewünscht → gazette_search_publications (billiger).

  • Volltext zu einer bekannten ID → gazette_get_publication.

  • Mehr als 5 Volltexte → suchen und die gewünschten gezielt einzeln holen.

Args: params (DetailedSearchInput): - top_n (int): Anzahl Volltexte (1–5, Standard 3) - übrige Felder: identisch zu gazette_search_publications

Returns: str: Trefferliste plus Volltext der obersten top_n Publikationen.

gazette_search_procurementA

Find public tenders published in the gazette (Submissionen) — the procurement-specific entry point. Note only AR, BS, TI, ZG, BL and VS mirror tenders here; for full Swiss coverage including Zurich use swiss-procurement-mcp.

Sucht öffentliche Ausschreibungen (Beschaffungswesen/Submissionen).

Beschaffung ist ausschliesslich eine KANTONALE Rubrik (OB-<Kanton>), nicht föderal. Nur wenige Kantone publizieren sie hier: AR und TI (aktiv) sowie BS, BL, VS, ZG (inaktiv — BS/BL/VS nur Archiv, ZG leer).

WICHTIG — Spiegel vs. Original: Die OB-*-Rubriken sind praktisch vollständig Zweitpublikationen von simap.ch-Ausschreibungen (gemessen über den OB-TI-Jahrgang 2026: 92,1 % tragen eine simap-Publikationsnummer). Wer Beschaffung sucht, ist mit swiss-procurement-mcp an der Primärquelle besser bedient — alle 26 Kantone plus Bund, mit CPV- und BKP-Codes, Zuschlägen und Publikationsverlauf.

Was es NUR hier gibt, sind die Beschaffungs-Subrubriken AR-VS40 (Wallis, Zuschläge), AR-OW40 (Obwalden) und BA-SH40 (Schaffhausen) sowie die Ticiner Subrubrik OB-TI65 («Avvisi di gara non CIAP»): keine davon trägt eine simap-Nummer. Kanton VS, OW und SH liefern deshalb Treffer, obwohl sie keine aktive OB-*-Rubrik haben. Die meisten Kantone — inklusive Zürich — publizieren Ausschreibungen über simap.ch, das NICHT Teil dieser Quelle ist; eine Abfrage für einen solchen Kanton liefert eine Erklärung statt eines leeren Ergebnisses. Die Quelle kennt keine CPV-Codes.

Args: params (ProcurementInput): - keyword (Optional[str]): Freitext (kein CPV-Code) - canton (Optional[str]): Kantonskürzel; ohne Angabe alle aktiven - date_start / date_end (Optional[str]): Zeitraum YYYY-MM-DD - include_inactive (bool): inaktive Rubriken (BL/BS/VS/ZG) einbeziehen - limit (int): 1–100 (Standard 20), page (int): 0-basiert - language (str), only_language (bool), response_format (str)

Hinweis zur Trefferzahl: Ticino publiziert überwiegend it/fr, Appenzell A.Rh. de/fr — je Sprache ein eigener Datensatz mit eigener Publikationsnummer. Identische Titel werden zusammengefasst, übersetzte bleiben getrennt; die Trefferzahl kann daher über der Zahl verschiedener Ausschreibungen liegen. only_language=True erzwingt eine einzelne Sprachfassung.

Returns: str: Ausschreibungen (neueste zuerst) mit Datum, Kanton, Titel, Sprache, ID.

gazette_source_statusA

Check whether amtsblattportal.ch is reachable and what the released scope is. Call this when a search returns nothing and you need to distinguish an empty result from a source that could not be asked — the two are not the same answer.

Status des Amtsblattportals, Cache-Alter und Umfang der Freigabe-Liste.

Prüft die Erreichbarkeit des Upstreams, meldet das Alter des Taxonomie-Caches und wie viele Rubriken erschlossen sind.

Args: params (StatusInput): - response_format (str): 'markdown' oder 'json'

Returns: str: Erreichbarkeit, Latenz, Cache-Alter und Scope-Kennzahlen.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

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/amtsblatt-mcp'

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