Skip to main content
Glama

swissco-mcp

PyPI Documentation

An MCP server for Swiss company data. Nine tools that look a company up by UID, search 790,000 of them by name or by statutory purpose, trace what changed in the commercial register, browse public tenders, check a bank licence, resolve a UID to an LEI and its group parent, and find federally funded research a company took part in.

claude mcp add swissco -- uvx swissco-mcp

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

The server runs over stdio and needs Python 3.14 or newer.

uvx swissco-mcp              # run it without installing
pip install swissco-mcp      # or install it

Registering it depends on the host. Claude Code takes one command:

claude mcp add swissco -- uvx swissco-mcp

Anything that reads a JSON config takes the equivalent block:

{
  "mcpServers": {
    "swissco": {
      "command": "uvx",
      "args": ["swissco-mcp"]
    }
  }
}

Related MCP server: mcp-swiss

Tools

Tool

What it answers

swissco_lookup

Everything the register publishes about one company, optionally with its FINMA licence and its LEI

swissco_search

Companies whose legal name or statutory purpose contains a term

swissco_publications

Commercial-register publications from the gazette in a date range

swissco_events

One company's registry events, each confirmed against the publication's own UID

swissco_tenders

Public-procurement projects published on simap

swissco_vendor

Whether a company holds a simap vendor profile, and what it says

swissco_finma

Institutions on FINMA's list of authorised banks and securities firms

swissco_lei

A company's LEI, the entity that consolidates it, and the entity at the top of that chain

swissco_research

Federally funded research projects, Innosuisse and SNSF money included

Every tool returns the same envelope: rows, a count, and notes.

What the notes carry

Each source covers a slice of Swiss economic life, and a company's absence from one of them usually means it sits outside that slice. notes says which:

  • FINMA's list covers banks and securities firms. Insurers, portfolio managers and fund management companies hold their authorisations on other lists, so a company missing here may still be supervised.

  • About 28,000 Swiss entities hold an LEI, against roughly 790,000 in the commercial register. An absent LEI is the normal case.

  • ARAMIS searches project titles, abstracts and a 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 through it.

  • LINDAS publishes the active commercial register. A deleted company can be missing from it while its gazette publications remain.

notes also reports what a call did with a request it had to trim, and how many requests a wide date range is about to cost.

Configuration

Every tool works with no configuration at all. Four environment variables change what it does:

Variable

Effect

ZEFIX_USER, ZEFIX_PASSWORD

Zefix PublicREST credentials, issued by zefix@bj.admin.ch. They add capital, status, former names and corporate relations to swissco_lookup, and a name-prefix search to swissco_search

SWISSCO_STATE

Where gazette bodies and the two FINMA files are cached. Defaults to ~/.swissco

SWISSCO_INTERVAL

Seconds between requests. It can raise the floor of 0.5s and cannot lower it

Rate limiting

Requests are paced at half a second apart, and each source that asks for something slower gets it: FINMA is paced at a second. These are small public services run by federal offices, and SWISSCO_INTERVAL can raise that floor but never lower it.

The command line

The same data is available as a shell command, from the same repository:

uvx swissco lookup CHE-444.420.929

See swissco on PyPI and its documentation.

Documentation

Full reference for every tool, its arguments and its caveats: swissco-mcp.readthedocs.io.

Licence

MIT. The data belongs to its publishers, and each source's own terms apply; the access and terms section lists them.

Available Tools

9 tools
swissco_eventsA
Read-onlyIdempotent

One company's registry events, each confirmed against the publication's own UID.

Each row carries publication_date, event_type, effective_date, company_name, uid, canton, sub_rubric, id and url, newest first.

The gazette's list page carries a title and no UID, so the UID resolves to a legal name, the name selects candidate publications, and each candidate's body is fetched and kept only when its own UID matches. A publication carrying no UID is dropped.

Bodies are cached under the state directory and keyed by publication id, so an overlapping second call over the same range costs almost nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault
uidYesThe company's UID.
limitNoMaximum rows.
sinceNoFirst publication date, YYYY-MM-DD. Defaults to a year ago.
untilNoLast publication date, YYYY-MM-DD. Defaults to today.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
countYes
notesYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld/idempotent, but the description adds genuinely new behavioral context: publications carrying no UID are dropped, and bodies are cached in the state directory keyed by publication id so overlapping calls are cheap. These are real operational traits not derivable from structured fields. It stops short of describing error/failure behavior when a UID resolves to nothing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence, followed by the row shape and the resolution/caching mechanics. The enumerated row fields and double-backtick formatting are somewhat verbose given an output schema exists, but ordering info ("newest first") and the caching note earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present the return shape needn't be repeated, and annotations cover the safety profile; the description still supplies the resolution pipeline, the drop-on-missing-UID rule, and caching. Nothing an agent needs in order to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so uid/limit/since/until are already documented with types, defaults, and date formats. The description adds nothing about parameter syntax or interaction (e.g., how limit interacts with since/until windows). Baseline 3 is appropriate when the schema carries the parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: returns "one company's registry events" from gazette publications, with the confirmation-vs-UID qualifier adding precision. An agent can tell it is a per-company event reader. However, it never distinguishes itself from adjacent siblings like swissco_publications or swissco_search, leaving the boundary implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the required uid parameter and the "one company's" framing suggest it is the right call when you already have a company UID. There is no explicit when-to-use/when-not guidance and no routing to swissco_lookup (for getting the UID) or the other publication-related siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

swissco_finmaA
Read-onlyIdempotent

Institutions on FINMA's list of authorised banks and securities firms.

Each row carries name, city, licence_type, supervisory_category, uid, foreign_control, no_securities_firm_activity, non_account_holding_securities_firm and about_to_cease_operations.

This one list covers banks and securities firms. Insurers, portfolio managers and fund management companies hold their authorisations on other FINMA lists, so a company absent here may still be supervised. FINMA also publishes some authorised institutions with no UID, which no UID lookup can reach.

Both published files are cached under the state directory for a day, so the first call in a day is the slow one.

ParametersJSON Schema
NameRequiredDescriptionDefault
uidNoOne institution by UID.
limitNoMaximum rows.
queryNoText to match in the institution's name or city.
categoryNoFINMA supervisory category, 1 to 5. 1 is the largest.
licence_typeNoBank, Securities firm, Foreign bank branch office, or Foreign securities firm branch office.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
countYes
notesYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/openWorld/idempotent, so the bar is lower, and the description still adds genuinely useful operational context: both files are cached for a day and the first call of the day is slow, and some institutions carry no UID and cannot be reached by UID lookup. This is real behavior beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and each section (fields, scope, caveats, caching) is a distinct, non-redundant block. The medium-length field enumeration partially duplicates the output schema, which keeps it from a full 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and the description still supplies scope limits, the no-UID gap, and caching latency. It is complete enough for an agent to call correctly; the only omission is any routing pointer to a sibling for the excluded institution types.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents uid, limit, query, category and licence_type. The description adds no new parameter meaning (the licence-type examples live in the schema), so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence names a specific resource (FINMA's list of authorised banks and securities firms) and the enumerated row fields make the scope concrete. It is distinguishable from data-source siblings like swissco_lei, but it never names an alternative, so it stops short of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly states the boundary condition: this list covers banks and securities firms only, while insurers, portfolio managers and fund managers are on other FINMA lists, so absence here does not imply unsupervised. That is a strong 'when it applies and when it does not' signal, but no sibling tool is named as the alternative for the excluded cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

swissco_leiA
Read-onlyIdempotent

A company's Legal Entity Identifier and the group it is consolidated into.

One row: legal_name, lei, registered_as, jurisdiction, status, registration_status, legal_form, city, country, other_names, bic, initial_registration_date, last_update_date, next_renewal_date, direct_parent, ultimate_parent and direct_children.

With children, one row per consolidated entity: legal_name, lei, jurisdiction, registered_as, status, city and country.

GLEIF Level 2 records accounting consolidation, so a parent here is the entity that consolidates this one into its accounts. That parent is frequently foreign, which is the case for reading it: the Swiss commercial register carries no entry for a Swiss company's owner abroad.

About 28,000 Swiss entities hold an LEI against roughly 790,000 in the commercial register. An absent LEI is the normal case.

ParametersJSON Schema
NameRequiredDescriptionDefault
uidYesThe company's UID.
limitNoMaximum children.
childrenNoList the entities this one consolidates instead of counting them.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
countYes
notesYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, idempotent, openWorld), yet the description adds genuine domain behavior: GLEIF Level 2 records accounting consolidation, the listed parent is the accounting consolidator, that parent is frequently foreign and therefore absent from the Swiss register, and only ~28,000 of ~790,000 Swiss entities hold an LEI. This materially shapes how an agent should interpret results and empty responses.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and the mode-specific explanations earn their place. The verbatim column lists are the weakest part, since an output schema already exists and arguably documents those fields, but overall the structure is efficient and readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only lookup with full schema coverage, three annotations, and an output schema, the description supplies exactly the missing pieces: the data model behind the L2 consolidation fields and the expectation that most entities have no LEI. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it spells out what each mode returns and clarifies that ``children`` switches from counting to listing consolidated entities. The exact fields per mode go beyond the terse schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific resource (a company's LEI and its consolidation group) and the two modes are clearly described (single row vs. one row per consolidated child). It does not, however, contrast itself with any sibling tool (e.g. swissco_lookup, swissco_search), so the agent must infer when this is the right call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the description explains the semantics of the ``children`` mode and warns that 'an absent LEI is the normal case,' which primes correct interpretation of empty results. There is no explicit when-to-use/when-not or reference to alternative sibling tools for company data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

swissco_lookupA
Read-onlyIdempotent

Everything the commercial register publishes about one company.

One row: legal_name, uid, chid, ehra_id, legal_form_code, legal_form, municipality, canton, address, purpose and zefix_uri. With Zefix PublicREST credentials in the environment it also carries status, capital_nominal, capital_currency, deletion_date, old_names, branch_offices, head_offices, has_taken_over, was_taken_over_by and cantonal_excerpt.

finma_licence adds finma_licence, finma_category, finma_city and finma_flags. lei adds lei, lei_status, direct_parent and ultimate_parent.

purpose is the statutory purpose: how the company describes what it does, in its own words, filed with the register.

ParametersJSON Schema
NameRequiredDescriptionDefault
leiNoAdd the LEI and the entities that consolidate this one. Costs three requests.
uidYesA Swiss UID in any punctuation: CHE-444.420.929, CHE444420929, or a CH-ID.
finma_licenceNoAdd the FINMA licence type and supervisory category. Costs two downloads on a cold cache.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
countYes
notesYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld, so safety profile is covered. The description adds genuinely useful behavioral context beyond them: output varies with Zefix PublicREST credentials present in the environment, and optional flags cost extra requests/downloads ('three requests', 'two downloads on a cold cache'). It stops short of describing error/not-found behavior or cache semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core statement is front-loaded and efficient, but the long enumeration of every returned field largely duplicates the existing output schema, padding the description without adding decision-relevant information. The credential-conditional grouping is the only part of that list that earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only lookup, the definition covers what an agent needs: the identifying key, the conditional output tiers based on credentials, and the cost of the optional flags. Because an output schema exists, the field list is not strictly required, and the only real omission is failure behavior when a uid is unknown.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description goes beyond the schema by mapping each optional flag to the concrete fields it unlocks (lei → lei, lei_status, direct_parent, ultimate_parent; finma_licence → finma_licence, finma_category, finma_city, finma_flags), which the schema's terse 'entities that consolidate this one' does not spell out.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific action and resource: retrieving everything the commercial register publishes about one company (keyed by a required uid). This implicitly separates it from the multi-result sibling swissco_search, but no sibling is named explicitly, so differentiation requires inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the access pattern (single uid in, one row out), and the description explains when the optional finma_licence/lei data is added. However, there is no explicit when-to-use guidance or routing against the eight sibling tools (e.g. when to prefer swissco_search or swissco_finma instead).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

swissco_publicationsA
Read-onlyIdempotent

Commercial-register publications from the Swiss Official Gazette of Commerce.

Each row carries publication_date, canton, sub_rubric, title, language, state, id and url. With event_types, each body is fetched and parsed, and the rows instead carry publication_date, canton, sub_rubric, company_name, uid, events, effective_date, state, id and url.

The event types are: INCORPORATION, BRANCH_CREATED, SEAT_MOVED, ADDRESS_CHANGED, NAME_CHANGED, PURPOSE_CHANGED, CAPITAL_INCREASED, MERGER, OFFICERS_CHANGED, LIQUIDATION, DELETED.

The gazette publishes around a thousand commercial-register entries a day. Every filter here is applied over the listed publications, because the anonymous API ignores its own cantons, subRubrics and q parameters.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows.
queryNoText to look for in the title, in any of the four languages.
sinceNoFirst publication date, YYYY-MM-DD. Defaults to yesterday.
untilNoLast publication date, YYYY-MM-DD. Defaults to today.
cantonsNoCanton codes to keep, e.g. ['ZH', 'ZG'].
event_typesNoKeep only publications carrying one of these events. Each one costs a body fetch.
sub_rubricsNoHR01 registrations, HR02 mutations, HR03 deletions.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
countYes
notesYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, openWorld), so the description earns credit for going further: it discloses that event_types changes the row shape via body fetch, that the gazette publishes ~1000 entries/day, and that the upstream API ignores its own cantons/subRubrics/q parameters so filtering is done client-side. Only pagination/ordering behavior is left unstated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded with the purpose, but it spends two long paragraphs enumerating output fields that are already declared in the output schema, which is redundant structure rather than useful conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter, all-optional, open-world read tool with an existing output schema, this is essentially complete: cost model, output-shape variance, and the underlying API quirk are all covered. Only sequencing/ordering and rate-limit specifics are absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real meaning beyond the schema: it explains why the filters exist at all (the anonymous API ignores its own filter params), why event_types is expensive ('Each one costs a body fetch'), and how the parameter alters the returned columns.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific resource ('Commercial-register publications from the Swiss Official Gazette of Commerce') and makes clear this is a filtered list/fetch over those publications. It does not name or differentiate itself from siblings like swissco_search or swissco_events, but the resource is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance or routing to alternatives among the eight sibling tools. The only operational hint is implied – that event_types triggers body fetches – which is closer to a cost note than a usage rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

swissco_researchA
Read-onlyIdempotent

Federally funded research projects from ARAMIS, Innosuisse and SNSF money included.

A text query returns rows of title, project_number, office, status, start_date, end_date, granted_total_costs, participants and aramis_id.

A UID searches ARAMIS for the company's name, then keeps only projects carrying a participant whose own UID matches, and reports role and uid in place of participants.

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. An empty result means no project mentions the company by name, and is not evidence that it took no federal research money.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows.
queryYesA UID, which is confirmed against each project's participant UID, or text to search projects for.
languageNoService language: DE, EN, FR or IT. Case-sensitive.EN

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
countYes
notesYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, idempotent, openWorld), but the description adds substantive behavior beyond them: the two distinct return shapes for text vs UID queries, the differing field sets (role/uid replacing participants), ARAMIS indexing limitations, and the critical false-negative caveat. No auth/rate-limit detail, but the search-scope disclosure is genuinely valuable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The content is front-loaded and organized into query-mode and limitation paragraphs, but the opening sentence is a fragment ('...money included.') and the full list of return fields is partly redundant given an output schema exists. Information density is good but there is trimming left on the table.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with non-obvious bifurcated behavior, the description covers query semantics, the distinct result shapes, and the interpretation trap of empty results. With an output schema present, return-value enumeration is arguably redundant, and the description does not clarify the 'language' parameter's effect on search, leaving a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description earns an extra point by elaborating what the 'query' parameter actually does on each path (text vs UID resolution) beyond the schema's terse 'A UID ... or text to search projects for'. It does not add anything for limit or language, which the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly establishes a specific resource (federally funded research projects from ARAMIS/Innosuisse/SNSF) and implies the retrieval action through its description of query behavior. However, it never explicitly frames itself as a search tool nor names a sibling (e.g. swissco_search) to distinguish scope, so an agent must infer the distinction from the data source.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete usage context: a text query searches names, abstracts and contractor fields, while a UID triggers a two-step ARAMIS name lookup then participant-UID confirmation. It also adds a strong 'when-not' caveat (an empty result is not evidence of no funding). It stops short of explicitly routing to sibling tools for other resource types.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

swissco_tendersA
Read-onlyIdempotent

Public-procurement projects published on simap.

Each row carries title, project_number, buyer, canton, city, project_type, process_type, publication_date, publication_type, project_id and publication_id.

The publication types are: abandonment, advance_notice, award, competition, direct_award, participant_selection, request_for_information, revocation, selective_offering_phase, study_contract, tender.

The date matches each project's newest publication, whichever type that publication is, and pub_types is what narrows it to awards. The supplier named on an award carries no UID, so this lists projects and buyers. Use swissco_vendor for whether a given company is in simap's vendor directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
langNoPreferred language for the title and buyer: de, fr, it or en. Defaults to de, then fr, it, en.
limitNoMaximum rows.
sinceNoFirst publication date, YYYY-MM-DD. Defaults to a week ago.
untilNoLast publication date, YYYY-MM-DD. Defaults to today.
cantonsNoCanton codes to keep, e.g. ['ZH', 'ZG'].
pub_typesNoPublication types to keep, e.g. ['tender', 'award'].

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
countYes
notesYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/openWorld/idempotent annotations, it discloses real behavior: the date filter matches each project's newest publication of any type, and that suppliers named on awards carry no UID so the tool returns projects and buyers only. It omits ordering, pagination, and rate-limit behavior, but the annotations already cover the safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the tool's purpose, then structured into field list, vocabulary, and semantics. The 11-field enumeration is partly redundant given an output schema exists, but the publication-type list is not available elsewhere in structured form, so most sentences earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema, full parameter descriptions, and annotations present, the description only needed to add behavioral nuance — which it does via the newest-publication date semantics and the award/vendor caveats. Ordering and pagination behavior remain unspecified, a minor gap for a list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, and the description adds genuine meaning on top: it explains that since/until bind to the newest publication date per project and that pub_types is the lever for narrowing to awards. It even supplies the publication-type vocabulary that the schema leaves as a free string.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the concrete resource (public-procurement projects from simap) and enumerates the row fields it returns, so the agent knows exactly what it gets. It explicitly carves out a boundary against swissco_vendor, though it does not distinguish itself from possibly-overlapping siblings like swissco_publications or swissco_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives one explicit routing rule — use swissco_vendor to check whether a company is in simap's vendor directory — plus the condition that pub_types narrows results to awards. There is clear context but no broader when-not-to-use guidance relative to other simap-related siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

swissco_vendorA
Read-onlyIdempotent

A company in simap's vendor directory, by UID or by name.

A text query returns rows of name, uid_no, canton, city, postal_code, active, is_bidding_consortium and vendor_id.

A UID resolves to a legal name, searches the directory for it and keeps only profiles whose own uidNo matches, then returns that profile: name, uid_no, additional_name, street, postal_code, city, canton, url, company_size, type_of_services, cpv_codes, bkp_codes, npk_codes, business_purpose, is_bidding_consortium, leading_vendor_name and vendor_id.

A company can bid without holding a directory profile, and a bidding consortium carries no UID at all, so an absent UID means only that no profile is filed under it.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows on the text path.
queryYesA UID, which is confirmed exactly, or text to search vendor names for.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
countYes
notesYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint), but the description adds real behavioral context beyond them: text results are row-shaped and bounded by limit, UID results are exact-match filtered on uidNo, and — most valuable — an absent UID does not imply the company is absent from the directory (companies can bid without a profile, and consortia carry no UID). That caveat prevents a false-negative conclusion an agent could otherwise draw.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The scoping sentence is front-loaded and the closing caveat is high-value, but the middle paragraphs exhaustively enumerate 9 and 18 return fields respectively — an output schema exists, so this field dump largely duplicates structured data and inflates the description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a dual-mode lookup with a schema and output schema in place, the description covers both resolution paths, their differing result shapes, and the key edge case about missing UIDs. Pagination beyond `limit` and any behavior for ambiguous name matches (zero or many hits) are the only material gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description genuinely adds meaning: it explains that the same `query` parameter is interpreted two different ways (exact-confirmed UID vs. name search) and that `limit` only applies on the text path, which is not inferable from the bare property descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific resource (a company in simap's vendor directory) and the two lookup modes (UID or name), so the agent knows exactly what the tool retrieves. It does not, however, differentiate itself from siblings like swissco_lookup or swissco_search, several of which sound like plausible substitutes for a directory lookup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does distinguish the two query modes — a text query returns a row list, a UID resolves to one profile — which is implicit guidance on how to call it. It gives no when-to-use guidance versus alternatives (swissco_lookup, swissco_search), no prerequisites, and no statement of when this tool is the wrong choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updatesv0.1.1
    • First observedswissco_events
    • First observedswissco_finma
    • First observedswissco_lei
    • First observedswissco_lookup
    • First observedswissco_publications
    • First observedswissco_research
    • First observedswissco_search
    • First observedswissco_tenders
    • First observedswissco_vendor

TDQS

A3.9/5.0

Scored across 9 tools

Disambiguation4/5

Each tool maps to a distinct data source or action (register lookup, register search, gazette feed, company events, tenders, vendor directory, FINMA, LEI, research). The only real overlap is between swissco_publications (general gazette stream) and swissco_events (gazette events for one company), but the descriptions clearly distinguish the two scopes.

Naming Consistency4/5

All tools share the swissco_ prefix and snake_case formatting, giving a predictable namespace. The suffix mixes action words (lookup, search) with data-source nouns (finma, lei, tenders, research), a minor inconsistency but still readable and non-ambiguous.

Tool Count5/5

Nine tools is well-scoped for a multi-source Swiss company-data aggregator. Each tool covers a genuinely distinct source, so none feels redundant or padded.

Completeness4/5

The surface covers identities (lookup/search), registry activity (publications/events), public money (tenders/research), and supervision (finma/lei/vendor) — a strong lifecycle view. Minor gaps exist (e.g. no way to filter by canton or list all results), but agents can work around these with the provided filters.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server for Nordic company registries. Verify companies, check board members, signing authority, and financial data across Norway, Denmark, Finland, and Sweden using official public APIs. 23 tools covering search, details, roles, and batch lookups.
    19
    8
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for EU company and business data. 9 tools: company search (GLEIF, 2M+ entities), LEI lookup, corporate structures (parent/subsidiaries), trade register search, EU VAT validation (VIES), GDP, unemployment, inflation, and business demography (Eurostat). All APIs free, no keys required.
    9
    5
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    An MCP server for interacting with the Swiss Commercial Register via Zefix REST API and UID Webservice, enabling company search, validation, SOGC publications, and due diligence reports.
    9
    5
    MIT