MCP server for Atlas Przetargów — search and analyze Polish public tenders (BZP + TED) from any AI client (Claude Desktop, Cursor, Continue).
Strong tool naming (all verb_noun pattern), comprehensive descriptions (avg 180 chars), and well-structured schemas with enums and constraints. All 8 tools have input schemas with typed parameters and descriptions. Output schemas are documented in descriptions. Main gaps: no tool annotations (readOnlyHint/destructiveHint), limited error recovery guidance, and no batch operations despite agent-friendly use cases. Composition is clean, each tool has one responsibility. Parameter descriptions are actionable (e.g., 'Polish tax ID (NIP), 10 digits'). Pagination implemented (limit, page). No secrets exposed as parameters.
Fetch a profile of a Polish public procuring entity (zamawiający) by its NIP (tax ID). Returns name, location, statistics, recent tenders, and top winning contractors. Use for due diligence on who buys what and from whom.
Retrieve aggregate statistics for a CPV category: count, average/median value, average number of offers, average deadline period. Based on historical BZP+TED data. Useful for market sizing and competitive benchmarking.
Fetch a profile of a Polish tender contractor by its NIP. Returns name, location, total wins, total value and top buyers they win tenders from.
Retrieve aggregate tender statistics by Polish province (all 16 voivodeships) or drill down to a specific city (top buyers, top CPV categories). Without arguments returns the full province ranking.
Retrieve detailed information about a specific Polish public tender by its ID. Returns buyer, location, deadlines, estimated value, CPV codes, contractor (if awarded), notice type and a content excerpt. Optionally includes AI-generated summary points (requires ATLAS_API_KEY).
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All 8 tools are read-only but lack explicit annotation for LLM safety and optimization.
Error handling lacks recovery guidance. No documented error responses or actionable next steps (e.g., 'If tender not found, try search_tenders with keywords').
No batch operations. Agents calling get_buyer or get_contractor in loops (e.g., for 10 NIPs) must make 10 sequential calls instead of one batch call. Wastes tokens and latency.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
Search for CPV (Common Procurement Vocabulary) codes by keyword. Returns matching codes with division, category, and tender count. Use to find the right CPV code for a procurement category.
Search for Polish procuring entities (zamawiający) or contractors by name. Returns matching entities with NIP, location, tender count, total value, and slug for profile links. Use to find NIP when you only have a name.
Search for Polish public tenders with filters: query text, CPV category, location (city/province), value range, notice type, deadline, sorting. Returns paginated list of tender summaries with ID, title, buyer, value, deadline, offer count.
Parameter 'noticeType' in search_tenders uses free-form string description instead of explicit enum constraint. LLMs may hallucinate invalid values like 'Active' or 'Completed'.
Output schemas documented only in descriptions, not as formal JSON Schema. Clients cannot programmatically validate responses or generate type stubs.