An unofficial MCP server for interacting with the Swiss Commercial Register.
This is a community project by Schwaizer and is not an official implementation by the Swiss government.
SHAPING SWITZERLAND'S AI FUTURE Empowering Swiss businesses and society through responsible AI adoption. Founded in 2025, Schwaizer is a non-profit organization dedicated to accelerating the responsible adoption of artificial intelligence across Switzerland.
Website: https://www.schwaizer.ch
MCP (Model Context Protocol) server providing access to Swiss Company Registry data through Zefix REST API and UID Webservice.
- Zefix REST API: Fast company searches and SOGC (Official Gazette) tracking
- UID Webservice: Rich company data including NOGA codes, VAT details, and commercial register information
- zefix_search_companies - Search for Swiss companies using the Zefix API.
- zefix_get_company_by_uid - Get detailed company information from Zefix by UID, with optional UID Webservice enrichment.
- zefix_get_daily_registrations - Get all company registrations and publications from SOGC for a specific date.
- zefix_get_company_publications - Get all SOGC publications for a specific company by UID.
- uid_advanced_search - Advanced company search using the UID Webservice.
- uid_validate_uid - Validate a Swiss UID.
- uid_validate_vat_number - Validate a Swiss VAT number.
- uid_get_company_details - Get detailed company information using only the UID Webservice.
- generate_due_diligence_report - Generate a comprehensive due diligence report combining data from both Zefix and UID Webservice.
npm installCopy .env.example to .env and configure:
# Zefix REST API Credentials (required for Zefix tools)
# Note: Credentials must be requested from Federal Registry of Commerce
ZEFIX_USERNAME=your_username
ZEFIX_PASSWORD=your_password
# UID Webservice (no auth needed for Public Services)
UID_PUBLIC_URL=https://www.uid-wse.admin.ch/V5.0/PublicServices.svc?wsdl
# Optional settings
CACHE_ENABLED=true
CACHE_TTL=3600
LOG_LEVEL=infonpm start{
"name": "zefix_search_companies",
"arguments": {
"name": "Migros",
"canton": "ZH",
"activeOnly": true
}
}{
"name": "zefix_get_company_by_uid",
"arguments": {
"uid": "CHE-123.456.789",
"enrichWithUidData": true
}
}{
"name": "uid_validate_uid",
"arguments": {
"uid": "CHE-123.456.789"
}
}{
"name": "generate_due_diligence_report",
"arguments": {
"uid": "CHE-123.456.789",
"includePublications": true
}
}{
"name": "zefix_get_daily_registrations",
"arguments": {
"date": "2025-11-15"
}
}- Base URL:
https://www.zefix.admin.ch/ZefixPublicREST/api/v1 - Authentication: Basic Auth
- SOGC publications:
- Per-company publications are returned via
GET /api/v1/company/uid/{uid}in thesogcPub[]field of the company payload (there is noGET /api/v1/sogc/uid/{uid}endpoint). - Daily publications are available via
GET /api/v1/sogc/bydate/{date}.
- Per-company publications are returned via
- Public Services URL:
https://www.uid-wse.admin.ch/V5.0/PublicServices.svc?wsdl - Protocol: SOAP
- Authentication: None required for Public Services
- Zefix: Federal Commercial Register (Handelsregister)
- UID Register: Federal Business and Enterprise Register
- SOGC/SHAB: Swiss Official Gazette of Commerce
The server implements intelligent caching:
- Search results: 30 minutes
- Company details: 1 hour
- SOGC data: 6 hours
- UID/VAT validation: 1-24 hours
- Reference data: 24 hours
All tools include comprehensive error handling:
- Input validation with Zod schemas
- API error handling with retries
- Graceful fallbacks when enrichment fails
- Detailed error messages in responses
zefix-mcp-server/
├── src/
│ ├── index.js # MCP server entry point
│ ├── config.js # Configuration
│ ├── api/
│ │ ├── zefix-client.js # Zefix REST client
│ │ ├── uid-client.js # UID SOAP client
│ │ └── schemas.js # Validation schemas
│ ├── tools/
│ │ ├── company-search.js # Search tools
│ │ ├── validation.js # Validation tools
│ │ ├── sogc.js # SOGC tools
│ │ └── due-diligence.js # Due diligence tool
│ └── utils/
│ ├── logger.js # Logging
│ ├── cache.js # Caching
│ └── formatting.js # Formatting utilities
├── .env # Environment variables
├── package.json
└── README.md
npm testnpm run lintHelper scripts (for local development and manual checks):
scripts/describe-wsdl.mjs— Inspect/describe UID Webservice WSDL structurescripts/test-uid-search.mjs— Exercise UID search endpoints with sample queriesscripts/test-uid-search-variants.mjs— Try multiple UID search variants
Run examples:
node scripts/describe-wsdl.mjs
node scripts/test-uid-search.mjs "CHE-123.456.789"
node scripts/test-uid-search-variants.mjs "Migros"MIT
For issues with:
- Zefix API: Contact Zefix support zefix@bj.admin.ch
- UID Webservice: Contact uid@bfs.admin.ch
- This MCP Server: Open an issue on GitHub