About swissreg
swissreg is an MCP server and CLI for querying Swiss public company registers and related datasets. It serves researchers and organizations with structured, read-only results across company records, publications, procurement, finance, LEI and research.
Key features
- 01Swiss commercial-register lookup and search
- 02Gazette publications and company events
- 03Public procurement and vendor profiles
- 04FINMA institutions and LEI records
- 05Federally funded research projects
- 06UID validation and structured JSON output
Use cases
- 01Check a Swiss company by UID
- 02Find Gazette notices within a date range
- 03Review public tenders and vendor status
- 04Trace LEI relationships or funded research
MCP support
Exposes nine read-only tools to MCP clients for querying Swiss company and public-register data.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
Tools
9Saved tool list · updated 1w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| lei | boolean | No | Add LEI fields (lei, lei_status, direct_parent, ultimate_parent). Defaults to false. |
| uid | string | Yes | The company's Swiss UID, in the form CHE-XXX.XXX.XXX (spaces, dots and dashes are stripped and the check digit is verified). |
| finma_licence | boolean | No | Add FINMA licence fields (finma_licence, finma_category, finma_city, finma_flags). Defaults to false. |
Details
From the project READMEswissreg
Nine read-only questions about Swiss companies, answered from the public registers Switzerland itself publishes — no account needed for the core paths, because the sources are open data: the commercial register via LINDAS, the Swiss Official Gazette of Commerce, the simap procurement platform, FINMA's list of authorised institutions, the GLEIF legal-entity database, and the federal ARAMIS research database.
Every answer comes back in the same envelope: a JSON object
with rows (each row carrying exactly the fields documented
for that tool, in order), count, and notes explaining the
limits of what the source can say — for example that an absent
LEI is the normal case (only about 28,000 Swiss entities hold
one), or that a company can bid on simap without holding a
directory profile.
The nine tools:
swissco_lookup— everything the commercial register publishes about one company, by UID; optionally adds its FINMA licence fields and its LEI with consolidating parents.swissco_search— companies whose legal name or statutory purpose contains a term, with canton and legal-form filters on the LINDAS path.swissco_publications— Gazette publications in a date range, filtered client-side by canton, sub-rubric, title text, or event type.swissco_events— one company's registry events, each kept only when the publication's own UID matches the one asked for.swissco_tenders— public-procurement projects published on simap, by date range, canton, and publication type.swissco_vendor— whether a company holds a simap vendor profile, and what that profile says.swissco_finma— institutions on FINMA's authorised banks and securities-firms list, filterable by name, UID, licence type, and supervisory category.swissco_lei— a company's LEI, the entity that consolidates it, the top of that chain, and optionally its consolidated children.swissco_research— federally funded research projects (Innosuisse and SNSF money included) naming a company, by text or by a participant's UID.
Swiss UIDs are taken seriously: a UID is normalised
(CHE444420929, CHE-444.420.929 and lower-case variants all
work), its modulo-11 check digit is verified before any
request is made, and output UIDs are always punctuated
CHE-XXX.XXX.XXX. Dates are YYYY-MM-DD; date ranges that
the Gazette cannot serve are trimmed to their newest days,
with a note saying so.
Configuration
No credential is required. Two things are optional:
export ZEFIX_USER="..." # Zefix PublicREST account
export ZEFIX_PASSWORD="..."
With those set, swissco_search can run with
via: "rest" (a name-prefix search with richer fields);
without them that path fails honestly, naming the two
variables. Register lookups otherwise run over LINDAS and
note what credentials would add: capital, status, former
names, and corporate relations.
CLI
Each tool is a subcommand taking one JSON argument string:
npx @reneturcios/swissreg swissco_lookup '{"uid":"CHE-444.420.929","lei":true}'
npx @reneturcios/swissreg swissco_search '{"term":"pharma","canton":"BS"}'
npx @reneturcios/swissreg swissco_tenders '{"pub_types":["award"],"cantons":["ZH"]}'
npx @reneturcios/swissreg --version
Output is the tool's envelope as JSON. Exit codes: 0 on
success, 1 on a runtime error (including a validation or
upstream failure), 2 on a usage error.
MCP server
npx -y @reneturcios/swissreg mcp
MCP client config:
{
"mcpServers": {
"swissreg": {
"command": "npx",
"args": ["-y", "@reneturcios/swissreg", "mcp"]
}
}
}
Docker
docker run -i ghcr.io/cloudcorprecords/swissreg
docker run --rm ghcr.io/cloudcorprecords/swissreg swissco_finma '{"licence_type":"Bank"}'
Development
npm install
npm run build # tsc -> dist/
npm test # tsx --test test/*.test.ts (fake fetch + fake clock, no network)
npm run dev # run the CLI from source
License
MIT — Copyright (c) 2026 Rene Turcios
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.