A side-by-side look at the Polish Public Tenders and Ocds MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Polish Public Tenders for search & data extraction work; choose Ocds MCP for search & data extraction as a local process. You can also run both side by side in one mcpServers block.
search_tenders, get_company_public_tenders, get_company_eu_tenders.VERGABE_API_KEY.match_tenders, linked_notices, update_company_profile.Rows where the two servers differ are marked.
| Spec | P Polish Public Tenders | |
|---|---|---|
| Category | Search & Data Extraction | Search & Data Extraction |
| Quality signal | 47/100 · Fair | 61/100 · Good |
| Install command | Not confirmed yet | Confirmed |
| Transport | — | Local subprocess (stdio) |
| Auth | API key required | API key required |
| Pricing | Not declared | BYOK (pay the provider) |
| Required env vars | None listed | VERGABE_API_KEY |
| Verified owner | Community listing | Community listing |
| GitHub stars | 0 | 5 |
| Directory activity | 0 views 0 installs 0 upvotes | 1 views 0 installs 0 upvotes |
| Tools | 5 | 11 |
| Full listing | View Polish Public Tenders | View Ocds MCP |
search_tendersOpen or awarded notices by industry (IT, construction, healthcare or CPV division), region, city, kind and value.get_company_public_tendersBZP contracts won and notices published by one company.get_company_eu_tendersTED (EU-threshold) contracts and notices for one company.get_company_eu_fundsEU funds, state aid and European Commission grants.search_companiesIdentify buyers and contractors (KRS, NIP, financials).match_tendersSemantic match: find tenders similar to a profile's stored description vector. The vector is embedded locally and sent to the API (the profile text never leaves the machine). Optional `filters` (same taxonomy as search_text) apply server-side. Returns SearchResult rows. `k` defaults to 10, max 100.linked_noticesList the notices that make up one procurement: given an OCID, return the linked set of {ocid, notice_id} refs (the procurement's notice lineage — PIN/CN/CAN siblings sharing the procurement key). Ids only; fetch each notice's XML via get_release with the returned notice_id. A length-1 set means a single isolated notice with no lifecycle to walk (the sub-threshold case).update_company_profileUpdate a company profile. Only provided fields change. If the description changes, the profile is re-embedded locally.list_company_profilesList all company profiles (summary without description), ordered by creation date.get_index_infoHealth + version check of the API plus local profile counts and the embedding-contract comparison. Reports the API status/version, the client's embedding model/contract/dimension, the server's advertised contract (when present), and whether they match. Call this first to check connectivity.delete_company_profileDelete a company profile and its embedding by UUID.create_company_profileCreate a company profile for tender matching. Stores name, description, CPV codes, categories, and location in a local SQLite database. The description is embedded locally (passage prefix); neither the text nor the embedding is sent until a match_tenders call sends the vector. Returns the profile UUID and embedding status. German description recommended.search_textSemantic full-text search over the German procurement corpus. The query is embedded locally with multilingual-e5-small and only the 384-float vector is sent to the API (the query text never leaves the machine). Returns the top `k` SearchResult rows grouped by OCID, each carrying ocid, score, title, buyer_name, procurement_method, main_procurement_category, value_amount/currency/currency_eur_amount, deadline (RFC3339), award_date, cpv_codes, phase, documents_url, data_source, country. Optional `filters`: phase (planning/open/closed/awarded/unsuccessful), cpv_starts_with (2..8 digit CPV prefix), country (ISO-2), value_min/value_max (EUR), deadline_after/deadline_before (RFC3339), main_procurement_category (goods/works/services), buyer_name, procurement_method (eForms codes, match-any), data_source.get_company_profileGet a company profile by its UUID. Returns name, description, CPV codes, categories, location, and embedding status.list_releasesFilter-only browse over the German procurement corpus (no semantic query — only filter values cross the wire). Same filter taxonomy as search_text. Paginate with `limit` (max 200, default 20) and `offset`. Returns SearchResult rows ordered by deadline DESC.get_releaseFetch the raw eForms XML envelope for a single OCID (5 fields: ocid, notice_id, data_source, country, raw_xml). Optional `notice_id` selects a specific notice of the OCID (EU siblings share one OCID); absent fetches the latest notice. Pair with linked_notices to walk a procurement's lifecycle (PIN->CN->CAN). Parse the XML yourself for detailed eForms fields — the envelope is intentionally thin.Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
No confirmed install command for Polish Public Tenders yet — follow the setup steps linked from its listing page rather than a guessed package name.
{
"mcpServers": {
"qune-tech-ocds-mcp": {
"command": "npx",
"args": [
"-y",
"@qune-tech/vergabe-mcp"
],
"env": {
"VERGABE_API_KEY": "YOUR_VERGABE_API_KEY_HERE"
}
}
}
}