Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Descripción del creador (original en inglés)
Zefix commercial register with a company-UID join to amtsblattportal.ch (SHAB + cantonal gazettes)
Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.
Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.
Elige la app de IA que usas y copia la configuración.
Necesitas
¿Qué app usas?
Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.
Abre Claude Desktop → Settings → Developer → Edit Config y pega esto en claude_desktop_config.json
{
"mcpServers": {
"register": {
"command": "uvx",
"args": [
"register-mcp"
]
}
}
}Ejecuta esto en tu terminal
claude mcp add register -- uvx register-mcpPégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json
{
"mcpServers": {
"register": {
"command": "uvx",
"args": [
"register-mcp"
]
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Pégalo en .vscode/mcp.json de tu proyecto
{
"servers": {
"register": {
"type": "stdio",
"command": "uvx",
"args": [
"register-mcp"
]
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Este se ejecuta en tu computadora, y ChatGPT solo puede conectarse a servidores en internet. Elige otra app.
Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.
Esta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.
Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.
Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 7 nov 2026
El nombre en el registro se verificó con la cuenta de GitHub malkreide, dueña del repo
Todavía no hemos leído este repo en GitHub
Todavía no hemos leído este repo en GitHub
Este se ejecuta en tu computadora; no hay endpoint en internet
Se ejecuta en tu computadora y usa ajustes locales en su lugar
Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet
Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.
Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.
El registro no indica ninguna clave obligatoria, aunque algunos servidores te piden iniciar sesión la primera vez que los usas.
Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).
El repo de GitHub cambió por última vez –, y la última versión (0.7.0) llegó al registro hace 41 días.
Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. También necesitas Python (uv) en tu computadora.
En la misma categoría: Spec Driven Development, Remote Desktop Commander, SwarmMemo
Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.
Cómo leer una tarjeta:★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Talk with agent swarms: rooms, private messages and paid tasks for AI agents
Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.
🇨🇭 Part of the [Swiss Public Data MCP Portfolio](https://github.com/malkreide)
MCP Server for the Swiss Federal Commercial Register (Zefix/Handelsregister), with a company-UID join to the official gazettes (SHAB + cantonal Amtsblätter)
🇩🇪 Deutsche Version
register-mcp provides AI-native access to two Swiss federal data sources, joined on the UID, all without authentication:
| Source | Data | API |
|---|---|---|
| Zefix (Handelsregister) | Swiss companies, legal forms, registered-office data | ZefixREST v1 |
| Amtsblattportal | Everything published about a specific company (by its UID): HR mutations, calls to creditors, bankruptcy | amtsblattportal.ch v1 |
The two sources share one key — the UID. The value is in the join: Zefix tells you whether a company exists; the gazette tells you what has been published about it.
The gazette access here is deliberately company-scoped only — keyed on a company UID or a specific publication id. There is no free-text / person-name gazette search in this server; that would be a profiling tool over the gazette's person-data rubrics (bankruptcy, debt-collection, inheritance). Broad Amtsblatt platform search (procurement, cantonal notices, full-text) is proposed as a separate amtsblatt-mcp — see docs/amtsblatt-mcp-proposal.md and the Data Protection & Scope section below.
Designed for Swiss public administration use cases: vendor verification, contract partner due diligence, and supplier onboarding — all via natural language queries.
Anchor demo query: *"Before we sign a framework agreement with Lehrmittelverlag Zürich AG: is the company active in the commercial register, what is its UID and stated purpose — and, via that UID, what has the official gazette published about it (HR mutations, calls to creditors, any bankruptcy)?"*
That single question walks the whole tool chain across both sources:
zefix_search_company → zefix_verify_company → gazette_company_publications(uid=…) → gazette_get_publication(id=…)
provenance/mcp (cloud, native MCP spec 2026-07-28); SSE kept for existing deployments# Clone the repository
git clone https://github.com/malkreide/register-mcp.git cd register-mcp
pip install -e .
uv pip install -e .
Or with uvx (no permanent installation):
uvx register-mcp
# stdio (for Claude Desktop)
python -m register_mcp.server
MCP_API_KEY=$(openssl rand -hex 32) MCP_TRANSPORT=streamable-http PORT=8000 \ python -m register_mcp.server
Two HTTP transports are available:
MCP_TRANSPORT | Endpoint | Protocol revisions |
|---|---|---|
streamable-http (container default) | POST /mcp | 2026-07-28 per-request envelope and the initialize handshake up to 2025-11-25 |
sse | GET /sse + POST /messages/ | handshake era only — kept so existing deployments keep working |
streamable-http runs stateless with JSON responses: no Mcp-Session-Id, no session held in a single process, so a second instance needs no sticky sessions.
⚠️ Upgrade note (0.7.0): the container image and
compose.yamlnow
default to
streamable-http. Clients configured with…/ssemust switch to
…/mcp, or the deployment setsMCP_TRANSPORT=sseexplicitly.
With either HTTP transport, the server enforces:
MCP_API_KEY to a secret string. Clients must send Authorization: Bearer on every request. Missing or wrong → HTTP 401. The server refuses to start without MCP_API_KEY set.MCP_RATE_LIMIT and MCP_RATE_WINDOW. Exceeding the limit returns HTTP 429 with Retry-After.tool, status, latency_ms. Auth failures and rate-limit events are logged at WARNING level. Configure verbosity with LOG_LEVEL (default INFO).LEGAL_FORMS_TTL seconds) to avoid an extra upstream call per tool invocation.www.zefix.admin.ch and amtsblattportal.ch via an httpx request hook that also fires on redirects. A Location header pointing elsewhere raises EgressDenied and is never followed. Override with MCP_ALLOWED_HOSTS=host1,host2 (comma-separated, lower-case).⚠️ Upgrade note (0.2.x → 0.3.0):
amtsblattportal.chwas added to the
default allow-list when the gazette tools shipped. If your deployment
pins
MCP_ALLOWED_HOSTS, that value overrides the default entirely —
add
amtsblattportal.chto it, or everygazette_*call will raise
EgressDenied.
pip install register-mcp[otel] and set OTEL_EXPORTER_OTLP_ENDPOINT (e.g. http://otel-collector:4318/v1/traces). Without the extra or without the env var the server stays silent — no hard dependency on the OTel SDK.For multi-instance deployments, place a real gateway (Cloudflare, Railway internal networking, an API-Gateway with Redis-backed rate limiting) in front of the in-memory limiter, which is per-process by design.
A minimal multi-stage Dockerfile ships with the repo. The image runs as a non-root mcp user; dependencies are resolved from uv.lock (uv sync --frozen), so the build is reproducible.
docker build -t register-mcp:local .
docker run --rm -p 8000:8000 \ -e MCP_API_KEY="$(openssl rand -hex 32)" \ register-mcp:local
For local iteration there is a compose.yaml with read_only, cap_drop: ALL and no-new-privileges:
MCP_API_KEY=$(openssl rand -hex 32) docker compose up --build
See SECURITY.md for hardening notes (egress restriction, key rotation, SIEM forwarding).
Try it immediately in Claude Desktop:
*"Is Lehrmittelverlag Zürich AG active in the commercial register?"*
*"Look up the company with UID CHE-108.954.978"*
*"List all Swiss legal forms"*
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": { "register": { "command": "python", "args": ["-m", "register_mcp.server"] } } }
Or with uvx:
{
"mcpServers": { "register": { "command": "uvx", "args": ["register-mcp"] } } }
Config file locations:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonFor use via claude.ai in the browser (e.g. on managed workstations without local software):
Render.com (recommended):
python -m register_mcp.server and the environment variables MCP_TRANSPORT=streamable-http and MCP_API_KEY= (Render provides PORT)https://your-app.onrender.com/mcp💡 *"stdio for the developer laptop, Streamable HTTP for the browser."*
Zefix — commercial register (6):
| Tool | Description |
|---|---|
zefix_search_companies | Search companies by name, canton, legal form |
zefix_get_company | Full company profile by internal EHRAID |
zefix_get_company_by_uid | Company lookup by UID (CHE-xxx.xxx.xxx) |
zefix_verify_company | Quick active/dissolved status check |
zefix_list_legal_forms | All Swiss legal forms with IDs |
zefix_list_municipalities | Swiss municipalities with BFS IDs |
Amtsblattportal — the company-scoped gazette join (3):
| Tool | Description |
|---|---|
gazette_company_publications | The UID join. All gazette publications for a company UID, newest first, optional (validated) rubric/time filters |
gazette_get_publication | Single publication incl. XML full text, defensively parsed (by publication id) |
gazette_source_status | Reachability of both sources + cache ages (rubrics, legal forms) |
The prefix is gazette_, not shab_, because the source covers SHAB and the cantonal gazettes. Every entry point is UID- or id-scoped — see Data Protection & Scope. Broad, non-company gazette search (procurement, cantonal full-text) is scoped to the separate amtsblatt-mcp.
| Query | Tool |
|---|---|
| *"Is Lehrmittelverlag Zürich AG active?"* | zefix_verify_company |
| *"Look up CHE-108.954.978"* | zefix_get_company_by_uid |
| *"Find companies named Migros in canton ZH"* | zefix_search_companies |
| *"What has been published about CHE-116.115.052?"* | gazette_company_publications |
| *"Show the full official text of that HR deletion notice"* | gazette_get_publication |
| *"Are both data sources reachable right now?"* | gazette_source_status |
┌──────────────────────────────┐
┌────▶│ Zefix (Handelsregister) │ │ │ www.zefix.admin.ch │ ┌─────────────────┐ ┌──────────────────────────┴─┐ │ ZefixREST/api/v1 │ │ Claude / AI │────▶│ register-mcp │ └──────────────────────────────┘ │ (MCP Host) │◀────│ (MCP Server) │ ┌──────────────────────────────┐ └─────────────────┘ │ 9 Tools (zefix_ + gazette_) ├──▶│ Amtsblattportal │ │ stdio | HTTP /mcp | SSE │ │ amtsblattportal.ch/api/v1 │ │ Egress allow-list │ │ SHAB + cantonal gazettes │ │ No authentication required │ └──────────────────────────────┘ └──────────────────────────────┘ join key: UID (CHE-XXX.XXX.XXX)
Solo se muestra el principio; lee el resto en el repo