swiss-procurement-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HOST | No | Alias for MCP_HOST. | 127.0.0.1 |
| PORT | No | HTTP port (cloud transports only). | 8000 |
| MCP_HOST | No | HTTP binding (cloud transports only). Defaults to loopback; set 0.0.0.0 to expose all interfaces. | 127.0.0.1 |
| MCP_PORT | No | Alias for PORT. | 8000 |
| LOG_LEVEL | No | Log level: DEBUG, INFO, WARNING, ERROR. Logs to stderr. | INFO |
| MCP_STATELESS | No | Set to '1' to run streamable-http with no session tracking. | 0 |
| MCP_TRANSPORT | No | Transport mode: stdio, sse, or streamable-http. | stdio |
| MCP_CORS_ORIGINS | No | Comma-separated origins allowed to call the HTTP transports from a browser. Unset means no cross-origin browser access at all. |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_procurementsA | Find open tenders matching a topic, canton, CPV code or date window — the default entry point when the question is "what is being tendered?". Search Swiss public procurement projects on simap.ch. Covers all cantons and the Confederation, updated intraday. This is the
entry point; use Note that simap indexes PROJECTS, not publications: one hit is one project,
represented by its NEWEST publication. A project tendered in March and
awarded in July appears once, as the July award. Use
At least one filter is required — simap answers a filterless query with nothing rather than everything. Args:
query: Free-text search over titles and descriptions.
canton: Bare canton id, e.g. |
| search_procurements_detailedA | Answer a question needing both the hit list and each hit's detail in one step, e.g. "which school-building tenders ran in ZH and what BKP codes do they carry?". Prefer this over search_procurements followed by N detail calls. Search publications and return the FULL record for the top matches at once. Aggregated entry point for the common "find tenders and show me their details"
question: it runs the search and then fetches Prefer Args:
top_n: How many of the top hits to expand to full detail (1-5).
query, canton, canton_match, cpv_codes, process_type, pub_type,
published_from, published_until, language: identical to
|
| search_awardsA | Find who won, not what is open — all four award types at once. Use when the question is about completed procurement rather than current opportunities. Search only awarded contracts (who won). Convenience wrapper over Two coverage caveats. First, award coverage is uneven across cantons — some
publish awards diligently, others rarely, so absence is not proof that no
award happened. Second, the filter matches a project's NEWEST publication:
a project awarded in May and corrected in June is no longer an "award" to
this filter and drops out. Use
|
| get_procurement_detailsA | Retrieve the full record for one publication once you have its ids: criteria, deadlines, classification codes and the procuring body. Return the full record for one procurement publication. Both ids come from a |
| get_publication_historyA | Trace one project through time — tender to award to correction. Use when the question is "what happened to this procurement?". Return earlier publications of the same procurement project. Traces a project's lifecycle: tender → correction → award. An empty list is normal for a first publication. |
| search_cpv_codesA | Translate a keyword into the CPV classification codes needed to filter a search. Call this first when the user names a subject rather than a code. Search CPV classification codes by keyword. CPV (Common Procurement Vocabulary) is the international code system used to
filter |
| search_construction_codesA | Translate a keyword into Swiss construction cost codes (BKP, NPK, eBKP, OAG, CPC) — the bridge between a building topic and procurement filters. Search Swiss construction classification codes by keyword. Args: system: One of bkp, npk, ebkp-h, ebkp-t, oag, cpc. query: Keyword. These are the Swiss construction cost standards (Baukostenplan, Normpositionen- katalog) used in building tenders — relevant for school-building procurement. |
| find_procurement_officeA | Resolve a partial organisation name to the procuring offices simap knows, when the user names an authority rather than a project. Find public procurement offices by (partial) name. The public office list is large (~1 MB), so this fetches it once and filters client-side. Returns the office id, type (cantonal / federal / communal) and the linked institution id. |
| source_statusA | Check whether simap.ch is reachable and how fast it is responding. Call this when a search returns nothing and you need to distinguish "no matching tenders" from "the source could not be asked" — the two are not the same answer. Report reachability and latency of the simap.ch read API. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/malkreide/swiss-procurement-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server