simap MCP Server
This server lets AI assistants search and explore Switzerland's public procurement platform simap.ch.
Search public tenders with filters (text, dates, cantons, publication/process types, CPV/BKP codes, organizations)
Get full details of a specific tender by project and publication ID
Search and browse CPV, BKP, NPK, and OAG code hierarchies
List Swiss cantons and public institutions
Search public procurement offices
Retrieve publication history for a project (corrections, awards, etc.)
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@simap MCP ServerSearch for IT tenders in Zurich"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
simap MCP Server
An MCP (Model Context Protocol) server for interacting with simap.ch, Switzerland's public procurement platform.
Enables Claude and other AI assistants to search and view public tenders in Switzerland.
Developed by Digilac.
Features
Tool | Description |
| Search tenders with filters (text, dates, types, cantons, CPV) |
| Get full details of a specific tender |
| Search CPV codes (Common Procurement Vocabulary) |
| Navigate CPV code hierarchy |
| List all Swiss cantons |
| List Swiss public institutions |
| Get publication history for a project |
| Search public procurement offices |
| Search BKP codes (construction) |
| Navigate BKP code hierarchy |
| Search NPK codes (standardized positions) |
| Navigate NPK code hierarchy |
| Search OAG codes (object types) |
| Navigate OAG code hierarchy |
Related MCP server: Taiwan Tender MCP
Prerequisites
An MCP-compatible client — Claude Desktop is the easiest if you are not a developer.
Node.js ≥ 22 — only for clients that do not bundle it. Claude Desktop ships with its own Node.js, so there is nothing to install. For every other client, get it from nodejs.org (pick the LTS version).
No simap account, no API key, no payment — the simap API is public and read-only.
Installation & Configuration
Claude Desktop (recommended)
In Claude Desktop, open Settings → Developer → Edit Config. This opens the folder holding
claude_desktop_config.json:macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Open that file in a text editor and paste the block below. If the file already contains an
mcpServerssection, add only the"simap"entry inside it.{ "mcpServers": { "simap": { "command": "npx", "args": ["-y", "@digilac/simap-mcp"] } } }Save the file, then fully quit Claude Desktop (macOS: ⌘Q — closing the window is not enough) and reopen it.
Check it worked: the simap tools now show up under the tools icon in the message box. Ask "List the Swiss cantons in simap" — Claude should answer with the 26 cantons.
The very first launch downloads the server, which takes a few seconds. If the tools do not appear, check Settings → Developer for the server status and logs.
LM Studio
LM Studio follows the same mcp.json notation. Open the Program tab in the right-hand sidebar, then Install → Edit mcp.json, and add:
{
"mcpServers": {
"simap": {
"command": "npx",
"args": ["-y", "@digilac/simap-mcp"]
}
}
}LM Studio does not bundle Node.js — install it from nodejs.org first. Tender search leans on the model's ability to chain tool calls, so results depend a lot on which local model you load.
Code editors & developer tools
They all take the same snippet — only the file and the top-level key change:
Client | Where | Top-level key |
Claude Code |
|
|
Cursor |
|
|
VS Code (Copilot) |
|
|
Windsurf |
|
|
{
"mcpServers": {
"simap": {
"command": "npx",
"args": ["-y", "@digilac/simap-mcp"]
}
}
}Claude Code — add
--scope userto enable it in every project, or--scope projectto write a.mcp.jsonshared with your team. Claude Code does not readmcpServersfromsettings.json. Verify withclaude mcp list.VS Code uses
serversas the top-level key, notmcpServers.Cursor loads MCP servers only at startup — quit and reopen it fully.
npm install -g @digilac/simap-mcpThen point your client at the command directly:
{
"mcpServers": {
"simap": {
"command": "simap-mcp"
}
}
}git clone https://github.com/Digilac/simap-mcp.git
cd simap-mcp
npm install
npm run buildThen point your client at the absolute path:
{
"mcpServers": {
"simap": {
"command": "node",
"args": ["/absolute/path/to/simap-mcp/dist/index.js"]
}
}
}Usage
Once configured, just ask your AI assistant in natural language. Mention "in simap" to make sure the assistant routes the request through the MCP server:
"Show me new tenders published today in simap"
"Find construction tenders in canton Vaud in simap"
"Give me the details of this tender in simap" (after a search)
"Search CPV codes for IT services in simap"
Listed on
Contributing
Contributions are welcome! See CONTRIBUTING.md for development setup and commands, and ARCHITECTURE.md for architecture, internal patterns, and the full tool parameter reference.
simap API
This server uses the public API from simap.ch.
License
Available Tools
14 toolsbrowse_bkp_treeA
Browse the BKP code hierarchy (Swiss construction cost plan)
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Display language | en |
| parentCode | No | Parent BKP code. If omitted, shows root categories |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without any annotations, the description carries the full burden of disclosing behavior. The word 'Browse' strongly implies a safe, read-only operation with no side effects, but the description does not explicitly state that no data is modified. It also does not mention any rate limits or potential errors, though for a simple browse operation this is less critical.
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 a single, concise sentence that effectively communicates the tool's purpose. It contains no fluff, redundant phrasing, or unnecessary details, making it easy to parse and understand at a glance.
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?
The description covers the core purpose but omits any details about the return format, such as whether it returns a flat list or a nested hierarchy, or whether results are paginated. Given that no output schema is provided, this missing information could leave agents uncertain about how to handle the response, though the sibling browse tools likely share similar behavior.
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 schema already provides clear descriptions for both parameters: 'lang' as display language and 'parentCode' with an explanatory note about root categories. With 100% schema coverage, the baseline is 3, and the description itself adds no further parameter semantics or examples.
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 clearly states the action ('Browse') and the specific resource ('BKP code hierarchy'), with a helpful parenthetical definition ('Swiss construction cost plan'). This unambiguously distinguishes it from sibling tools like browse_cpv_tree or browse_npk_tree.
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 gives no explicit guidance on when to use this tool versus the many search and browse alternatives. It does not mention conditions for choosing browsing over searching, nor does it reference related tools like search_bkp_codes. Users must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browse_cpv_treeC
Browse the CPV code hierarchy (shows subcategories of a parent code)
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Display language | en |
| parentCode | No | Parent code (8 digits). If omitted, shows root categories |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of transparency. It does not state that the operation is read-only, nor does it mention any side effects, errors, or limitations. The minimal text leaves the agent uncertain about behavioral guarantees.
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 a single, concise sentence that effectively summarizes the tool's purpose without unnecessary detail or redundancy.
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?
The description lacks context on output format, pagination, or any interaction with sibling tools. Given the absence of annotations and output schema, the minimal description leaves out important information for an agent to use the tool effectively.
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 schema provides complete descriptions for both parameters (lang and parentCode), including the default and optional behavior. However, the tool description itself adds no additional meaning beyond the schema, so it receives the baseline score.
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 clearly states the tool browses the CPV code hierarchy and shows subcategories of a parent code. It distinguishes itself from other browse tools (OAG, BKP, NPK) by specifying CPV, but does not explicitly differentiate from search_cpv_codes.
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 provides no guidance on when to use this tool versus alternatives like search_cpv_codes or browse_oag_tree. It also does not mention the optional parentCode parameter or root-category behavior, leaving usage decisions to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browse_npk_treeC
Browse the NPK code hierarchy (standardized positions catalog)
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Display language | en |
| parentCode | No | Parent NPK code. If omitted, shows root categories |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, and the description does not explicitly state that browsing is a read-only operation. While 'browse' implies non-destructive behavior, the lack of explicit disclosure reduces transparency.
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 a single, efficient sentence that conveys the core purpose without extraneous details. It is concise and well-structured.
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?
Given sibling tools like search_npk_codes and browse_cpv_tree, the description provides enough context for basic differentiation but lacks explicit details about the hierarchy structure or when browsing is preferred over searching. Adequate but not comprehensive.
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?
Both parameters have descriptions in the schema: lang indicates display language and parentCode explains hierarchy navigation with default behavior. Schema coverage is 100%, so the baseline applies, though descriptions are minimal.
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 verb 'browse' and object 'NPK code hierarchy' clearly state the tool's function. It distinguishes from search_npk_codes by implying tree navigation, though it doesn't explicitly differentiate from other browse_* 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?
No guidance on when to use this browse tool versus the search_npk_codes or other browse_* tools. The description leaves the choice to the agent without contextual cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browse_oag_treeC
Browse the OAG code hierarchy (object type classification)
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Display language | en |
| parentCode | No | Parent OAG code. If omitted, shows root categories |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full burden of behavioral disclosure. It states a read-like action ('browse') but does not explicitly say it is read-only, describe the response structure, or disclose any side effects or access requirements. The description adds no behavior beyond the name and a vague classification hint.
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 a single concise sentence that front-loads the core purpose. It is efficient and avoids extraneous detail, though it lacks any structural elements like examples or a note about return format that could aid comprehension without adding bulk.
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?
Given no output schema and no annotations, the description is the only context. It fails to explain the return format (e.g., a list of child OAG codes with labels), how this tree relates to sibling trees (CPV, BKP, NPK), or any specifics about hierarchical navigation. An agent would need to infer most behavior from the parameter names and the parenthetical classification hint.
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 description coverage is 100%, with both 'lang' and 'parentCode' having descriptions. The description itself adds no parameter-specific meaning, but the baseline of 3 applies because the schema already documents parameter behavior (e.g., parentCode omission shows root categories). No additional value is provided by the description.
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 the verb 'browse' and the resource 'OAG code hierarchy' with a clarifying parenthetical about object type classification. It clearly identifies the tool's purpose but does not explicitly differentiate it from sibling browse tools (e.g., browse_cpv_tree) or search_oag_codes, which are distinct in behavior.
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?
No guidance is provided on when to use this tool versus alternatives. The description does not mention that browsing is appropriate for hierarchical exploration while search_oag_codes is for finding specific codes, nor does it note any exclusions or preconditions. The usage context is entirely implied by the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_publication_historyC
Get the publication history for a project (corrections, awards, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
| lotId | No | Lot ID (optional, to filter by lot) | |
| publicationId | Yes | Current publication ID (UUID) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It implies a read operation via 'Get' and hints at content (corrections, awards), but it does not disclose the return format, pagination, ordering, or the relationship between project, publication, and lot. For a tool with zero annotation coverage, this is a significant gap.
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 efficient sentence that front-loads the verb and resource with no wasted words. It is concise without being tautological, though it is brief enough that it risks bordering on under-specification for the reader.
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?
The tool has no output schema and no annotations, so the description is the only behavioral documentation. It does not explain the project/publication/lot relationship, does not hint at the return structure beyond 'corrections, awards, etc.', and leaves an agent uncertain about parameter expectations and response handling.
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 both parameters are well-documented in the schema (publicationId as current publication ID, lotId as optional filter), so the baseline is 3. But the description introduces the term 'project' which does not map to the schema's publicationId/lotId parameters, potentially confusing an agent about what to pass. It adds no value beyond what the schema already states.
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 ('Get the publication history') and gives content examples (corrections, awards), which distinguishes it from the sibling search/browse/lookup tools for codes, institutions, and tenders. However, a terminology mismatch exists — the description says 'for a project' while the parameters are publicationId/lotId — which slightly muddies the stated purpose.
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 provides no guidance on when to use this tool versus alternatives, no triggering context, and no exclusions. No sibling directly competes, but the description says nothing to help an agent decide when this is the right call, leaving the decision entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tender_detailsC
Get detailed information about a specific tender
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Preferred language | en |
| fullRaw | No | Include the complete unmodified API response as JSON at the end of the output. Verbose — only enable when the structured fields are insufficient. | |
| projectId | Yes | Project ID (UUID) | |
| publicationId | Yes | Publication ID (UUID) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavioral traits. It only says 'Get detailed information' without noting that it is a read-only operation, whether any permissions are needed, or how the output is structured. No side effects or constraints are mentioned.
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 a single concise sentence with no wasted words, but it is also too sparse to be genuinely helpful. It is not verbose, yet it lacks the substantive content needed for effective guidance.
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?
The tool has four parameters, two required, and no output schema. Without annotations, the description should explain what kind of details are returned, how the two IDs interact, and any other relevant context. The current description is insufficient for an agent to call the tool correctly with confidence.
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 input schema provides descriptions for all four parameters (100% coverage), including the UUID format and the language/raw options. The description itself adds no further meaning, but since the schema covers everything, the baseline of 3 is appropriate.
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 clear action ('Get detailed information') on a specific resource ('a specific tender'). It distinguishes from search tools but not from the closely related sibling get_publication_history. It is more specific than a tautology but lacks detail on what 'details' entails.
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?
No guidance is provided on when to use this tool versus alternatives such as get_publication_history or search_tenders. The description does not mention required identifiers or any context that would help an agent choose it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_cantonsA
List all Swiss cantons with their codes (useful for search filters)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It states that the tool returns a list of cantons and their codes, but does not describe the return format, ordering, or any side effects. For a trivial read-only list operation this is adequate, but it adds little beyond what the name 'list_cantons' already implies, only the 'with their codes' detail.
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 a single sentence, front-loaded with the action ('List all Swiss cantons') and immediately adds the relevant detail ('with their codes') and purpose ('useful for search filters'). There is zero waste; every word earns its place.
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 simple list tool with no parameters and no output schema, the description conveys the essential facts: what is listed and why it matters. It could explicitly describe the return structure (e.g., array of objects with name/code), but given the simplicity and the lack of side effects, the current level is nearly complete.
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 schema is trivially 100% covered. Per the rubric, a 0-parameter tool gets a baseline of 4. The description correctly focuses on the output rather than parameters, and there is no missing parameter documentation to compensate for.
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-resource ('List all Swiss cantons') and adds the scope 'with their codes', which is immediately actionable. It is clearly distinct from sibling tools that handle tenders, institutions, and procurement code systems (CPV/BKP/NPK/OAG), so an agent can unambiguously identify this as the canton reference 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 phrase 'useful for search filters' gives a clear use case: obtaining canton codes for filtering. This provides context but stops short of explicit exclusions or alternative references. Since no sibling tool deals with cantons, the usage intent is sufficiently implied, though not spelled out as a when-to-use vs. when-not-to-use statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_institutionsA
List Swiss public institutions (Confederation, cantons, municipalities) that publish tenders
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language for names | en |
| search | No | Filter by name (min 3 characters) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It clarifies that only institutions publishing tenders are included, but it does not disclose response format, default language behavior, ordering, or whether search filters against localized names.
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, front-loaded sentence that conveys scope, country, institution levels, and the tender-publishing filter without filler or redundancy.
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 simple optional-parameter list tool, the description and fully documented schema are largely sufficient. The main gap is the absence of any hint about the response shape, especially since there is no output schema and no annotations.
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 description coverage is 100%; lang and search are already well documented in the input schema. The description adds no parameter-level meaning beyond what the schema provides, so the baseline score of 3 applies.
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 ('List') and a specific resource ('Swiss public institutions — Confederation, cantons, municipalities — that publish tenders'). The parenthetical scope clearly distinguishes it from sibling tools like list_cantons.
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 implies its use case: when an agent needs the set of institutions publishing tenders. However, it does not explicitly say when to prefer this over alternatives such as search_tenders or list_cantons, nor does it mention any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_bkp_codesB
Search BKP (Swiss construction cost plan) codes by keyword or number
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Search language | en |
| query | Yes | Search term (keyword or code number) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It only states that the tool searches by keyword or number and provides no details about return shape, matching behavior, language effects, pagination, or result limits. It is not misleading, but it is minimal.
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 a single focused sentence with no filler. The resource and search mode are front-loaded, making it easy for an agent to parse quickly.
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?
The tool is relatively simple and the schema covers both parameters, but there is no output schema and no annotations. The description does not explain what the search returns, whether matches are partial or exact, or any language-specific behavior. It is minimally viable but leaves notable gaps.
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 description coverage is 100%, so the baseline is 3. The description's 'keyword or number' phrasing mirrors the schema's 'Search term (keyword or code number)' and adds no new meaning. The lang parameter is already fully explained by its schema enum and description.
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 uses a specific verb ('Search') and identifies the exact resource ('BKP (Swiss construction cost plan) codes') plus the input mode ('by keyword or number'). This clearly differentiates it from sibling browse tools like browse_bkp_tree and from searches over other code systems such as CPV, NPK, and OAG.
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?
No guidance is given about when to choose this tool over alternatives such as browse_bkp_tree or search_cpv_codes. The description implies it is for BKP code lookup, but it does not state exclusions, preferred contexts, or how it differs from browsing the BKP tree.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_cpv_codesB
Search CPV (Common Procurement Vocabulary) codes by keyword or partial code number
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Search language | en |
| query | Yes | Search term (keyword or code prefix) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the search action but does not mention result format, pagination, limits, or read-only nature. The agent has no indication of what the response looks like or any potential side effects, making this a significant gap.
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 a single, concise sentence that immediately conveys the tool's purpose and method. It is front-loaded with the key information and contains no unnecessary words or fluff.
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?
Given the absence of an output schema and annotations, the description should compensate by providing more context about expected results and usage constraints. It does not mention what the search returns, whether it supports partial matches, or how it relates to browsing tools. For a tool with minimal metadata, this description is insufficient for an agent to confidently 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 schema already covers 100% of the parameters, including descriptions for 'query' (keyword or code prefix) and 'lang' (search language). The description adds no additional semantic meaning beyond the schema, so the baseline score of 3 applies.
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 clearly states the action (search) and the resource (CPV codes) along with the search method (by keyword or partial code number). This distinguishes it from siblings like search_bkp_codes, search_npk_codes, and search_oag_codes, which target different code systems. The purpose is unambiguous and specific.
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 implies usage for CPV code searches but does not explicitly mention alternatives such as browse_cpv_tree for hierarchical navigation or other code search tools. It lacks explicit when-to-use vs when-not-to-use guidance, leaving the agent to infer context from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_npk_codesA
Search NPK (standardized positions catalog) codes by keyword or number
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Search language | en |
| query | Yes | Search term (keyword or code number) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. The verb 'search' implies a read-only operation, but it does not explicitly state that the tool has no side effects, nor does it mention authentication, rate limits, or other behavioral constraints. It is adequate but not detailed.
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 a single, concise sentence that directly conveys the tool's purpose. No superfluous information, and the parenthetical expansion of NPK is placed appropriately without disrupting 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?
Given the tool's simplicity (search by keyword or number), the description is largely complete. It does not specify the return format or result count, but this is not critical for a search tool and is likely inferable. Slight gap in not mentioning output specifics.
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 schema already provides descriptions for both parameters ('query' and 'lang'), covering their purpose and constraints. The tool description adds no further semantic detail beyond the schema, so the baseline score of 3 applies.
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 clearly states the tool searches NPK codes, with the expansion 'standardized positions catalog' adding helpful context. The verb 'search' and resource 'NPK codes' are specific, and it is distinguished from sibling search tools by the explicit code type.
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 mentions searching by keyword or number but provides no guidance on when to choose this tool over sibling search tools (e.g., search_cpv_codes, search_bkp_codes). The intended use is implied by the tool name, but no explicit alternatives or conditions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_oag_codesA
Search OAG (object type classification) codes by keyword or number
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Search language | en |
| query | Yes | Search term (keyword or code number) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the action as a search but does not mention return format, pagination, or any limitations. For a search tool this is minimal but acceptable; however, it adds little beyond the schema's parameter descriptions. No contradictions exist.
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 a single, front-loaded sentence with zero redundancy. It immediately identifies the verb, resource, and input type. This is exemplary conciseness for a search tool.
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?
The tool is a simple two-parameter search with no output schema. The description sufficiently conveys the core function, and the schema covers parameter details. However, it does not explicitly clarify the distinction from browse_oag_tree or what the result set contains, which could be helpful given the many sibling tools. Still, it is largely complete for the basic call.
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 description coverage is 100%, with both 'query' and 'lang' parameters having descriptive text. The description adds no extra meaning beyond the schema, essentially restating that it searches by keyword or number. Baseline score of 3 is appropriate given the complete schema coverage.
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 ('Search'), a precise resource ('OAG (object type classification) codes'), and the input type ('keyword or number'). It clearly distinguishes itself from sibling search tools like search_cpv_codes, search_bkp_codes, and search_npk_codes by naming OAG explicitly. The acronym is expanded for clarity.
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 implies usage for OAG codes but does not explicitly state when to use this tool versus alternatives such as browse_oag_tree or other code search tools. It provides no exclusions or conditions, leaving the agent to infer the appropriate selection based solely on the OAG reference. This is adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_proc_officesB
Search public procurement offices by name or institution
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Name to search (min 3 characters) | |
| institutionId | No | Filter by parent institution (UUID) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states that it searches, but does not mention return format, pagination, filtering behavior, case sensitivity, or any other operational detail. This is minimal disclosure for a search tool.
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, short sentence that front-loads the core action and scope. Zero wasted words, and the description is immediately readable.
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 simple two-parameter search with no output schema, the description is adequate but incomplete. It does not mention what a successful search returns, whether results are limited, or any pagination. Given the absence of annotations, more detail on expected output would improve completeness, but the tool is simple enough that a 3 is fair.
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 description coverage is 100% — both parameters have descriptions ('Name to search' and 'Filter by parent institution'). The tool description paraphrases these as 'by name or institution', adding no new semantic value. The baseline of 3 applies since the schema already documents the parameters fully.
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 clear verb ('Search'), a specific resource ('public procurement offices'), and the search dimensions ('by name or institution'). It is unambiguous and distinct from siblings like search_tenders or search_cpv_codes, though it does not explicitly name an alternative.
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?
No guidance is given on when to use this tool versus other search tools. While the resource is unique, the description does not state any conditions, exclusions, or alternatives, leaving the agent to infer usage from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tendersB
Search public tenders on simap.ch with filters by date, canton, CPV codes, and other criteria
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Preferred language for results | en |
| search | No | Search text (min 3 characters) | |
| cantons | No | Swiss cantons (e.g., BE, VD, GE, ZH) | |
| bkpCodes | No | BKP codes for construction (e.g., 211 for masonry) | |
| cpvCodes | No | CPV codes (8 digits, e.g., 72000000 for IT services) | |
| lastItem | No | Pagination token (format: date|projectNumber) to retrieve the next page | |
| pubTypes | No | Publication types (tender, award_tender, correction, etc.) | |
| processTypes | No | Process types (open, selective, invitation, direct, no_process) | |
| projectSubTypes | No | Project types to filter | |
| publicationFrom | No | Publication start date (format YYYY-MM-DD) | |
| publicationUntil | No | Publication end date (format YYYY-MM-DD) | |
| issuedByOrganizations | No | UUIDs of issuing organizations |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not mention pagination via lastItem, result ordering, response shape, or behavior when no filters are supplied. It adds no behavioral context beyond what the schema already exposes.
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?
One sentence with the resource front-loaded and the filter categories following. No filler, no repetition, and it effectively communicates the tool's core purpose.
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 12 optional parameters and no output schema, this description is too thin to be complete. It does not explain the result format, pagination workflow, or how filters combine, leaving an agent without enough context to plan a correct multi-step search.
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 description coverage is 100%, so the schema already documents all 12 parameters. The description's mention of date, canton, and CPV codes only echoes a subset of those fields and adds no new semantic detail. Baseline 3 is appropriate.
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 action ('Search') and resource ('public tenders on simap.ch'), and names key filter dimensions (date, canton, CPV codes). This is enough to distinguish it from sibling tools like search_cpv_codes, list_institutions, and get_tender_details.
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 implies the tool is for finding public tenders with filters, but it never explicitly says when to prefer it over complementary siblings such as get_tender_details for retrieving a specific tender or search_cpv_codes for building CPV filters. No exclusions or alternatives are named.
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.
14 tool updates
v1.4.0- Changed
browse_bkp_tree1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
browse_cpv_tree1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
browse_npk_tree1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
browse_oag_tree1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get_publication_history1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get_tender_details1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
list_cantons1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
list_institutions1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
search_bkp_codes1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
search_cpv_codes1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
search_npk_codes1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
search_oag_codes1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
search_proc_offices1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
search_tenders1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
14 tool updates
v1.3.0- First observed
browse_bkp_tree - First observed
browse_cpv_tree - First observed
browse_npk_tree - First observed
browse_oag_tree - First observed
get_publication_history - First observed
get_tender_details - First observed
list_cantons - First observed
list_institutions - First observed
search_bkp_codes - First observed
search_cpv_codes - First observed
search_npk_codes - First observed
search_oag_codes - First observed
search_proc_offices - First observed
search_tenders
TDQS
Scored across 14 tools
Most tools have clear, distinct roles: tender search/detail, code browsing/searching, and canton listing are easy to tell apart. However, list_institutions and search_proc_offices overlap somewhat, and search_oag_codes vs browse_oag_tree could confuse an agent without reading the descriptions carefully.
All tools follow a consistent snake_case verb_noun pattern using get, list, search, or browse. The verbs map predictably to operations, and abbreviations like cpv, bkp, npk, and oag are used consistently across search and browse tools.
With 14 tools, the server stays within the ideal range and each tool earns its place in the Swiss public procurement workflow. The eight code-related tools are justified by four distinct code systems, each needing both search and hierarchy browsing.
The core workflows of searching tenders and retrieving tender details are well covered, along with code hierarchies and institution lookup. Minor gaps exist: there is no direct institution-detail endpoint or tenders-by-institution endpoint, and no document/attachment access, but agents can work around these via search_tenders filters and get_tender_details.
Maintenance
Related MCP Connectors
simap MCP — Swiss public procurement tenders and awards (keyless).
Search public procurement notices from 17 sources across Germany, the EU and the UK. Read-only.
Search government tenders and public procurement opportunities with structured results.
Government tender search for AI agents. UK, EU and US procurement opportunities.
Related MCP Servers
- AlicenseBqualityBmaintenanceProvides AI models with access to Ukrainian government procurement data from Prozorro, enabling search and retrieval of tender information by organization, date range, and other criteria.16 npm11ISC
- FlicenseAqualityNot gradedmaintenanceEnables users to search and retrieve detailed information about Taiwan government procurement tenders through the Government Electronic Procurement System API. It supports searching tenders by keyword, category code, date, and government unit.6-
- AlicenseAqualityBmaintenanceExposes French and EU public procurement data (BOAMP + TED) as MCP tools for AI agents, enabling search for tenders, awards, and winner intelligence via typed filters.469 PyPIMIT
- AlicenseAqualityDmaintenanceMCP server for Finnish public procurement notices (Hilma). Enables searching and retrieving procurement notices directly from Claude without a separate browser.434 npmMIT