⚠️ Unofficial MCP server for zefix.ch – Switzerland Central Business Name Index.
This project is not affiliated with or endorsed by the Federal Department of Justice and Police (FDJP) - Federal Office of Justice (FOJ) who are developing and maintaining zefix.ch.
- Allows your AI-assistant to search for companies incorporated in Switzerland by their name or UID (
CHE-nnn.nnn.nnn) with optional filters by canton of incorporation, legal form, location, previous names, etc. (mimics all filters in Zefix GUI). - Equips your AI-assistant with full company details available in Zefix (business names and identifiers, purpose, address, auditors, change history, capital, names of legal representatives, merges & acquisitions) to build further automation workflows or answer business-specific questions.
Company lookup
- "Find if Google has a legal body in Switzerland and show me their registered address."
- "Was ist der vollständige rechtliche Name und die UID des Unternehmens, das als Migros bekannt ist?"
- "Recherche le CHE-169.865.482 et dis-moi tout ce que tu sais à son sujet."
Filtering & discovery
- "List all active Treuhand companies headquartered in canton Schaffhausen."
- "Finde Einzelunternehmen im Bereich Malerei, die irgendwo in der Grossregion Zürich eingetragen sind."
- "Dresse une liste des adresses et des représentants légaux de toutes les banques en Romandie."
History & changes
- "What is the new name of the company formerly known as 'SwissAir'?"
- "Zeig mir die vollständige Namens- und Eigentümergeschichte von Credit Suisse."
- "Y a-t-il des entreprises qui ont repris ou fusionné avec UBS AG ?"
Due diligence & research
- "Who is listed as auditor for Zurich Insurance Group?"
- "Ich stehe kurz vor der Unterzeichnung eines Vertrags mit Hans Müller als Vertreter von Lindt & Sprüngli – ist er dazu bevollmächtigt?"
- "Vérifie que Bollinger est une entreprise active spécialisée dans la plomberie, et dis-moi depuis combien de temps elle existe et quel est son capital enregistré."
- MCP host application (Claude, LLM Studio, VSCode+GHCP/Cline, Cursor, Dive, LibreChat, DeepChat, Chainlit etc.)
- LLM that supports Tool calling (GPT-4.1+ Claude Sonnet/Opus, Gemini, Llama 3.1+, Qwen3.5, etc.)
- (optional) Node.js 24+ (for development or local run without npx)
- Go to the Releases page and download the latest
zefix.mcpbfile. - Double-click it — Claude Desktop opens automatically.
- Click Install.
Restart Claude Desktop if you do not see zefix tool in the list of available tools.
Add to your MCP host config:
{
"mcpServers": {
"zefix": {
"command": "npx",
"args": ["-y", "zefix-mcp-unofficial"]
}
}
}npx downloads, caches, and runs the package automatically. No local install required.
git clone https://github.com/your-org/zefix-mcp-unofficial.git
cd zefix-mcp-unofficial
npm install
npm run buildThan add this section to config file of your MCP host application (syntax may vary, check documentation for your MCP host app):
{
"mcpServers": {
"zefix": {
"command": "node",
"args": ["/absolute/path/to/zefix-mcp-unofficial/dist/index.js"]
}
}
}Search the Zefix registry. All parameters except name_or_uid are optional.
| Parameter | Type | Description |
|---|---|---|
name_or_uid |
string | Company name or UID (CHE-nnn.nnn.nnn). |
language_key |
string | Response language: en, de, fr, it. Default: en. |
cantons |
string[] | Filter by canton codes, e.g. ["ZH", "BE"]. |
locations |
string[] | Filter by legal seat town names, e.g. ["Zurich", "Bern"]. |
legalForms |
string[] | Filter by legal form, e.g. ["AG", "GmbH"]. |
exactSearch |
boolean | Search from start of name (default: true). Set false for substring/wildcard (*) search. |
phoneticSearch |
boolean | Enable phonetic/fuzzy matching. |
includeDeleted |
boolean | Include deregistered companies (default: false). |
includeFormerNames |
boolean | Also search former company names (default: false). |
Tips:
- If you know the UID, use it — it will return the most accurate full-detail result.
- If
exactSearch: truereturns no results, retry withexactSearch: falseandphoneticSearch: truecombination. - Results are returned in YAML format, with detail level depending on amount of found companies:
- 1 result → full details including SOGC publication history;
- 2–10 → detailed summaries, but without full history and list of legal representatives;
- 11+ → name/UID/status list only.
- Results are capped at 100 items.
- The server communicates over stdio (MCP standard transport) — it won't print anything to the terminal when run directly.
- When MCP server queries Zefix REST API at
https://www.zefix.ch/ZefixREST/api/v1/(public, no authentication required) it submitsUser-Agent: zefix-mcp-unofficialfor transparency. You may want to change uf if using this MCP as part of your larger solution.
npm run build
# Compiled output goes to dist/index.jsUse the MCP Inspector to interactively call tools and inspect responses:
npx @modelcontextprotocol/inspector node dist/index.jsThe first run will prompt you to install @modelcontextprotocol/inspector. After startup, open the URL shown in the terminal (usually http://localhost:5173) to access the inspector UI.
Workflow:
- Select the
get_companiestool in the left panel. - Fill in parameters (e.g.
name_or_uid: "Berg Digital"). - Click Run and inspect the raw response.
Pushing a v* tag triggers the GitHub Actions release workflow, which runs two jobs in parallel:
| Job | What it does | Where it lands |
|---|---|---|
| Publish to npm | npm run build, npm publish |
npmjs.com |
| Publish Claude plugin | npm run build, npx @anthropic-ai/mcpb pack, uploads the .mcpb asset |
GitHub Releases |
# 1. Bump version in BOTH files (npm will reject publishing over an existing version):
# - package.json → "version": "x.y.z"
# - manifest.json → "version": "x.y.z"
# 2. Commit, tag, push — the tag MUST point to the version-bump commit:
git add package.json manifest.json
git commit -m "chore: release vX.Y.Z"
git tag vX.Y.Z
git push && git push --tags
⚠️ Common mistake: creating the tag before editingpackage.json/manifest.json. CI publishes whatever version string is inpackage.jsonat the tagged commit — the tag name itself is ignored by npm. If you tagged too early, move the tag to the correct commit:git tag -d vX.Y.Z # delete local tag git push origin :refs/tags/vX.Y.Z # delete remote tag # edit package.json + manifest.json, then: git add package.json manifest.json git commit -m "chore: release vX.Y.Z" git tag vX.Y.Z git push && git push --tags
First-time setup (one-off):
- npm token: create an Access token at npmjs.com → add it as a Repository secret named
NPM_TOKENin GitHub → Settings → Secrets and variables → Actions; token lifetime is 90 days (max) - update regularly.- GitHub releases: no extra setup needed — the workflow uses the built-in
GITHUB_TOKENwithcontents: writepermission
- MIT.