
Swiss company data
ch.prospex由 prospex.ch 发布v0.1.1更新于 Oct 24, 2026
Swiss company data: Zefix register, SHAB gazette, simap tenders, FINMA, GLEIF and ARAMIS
概览
让助手查询六类瑞士公司公开数据:Zefix 商业登记、SHAB 公报、simap 招标、FINMA、GLEIF 和 ARAMIS。
- 可以做什么
- 提供九个工具,除 watch 外每个命令行命令对应一个。可按 UID 查询公司,按名称或法定经营目的检索约 79 万条登记记录,列出公报发布和某公司的登记变更历史,浏览 simap 公共招标,查询某公司是否为 simap 注册供应商,核查 FINMA 银行与证券牌照,查找法人识别编码及其集团母公司,并检索联邦资助的研究项目。每个工具返回 rows、count 和 notes,字段与命令行 JSON 输出一致。
- 适用场景
- 适合瑞士公司尽职调查、销售或采购调研,以及监控登记变更。例如查询某州哪些公司的经营目的中提到某关键词、某公司是否持有银行牌照或 LEI,或某 UID 自某日期以来的变化。
- 运行要求
- 以 stdio 本地进程运行,可用 uvx 或 npx(包名 swissco-mcp),也可 pip 安装;需要 Python 3.14 或更高版本,或使用 Docker。需要访问这六个公开数据源的网络。可选的 Zefix PublicREST 凭据通过 ZEFIX_USER 和 ZEFIX_PASSWORD 提供,可增加查询字段和名称前缀搜索;不提供时所有工具仍可用。可选 SWISSCO_STATE 指定缓存目录,SWISSCO_INTERVAL 只能提高请求间隔下限。
安装
在 SourceWeft 中
- 打开 控制台中的 Swiss company data,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
swissco
Swiss company data from the shell. Look a company up by UID, search 790,000 of them by name or by legal purpose, list gazette publications, browse public tenders, check a bank licence, or watch a list of companies for change.
All data comes from six open-data sources, none of which needs a credential: Zefix on LINDAS for the commercial register, the Amtsblattportal for the Swiss Official Gazette of Commerce, simap.ch for public procurement, FINMA for authorised banks and securities firms, GLEIF for the Legal Entity Identifier and group structure, and ARAMIS for federally funded research.
Built and maintained by Prospex, a Swiss B2B sales intelligence platform.
Install
Python 3.14 or newer.
Docker
The image runs as an unprivileged user and keeps its state — watch's seen-ids
and the cached FINMA files — in /home/swissco/.swissco. Mount a volume there
for anything that needs to remember what it saw last time:
Zefix credentials, which every command works without, are passed through as environment variables:
Commands
Every command takes --format table|json|csv, --limit and --quiet.
swissco lookup
Everything the register publishes about one company.
Accepts CHE-444.420.929, CHE444420929, or the UID buried in other text.
swissco search
Companies by legal name or by statutory purpose: how a company describes what it does, in its own words, in the register.
--canton takes a two-letter code, --legal-form an eCH-0097 code (0106 is an AG,
0107 a GmbH).
swissco publications
Commercial-register publications from the gazette, in a date range.
Without --type, only the list pages are read: one request per 2,000 publications.
With --type, each surviving publication's body is fetched and classified into the
eleven event types
shab-parser recognises, so narrow the range and the canton first.
Ranges past about ten days are split into windows automatically. The API rejects any request whose page offset reaches 10,000, and the gazette publishes around a thousand commercial-register entries a day.
swissco events
One company's registry history.
The gazette's list pages carry no UID, only a title, so this resolves the UID to a legal name, keeps the publications whose title looks like that name, then fetches those bodies and keeps the events whose own UID matches. The title match decides what is worth downloading; the body's UID decides what is reported. Fetched bodies are cached under the state directory, so an overlapping re-run costs nothing.
swissco watch
What changed since last time.
Each company is compared by fingerprint, a digest over its identity, address and
purpose fields. Exits 10 when something changed and 0 when nothing did, so cron
can branch on it:
A UID that has left the dataset is reported as no longer in the dataset, never as deleted. LINDAS carries only active entities, so a UID can leave the dataset after a re-registration, a correction, or a publication lag.
swissco tenders
Public procurement projects from simap, by canton and publication date.
--canton and --type are repeatable; --lang picks which language the title and
buyer are reported in. Paging is a cursor rather than an offset, so a wide range
costs pages instead of failing.
The date range filters each project's newest publication, not the award inside it. A project awarded in March whose newest publication is an August correction appears only in a range covering August.
swissco vendor
Whether a company is registered as a supplier on simap.
A UID is resolved to a legal name, searched for, and then confirmed against the
directory's own uidNo. The name finds the candidates; the UID decides between
them — the directory holds both an "Egli Gartenbau AG Sursee" and an "Egli
Gartenbau AG Uster".
There is no command for what a company has won. The supplier named on a simap award carries no UID, only free text typed by a procurement office. Matching those names would produce a plausible answer that is sometimes about a different company, so it is not offered.
swissco finma
FINMA's authorised banks and securities firms, joined to a UID.
Also swissco finma "Raiffeisen", --licence, --category, and --finma on
lookup. Both files are cached for a week under the state directory.
Banks and securities firms only: FINMA licenses insurers, portfolio managers and fund management companies on separate lists this does not read. A miss means "not on this list", never "unlicensed".
swissco lei
A company's Legal Entity Identifier, and the group it is consolidated into.
--children lists what this company consolidates instead of counting it, and
--lei on lookup folds the same fields into a company profile.
The parent is often foreign, and that is the reason to run this: a Swiss subsidiary's owner abroad has no commercial-register entry, so the register cannot answer the question at all.
GLEIF Level 2 records accounting consolidation: a parent is the entity that consolidates this one into its accounts, which it may do without owning all of it. About 28,000 Swiss entities hold an LEI against roughly 790,000 in the register, so a miss means "no LEI on file" and nothing more.
swissco research
Federally funded research projects from ARAMIS, the Confederation's register of research and innovation mandates. Innosuisse and SNSF money included.
A UID is confirmed against each project's own participant UID, so every row
reported is exact. Free text is searched as given and every hit comes back with
its participating organisations. --limit caps how many candidates are hydrated,
since the participant list costs one request per project, and --lang picks DE,
EN, FR or IT.
ARAMIS searches project titles, abstracts and the free-text contractor field, and indexes the structured participant list under none of them. A company named only as a structured partner cannot be found, which is where Innosuisse implementation partners usually sit, so an empty result means only that no project mentions this company by name. It is not evidence that the company has taken no federal research money.
swissco reads the organisation, the role, the UID and the place off a
participant. ARAMIS also publishes the researcher's name, e-mail address and
telephone numbers, and none of those has a field in the parser.
Output
--format is the only thing that changes the output. A command piped into jq and
the same command watched by a person produce identical bytes, so a script that works
in your terminal works in CI.
table and csv are rendered from the same rows that json serialises, so a column
cannot appear in one format and be missing from another. Progress notes go to stderr,
where --quiet silences them; errors go to stderr as a single JSON object.
Use it from a coding agent
This repository ships an Agent Skill. It
teaches Claude Code, Cursor, Codex and around twenty other agents how to drive
swissco: every command, and the traps that quietly produce a wrong answer.
The skill is the directory .agents/skills/swissco/, the cross-client location
every compliant agent scans, with .claude/skills/swissco symlinked to it so
Claude Code finds it in its own. tests/test_skill.py asserts the spec's rules
against it on every run, so the skill cannot drift out of the format without the
suite saying so.
It lands in the consuming project's own .agents/skills/swissco/, symlinked
into each agent's directory. Add -g to install it once for every project,
--all to accept the defaults without being asked. swissco still has to be on
the path or reachable through uvx.
The agent can then answer questions like "which companies in Zug mention blockchain in their purpose" or "has anything changed at CHE-105.943.826 since June" by running the right command itself.
Use it as an MCP server
The same six sources are available as an MCP server, from this repository.
Nine tools, one per command except watch.
Every tool returns rows, a count, and notes. The rows are the dicts
swissco --format json prints, so a field carries the same name in both
surfaces. The notes carry what each source covers, which is what turns an empty
result into an answer: FINMA's list omits insurers and portfolio managers, and
about 28,000 Swiss entities hold an LEI against roughly 790,000 in the
register.
It lives in mcp/, ships as the PyPI package
swissco-mcp and the npm package of
the same name, and is registered as ch.prospex/swissco. Full reference for
every tool, its arguments and its caveats:
swissco-mcp.readthedocs.io.
Access and terms
SHAB / Amtsblattportal. The REST API is the channel the operator offers for
machine access: freely accessible, no authentication for published data, no
documented rate limit, page size capped at 2,000. The website UI is disallowed by
robots.txt, which does not reach the API. The operator disclaims completeness, and
only the signed PDF is legally binding.
Zefix on LINDAS. Published on opendata.swiss, no credentials. Commercial-use terms have never been settled; the dataset page states what applies.
Zefix PublicREST. Requires credentials issued by [email protected]. Every
command here works without them. Supplying them through --user/--password or
ZEFIX_USER/ZEFIX_PASSWORD adds capital, status, deletion date, former names and
corporate relations to lookup, and a name-prefix search to search.
simap. The read API answers unauthenticated. The site's robots.txt disallows
the single-page app's project-detail routes, which swissco refuses outright; it
says nothing about /api, where every request here goes.
FINMA. Two published files, downloaded as any browser would. FINMA republishes rather than versions them, so they are cached for a week and re-fetched after that.
GLEIF. The record API answers unauthenticated. GLEIF publishes the LEI data for anyone to use, and the terms of use state what applies.
ARAMIS. The public service answers unauthenticated and asks not to be
flooded, so swissco paces it and reads one project at a time. The 43 MB bulk
export sits on a host this client's allowlist omits, which is why no command can
pull it.
Being a good citizen
These are small public services run by federal offices. swissco sends one request
every 0.5 seconds at most — one a second for FINMA, which asks for more room — backs
off exponentially on failure, and identifies itself with a real User-Agent carrying
this repository's URL. --interval can raise those floors and cannot lower them.
Built on
Both are MIT and maintained alongside this one. simap, FINMA, GLEIF and ARAMIS
ship no client, so swissco carries its own for those four.
Watching more than a list
swissco watch from cron is the free version of what Prospex
sells. Prospex watches the whole register continuously, joins it to hiring, funding,
tenders and web signals — including the award side of simap that this tool
deliberately leaves alone — and tells you which of those changes is worth a call. If a
cron job and a UID list cover it, this tool is all you need.
License
MIT
来源:README.md,提交 7e14141
工具
0版本历史
1- v0.1.1最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分