TenderAPI
Server Details
Search EU public tenders from TED and national portals by CPV code, country, buyer or value.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP ยท MCP 2025-11-25
- URL
TDQS
Scored across 5 tools
Each tool has a clearly distinct purpose: searching tenders vs. fetching one by id, searching organisations vs. listing an org's tenders, and a dedicated CPV lookup helper. Descriptions explicitly cross-reference each other (e.g. 'Call this before search_tenders', 'Use the returned id with get_organisation_tenders'), leaving no real ambiguity.
Consistent verb_noun snake_case pattern throughout (get_tender, get_organisation_tenders, search_tenders, search_organisations, search_cpv_codes). Spelling conventions (British 'organisation') are also applied consistently.
Five tools is a compact but well-scoped set for a read-only procurement discovery API, with each tool earning its place. It sits slightly on the lean side, but nothing feels missing or redundant at this count.
The surface covers the main discovery workflow: CPV lookup, tender search, tender detail, organisation search, and an organisation's tender history. Minor gaps exist (e.g. no free-text title search independent of CPV, no saving/export), but agents can work around these.
Available Tools
5 toolsget_organisation_tendersOrganisation tender historyARead-onlyIdempotentInspect
List tenders an organisation published as buyer (purchase history) or won as supplier (award history).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per page, 1-50. Default 10. | |
| roles | No | buyer returns what the organisation procured, winner what it was awarded. Default both. | |
| cursor | No | page.nextCursor from the previous call. | |
| sortBy | No | Sort field. Default publicationDate. | |
| sortOrder | No | Sort direction. | |
| organisationId | Yes | Organisation id (UUID) from search_organisations or a tender's buyer.id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| tenders | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds only semantic role interpretation ('buyer = purchase history'), not behavioral traits like pagination, rate limits, or auth requirements, so it adds modest value beyond the structured fields.
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 waste, clearly stating the resource and the two role interpretations. Every phrase 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?
With an output schema present and 100% parameter description coverage, the description need not explain return values or parameter details. It is nearly complete for a listing tool, though it could briefly state its relationship to search_tenders for routing clarity.
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%, and the schema already documents all six parameters including the roles enum and cursor pagination. The description restates the buyer/winner meaning but adds no syntax or format detail beyond what the schema provides, so the 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 verb ('List'), resource ('tenders'), and scope ('an organisation published as buyer ... or won as supplier'), so an agent can understand exactly what it does. It does not explicitly differentiate from siblings like search_tenders, which also returns tenders, so it stops short of a 5.
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 clarifies the two role modes (buyer = purchase history, winner = award history), which implies when each mode is useful. However, it gives no explicit guidance on when to use this organisation-scoped tool versus search_tenders or get_tender, and no exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tenderGet tenderARead-onlyIdempotentInspect
Fetch one tender by id, including its full abstract and winners.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Tender id (UUID) as returned by search_tenders. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| link | Yes | |
| buyer | Yes | |
| title | Yes | |
| source | Yes | |
| status | Yes | |
| winners | Yes | |
| abstract | Yes | |
| cpvCodes | Yes | |
| deadline | Yes | |
| serviceType | Yes | |
| estimatedValue | Yes | |
| deadlineHasTime | Yes | |
| publicationDate | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds that the response includes the 'full abstract and winners', which is modest extra context, but an output schema already exists so return contents are largely structured data; no auth scope or not-found behavior is described.
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 with the resource, key constraint (id), and payload summary. No padding 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 one-parameter read tool with full schema coverage, output schema, and annotations, the description covers purpose and identifier source sufficiently. Minor gaps such as error/empty-result behavior are acceptable given the output schema handles returns.
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?
With a single parameter at 100% schema description coverage, the schema carries the semantics (UUID, sourced from search_tenders). The description's 'by id' adds nothing beyond the schema, so 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?
States a specific verb and resource ('Fetch one tender by id') and scopes it as a single-item lookup, which naturally separates it from search_tenders and get_organisation_tenders. It does not explicitly name the sibling it contrasts with, so it stops short of a 5.
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?
'By id' implies the caller must already hold a tender id, and the schema notes ids come from search_tenders, so the retrieval workflow is inferable. However, the description itself gives no explicit when-to-use guidance or exclusion (e.g. use search_tenders when you only have criteria), leaving it implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_cpv_codesSearch CPV codesARead-onlyIdempotentInspect
Look up Common Procurement Vocabulary codes by English keywords or browse by code prefix. Call this before search_tenders when the user describes a subject rather than giving codes.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum codes to return. Default 20. | |
| query | Yes | English keywords describing the subject (for example "software consultancy"), or a numeric code prefix such as 4523 to browse a branch. |
Output Schema
| Name | Required | Description |
|---|---|---|
| codes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds useful workflow context (this is a prerequisite resolution step for search_tenders) but says nothing about result limits behavior or ranking; still, it exceeds the low bar set by the annotations.
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?
Two sentences, zero waste: the purpose is front-loaded and the sequencing guideline follows immediately. Nothing redundant.
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 an output schema present, return values need not be described, and the description covers purpose, both input modes, and the ordering relative to search_tenders. Nothing an agent needs to invoke it correctly is missing.
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 both parameters (query and limit) are already documented in the schema with the same keyword-or-prefix semantics the description mentions. The description adds no syntax or format detail beyond the schema, so baseline 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 (look up) and resource (Common Procurement Vocabulary codes) plus two explicit modes: keyword search and prefix browsing. This clearly differentiates it from siblings like search_tenders, which operate on tenders rather than the code vocabulary itself.
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?
Gives an explicit trigger and ordering rule: 'Call this before search_tenders when the user describes a subject rather than giving codes.' It names the alternative tool and the condition that selects it, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_organisationsSearch organisationsARead-onlyIdempotentInspect
Find buyers and suppliers by name and country. Use the returned id with get_organisation_tenders.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Part of the organisation name, any language. | |
| limit | No | Results per page, 1-50. Default 10. | |
| cursor | No | page.nextCursor from the previous call. | |
| countries | No | ISO 3166-1 alpha-3 country codes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| organisations | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered and the description is not required to restate it. The only added behavioral context is that results yield ids that feed get_organisation_tenders; nothing is said about result volume, pagination behavior, or matching semantics for the name filter.
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?
Two short sentences, no filler, and the core capability is front-loaded ahead of the follow-up routing hint. Every sentence 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?
With an output schema present, return values need not be explained, and the description supplies the one thing the schema cannot: how the returned id is consumed. Pagination and degree of name matching remain implicit, but for a simple search tool the definition 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?
Schema description coverage is 100% โ name, limit, cursor and countries are all documented in the schema. The description's 'by name and country' merely restates two of those parameters without adding format, matching, or normalization detail, so the 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 gives a specific verb ('Find') and resource ('buyers and suppliers'), and clarifies the scope with filter facets ('by name and country'). It is clearly distinguishable from search_tenders and search_cpv_codes by resource, though it does not explicitly contrast itself with those 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?
It provides a concrete next-step ('Use the returned id with get_organisation_tenders'), which is genuine usage guidance for downstream work. However, it never says when to pick this tool over search_tenders, nor any when-not conditions, so the selection guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tendersSearch tendersARead-onlyIdempotentInspect
Search public procurement notices from TED and national portals by CPV code, buyer country, status, dates, estimated value and title. Returns a page of tenders with links to the official notices.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per page, 1-50. Default 10. | |
| query | No | Substring matched against the tender title. Titles are written in the buyer's national language, so prefer cpvCodes plus buyerCountries for topic searches. | |
| cursor | No | page.nextCursor from the previous call. Filters must stay identical. | |
| sortBy | No | Sort field. Default publicationDate. | |
| sources | No | Portals to include. Default is all. | |
| cpvCodes | No | 8-digit CPV codes. A parent code such as 72000000 also matches all of its child codes. Use search_cpv_codes to find codes. | |
| currency | No | Currency of minValue and maxValue. Default EUR. | |
| maxValue | No | Maximum estimated contract value in currency. | |
| minValue | No | Minimum estimated contract value in currency. | |
| statuses | No | Tender statuses. open means not yet awarded or cancelled; combine with deadlineFrom to find tenders that still accept bids. | |
| buyerName | No | Part of the buying organisation's name. | |
| sortOrder | No | Sort direction. Defaults: publicationDate desc, deadline asc, estimatedValue desc. | |
| deadlineFrom | No | Earliest submission deadline, YYYY-MM-DD or RFC3339. Set to today's date to exclude expired tenders. | |
| serviceTypes | No | Contract nature. | |
| deadlineUntil | No | Latest submission deadline, YYYY-MM-DD or RFC3339. A plain date includes the whole day. | |
| publishedFrom | No | Earliest publication date, YYYY-MM-DD or RFC3339. | |
| buyerCountries | No | ISO 3166-1 alpha-3 country codes of the buyer, for example AUT, DEU, SVN. | |
| publishedUntil | No | Latest publication date, YYYY-MM-DD or RFC3339. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| tenders | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds that results are paginated and carry links to official notices, which is useful context, but it omits coverage/completeness caveats (e.g. partial portal coverage, latency, auth) for an 18-parameter cross-portal search.
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?
Two sentences: the first leads with the action, scope and filter surface; the second states the return shape. No filler, nothing buried, and the core capability is front-loaded.
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 an output schema present, the description needn't detail return fields, and it correctly limits itself to scope, filters and pagination. For a broad multi-portal search it is nearly complete, though a note on result freshness or source coverage would close the remaining gap.
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 all 18 parameters are already documented, including cursor semantics, CPV parent-code expansion, and status interpretation. The description only recaps the filter categories already present in the schema, adding no syntax or behavioral nuance beyond it. Baseline 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 (search) and resource (public procurement notices/tenders) and names the two source families (TED and national portals). It also lists the filter dimensions and the return shape, which cleanly separates it from siblings like get_tender (single notice) and get_organisation_tenders (buyer-scoped).
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 by enumerating searchable dimensions, and the schema notes that topic searches should prefer cpvCodes plus buyerCountries. However, it never states when to choose this tool over search_organisations, get_organisation_tenders or get_tender, nor any when-not conditions. Adequate but with a clear routing gap.
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.
5 tool updates
- First observed
get_organisation_tenders - First observed
get_tender - First observed
search_cpv_codes - First observed
search_organisations - First observed
search_tenders
Related MCP Connectors
Search EU public tenders across TED and 8 national portals. Monitor, match, and analyse procurement.
Search open EU public tenders and contract awards on TED by keyword, CPV, country and deadline.
Search EU TED procurement notices by CPV, country, keyword, value, or type.
Find open EU public tenders (TED) to bid on. $0.03/call via x402.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables search and analysis of European public procurement tenders, including EU above-threshold (TED) and below-threshold from 11 national sources, with hybrid search and filtering.MIT
- FlicenseNot gradedqualityCmaintenanceProvides normalized search over public-sector tender notices from TED, covering Spain and the rest of the EU. Supports filtering by country, keyword, CPV prefix, and publication recency, returning tender details and related links.1-
- AlicenseAqualityFmaintenanceEnables searching for EU public-procurement tenders, analyzing cross-border risk, and understanding tender details through tools for CPV code lookup, EU threshold checks, red-flag scanning, and SME fit scoring.7MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to search and retrieve public procurement notices from 17 sources across Germany, the EU, and the UK, with filtering by country, CPV code, deadline, and contract value, plus full tender details and source freshness checks.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.