Diavgis — Greek Public Procurement
Server Details
Greek public procurement: tenders, awards, contracts, payments, suppliers, expiring contracts.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- diavgis/diavgis-mcp
- GitHub Stars
- 0
TDQS
Scored across 10 tools
Each tool targets a distinct concern: entity resolution, entity profiles, counterparties, rankings, spend aggregates, search, act detail, lifecycle chains, expiring contracts, and quota. Minor overlap exists between get_act and get_chain since get_act can include lifecycle chain data, but the descriptions make the intended primary use clear.
All names use snake_case and most follow a verb_noun pattern like find_entity, get_entity, search_tenders, and rank_entities. A few tools such as entity_counterparties and expiring_contracts are noun-phrase names, and spend_by_cpv uses a different structure, so the pattern is mostly consistent but not uniform.
Ten tools is well-scoped for a Greek public procurement data API: the count is large enough to cover discovery, search, entity analytics, spend analytics, lifecycle detail, and quota management without feeling bloated. Each tool appears to earn its place with no obvious redundant duplicates.
The tool surface covers the full read-only procurement workflow: resolve names to tax IDs, profile entities, find counterparties, rank entities, search tenders with filters, inspect individual acts, follow lifecycle chains, monitor expiring contracts, and aggregate spend by CPV. There are no major missing operations for the stated purpose.
Available Tools
10 toolsentity_counterpartiesEntity CounterpartiesARead-onlyIdempotentInspect
Top counterparties of an entity (ΑΦΜ): for a buyer, the suppliers it pays most; for a supplier, its top public buyers — with act counts and EUR totals. The 'who does business with whom' due-diligence view.
| Name | Required | Description | Default |
|---|---|---|---|
| afm | Yes | 9-digit ΑΦΜ | |
| limit | No | max 30, default 10 |
Output Schema
| Name | Required | Description |
|---|---|---|
| afm | Yes | |
| counterparties | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds meaningful context beyond this by explaining the buyer/supplier distinction, the 'top' selection criteria, and the inclusion of act counts and EUR totals, which are not covered 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?
The description is two sentences with no filler. The first sentence front-loads the core purpose, and the second adds a clarifying explanatory phrase. Every part contributes to understanding.
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?
Given the simple tool, strong annotations, and existence of an output schema, the description is complete. It covers the essential logic (directional counterparties), the output attributes (counts and totals), and the use case, leaving no significant gaps.
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 coverage is 100% for both parameters (afm and limit), with descriptions already provided. The description adds no additional parameter-level semantics beyond what the schema contains, so the baseline score of 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?
The description clearly states that the tool retrieves top counterparties of an entity, with explicit directionality (buyer vs supplier) and output contents (act counts, EUR totals). This distinguishes it from sibling tools like get_entity or rank_entities by focusing specifically on business relationships.
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 a due-diligence use case ('who does business with whom') but does not explicitly state when to use this tool versus alternatives, nor does it mention exclusions. Usage guidance is mostly implied rather than explicitly articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
expiring_contractsGreek Public Contracts About to ExpireARead-onlyIdempotentInspect
Greek public contracts that are RUNNING NOW and expire within a horizon of 0, 7, 30 or 180 days — the renewal pipeline. Each row carries who currently holds the contract and HOW it was awarded (direct award vs competitive tender, and the number of bids where the source reports it), which is what tells you whether the re-tender is worth chasing. One procurement is counted ONCE: Greek sources publish the duration on the award record as well as the contract, so award records are dropped when a contract in the same lifecycle chain already defines the expiry. ⚠ expiry_basis on every row states how the date was obtained — published (the buyer published an end date), computed_from_start (start date + declared duration) or computed_from_publication (no start date published, so the publication date was substituted; systematically early). Do not present a computed date as a published one. ACCESS: horizon 0 (expiring today) is free on every plan and returns the complete record. Horizons 7/30/180 require a paid plan — lead time is the paid product.
| Name | Required | Description | Default |
|---|---|---|---|
| h | No | horizon in days; 0 = expiring today (free on every plan). Default 180. | |
| cpv | No | CPV division, 2 digits (e.g. 33 for medical equipment) | |
| region | No | NUTS code, e.g. EL30 for Attica | |
| page_size | No | rows to return, 1-200 (default 50) |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| next | Yes | next page NUMBER, or null at the end |
| page | Yes | |
| total | Yes | |
| page_size | Yes | |
| horizon_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation safe/read-only, and the description adds substantial behavioral detail: deduplication drops award records, expiry_basis explains date provenance, and computed_from_publication is flagged as systematically early. This is exactly the kind of value beyond structured annotations the dimension rewards.
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 longer than average but every sentence earns its place: definition, use-case value, dedup rule, date-provenance warning, and access constraint. It is front-loaded with the core purpose before caveats.
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?
Given an output schema exists, the description covers everything needed to call the tool correctly: valid horizons, row semantics, deduplication, expiry_basis provenance, access requirements, and parameter coverage is already in the schema. No critical gap remains.
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?
Input schema already documents all four parameters with 100% coverage, so the baseline is 3. The description adds meaning beyond the schema by explaining that h=0 is free on all plans while 7/30/180 require a paid plan, and by tying horizon choice to the paid product.
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 exact purpose with specific verb/resource: lists Greek public contracts currently running and expiring within 0/7/30/180 days, and contrasts it as the renewal pipeline. This clearly distinguishes it from generic search_tenders or get_entity tools.
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?
Provides strong context for when to use it: paid lead time is the core product, horizon 0 is free, and warns not to present computed dates as published. It does not name alternative sibling tools or explicitly say when not to use them, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_entityFind Entity by NameARead-onlyIdempotentInspect
Resolve a Greek buyer or supplier NAME to its ΑΦΜ. Use this first whenever you have a name but no ΑΦΜ — get_entity, entity_counterparties and the buyer_afm/supplier_afm filters all need the 9-digit number. Matching is accent- and case-insensitive; returns the closest names with their ΑΦΜ, so pick the right one before calling anything else.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Restrict to public bodies (buyer) or companies (supplier). Omit for all. | |
| name | Yes | Full or partial name, e.g. "Δήμος Αθηναίων". Accents and case are ignored. | |
| limit | No | 1-20, default 8 |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| matches | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that matching is accent- and case-insensitive and that the tool 'returns the closest names with their ΑΦΜ,' which is crucial behavioral information for an agent expecting a single exact match. It also warns that the user must 'pick the right one,' signaling possible ambiguity. This goes well beyond the readOnlyHint/idempotentHint annotations, which already cover safety but not matching semantics.
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?
Three sentences, each with a distinct job: purpose, usage context, and matching behavior. The most important information is front-loaded, and every clause adds value. There is no filler or redundant restating of the title or annotations.
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?
The description, combined with rich annotations (readOnlyHint, idempotentHint, openWorldHint) and a full output schema, gives an agent everything needed to decide when and how to call this tool. It covers the lookup semantics, the multi-result behavior, and the dependency relationship with sibling tools. Nothing critical 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 baseline is 3. The description partially reinforces the 'name' parameter semantics by framing it as a fuzzy lookup and hinting at multiple results with 'closest names,' but it adds little detail about 'kind' or 'limit' beyond what the schema already documents. It does not repeat or contradict the schema, but it also does not substantially enrich parameter understanding.
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 opens with a specific verb and resource: 'Resolve a Greek buyer or supplier NAME to its ΑΦΜ.' This clearly distinguishes the tool as a name-to-tax-id lookup, which is different from siblings like get_entity or entity_counterparties that require an ΑΦΜ. The purpose is unambiguous and immediately actionable.
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 states exactly when to use the tool: 'Use this first whenever you have a name but no ΑΦΜ.' It explicitly names dependent tools and filters (get_entity, entity_counterparties, buyer_afm/supplier_afm) that need the 9-digit number, and advises picking the right match before calling anything else. This provides both positive and negative usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_actGet One ActARead-onlyIdempotentInspect
Full detail of one act by its id (Διαύγεια ΑΔΑ, ΚΗΜΔΗΣ 'kimdis:<ΑΔΑΜ>', or TED 'ted:'): canonical fields, resolved buyer/supplier entities, CPV codes with labels, and its cross-source lifecycle chain if linked. On ΚΗΜΔΗΣ contracts, commitment_ada carries the Διαύγεια ΑΔΑ of the budget-commitment decision the source declares (comma-separated when more than one). It is a pointer INTO Διαύγεια, not an act we necessarily hold — resolve it at diavgeia.gov.gr, not through this API — and it is deliberately NOT a chain edge: one annual commitment funds many unrelated contracts.
| Name | Required | Description | Default |
|---|---|---|---|
| ada | Yes | act id — ΑΔΑ, 'kimdis:<ΑΔΑΜ>' or 'ted:<number>' |
Output Schema
| Name | Required | Description |
|---|---|---|
| act | Yes | |
| cpvs | Yes | CPV classifications with their official Greek labels |
| buyer | Yes | |
| chain | Yes | |
| supplier | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, open-world behavior. The description adds substantial behavioral nuance: the API may not hold the commitment_ada act, the field can be comma-separated, it is not a chain edge, and external resolution is required. This goes well beyond 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?
The description is front-loaded with the core purpose, then adds only high-value caveats about commitment_ada and chain semantics. Each sentence earns its place, and the length is justified by the cross-source complexity.
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?
Given the output schema exists and annotations cover safety, the description is complete enough: it explains all id formats, output scope, the special commitment_ada behavior, and the important non-chain relationship. Nothing essential 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 the parameter is already well documented. The description restates the id formats but adds little beyond the schema. A baseline of 3 is appropriate since the schema carries the parameter-semantics burden.
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: 'Full detail of one act by its id' with the accepted id forms. It also distinguishes the tool from siblings like get_chain by explicitly clarifying that commitment_ada is 'deliberately NOT a chain edge' and from search/entity tools by focusing on a single act lookup.
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 use when one already has an act id and gives explicit when-not guidance: commitment_ada must be resolved at diavgeia.gov.gr, 'not through this API.' It does not explicitly name sibling alternatives such as get_chain or search_tenders, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chainGet Procurement Lifecycle ChainARead-onlyIdempotentInspect
A reconstructed procurement lifecycle chain by chain_id: the linked sequence of related acts (e.g. commitment → award → contract → payments) with confidence and link method. Get a chain_id from the chain_id field of any act. A chain is ONE procurement's lifecycle, not everything an act references: an administrative umbrella cited by more than 25 acts (e.g. one annual expense-approval decision referenced by thousands of a buyer's acts) is deliberately NOT merged, so a chain never swallows a year of unrelated activity. Those references are still published — see the act's own references — they simply do not form a chain.
| Name | Required | Description | Default |
|---|---|---|---|
| chain_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| members | Yes | |
| chain_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already mark the tool as read-only, idempotent, and non-destructive, the description adds meaningful behavioral detail: chains are reconstructed, carry confidence and link method, and deliberately exclude high-fan-out administrative umbrellas. This prevents an agent from wrongly assuming every reference relationship is merged into the chain.
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 front-loaded with the core definition and chain example, then the source of chain_id, then the important boundary condition. The third sentence is long but earns its place by preventing a costly misuse of the tool. Nothing in the description is redundant with the schema or annotations.
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 an output schema and strong annotations, the description covers the main purpose, how to get the identifier, what the result represents, and a critical exclusion rule. An agent has enough context to invoke it correctly without further investigation.
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?
The schema only defines chain_id as a required string with zero coverage, but the description compensates by explaining where to obtain a valid value: from the chain_id field of any act. It does not give format examples or edge-case guidance, but for a single opaque identifier this is sufficient and actionable.
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 names a specific resource (a reconstructed procurement lifecycle chain), a retrieval action by chain_id, and explicitly contrasts a chain with mere act references, which distinguishes it from sibling tools like get_act. It also gives a concrete example of the chain shape (commitment → award → contract → payments), leaving no ambiguity about what the tool returns.
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 tells the agent exactly when to call it: when you have a chain_id, obtained from the chain_id field of any act. It also explains when not to expect a chain — for broad administrative umbrella references cited by more than 25 acts — and directs the agent to the act's own references instead, which is an explicit alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_entityGet Entity ProfileARead-onlyIdempotentInspect
Profile of a legal entity (company or public body) by 9-digit ΑΦΜ: name, role, and spend/receipt statistics as buyer and as supplier. EUR totals = the COMMITTED procurement value counted ONCE per procurement (deduplicated across ΚΗΜΔΗΣ/Διαύγεια sources and the award→contract→payment lifecycle; tenders/budgets excluded), so it reflects real committed spend, not a sum of every published act.
| Name | Required | Description | Default |
|---|---|---|---|
| afm | Yes | 9-digit ΑΦΜ |
Output Schema
| Name | Required | Description |
|---|---|---|
| afm | Yes | |
| kind | No | buyer | supplier |
| name | Yes | |
| stats | Yes | |
| last_seen | No | |
| first_seen | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by explaining the methodology behind the EUR totals: they represent committed procurement value, counted once per procurement, deduplicated across sources and lifecycle stages, while excluding tenders/budgets. This is valuable behavioral context that the user would not know from the annotations alone. No contradiction with readOnlyHint or other 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?
The description is composed of two precise sentences: the first states the core purpose, and the second clarifies a critical nuance about the spend figures. Every word contributes value, with no redundancy or filler, making it both concise and highly informative.
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?
The tool is simple with one required parameter, a clear output schema, and read-only annotations. The description provides sufficient context for an agent to understand the output semantics deeply, including the deduplication logic. There is no need to explain return values since the output schema exists, and the description covers business meaning and exclusions.
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?
The only parameter 'afm' is already well described in the input schema as a 9-digit ΑΦΜ. The description repeats this and adds context about what the profile contains, but does not introduce new parameter-specific constraints or examples. Given the high schema coverage, the description adds little beyond a baseline understanding.
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 clearly states that the tool returns a profile of a legal entity by AFM, including name, role, and spend/receipt statistics. This is specific and distinguishes it from sibling tools like get_act and get_chain, though it does not explicitly name alternatives. It is not a tautology and conveys the core function effectively.
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 that this is the tool for obtaining a holistic entity profile, with details on the meaning of the stats. However, it lacks explicit guidance on when to choose this over alternatives such as entity_counterparties or spend_by_cpv. The usage context is implied but not stated directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_quotaPlan, Usage and Remaining CallsARead-onlyIdempotentInspect
What this API key is allowed to do right now: plan, calls used this period, calls remaining, per-minute rate, page-size and pagination caps, and when the period resets. Free — this call is not counted against the quota. Check it before starting a long job so you can size the work instead of hitting a wall mid-task.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| plan | Yes | |
| used | Yes | calls consumed this period (REST + MCP share one counter) |
| limit | No | monthly quota, null if unlimited |
| max_pages | Yes | pagination depth cap; deeper pages return an error, narrow with filters instead |
| remaining | No | |
| pricing_url | No | |
| period_reset | Yes | ISO date when used resets to 0 |
| rate_per_min | Yes | |
| max_page_size | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, open-world, and non-destructive behavior. The description adds meaningful extra context: the call is free and not counted against the quota, and it reflects the current period's allowance, which is behaviorally useful beyond the structured 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 compact sentences front-load the core purpose and returned fields, then add the free-call caveat and a relevant usage tip. Every sentence earns its place with no filler 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?
The description covers what the tool returns, that it is free/non-counted, and when to invoke it, while an output schema exists to document return values. With no parameters and strong annotations, nothing essential is missing for an agent to select and call this tool correctly.
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?
There are zero parameters, and the empty input schema fully documents that, so the description is not required to explain parameter meaning. The baseline for a zero-parameter tool is 4, and the description appropriately focuses on output semantics instead.
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 clearly identifies the tool as a status/readout for the API key's plan, usage, remaining calls, rate limits, and reset time. It is immediately scoped to the API key's current quota, though it lacks an explicit verb, relying on the title and noun phrasing rather than a direct action statement.
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 explicitly advises using this before starting a long job, giving a concrete scenario for when to call it. It doesn't mention alternatives or exclusions, but none of the sibling tools overlap with quota-checking, so this is clear, practical guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rank_entitiesRank Buyers or SuppliersARead-onlyIdempotentInspect
Rank top Greek public-procurement entities. role=buyer (default) or supplier; by=spend (default — COMMITTED procurement value in EUR, counted ONCE per procurement: deduplicated across sources and lifecycle stages, tenders excluded), single_bidder (count of ≤1-bid awards/contracts) or direct_award (count of απευθείας ανάθεση). Answers 'top 10 suppliers by public revenue', 'which buyers award most without competition'. Returns afm, name, metric, total. Precomputed and refreshed every 6 hours, so it is instant and always the top 15.
| Name | Required | Description | Default |
|---|---|---|---|
| by | No | default spend | |
| role | No | default buyer | |
| limit | No | max 15, default 15 — the published ranking holds the top 15 |
Output Schema
| Name | Required | Description |
|---|---|---|
| by | Yes | |
| role | Yes | |
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses important data behavior: spend is COMMITTED value in EUR, counted once per procurement, deduplicated across sources and lifecycle stages, and tenders are excluded. It also states that results are precomputed and refreshed every 6 hours, making the tool instant and bounded to the top 15.
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 dense and front-loaded, starting with the core purpose and immediately giving defaults and metric semantics. Every clause adds necessary information; there is no filler or repetition of annotations.
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?
Given the output schema exists and annotations carry the read-only/idempotent profile, the description fully covers what an agent needs: the exact question types, the metric definitions, the defaults, the limit constraint, and the freshness/performance behavior. No meaningful selection or invocation details are 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 coverage is already 100%, but the description adds significant meaning: it explains what each 'by' value means, clarifies defaults for role and by, and ties limit to the published top-15 dataset. It also specifies the output fields (afm, name, metric, total), surpassing what the schema alone conveys.
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 names a specific action ('Rank') and resource ('top Greek public-procurement entities'), then defines the ranking dimensions (role, metric) with concrete defaults and example queries. It clearly separates this tool from spending/lookup tools by focusing on precomputed top-N entity rankings.
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 gives explicit usage context with natural-language question examples such as 'top 10 suppliers by public revenue' and 'which buyers award most without competition'. It does not name alternative sibling tools or exclusion cases, but the intended condition — ranking aggregated entity metrics — is clear enough for an agent to select it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tendersSearch Greek Procurement ActsARead-onlyIdempotentInspect
Search Greek public-procurement acts across THREE cross-linked sources — Διαύγεια, ΚΗΜΔΗΣ (Central Electronic Public Procurement Registry) and EU TED. Filter by source (diavgeia|kimdis|ted), lifecycle status (request|tender|award|contract|payment), buyer or supplier ΑΦΜ (9-digit tax id), CPV code, EUR budget range, NUTS region, submission deadline (deadline_after=TODAY + status=tender ⇒ the OPEN tenders a supplier can still bid on), free-text q over the act title, and procurement signals (published facts from ΚΗΜΔΗΣ): direct_award (απευθείας ανάθεση), single_bidder (≤1 bid on the contract), cancelled. Returns a paginated envelope; 'next' is the next PAGE NUMBER or null. Natural-person counterparties are redacted. Do NOT sum amount_net across results to get spend — use rank_entities or spend_by_cpv, which count each procurement once.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | free-text search over the act title | |
| cpv | No | CPV code (e.g. 79710000) | |
| page | No | 1-based page number; pagination DEPTH is capped per plan | |
| year | No | 4-digit issue year, e.g. 2026 — restricts to acts issued that year | |
| region | No | NUTS region code prefix, e.g. EL30 (Attica), EL52 (Central Macedonia). Matches by prefix, so EL3 covers all of Attica. | |
| source | No | filter by data source | |
| status | No | ||
| buyer_afm | No | 9-digit buyer ΑΦΜ | |
| cancelled | No | only acts the source marked as cancelled | |
| has_chain | No | only acts linked into a reconstructed lifecycle chain (request→tender→award→contract→payment) | |
| page_size | No | max 200 | |
| budget_max | No | maximum amount_net in EUR | |
| budget_min | No | minimum amount_net in EUR | |
| price_only | No | only awards/contracts decided on lowest-price alone (award_criteria = Βάσει τιμής / Χαμηλότερη Τιμή), excluding most-economically-advantageous (MEAT) criteria | |
| direct_award | No | only direct awards (procedure = απευθείας ανάθεση) — a published ΚΗΜΔΗΣ fact | |
| supplier_afm | No | 9-digit supplier ΑΦΜ | |
| single_bidder | No | only contracts where ≤1 bid was submitted (maxBidsSubmitted; single bidder) | |
| deadline_after | No | ISO date (YYYY-MM-DD). Only acts whose submission deadline is on/after this date. Pass TODAY to get OPEN tenders — the ones a supplier can still bid on. Combine with status="tender". |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| next | Yes | next page NUMBER, or null when there are no more pages — not a URL |
| page | Yes | |
| total | Yes | total acts matching the filters |
| page_size | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, but the description adds three genuinely new behavioral facts beyond them: results come in a paginated envelope where 'next' is a page number or null, natural-person counterparties are redacted, and summing amount_net across results double-counts spend. These materially change how the agent should interpret and use the output.
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 long but dense and purpose-front-loaded: scope first, then filters, then behavioral warnings. The filter enumeration partly restates the well-covered schema, which adds length, but it embeds compound semantics and provenance details that keep nearly every sentence informative. No filler or repetition of annotations.
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 an 18-parameter, zero-required search tool with an output schema and seven siblings, the description covers all the non-obvious ground: cross-source scope, compound filter usage, pagination envelope shape, redaction behavior, and spend-aggregation routing. Since an output schema exists, return-value details are not the description's job, and nothing critical is left out.
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 coverage is 94%, so the baseline is 3. The description earns an extra point by explaining the non-obvious parameter interplay — deadline_after=TODAY combined with status=tender identifies open tenders — and by clarifying that direct_award, single_bidder, and cancelled are published ΚΗΜΔΗΣ facts rather than arbitrary flags. Most individual parameter semantics, however, remain in the schema.
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: 'Search Greek public-procurement acts' across three named sources (Διαύγεια, ΚΗΜΔΗΣ, EU TED). The scope is precise, and the closing instruction to 'use rank_entities or spend_by_cpv' explicitly distinguishes it from sibling aggregation tools.
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?
Explicitly names alternatives with the condition that selects them: 'Do NOT sum amount_net across results to get spend — use rank_entities or spend_by_cpv.' It also gives a concrete compound use case — deadline_after=TODAY + status=tender yields the OPEN tenders a supplier can still bid on — so an agent knows when and how to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spend_by_cpvSpend by CPV CategoryARead-onlyIdempotentInspect
Committed public procurement value by CPV category (2-digit division), optionally for one year. Value = counted ONCE per procurement (deduplicated across sources and award/contract/payment stages; tenders excluded). Answers 'what does the Greek state spend the most on'. Returns cpv_division, acts, spend (EUR) for the top divisions by spend — precomputed nightly, so it is instant. Use search_tenders with cpv= for divisions outside the top list.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | 4-digit year; omit for all-time |
Output Schema
| Name | Required | Description |
|---|---|---|
| year | Yes | the year filtered on, or 'all' |
| divisions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotentHint, destructiveHint false), the description adds the deduplication rule, exclusion of tenders, precomputed nightly refreshes, instant responses, and the exact output fields. This provides rich, non-obvious behavioral context.
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?
Every sentence earns its place. The description is front-loaded with the core purpose, then covers definitions, answer framing, compute model, and routing to the sibling tool, all in only three concise lines.
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 all parameters documented, an output schema present, annotations already covering the read-only/idempotent safety profile, and the description covering output fields, semantics, and alternatives, nothing the agent needs to select and invoke this tool 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% and the only parameter (year) is clearly documented as a 4-digit year, with omit for all-time in the schema. The description merely reinforces this by saying 'optionally for one year.' Baseline 3 is appropriate since the schema already carries the parameter meaning.
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 opens with a precise verb-resource statement: committed public procurement value by CPV category (2-digit division), and it names the exact answer it provides: top divisions by spend. It differentiates itself from search_tenders by explicitly stating that tenders are excluded and that search_tenders should be used for other divisions.
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 gives an explicit use case ('answers what does the Greek state spend the most on') and directly names the alternative path: 'Use search_tenders with cpv= for divisions outside the top list.' This is clear when-to-use and when-not-to-use guidance in the context of the sibling tools.
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.
3 tool updates
- Changed
expiring_contracts1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "items": { + "properties": { + "amount_net": { + "description": "EUR, excludes VAT", + "type": [ + "number", + "null" + ] + }, + "buyer_afm": { + "type": [ + "string", + "null" + ] + }, + "buyer_name": { + "type": [ + "string", + "null" + ] + }, + "contract_end": { + "description": "ISO date the contract stops running", + "type": [ + "string", + "null" + ] + }, + "cpv_primary": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string" + }, + "nuts": { + "type": [ + "string", + "null" + ] + }, + "source": { + "type": "string" + }, + "source_url": { + "type": [ + "string", + "null" + ] + }, + "supplier_afm": { + "type": [ + "string", + "null" + ] + }, + "title": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "source" + ], + "type": "object" + }, + "type": "array" + }, + "horizon_days": { + "type": "number" + }, + "next": { + "description": "next page NUMBER, or null at the end", + "type": [ + "number", + "null" + ] + }, + "page": { + "type": "number" + }, + "page_size": { + "type": "number" + }, + "total": { + "type": "number" + } + }, + "required": [ + "data", + "page", + "page_size", + "total", + "next" + ], + "type": "object" +}
- Added
find_entity - Added
get_quota
1 tool update
- Changed
search_tenders2 fields changed- added
Input schema / properties / deadline_afterAdded value: +{ + "description": "ISO date (YYYY-MM-DD). Only acts whose submission deadline is on/after this date. Pass TODAY to get OPEN tenders — the ones a supplier can still bid on. Combine with status=\"tender\".", + "type": "string" +} - added
Input schema / properties / regionAdded value: +{ + "description": "NUTS region code prefix, e.g. EL30 (Attica), EL52 (Central Macedonia). Matches by prefix, so EL3 covers all of Attica.", + "type": "string" +}
1 tool update
- Changed
rank_entities1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"max 50, default 15"New value: +"max 15, default 15 — the published ranking holds the top 15"
8 tool updates
- First observed
entity_counterparties - First observed
expiring_contracts - First observed
get_act - First observed
get_chain - First observed
get_entity - First observed
rank_entities - First observed
search_tenders - First observed
spend_by_cpv
Related MCP Connectors
Tender search + AI CPV finder. Register free: 1 daily email alert, up to 20 results/search.
TED MCP — Tenders Electronic Daily (EU public procurement)
Search EU public tenders across TED and 8 national portals. Monitor, match, and analyse procurement.
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
- AlicenseNot gradedqualityBmaintenanceDanish government public procurement notices (keyless).1 npmMIT
- AlicenseNot gradedqualityBmaintenanceOpen & historical US government bid solicitations from city/county portals — updated daily.9 npmMIT
- FlicenseAqualityCmaintenanceEnables searching and analyzing Polish public procurement tenders from BZP and TED, including filtering, tender details and timelines, offers and contract values, buyer/contractor profiles, CPV code lookup, and regional statistics, with optional AI-summary endpoints.121-
Glama MCP Gateway
Add one secure layer between your agents and this server.