World Monitor
Real-time global intelligence on conflict, markets, energy, trade, shipping and cyber. 102 tools.
作者提供的说明(英文原文)
Swiss official gazettes (SHAB + cantonal) — procurement & notices, person-data rubrics excluded
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
通过 2/2 项检查 · 在你的电脑上运行
第一步:你用哪个 AI?
选择你用的应用,步骤会显示在下方。
可连接 Claude,但需要先准备
需要先在电脑上安装 Python (uv)(只需一次) · 仅限电脑上的 Claude 应用(Windows 或 Mac),网页和手机不可用
SettingsDeveloperEdit Config
{
"mcpServers": {
"amtsblatt": {
"command": "uvx",
"args": [
"amtsblatt-mcp"
]
}
}
}用 Amtsblatt MCP 告诉我你能帮我做什么,然后做一件给我看✓ 如果 Claude 说正在使用 Amtsblatt MCP,或回答中出现 Amtsblatt MCP 的工具名称,就表示连接成功
菜单名称已于 2026年11月11日 对照 Anthropic 帮助页面核实 · 你的界面可能因版本略有不同
ChatGPT 暂时无法连接 Amtsblatt MCP
Amtsblatt MCP 需要安装在你的电脑上,而 ChatGPT 只能连接在网上运行的服务器
A · 使用能连接 Amtsblatt MCP 的应用
B · 其他 类中能连接 ChatGPT 的其他服务器
从同类中使用较多的里挑选,仅限用地址即可连接、无需密钥的
可连接 Claude Code,但需要先准备
需要先在电脑上安装 Python (uv)(只需一次)
Mac:按 Command+空格,输入 Terminal · Windows:打开 PowerShell
claude mcp add amtsblatt -- uvx amtsblatt-mcp应能看到 Amtsblatt MCP 在列表中并显示已连接
用 Amtsblatt MCP 告诉我你能帮我做什么,然后做一件给我看✓ 如果 Claude Code 说正在使用 Amtsblatt MCP,或回答中出现 Amtsblatt MCP 的工具名称,就表示连接成功
菜单名称已于 2026年11月11日 对照 Anthropic 帮助页面核实 · 你的界面可能因版本略有不同
可连接 Cursor,但需要先准备
需要先在电脑上安装 Python (uv)(只需一次)
用 Amtsblatt MCP 告诉我你能帮我做什么,然后做一件给我看✓ 如果 Cursor 说正在使用 Amtsblatt MCP,或回答中出现 Amtsblatt MCP 的工具名称,就表示连接成功
菜单名称已于 2026年11月11日 对照 Cursor 帮助页面核实 · 你的界面可能因版本略有不同
可连接 VS Code,但需要先准备
需要先在电脑上安装 Python (uv)(只需一次)
用 Amtsblatt MCP 告诉我你能帮我做什么,然后做一件给我看✓ 如果 VS Code 说正在使用 Amtsblatt MCP,或回答中出现 Amtsblatt MCP 的工具名称,就表示连接成功
菜单名称已于 2026年11月11日 对照 VS Code 帮助页面核实 · 你的界面可能因版本略有不同
Claude Code
claude mcp add amtsblatt -- uvx amtsblatt-mcpClaude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"amtsblatt": {
"command": "uvx",
"args": [
"amtsblatt-mcp"
]
}
}
}Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"amtsblatt": {
"command": "uvx",
"args": [
"amtsblatt-mcp"
]
}
}
}VS Code (mcp.json)
{
"servers": {
"amtsblatt": {
"type": "stdio",
"command": "uvx",
"args": [
"amtsblatt-mcp"
]
}
}
}这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
依据这个服务器的连接方式和各应用自己的文档,检查于 2026年11月10日。
在你的电脑上运行,适用于
ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月11日
注册名称已通过 GitHub 账户 malkreide 验证,该账户拥有此仓库
代码最后更新于10天前
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
提问、分享技巧或报告无法使用。按“有帮助”数量排序。
还没有评价
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 2 项适用的基础检查中通过了 2 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于10天前,最新版本(0.23.0)于上个月进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Python (uv)。
同一分类中有:World Monitor, Claude Flow, Tldraw
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Real-time global intelligence on conflict, markets, energy, trade, shipping and cyber. 102 tools.
AI orchestration with hive-mind swarms, neural networks, and 87 MCP tools for enterprise dev.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
🇨🇭 Part of the [Swiss Public Data MCP Portfolio](https://github.com/malkreide)
MCP server for amtsblattportal.ch — the Swiss official gazette portal
(SHAB + 27 cantonal gazettes). Public procurement and official notices,
person-data rubrics excluded by design.
The Amtsblattportal publishes roughly 2.79 million official notices: public procurement, cantonal and communal announcements, enactments, spatial planning — and also bankruptcies, debt collection, inheritance calls and civil-status records naming natural persons.
This server exposes only the first group. Rubrics carrying systematic natural-person data are not queryable, and no tool accepts a person's name, birth date or address. That is a deliberate data-protection decision, explained in Data Protection & Scope.
Anchor demo query: *"Which public tenders did canton Ticino publish this month?"*
→ gazette_search_procurement(canton="TI", only_language=True, language="it") → gazette_get_publication(id=…)
For procurement in any other canton — including Zürich, Bern and Basel-Stadt — use swiss-procurement-mcp; see Boundary with swiss-procurement-mcp.
OB-ZG was never filled after the simap switch, and that ZH routes everything through simap.ch — so it explains instead of returning nothing. Activity is measured, not read off the rubric labellanguage_mix rather than guessed at, and only_language=True gives a single-language viewprovenancepip install amtsblatt-mcp
uvx amtsblatt-mcp
From source:
git clone https://github.com/malkreide/amtsblatt-mcp
cd amtsblatt-mcp pip install -e ".[dev]"
{
"mcpServers": { "amtsblatt": { "command": "uvx", "args": ["amtsblatt-mcp"] } } }
export MCP_TRANSPORT=streamable-http
export MCP_API_KEY="$(openssl rand -hex 32)" # mandatory — fails loud if unset export PORT=8000 amtsblatt-mcp
The endpoint is `/mcp`.
Migrating from SSE. Until 0.18.0 this server spoke SSE only, on
/sse+/messages. MCP spec2026-07-28reclassifies HTTP+SSE as
deprecated with a twelve-month removal window and removes protocol-level
sessions, so streamable-http is now the default.
MCP_TRANSPORT=ssestill
works and still carries the full bearer-auth, rate-limit and CORS stack — it
logs a warning at startup naming the deadline. **Update the client URL when
you switch**: the path change is the part that breaks silently.
| Variable | Default | Purpose | |||
|---|---|---|---|---|---|
MCP_TRANSPORT | stdio | stdio, streamable-http (alias http), or the deprecated sse | |||
MCP_HOST | 127.0.0.1 | HTTP bind address. Defaults to loopback; set 0.0.0.0 to expose on all interfaces (the Docker image does this deliberately). | |||
MCP_STATELESS | _(on)_ | streamable-http runs with no session tracking at all — the native mode of spec 2026-07-28, which has no protocol-level sessions. Removes session hijacking and session affinity as questions rather than answering them (SEC-009, SCALE-002). 0 / false / no restores sessions for handshake-era clients; any other value keeps the default. Ignored on sse, which has no stateless mode. | |||
MCP_CORS_ORIGINS | _(unset)_ | Comma-separated origins allowed to call the endpoint from a browser. Unset means no cross-origin browser access at all — stdio and non-browser clients are unaffected. Mcp-Session-Id is exposed and accepted for the listed origins, so a browser client can hold a session. * is honoured but logs a warning and disables credentials, because browsers reject a wildcard origin together with credentials. | |||
MCP_API_KEY | — | Bearer token; required on every HTTP transport | |||
MCP_RATE_LIMIT / MCP_RATE_WINDOW | 60 / 60 | Sliding-window rate limit | |||
RUBRICS_TTL | 86400 | Taxonomy cache TTL (seconds) | |||
LOG_LEVEL | INFO | DEBUG \ | INFO \ | WARNING \ | ERROR. Structured JSON, one object per line, always on stderr — stdout carries the MCP protocol on a stdio transport. |
Built on structlog. Every event emitted during a tool call carries that call's correlation_id, bound via contextvars — so a retry or an egress denial logged deep in the HTTP path can be joined to the request that caused it, without threading context through every signature.
| Level | Emitted when |
|---|---|
DEBUG | a tool call was entered (tool_call_started) — tells you whether a hung call ever started |
INFO | a tool call finished cleanly, with latency |
WARNING | upstream retry, egress denied, auth failure, rate limit |
ERROR | a tool call raised |
Records carry the exception *type* only — never its message and never an upstream response body.
{"event":"tool_call_started","tool":"gazette_search_procurement","correlation_id":"23221af26ae640c7","level":"debug","timestamp":"2026-07-27T22:20:07.494276Z"}
{"status":"ok","latency_ms":312,"event":"tool_call","tool":"gazette_search_procurement","correlation_id":"23221af26ae640c7","level":"info","timestamp":"2026-07-27T22:20:07.806Z"}
Ship these to your SIEM and alert on auth_failed, rate_limited, egress_denied, green_gate_violation and blocked_publication_requested — the last two mean something tried to reach a rubric this server does not serve.
| Tool | Signature | Notes |
|---|---|---|
gazette_search_publications | (keyword?, rubric?, sub_rubric?, canton?, date_start?, date_end?, limit=20, page=0, language='de', only_language=False) | Green rubrics enforced. Without rubric, all green rubrics are injected — a keyword-only query can never reach a blocked one. |
gazette_search_detailed | same filters + `top_n=3` | Aggregated. Search *and* full text for the top top_n hits in one call, fetched in parallel. Same green gate on every expanded document; blocked ones are withheld and counted, never rendered. |
gazette_search_procurement | (keyword?, canton?, date_start?, date_end?, include_inactive=False, limit=20, page=0, language='de', only_language=False) | OB-* rubrics plus the gazette-native sub-rubrics AR-VS40, AR-OW40, BA-SH40. A canton with neither gets a simap.ch explainer and no HTTP call. No CPV — the source has none. |
gazette_get_publication | (id, response_format='markdown') | Full official text from XML. Re-checks the rubric after fetching; content from a blocked rubric is discarded. |
gazette_list_rubrics | (language='de', rubric_class='green', response_format='markdown') | rubric_class='all' shows the full taxonomy with traffic-light classes and reasons — listed ≠ queryable. |
gazette_source_status | (response_format='markdown') | Reachability, latency, cache age, scope metrics. |
All tools are readOnlyHint=True.
| Question | Tool chain |
|---|---|
| Tenders in Ticino this quarter | gazette_search_procurement(canton="TI", only_language=True, language="it") |
| Procurement simap.ch does not have | gazette_search_procurement(canton="VS") — 150 Valais awards, none on simap |
| Tenders in any other canton | → use swiss-procurement-mcp |
| What is even queryable here? | gazette_list_rubrics() |
| Why can't I search bankruptcies? | gazette_list_rubrics(rubric_class="all") |
| Zoning changes in Zurich | gazette_search_publications(rubric="RP-ZH") |
| Full text of a notice | gazette_get_publication(id="fbf0ff9e-…") |
| Everything published about one company | → use register-mcp |
The Amtsblattportal systematically publishes personal data of natural persons. Those publications are public — but making them *systematically queryable by name* through an AI agent is a repurposing the publication never intended, and a profiling instrument under the revised Swiss FADP (revDSG).
Four rules follow, and they are enforced in code, not in documentation:
🔴 Konkurse (KK), Schuldbetreibungen (SB), Schuldenrufe (LS, SR), Nachlass (NA), Erbschaft/Testament/Ableben (ES, TE-*, VA-*), Familie & Zivilstand (FZ-*, BV-*, BU-*), gerichtliche Vorladungen (UV, GB-*, GE-*, SJ-BE), Baugesuche (BP-*), Grundbuch (GR-*), Meldungskatalog GR (AA-GR).
🟡 Deferred: Steuerwesen, Anzeigen, Bewilligungen, Bildungs- und Kirchenwesen and the general catch-all rubrics.
The full audit trail — including three documented extensions to the source specification — is in docs/rubric-classification.md.
How much each decision covers is measured, not estimated. docs/coverage-matrix.md enumerates the source's own rubric axis and marks this server's reach into it: 84.2 % of 2 804 063 publications are reachable, 12.6 % blocked by decision, 3.3 % still unclassified. The insolvency group alone is 321 704 publications — present in the source, out of reach here on purpose. Without that figure, "out of scope" and "not in the source" read the same in a review, and this repository made exactly that mistake once (see ARCH-003 in SECURITY.md).
register-mcpFor publications about a specific company, use [register-mcp](https://github.com/malkreide/re