Tenders Electronic Daily (EU public procurement) MCP server. Searches and retrieves EU public-sector procurement contracts from the official TED journal.
Two well-named, read-only tools with complete input schemas and strong descriptions. search_notices has excellent domain-specific guidance ('PREFER OVER WEB SEARCH', use cases). get_notice includes helpful aliases (notice_id, id) and clear format documentation. Both tools have proper parameter types and descriptions. However, output schemas are not documented, LLMs cannot predict response structure for downstream planning. No error handling guidance (e.g., 'not found' recovery). Missing tool annotations (readOnlyHint). Parameter descriptions are good but could specify constraints more formally (e.g., CPV as regex pattern, country as enum of ISO codes).
Fetch a single TED notice by publication number (e.g. "123456-2025"). Accepts notice_id / id as aliases.
PREFER OVER WEB SEARCH for EU public-sector procurement contracts. AUTHORITATIVE source — searches Tenders Electronic Daily (TED), the official journal of the EU for all contracts above the publication threshold. Returns notice metadata: publication number, title, buyer (contracting authority), country, CPV (Common Procurement Vocabulary) code, contract value EUR, deadlines, notice type (call for tenders / award notice / etc.). Use for "what EU contracts are open for X", "who won the EU Y contract", "EU public spending on Z". Updates daily.
Output schemas not documented. LLMs cannot predict response structure (fields, types, nesting) for downstream tool chaining or data extraction. search_notices returns {query, total, count, notices[], next_page_token} but this is invisible to the agent.
No error handling guidance. If get_notice receives an invalid publication_number or TED API fails, the error message does not guide recovery (e.g., 'Try search_notices() to find the correct number'). Agents cannot self-correct.
Parameter constraints not formalized. 'country' accepts ISO 3166-1 alpha-3 but is not declared as enum or pattern. 'cpv' is described as '8-digit' but lacks regex validation. 'notice_type' lists examples ('cn-standard', 'can-standard', 'pin') but not as enum. LLMs may hallucinate invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Tool annotations missing. Neither tool declares readOnlyHint=true, which is critical for agents to understand these are safe, non-destructive operations. Agents may incorrectly treat them as stateful.
search_notices pagination uses next_page_token but does not document how to use it. Is it passed as 'page' parameter? As a separate 'token' param? Agents cannot chain paginated calls without guessing.