io.github.malkreide/amtsblatt-mcp
PYPI · AMTSBLATT-MCP · SCANNED SEP 20
Swiss official gazettes (SHAB + cantonal) — procurement & notices, person-data rubrics excluded
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security100
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
- 1 of 34 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency35
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- License check failed: the license (MIT License) isn't a recognized OSI-approved license. See how to fix → Fail
- Actively maintained (last published 48 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability61
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 2569 tokens (~428/item across 6 items; 6 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management83
- Stability observed for 25 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage71
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 0% of tool parameters carry a description.Fail
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 6 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 7 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
How do I install the io.github.malkreide/amtsblatt-mcp server?
io.github.malkreide/amtsblatt-mcp runs locally as a PyPI package, launched with uvx amtsblatt-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · amtsblatt-mcp
claude mcp add malkreide-amtsblatt-mcp -- uvx amtsblatt-mcp
{
"mcpServers": {
"malkreide-amtsblatt-mcp": {
"command": "uvx",
"args": [
"amtsblatt-mcp"
]
}
}
} {
"servers": {
"malkreide-amtsblatt-mcp": {
"command": "uvx",
"args": [
"amtsblatt-mcp"
]
}
}
} codex mcp add malkreide-amtsblatt-mcp -- uvx amtsblatt-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"malkreide-amtsblatt-mcp": {
"type": "local",
"command": [
"uvx",
"amtsblatt-mcp"
],
"enabled": true
}
}
} openclaw mcp add malkreide-amtsblatt-mcp --command uvx --arg amtsblatt-mcp
mcp_servers:
malkreide-amtsblatt-mcp:
command: "uvx"
args: ["amtsblatt-mcp"] {
"McpServers": {
"malkreide-amtsblatt-mcp": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"amtsblatt-mcp"
]
}
}
} assistant mcp add malkreide-amtsblatt-mcp -t stdio -c uvx -a amtsblatt-mcp
{
"mcpServers": {
"malkreide-amtsblatt-mcp": {
"command": "uvx",
"args": [
"amtsblatt-mcp"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 19 Sept 26 −3
- Stability: pass → 0.80 functional
- 18 Sept 26 +1
- Stability: 0.97 → pass security
- 16 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.
- 14 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.
- 12 Sept 26 −3
- Stability: pass → 0.80 functional
- 11 Sept 26 +1
- Stability: 0.97 → pass security
- 9 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.
- 7 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Analysed pypi/amtsblatt-mcp@0.22.1
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | pypi |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | hatchling.build |
Background: Why install scripts are a supply-chain risk →
Dependencies 34 packages
| Packages resolved | 34 |
|---|---|
| No linked repository | 1 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
gazette_get_publication ~267
<use_case>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.</use_case> 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.
| Name | Type | Req | Description |
|---|---|---|---|
| params | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
gazette_list_rubrics ~277
<use_case>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".</use_case> 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.
| Name | Type | Req | Description |
|---|---|---|---|
| params | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
gazette_search_detailed ~459
<use_case>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.</use_case> 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.
| Name | Type | Req | Description |
|---|---|---|---|
| params | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
gazette_search_procurement ~692
<use_case>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.</use_case> 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…
| Name | Type | Req | Description |
|---|---|---|---|
| params | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
gazette_search_publications ~494
<use_case>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.</use_case> 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.
| Name | Type | Req | Description |
|---|---|---|---|
| params | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
gazette_source_status ~164
<use_case>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.</use_case> 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.
| Name | Type | Req | Description |
|---|---|---|---|
| params | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
What is the io.github.malkreide/amtsblatt-mcp server?
io.github.malkreide/amtsblatt-mcp is listed in the public MCP registry as io.github.malkreide/amtsblatt-mcp. Swiss official gazettes (SHAB + cantonal), procurement & notices, person-data rubrics excluded. This page covers its PyPI package (amtsblatt-mcp).
Is the io.github.malkreide/amtsblatt-mcp server safe to use?
io.github.malkreide/amtsblatt-mcp scores 75 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the io.github.malkreide/amtsblatt-mcp server expose?
io.github.malkreide/amtsblatt-mcp exposes 6 tools: gazette_get_publication, gazette_list_rubrics, gazette_search_publications, gazette_search_detailed, gazette_search_procurement, gazette_source_status. Their descriptions and schemas cost roughly 2,353 tokens of context every time the server is loaded.
Is the io.github.malkreide/amtsblatt-mcp server still maintained?
io.github.malkreide/amtsblatt-mcp is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.