MCP Server for Swiss commercial register (Zefix/Handelsregister) and UID register
Project description
๐จ๐ญ Part of the Swiss Public Data MCP Portfolio
๐๏ธ register-mcp
MCP Server for the Swiss Federal Commercial Register (Zefix/Handelsregister) and supporting reference data
Overview
register-mcp provides AI-native access to the Swiss Federal Commercial Register via the Zefix REST API, all without authentication:
| Source | Data | API |
|---|---|---|
| Zefix (Handelsregister) | Swiss companies, legal forms, SHAB mutations | ZefixREST v1 |
| SHAB | Official Gazette of Commerce โ mutation publications | Embedded in Zefix |
Designed for Swiss public administration use cases: vendor verification, contract partner due diligence, procurement screening, and supplier onboarding โ all via natural language queries.
Anchor demo query: "We want to sign a framework agreement with Lehrmittelverlag Zรผrich AG. Is the company active in the commercial register, what is its stated corporate purpose, and have there been any SHAB mutations in the past two years?"
Features
- ๐๏ธ 6 tools for company search, verification, and reference data
- ๐
zefix_verify_companyโ quick active/dissolved status check - ๐ Bilingual output (Markdown / JSON)
- ๐ No API key required โ open data from zefix.admin.ch
- โ๏ธ Dual transport โ stdio (Claude Desktop) + SSE (cloud)
Prerequisites
- Python 3.11+
- uv (recommended) or pip
Installation
# Clone the repository
git clone https://github.com/malkreide/register-mcp.git
cd register-mcp
# Install
pip install -e .
# or with uv:
uv pip install -e .
Or with uvx (no permanent installation):
uvx register-mcp
Quickstart
# stdio (for Claude Desktop)
python -m register_mcp.server
# SSE (cloud deployment)
MCP_TRANSPORT=sse PORT=8000 python -m register_mcp.server
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"
Configuration
Claude Desktop
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:
- 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):
- Push/fork the repository to GitHub
- On render.com: New Web Service โ connect GitHub repo
- Set start command:
python -m register_mcp.server --http --port 8000 - In claude.ai under Settings โ MCP Servers, add:
https://your-app.onrender.com/sse
๐ก "stdio for the developer laptop, SSE for the browser."
Available Tools
| 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 |
Example Use Cases
| 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 |
| "List all Swiss legal forms" | zefix_list_legal_forms |
| "Show municipalities in canton Bern" | zefix_list_municipalities |
Architecture
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Claude / AI โโโโโโถโ register-mcp โโโโโโถโ Zefix (Handelsregister) โ
โ (MCP Host) โโโโโโโ (MCP Server) โโโโโโโ ZefixREST/api/v1 โ
โโโโโโโโโโโโโโโโโโโ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 6 Tools โ
โ Stdio | SSE โ
โ No authentication required โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Data Source Characteristics
| Source | Protocol | Coverage | Auth |
|---|---|---|---|
| Zefix (Phase 1) | REST/JSON | Swiss companies, legal forms, SHAB | None |
| ZefixPublicREST (Phase 2) | REST/JSON | Signatories, capital, full history | Basic Auth (free) |
| UID Register (Phase 3) | SOAP | MwSt, NOGA codes, cross-validation | Public (20 req/min) |
Phased Implementation
| Phase | API | Auth | Status |
|---|---|---|---|
| Phase 1 | ZefixREST/api/v1 |
None | Current |
| Phase 2 | ZefixPublicREST/api/v1 |
Basic Auth (free, email zefix@bj.admin.ch) | Planned |
| Phase 3 | UID-Register SOAP | Public (20 req/min) | Planned |
Phase 2 will add: signatory details, share capital, full historical entries. Phase 3 will add: MwSt status, NOGA industry codes, cross-register validation.
Project Structure
register-mcp/
โโโ src/register_mcp/
โ โโโ __init__.py # Package
โ โโโ server.py # 6 tools (Zefix + reference data)
โโโ tests/
โ โโโ test_server.py # Unit + integration tests (mocked HTTP)
โโโ .github/workflows/ci.yml # GitHub Actions (Python 3.11/3.12/3.13)
โโโ pyproject.toml
โโโ CHANGELOG.md
โโโ CONTRIBUTING.md
โโโ LICENSE
โโโ README.md # This file (English)
โโโ README.de.md # German version
Known Limitations
- Search by canton without a name filter may return API errors (Zefix API limitation)
- SHAB publication message text contains XML-style markup (
<FT TYPE="F">...) - Phase 1 API may be rate-limited under heavy load; retry after a short delay
- ZefixPublicREST (new API) requires registration: email zefix@bj.admin.ch
Testing
# Unit tests (no API key required)
PYTHONPATH=src pytest tests/ -m "not live"
# Integration tests (live API calls)
pytest tests/ -m "live"
Changelog
See CHANGELOG.md
Contributing
See CONTRIBUTING.md
License
MIT License โ see LICENSE
Author
Hayal Oezkan ยท malkreide
Credits & Related Projects
- Zefix: zefix.admin.ch โ Swiss Federal Commercial Register (BJ/FOJ)
- SHAB: Swiss Official Gazette of Commerce โ mutation publications
- Protocol: Model Context Protocol โ Anthropic / Linux Foundation
- Related: fedlex-mcp โ Commercial register ordinance (HRegV)
- Related: zurich-opendata-mcp โ Company seat + geodata
- Related: swiss-statistics-mcp โ Industry statistics by NOGA
- Related: swiss-snb-mcp โ Economic indicators
- Portfolio: Swiss Public Data MCP Portfolio
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file register_mcp-0.1.0.tar.gz.
File metadata
- Download URL: register_mcp-0.1.0.tar.gz
- Upload date:
- Size: 20.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
83990d9fb59972a3bcc452be3e70c3c68207c20598d4ed886206229aeb530b0f
|
|
| MD5 |
83e7447a66cc5922cd3f1907451be5b8
|
|
| BLAKE2b-256 |
75a0bfddc4368305d0fe20c180aade9ef0141a41fc966a3da184343af302ebb5
|
Provenance
The following attestation bundles were made for register_mcp-0.1.0.tar.gz:
Publisher:
publish.yml on malkreide/register-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
register_mcp-0.1.0.tar.gz -
Subject digest:
83990d9fb59972a3bcc452be3e70c3c68207c20598d4ed886206229aeb530b0f - Sigstore transparency entry: 1206051077
- Sigstore integration time:
-
Permalink:
malkreide/register-mcp@04056cfe7a8717fff428015dce091f4c6172396d -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/malkreide
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@04056cfe7a8717fff428015dce091f4c6172396d -
Trigger Event:
release
-
Statement type:
File details
Details for the file register_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: register_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 14.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
286381ecf09d0a230b0e4cccb7a7244204a62a316381f774f93912be35854bbd
|
|
| MD5 |
a294bd29c17410d97b35ddc0a715f1db
|
|
| BLAKE2b-256 |
03b5f1615d84fa059233d3e44b4f464a062d90802ce9a448230910bc6cfcc5a7
|
Provenance
The following attestation bundles were made for register_mcp-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on malkreide/register-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
register_mcp-0.1.0-py3-none-any.whl -
Subject digest:
286381ecf09d0a230b0e4cccb7a7244204a62a316381f774f93912be35854bbd - Sigstore transparency entry: 1206051079
- Sigstore integration time:
-
Permalink:
malkreide/register-mcp@04056cfe7a8717fff428015dce091f4c6172396d -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/malkreide
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@04056cfe7a8717fff428015dce091f4c6172396d -
Trigger Event:
release
-
Statement type: