Vetari
Server Details
Swiss company-register intelligence: new GmbHs by canton, shared addresses, UID history, SHAB text
- Status
- Healthy
- Uptime
- 93.4% over 22 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 10 tools
Every tool targets a distinct resource and action, and the descriptions explicitly cross-reference to prevent misselection (e.g., search_companies vs find_company_by_name, list_company_uids_at_address vs find_colocated_companies, get_companies vs load_company). No two tools are indistinguishable once the guidance is read.
All tool names follow a consistent snake_case verb_noun pattern (describe_, find_, get_, list_, load_, search_) with predictable, readable names. The few prepositional additions (find_company_by_name, list_company_uids_at_address) still fit the same convention.
10 tools is well within the ideal range for a data-query server. Each tool covers a distinct operation—searching, retrieving details, live lookup/ingestion, address pivots, publications, and metadata—without redundancy or obvious bloat.
The surface covers the core query lifecycle: dataset description, company search/detail, live name resolution/ingest, publication search/text, address/colocation, and mutation type list. Minor gaps exist—no direct search by c/o provider string (must pivot from a known UID) and no list of other closed-set filter values (e.g., legal forms, cantons, industries), which could cause trial-and-error for agents.
Available Tools
10 toolsdescribe_datasetCheck what the dataset covers and how fresh it isARead-onlyIdempotentInspect
What this dataset covers — call it before concluding something does not exist. Publication date range held, when the fetch last succeeded, company and publication counts, how many companies are analysed and where that begins, and the same per canton. It holds recent SHAB publications plus Zefix history only for the companies those name, so an older unchanged company is absent from a search — not gone: load_company fetches it directly by UID. Only the analysed part is what every AI filter searches.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| source | Yes | |
| disclaimer | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety is settled. The description adds genuinely non-structured behavior: the dataset holds only recent SHAB publications plus Zefix history for the companies those name, so absence from search results does not mean nonexistence — crucial interpretive context. It stops just short of stating rate limits or refresh cadence beyond the last-success timestamp.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the scope statement and the 'call it before concluding...' directive. The middle enumerates return fields somewhat densely, and the final two sentences about coverage limits and load_company are slightly run-on, but every clause carries actionable meaning rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return formatting need not be explained, yet the description still summarizes the coverage fields an agent needs to interpret results. For a zero-parameter read tool, nothing an agent needs to call it correctly is missing, including the critical caveat about search coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to document and the baseline is 4. The description correctly spends its space on return semantics instead of inventing parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states precisely what the tool returns (date range held, last successful fetch, company/publication counts, analysed-company counts and start point, per-canton equivalents) and scopes the dataset contents. It also distinguishes itself from sibling search tools by clarifying that searches only cover the analysed part, and names load_company as the path for absent companies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use: 'call it before concluding something does not exist.' Explicit when-not and workaround: an older unchanged company is absent from a search but is not gone, so use load_company by UID instead. The relationship to every AI filter/search sibling is stated directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_colocated_companiesFind the companies that share one company's building or c/o providerARead-onlyIdempotentInspect
The companies sharing one company's address, given its UID: the same physical address, or the same c/o provider — the fiduciary it is domiciled at, matched as mailbox detection counts mass domiciliation. You pivot from a UID; a c/o string is never accepted. The subject is left out. Returns UIDs, newest first. basis names the keys it could be pivoted on, so an empty basis means no address and no provider, not that it stands alone.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Company UID, formatted or plain | |
| size | No | Page size, max 100 (default 100) | |
| cursor | No | nextCursor from the previous page; omit to start at the beginning. Opaque — pass it back verbatim, and keep the same filters and sort or it is rejected. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| source | Yes | |
| disclaimer | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world. The description adds genuine behavioral context beyond that: results are UIDs newest-first, the subject is excluded from its own results, and an empty 'basis' means no address or provider rather than isolation. That last clarification prevents a real misinterpretation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and scope before the edge-case caveats. Dense and slightly clause-heavy in the middle ('the fiduciary it is domiciled at, matched as mailbox detection counts mass domiciliation'), but every sentence carries information an agent would otherwise guess wrong.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return shape need not be explained, yet the description still usefully previews the return (UIDs, newest first, basis semantics) and the input constraint on uid. Complete for a read-only pivot tool; only the absence of sibling routing keeps it below a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 meaning the schema does not: the uid must be a company UID and a c/o string is never accepted as a pivot. It says nothing extra about size or cursor, which the schema already documents adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — companies sharing one company's address, pivoted by UID — and explicitly carves out what it is not ('a c/o string is never accepted', 'the subject is left out'). An agent can distinguish it from siblings like list_company_uids_at_address and search_companies without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear invocation context: pivot from a UID, and it will not accept a c/o string as input. It does not name an alternative sibling or state when-not to use this versus list_company_uids_at_address, so it falls short of fully explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_company_by_nameLook up a Swiss company's UID by name, live from the federal registerARead-onlyIdempotentInspect
Resolves a company name to its UID by searching live against Zefix — not this dataset. Call search_companies first; an empty page there means not in this dataset, not that the company doesn't exist, so use this only once that comes back empty. Matches the start of the name (Zefix's own search, "*" wildcard allowed), at least 3 characters; an optional canton narrows it. Returns candidate uid, name, canton, legal form and status only — no AI fields, since the company may not be ingested yet — and names are not unique, so more than one candidate can come back for you to disambiguate before calling load_company with the right UID. matches is an empty list for a real zero; unavailable is set instead when the live register could not be reached. A broad match (e.g. a short or generic name) is capped at100results, with matchesTruncated set — narrow the name or add canton rather than assume completeness.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Company name, at least 3 characters; Zefix's own prefix/exact match, "*" wildcard allowed | |
| canton | No | Two-letter canton code, e.g. "ZH", to narrow the search |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| source | Yes | |
| disclaimer | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description still adds real behavioral context beyond them: the live-register source, the distinguishability of an empty matches list versus an unavailable flag, the 100-result cap with matchesTruncated, and the fact that names are non-unique. That is meaningful disclosure, though it stops short of describing latency/auth characteristics of a live federal register call, so a 3 rather than a 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded: the purpose and the search_companies precondition come first, then matching rules, then return semantics, then the truncation caveat. Every sentence carries distinct information, though the long run-on middle sentence about return fields could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, yet the description usefully clarifies the tricky semantics an agent would otherwise misread: empty matches versus the unavailable flag, and the truncation cap. Combined with explicit matching constraints and the calling sequence, nothing needed to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already documents the 3-character minimum, prefix/exact matching, the "*" wildcard, and the canton code. The description largely restates these ('matches the start of the name', 'optional canton narrows it') with no syntax or formatting detail the schema lacks. Baseline 3 is the correct call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('resolves a company name to its UID') and explicitly scopes it as a live external lookup against Zefix rather than the local dataset. It names the sibling it depends on (search_companies) and the sibling it feeds (load_company), so an agent can place it precisely among the ten siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition ('call search_companies first; use this only once that comes back empty') plus the reason an empty local page is not proof of nonexistence. It also prescribes the downstream step (disambiguate, then call load_company with the right UID), covering when, when-not, and what comes next.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_companiesGet full records for one or several Swiss companies by UIDARead-onlyIdempotentInspect
Full detail for one or several companies (1 to 25) by UID: verbatim purpose, all contact fields, full AI block — the second half of a search, without a call per row. An absent vatRegistration means that enrichment has not run. analysisStatus is always present, and ANALYSED does not promise every field — a dissolution or an administrative change runs only part of the pipeline. Answered in the order asked, a repeated UID once. UIDs the dataset lacks come back in notInDataset with a reason pointing at load_company (which fetches one at a time), and any left out because the response filled up come back in omittedForSize, so a short answer always says so. A malformed UID, or one whose check digit contradicts the rest, is rejected instead.
| Name | Required | Description | Default |
|---|---|---|---|
| uids | Yes | One or several company UIDs, formatted or plain; at most 25 per call |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| source | Yes | |
| disclaimer | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Well beyond the readOnly/idempotent/non-destructive annotations, it discloses partial results (omittedForSize), missing-data semantics (absent vatRegistration, ANALYSED not implying complete pipeline), ordering guarantees, duplicate-UID collapsing, and malformed check-digit rejection. These tell the agent exactly how to interpret a short or partial answer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and limits are front-loaded in the first clause, and every subsequent sentence carries distinct operational information rather than filler. It is dense and a couple of sentences chain multiple facts with em-dashes, which costs some readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return shape need not be restated, yet the description still covers the non-obvious response keys (notInDataset, omittedForSize) and the guarantees around them. Nothing an agent needs to call this correctly or interpret its output is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents 'formatted or plain; at most 25 per call', so the baseline is 3. The description still adds meaning about the parameter's behavior: answer order mirrors request order, duplicates collapse to one, and invalid UIDs are rejected rather than silently dropped.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first clause states a specific verb and resource with scope: 'Full detail for one or several companies (1 to 25) by UID'. It positions itself against siblings by calling itself 'the second half of a search' and by naming load_company for the one-at-a-time case, so an agent can distinguish it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly frames the tool as the batch follow-up to a search and names load_company as the single-record alternative, with notInDataset reasons pointing there. It stops short of an explicit 'use this when / do not use this when' statement, so usage is strongly implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_publicationsRead the verbatim gazette text of one or several SHAB publications by idARead-onlyIdempotentInspect
Verbatim gazette text for one or several publications (1 to 25), by the UUID search_publications returned. In the order asked, a repeated id once. A message runs from hundreds of characters to several kilobytes, so the id count does not bound the response: entries are returned until the text fills it and the rest come back in omittedForSize; unknown ids come back in notInDataset with a reason; a malformed id is rejected instead.
| Name | Required | Description | Default |
|---|---|---|---|
| publicationIds | Yes | One or several publication ids (UUIDs) as returned by search_publications; at most 25 per call |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| source | Yes | |
| disclaimer | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations (readOnly/idempotent/non-destructive) by disclosing real behavioral traits: results are size-bounded rather than id-bounded, overflow lands in omittedForSize, unknown ids land in notInDataset with a reason, malformed ids are rejected outright, and duplicate ids are collapsed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what the tool returns and where the ids come from, then packs the edge-case behavior into a dense but purposeful second sentence. Slightly compressed phrasing ('a repeated id once') costs a little readability, but nearly every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with an output schema, the description supplies exactly the non-obvious parts: truncation via omittedForSize, unknown-id handling, and malformed-id rejection. An agent has everything needed to call it and interpret the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and already documents the UUID list and the 25 cap, so baseline is 3; the description adds semantics the schema does not convey, namely that results preserve the requested order, that a repeated id is returned once, and that ids originate from search_publications.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('verbatim gazette text for one or several publications') and ties it to the sibling that produces the ids ('by the UUID search_publications returned'), so an agent can distinguish it from search_publications without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: use this to fetch full text for ids obtained from search_publications, in batches of 1-25. It does not explicitly state when not to use it (e.g. 'use search_publications first if you only have a query'), but the routing to and from the sibling is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_company_uids_at_addressFind the companies registered at a street addressARead-onlyIdempotentInspect
All company UIDs at a physical address. Street and city match exactly (case-insensitive); house number and postal code narrow it. Matches the physical address only, never the c/o line — for a cluster around a shared fiduciary, start from a company and use find_colocated_companies. Newest registration first. Pair with get_companies for detail.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | City / town name, exact match, e.g. "Zürich" | |
| size | No | Page size, max 100 (default 100) | |
| cursor | No | nextCursor from the previous page; omit to start at the beginning. Opaque — pass it back verbatim, and keep the same filters and sort or it is rejected. | |
| street | Yes | Street name, exact match, e.g. "Bahnhofstrasse" | |
| zipCode | No | Postal code, e.g. "8001" | |
| houseNumber | No | House number, e.g. "10a" |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| source | Yes | |
| disclaimer | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description earns credit for adding match semantics (exact, case-insensitive on street/city), narrowing behavior via house number/postal code, sort order (newest registration first), and the important c/o-line exclusion. It does not discuss result-set size or pagination behavior beyond what the schema documents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four compact, front-loaded sentences: identity, matching rules, the c/o exclusion/routing, sort order, and the companion tool. No filler, and the most decision-relevant constraint (physical address only) comes early.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations covering safety, an output schema present, and pagination plus filter formats fully documented in the schema, the description supplies everything else an agent needs: what is returned (UIDs), match semantics, ordering, and the sibling to use instead for cluster queries.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 how the filters combine — street/city match exactly and case-insensitively while house number and postal code only narrow the result — which is meaningful semantics not obvious from the per-field descriptions alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — returning all company UIDs at a physical address — and immediately differentiates itself from find_colocated_companies by scoping to the physical address rather than a c/o cluster. An agent can identify the tool's niche without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool (physical street address) versus the alternative (a fiduciary cluster around a shared c/o line → start from a company and use find_colocated_companies), and names a companion tool (get_companies) for retrieving detail. Routing guidance is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mutation_typesLook up the mutation type codes that filter publicationsARead-onlyIdempotentInspect
Every valid mutation type with its English description, for the mutationTypes filter in search_publications.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| source | Yes | |
| disclaimer | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a safe, read-only, idempotent, non-destructive lookup with no open-world access, so the safety profile is covered. The description adds a meaningful behavioral fact beyond that: the result is a complete enumeration ('every valid mutation type'), signalling a static, finite reference list rather than a paginated or partial query.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads what is returned and ends with the consuming context. No filler, no redundancy with the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the return shape need not be restated. For a zero-parameter static lookup, the description supplies everything needed to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description frames the output as a lookup keyed to a specific filter field, which is the only semantic context a parameterless tool can carry.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: it returns the complete set of valid mutation type codes with their English descriptions. It also states the exact consumer of that data ('the mutationTypes filter in search_publications'), which separates it cleanly from every sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells the agent exactly when this tool is relevant: when populating or interpreting the mutationTypes filter in search_publications. It does not spell out sequencing (e.g. call this before search_publications) or when it is unnecessary, so it stops short of explicit alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_companyLoad a company missing from the dataset live from SHAB/ZefixAIdempotentInspect
Fetches a company from SHAB/Zefix live and ingests it, for a UID get_companies reports as notInDataset — call get_companies first. Returns the same record once loaded; an already-present UID returns immediately. If there is nothing to return, loadStatus says why: NOT_IN_REGISTER, IN_PROGRESS/QUEUE_FULL (retry shortly), or SOURCE_UNAVAILABLE. A malformed UID is rejected.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Company UID, formatted or plain |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| source | Yes | |
| disclaimer | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, idempotentHint=true, openWorldHint=true), but the description adds behavior those hints cannot: a live external fetch that ingests, immediate return when already present, and a failure taxonomy (NOT_IN_REGISTER, IN_PROGRESS/QUEUE_FULL with retry guidance, SOURCE_UNAVAILABLE) plus malformed-UID rejection.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the action and the prerequisite, then outcome, then status codes. Every clause carries operational information; no filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't detail the record shape, and it correctly focuses on loading semantics and the loadStatus failure modes an agent must branch on. Complete for a one-parameter ingest tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single uid parameter already documents 'formatted or plain'. The description adds marginal but real value by specifying that a malformed UID is rejected rather than silently ignored, which shapes caller validation expectations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb+resource ('Fetches a company from SHAB/Zefix live and ingests it') and anchors scope with the sibling prerequisite 'for a UID get_companies reports as notInDataset'. An agent can distinguish this from get_companies, search_companies, and find_company_by_name without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it ('call get_companies first' for a notInDataset UID) and what happens in the already-loaded case ('an already-present UID returns immediately'). Names the alternative tool that selects this path, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_companiesFind Swiss companies by name, purpose, canton, legal form, industry, location and AI lead scoreARead-onlyIdempotentInspect
Search Swiss companies of every legal form: name, canton, legal form, industry, location, registration date, capital, discovered contact details, and the AI block (lead/viability score, mailbox-company and dissolution flags, size, confidence tier, buyer profiles, growth signals). Nothing is silently ignored — an unknown closed-set value or a free-text term under 3 characters is rejected — so an empty page is a real zero for this dataset, which holds only companies named in recent SHAB publications; it is not evidence the company doesn't exist in the register at all — try find_company_by_name against the live register instead. Every AI filter matches only analysed companies, so an empty page there means none analysed matched; analysisStatuses says how much was in scope. purpose is the exception and the way to ask what a company does: it searches the register's own purpose clause, which every company has, and the English AI summary together, so an unanalysed company is still found by its own words, and with no sort the most relevant come first. Unscored companies sort last, so pair a score sort with its minimum. Rows carry the filterable fields only — get_companies for the purpose, address, contact data and full AI block.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City / town name (partial match, min 3 chars) | |
| size | No | Page size, max 100 (default 20) | |
| sort | No | Ordering: REGISTRATION_DATE_DESC (default, or relevance when a purpose term is given), REGISTRATION_DATE_ASC, LEAD_SCORE_DESC, VIABILITY_SCORE_DESC. Companies with no score sort last, so a score ordering is not a substitute for the matching minimum filter. | |
| cursor | No | nextCursor from the previous page; omit to start at the beginning. Opaque — pass it back verbatim, and keep the same filters and sort or it is rejected. | |
| search | No | Free-text match on UID, CH-ID, or the firm name of legal entities (min 3 chars; shorter is rejected). Sole-proprietor/partnership names are not name-searchable. | |
| street | No | Street name (partial match, min 3 chars) | |
| cantons | No | Two-letter canton codes, e.g. ["ZH","BE"]; anything else is rejected | |
| purpose | No | What the company does (min 3 chars per term). Terms are alternatives; words inside one term must all appear. Nothing is translated: the purpose clause is written in German, French or Italian, and one language finds only the companies that filed in it, so pass all three wordings — ["Photovoltaik","photovoltaique","fotovoltaico"]. An English term reaches the AI summary instead, so on its own it finds analysed companies only. Words match as prefixes and accents are ignored. | |
| zipCode | No | Postal code (prefix match), e.g. "80" or "8001" | |
| hasEmail | No | true keeps only companies with a discovered email | |
| industry | No | AI industry or sub-industry (partial match, min 3 chars), e.g. "software" | |
| statuses | No | Statuses: ACTIVE, CANCELLED, BEING_CANCELLED | |
| capitalMax | No | Maximum nominal capital, in the company's own currency | |
| capitalMin | No | Minimum nominal capital, in the company's own currency | |
| hasContact | No | true keeps only companies with a discovered email or website | |
| hasWebsite | No | true keeps only companies with a discovered website | |
| legalForms | No | Legal forms, by abbreviation or full name in any official language, e.g. ["AG","GmbH"], ["SA","Sàrl"] or ["Genossenschaft"]; an unknown one is rejected. Catalog: vetari://allowed-values/legalForm | |
| isDissolved | No | true keeps only companies the AI marks dissolved, false only those it marks not dissolved; no verdict matches neither | |
| likelyNeeds | No | AI likely needs the company may have, e.g. ["BOOKKEEPING","CORPORATE_LAW"]; one of BOOKKEEPING, STATUTORY_AUDIT, TAX_ADVISORY, PAYROLL_SERVICES, CORPORATE_LAW, EMPLOYMENT_LAW, IP_TRADEMARK, CONTRACT_LAW, REGULATORY_COMPLIANCE, RECRUITING, HR_OUTSOURCING, BUSINESS_BANKING, CORPORATE_FINANCE, BUSINESS_INSURANCE, PENSION_BENEFITS, IT_INFRASTRUCTURE, SOFTWARE_DEVELOPMENT, CYBERSECURITY, DIGITAL_MARKETING, WEB_ECOMMERCE, OFFICE_SPACE, FACILITY_MANAGEMENT, LOGISTICS_WAREHOUSING, PROCUREMENT, INDUSTRY_SPECIFIC | |
| companySizes | No | AI size buckets: SOLO, MICRO, SMALL, MEDIUM, LARGE, UNKNOWN | |
| maxLeadScore | No | Maximum AI lead score, 1-10 | |
| minLeadScore | No | Minimum AI lead score, 1-10 (10 = hottest lead) — a different scale from the viability score | |
| registeredTo | No | Registered on/before this ISO date (YYYY-MM-DD) | |
| growthSignals | No | AI growth signals: SUBSTANTIAL_CAPITAL, SOLID_CAPITALIZATION, MULTI_PERSON_TEAM, INTERNATIONAL_TEAM, TECHNOLOGY_ORIENTED, DIVERSIFIED_OFFERING, CONDITIONAL_CAPITAL_PROVISION, CAPITAL_BAND_FLEXIBILITY, IN_KIND_CONTRIBUTION, DETAILED_PURPOSE | |
| registeredFrom | No | Registered on/after this ISO date (YYYY-MM-DD) | |
| capitalCurrency | No | Capital currency, e.g. "CHF" — capital bounds do not convert between currencies, so pair them with this | |
| confidenceTiers | No | AI confidence in its own analysis: HIGH, MEDIUM, LOW | |
| analysisStatuses | No | Analysis states: NOT_ANALYSED, INCOMPLETE, ANALYSED | |
| isMailboxCompany | No | true keeps only companies whose registered purpose states no operating activity and whose setup corroborates it, false only those with an operating purpose; a company with no verdict matches neither | |
| maxViabilityScore | No | Maximum AI viability score, 0-100 | |
| minViabilityScore | No | Minimum AI viability score, 0-100 — a different scale from the lead score | |
| targetBuyerProfiles | No | Who the AI thinks would sell to this company: B2B_SOFTWARE_VENDOR, PROFESSIONAL_SERVICES_FIRM, FINANCIAL_ADVISOR, REAL_ESTATE_AGENT, HR_RECRUITER, MARKETING_AGENCY, LOGISTICS_PROVIDER, INDUSTRY_SUPPLIER |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| source | Yes | |
| disclaimer | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safe read-only/idempotent profile, and the description goes well beyond them: rejection of unknown closed-set values and sub-3-char terms, empty-page semantics against a SHAB-only dataset, unscored companies sorting last, and cursor rejection when filters/sort change. These are exactly the operational traits an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The prose is dense and front-loaded, with the scoping semantics before the fallback pointers, and every sentence carries information. It is heavier than necessary — several clauses could be tightened — but there is little that is purely filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 32-parameter, zero-required search over a specialised dataset, the description covers filter semantics, empty-result interpretation, sorting caveats, and pagination constraints, and defers return-value detail to the existing output schema and to get_companies.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 genuine conceptual meaning: purpose searches the register's own clause plus the English AI summary, language is not translated so terms must be passed in DE/FR/IT, and it warns that a score sort is not a substitute for the minimum filter. The lead-vs-viability scale distinction mostly duplicates the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource and enumerates the searchable facets (name, canton, legal form, industry, location, registration date, capital, contact details, AI block). It explicitly differentiates itself from siblings by naming find_company_by_name (live register) and get_companies (full record/contact data).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when an empty page is a genuine zero versus when to fall back to find_company_by_name, explains that AI filters only match analysed companies and that analysisStatuses reports scope, and carves out purpose as the exception that reaches unanalysed companies. Alternatives and exclusions are explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_publicationsSearch SHAB gazette publications by date, mutation type, canton or companyARead-onlyIdempotentInspect
Search SHAB gazette publications by date (published or journal), mutation type (see list_mutation_types), sub-rubric, canton, the named company's legal form, and/or a list of company UIDs. Unknown closed-set values are rejected, so an empty page is a real zero. Newest first; the order is fixed. Rows say what happened, to whom and when, without the gazette text — read that via get_publications. title is the entry's own headline, and subRubric separates entries from changes and deletions, which is what is left when mutationTypes is UNRESOLVED. Every other company attribute is a question for search_companies. No free-text search over publication bodies.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Page size, max 100 (default 20) | |
| cursor | No | nextCursor from the previous page; omit to start at the beginning. Opaque — pass it back verbatim, and keep the same filters or it is rejected. | |
| cantons | No | Two-letter canton codes, e.g. ["ZH","BE"]; anything else is rejected | |
| journalTo | No | Entered in the journal on/before this ISO date (YYYY-MM-DD) | |
| legalForms | No | Legal forms of the company named, by abbreviation or full name in any official language, e.g. ["AG","GmbH"] or ["SA","Sàrl"]; an unknown one is rejected. Catalog: vetari://allowed-values/legalForm | |
| subRubrics | No | Sub-rubrics of the commercial-register rubric: HR01 new entries, HR02 changes, HR03 deletions | |
| companyUids | No | Restrict to these companies by UID, formatted or plain; at most 25 | |
| journalFrom | No | Entered in the journal on/after this ISO date (YYYY-MM-DD) — the register's own date, days before publication | |
| publishedTo | No | Published on/before this ISO date (YYYY-MM-DD) | |
| mutationTypes | No | Mutation types matched with OR semantics, e.g. ["NEW_REGISTRATION","DISSOLUTION_BANKRUPTCY"]; valid values via list_mutation_types | |
| publishedFrom | No | Published on/after this ISO date (YYYY-MM-DD) |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| source | Yes | |
| disclaimer | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and non-destructive, but the description adds real behavioral context: closed-set values are strictly rejected so an empty result is a genuine zero, and results are fixed newest-first with no ordering control. These are traits not derivable from the annotations, though return-format and pagination behavior are only lightly touched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The paragraph is dense but front-loaded with the search dimensions, followed by rejection/ordering behavior and sibling routing. Every sentence carries information, though the run-on enumeration of filters and caveats makes it heavier than a strictly optimal structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value explanation is not required, and the description still covers filter semantics, closed-set validation behavior, result ordering, and the sibling boundary cases. For an 11-parameter but zero-required search tool, this is complete enough to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds cross-parameter semantics the schema does not: subRubric distinguishes entries/changes/deletions and is what remains when mutationTypes is UNRESOLVED, and title is the entry's own headline. This clarifies the relationship between filters rather than merely restating them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (SHAB gazette publications) and enumerates the filter dimensions. It explicitly distinguishes itself from siblings by routing gazette text to get_publications and company attributes to search_companies, so an agent can tell them apart without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names concrete alternatives and the conditions that select them: list_mutation_types for valid mutation values, get_publications for the gazette body text, search_companies for other company attributes. It also states a negative boundary ('No free-text search over publication bodies'), leaving little to infer.
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.
4 tool updates
- Changed
get_companies1 field changed- changed
Input schema / properties / uids / descriptionPrevious value: -"Company UIDs, formatted or plain; at most 25 per call"New value: +"One or several company UIDs, formatted or plain; at most 25 per call"
- Removed
get_company - Removed
get_publication - Changed
get_publications1 field changed- changed
Input schema / properties / publicationIds / descriptionPrevious value: -"Publication ids (UUIDs) as returned by search_publications; at most 25 per call"New value: +"One or several publication ids (UUIDs) as returned by search_publications; at most 25 per call"
12 tool updates
- First observed
describe_dataset - First observed
find_colocated_companies - First observed
find_company_by_name - First observed
get_companies - First observed
get_company - First observed
get_publication - First observed
get_publications - First observed
list_company_uids_at_address - First observed
list_mutation_types - First observed
load_company - First observed
search_companies - First observed
search_publications
Publisher details
- Operator
- devcasa GmbH
- Operator website
- https://vetari.ch/en/connector · Publisher source
- Vendor relationship
- Not applicable
- Documentation
- Not applicable
- Trust center
- Not applicable
- Restrictions
- Requires paid subscription to be purchased after registration. There is trial period available
Related MCP Connectors
Daily feed of new Swiss companies from the SHAB gazette, with website and email where found.
Search and verify Swiss companies, UID status and register changes with dated official sources.
Swiss bankruptcy, liquidation and register alerts for a UID list. Source: SHAB. Webhook, API, email.
Swiss commercial register: companies, officers, bankruptcy risk, and your monitored lists.
Related MCP Servers
- AlicenseAqualityCmaintenanceSearch and retrieve detailed information about Swiss companies from the official Zefix register, including company profiles, corporate structures, and SHAB publications.6MIT
- FlicenseNot gradedqualityCmaintenanceThe most comprehensive signal intelligence on Swiss businesses — 800K+ companies with people, FINMA/SRO regulatory data, building permits, procurement tenders, and AI-enriched profiles from the official commercial register.-
- AlicenseAqualityAmaintenanceProvides access to the Swiss Federal Commercial Register (Zefix) for company search, verification, and reference data, enabling natural language queries for public administration use cases.981 PyPIMIT
- AlicenseAqualityBmaintenanceEnables searching the Swiss commercial register, retrieving company and SOGC publication data, and validating Swiss UID and VAT numbers via the Zefix REST API and UID Webservice, including combined due-diligence reports.9MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.