Skip to main content
Glama

Diavgis — Greek Public Procurement

Server Details

Greek public procurement: tenders, awards, contracts, payments, suppliers, expiring contracts.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 78 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
diavgis/diavgis-mcp
GitHub Stars
0
ChatGPT
–
Claude
–

TDQS

A4.2/5.0

Scored across 10 tools

Disambiguation4/5

Most tools have clearly distinct purposes: entity resolution vs. entity profile, act detail vs. lifecycle chain, and several different aggregate views. The main mild overlap is expiring_contracts versus search_tenders, since expiry pipelines could partly be approximated through filtered searches, but the specialized renewal view is still distinguishable.

Naming Consistency4/5

The set consistently uses snake_case and most tools follow a verb_noun pattern such as find_entity, get_act, rank_entities, and search_tenders. A few names deviate from verb-first naming, notably entity_counterparties, expiring_contracts, and spend_by_cpv, but they remain readable and predictable.

Tool Count5/5

Ten tools is well-scoped for a public-procurement search and analytics server. Each tool covers a distinct workflow: search, detail, lifecycle, entity lookup/profile, counterparties, rankings, CPV spend, renewals, and quota checking.

Completeness4/5

The surface covers the core read-only procurement lifecycle well: name resolution, act detail, chains, entity profiles, counterparties, aggregate spend, rankings, tender search, expiring contracts, and quota. Minor gaps remain around dedicated payment or contract-list workflows, but most can be reached through search_tenders or get_act.

Available Tools

10 tools
entity_counterpartiesEntity CounterpartiesA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
afmYes9-digit ΑΦΜ
limitNomax 30, default 10

Output Schema

NameRequiredDescription
afmYes
counterpartiesYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare this as a safe, read-only, idempotent, closed-world operation. The description adds valuable context beyond that: it explains the directional semantics of counterparties and states that results include act counts and EUR totals. It does not discuss pagination, rate limits, or edge cases, but with annotations and an output schema present, the bar is lower.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: it leads with the core resource and immediately clarifies the directional behavior and returned metrics. Every clause earns its place, with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema, full parameter schema coverage, and annotations covering safety and idempotency, the description supplies the key missing nuance: how counterparties differ for buyers versus suppliers and what metrics are returned. It could optionally add a brief usage contrast with sibling tools, but nothing critical for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both parameters are documented there (afm as a 9-digit ΑΦΜ, limit with max 30 and default 10). The description refers to 'an entity (ΑΦΜ)' but adds no syntax, format, or limit details beyond what the schema already provides. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource (top counterparties of an entity by ΑΦΜ) and specifies the directional logic: suppliers for buyers, public buyers for suppliers. It also mentions the returned metrics (act counts and EUR totals), so the purpose is concrete. It does not explicitly differentiate itself from siblings such as get_entity or spend_by_cpv, which keeps it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'due-diligence view' suggests a use case, and the buyer/supplier distinction implies when the tool is relevant. However, there is no explicit when-to-use guidance, no exclusions, and no named alternatives among siblings like get_entity or spend_by_cpv. Usage is therefore only implied.

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 ExpireA
Read-onlyIdempotent
Inspect

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). A computed date is an estimate, not a published date. 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.

NameRequiredDescriptionDefault
hNohorizon in days; 0 = expiring today (free on every plan). Default 180.
cpvNoCPV division, 2 digits (e.g. 33 for medical equipment)
regionNoNUTS code, e.g. EL30 for Attica
page_sizeNorows to return, 1-200 (default 50)

Output Schema

NameRequiredDescription
dataYes
nextYesnext page NUMBER, or null at the end
pageYes
totalYes
page_sizeYes
horizon_daysNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations, it discloses non-obvious behavior: one procurement is counted once via lifecycle-chain deduplication, and every row's expiry_basis explains how the date was derived, with an explicit warning that computed_from_publication is systematically early and is an estimate, not a published date. It also discloses the plan/paywall boundary. That is exactly the kind of context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and the key caveat are front-loaded, and the ACCESS clause is clearly delineated in caps. It is on the dense side — the middle sentence about duration being published on award records is a long way to say 'de-duplicated' — but no sentence is superfluous.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values need no explanation, and the description still covers what an agent actually needs: which horizons are free, what expiry_basis means for data trustworthiness, and how rows are de-duplicated. Nothing material is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3; the description adds real value on the h parameter by tying horizon values to expansion ('expiring today') and to the paywall, plus the warning that any horizon above 0 is a paid feature. cpv and region are left entirely to the schema, so it isn't a full 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb-plus-resource with scope: Greek public contracts running now that expire within a 0/7/30/180-day horizon, framed as a 'renewal pipeline'. It also gives the distinguishing content (incumbent holder, award procedure, bid count), which separates it from generic sibling searches like search_tenders or spend_by_cpv.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies the use case clearly (renewal chasing) and gives concrete plan-based guidance: horizon 0 is free and complete, while 7/30/180 require a paid plan, so an agent knows which horizon values it can actually call. It does not explicitly name sibling alternatives or exclusions (e.g., 'use search_tenders for historical awards'), which keeps it below 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 NameA
Read-onlyIdempotent
Inspect

Resolve a Greek buyer or supplier NAME to its ΑΦΜ. For when you have a name but no ΑΦΜ: get_entity, entity_counterparties and the buyer_afm/supplier_afm filters take the 9-digit number. Matching is accent- and case-insensitive; returns the closest names with their ΑΦΜ.

NameRequiredDescriptionDefault
kindNoRestrict to public bodies (buyer) or companies (supplier). Omit for all.
nameYesFull or partial name, e.g. "Δήμος Αθηναίων". Accents and case are ignored.
limitNo1-20, default 8

Output Schema

NameRequiredDescription
queryYes
matchesYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds real behavior: accent- and case-insensitive matching plus a fuzzy 'closest names' return. It doesn't state what happens on zero matches or whether results are ranked by score, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight clauses: the core action first, the routing condition and alternatives second, the matching/return behavior last. No filler, and the most decision-relevant information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 3-parameter read tool with full schema coverage and an output schema, the description supplies the routing rationale and matching semantics an agent needs to invoke it correctly. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each parameter (kind enum, name, limit) is documented in the schema. The description reinforces accent/case insensitivity but adds no syntax or semantics for limit or the buyer/supplier/both enum beyond what the schema already says, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (resolve a Greek buyer/supplier name to its ΑΦΜ), and explicitly distinguishes itself from get_entity, entity_counterparties and the afm filters which take the 9-digit number. An agent can tell exactly which tool to pick without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the explicit trigger ('for when you have a name but no ΑΦΜ') and names the alternative tools and their precondition (they need the 9-digit number). This is the when/when-not/alternatives pattern fully realized.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_actGet One ActA
Read-onlyIdempotent
Inspect

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. On tenders and public-works awards/contracts, discount carries the contractor discount (official from the document, or calculated) — see its schema.

NameRequiredDescriptionDefault
adaYesact id — ΑΔΑ, 'kimdis:<ΑΔΑΜ>' or 'ted:<number>'

Output Schema

NameRequiredDescription
actYes
cpvsYesCPV classifications with their official Greek labels
buyerYes
chainYes
discountNoContractor discount, only on tenders and on public-works (CPV 45) awards/contracts. The key is ABSENT when there is nothing to show (not null). basis "document" = the percentage exactly as the award decision states it (measure average_discount | discount_on_budget, with document_ref and document_url to the source), Pro plan and above. basis "calculated" = Diavgis' own 1 - award_net / tender_budget_net, single winner only, shown only when the award is 30-100% of the budget and, where the document states a figure, within 1 point of it. official_locked: true + upgrade_url = the document states an official figure this plan does not include. A calculated value is not the official one.
supplierYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld=false, so safety is covered; the description instead spends its budget on non-obvious data semantics, notably that commitment_ada is a pointer into an external system and deliberately NOT a chain edge, and that discount is official-or-calculated. That is genuine disclosure beyond the structured fields. It stops short of covering behavior for unlinked acts or what happens with an unresolvable id.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded: the retrieval contract is fully stated in the first clause before any field trivia. Sentences are dense but each carries distinct information, and the parenthetical id-format list is compact rather than repetitive.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With readOnly annotations, a 100%-covered single required param, and an output schema, the description covers the remaining unknowns: id formats, entity resolution, and the two misleading response fields. The only shortfall is that the long commitment_ada/discount exposition duplicates what the output schema already provides, indicating mild misallocation rather than a true information gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter, and the schema description already spells out 'ΑΔΑ, kimdis:<ΑΔΑΜ> or ted:<number>' at 100% coverage. The description restates those same three forms without adding accepted-syntax detail the schema lacks (no prefix casing rules, no example values). Baseline 3 is appropriate since the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Full detail of one act by its id') and enumerates what comes back: canonical fields, resolved buyer/supplier entities, CPV codes with labels, cross-source lifecycle chain. It also names the id namespaces (Διαύγεια ΑΔΑ, kimdis:<ΑΔΑΜ>, ted:<number>), which separates it cleanly from list/search siblings like search_tenders or get_chain.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: you fetch a single act by id. There is one explicit when-not — 'resolve it at diavgeia.gov.gr, not through this API' — but that constrains a response field, not the tool choice. It never routes the agent to get_chain versus get_act, even though get_chain exists as a sibling covering the lifecycle chain this tool only partially surfaces.

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 ChainA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
chain_idYes

Output Schema

NameRequiredDescription
membersYes
chain_idYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so safety is covered. The description adds genuinely non-obvious behavior: umbrella acts cited by more than 25 acts are deliberately not merged, so chains never absorb unrelated yearly activity. It does not discuss size limits, ordering guarantees, or what happens when a chain is incomplete, though an output schema exists to carry return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded: what the tool returns comes first, then how to get the input, then the scoping caveat. The umbrella-explanation passage is somewhat long and restates the same point twice ('deliberately NOT merged' and 'they simply do not form a chain'), which is the only redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a single required parameter, an output schema, and rich annotations, the description supplies the missing conceptual context: what a chain is, what it is not, and where excluded references live instead. Only edge cases (empty or partial chains, invalid chain_id behavior) are unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the schema gives only a bare string type, so the description must carry the meaning. It does: chain_id is a lifecycle-chain identifier obtained from the chain_id field of any act, which tells the agent how to source a valid value rather than guessing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (reconstruct a procurement lifecycle chain by chain_id) and defines the resource precisely as the linked sequence of related acts with confidence and link method. This clearly differentiates it from the sibling get_act, which returns a single act rather than a linked sequence.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent how to obtain the required input ('Get a chain_id from the chain_id field of any act') and clarifies the scope boundary of a chain. It implies get_act is the right tool for individual acts and their raw references, but never names an alternative or an explicit 'do not use this when' condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_entityGet Entity ProfileA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
afmYes9-digit ΑΦΜ

Output Schema

NameRequiredDescription
afmYes
kindNobuyer | supplier
nameYes
statsYes
last_seenNo
first_seenNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description's job is to add semantics beyond them — and it does, explaining that EUR totals are deduplicated committed procurement value with tenders/budgets excluded. That prevents a serious misreading of the numbers. It still doesn't say how an unknown or malformed ΑΦΜ is handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: purpose first, then the critical measurement caveat. The second sentence is dense but every clause (deduplication, lifecycle coverage, exclusions) changes how the numbers should be read, so it earns its length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and for a one-parameter lookup the description is nearly sufficient, with the deduplication semantics being the key addition. Minor gaps remain around error/empty-result behavior and the meaning of 'role'.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Single parameter with 100% schema coverage, so the baseline is 3. The description's '9-digit ΑΦΜ' merely restates the schema text without adding format examples, normalization rules, or what happens when the entity is absent from the registry.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (profile of a legal entity) and enumerates the content returned: name, role, buyer/supplier spend and receipt statistics. The 'by 9-digit ΑΦΜ' key implicitly separates it from find_entity (name-based lookup) and entity_counterparties, though it never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the agent must infer that this is the tool to call when it already has a 9-digit ΑΦΜ, and that find_entity is the alternative when it only has a name. No 'when not to use' or prerequisite statement is given.

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 CallsA
Read-onlyIdempotent
Inspect

What your Diavgis plan allows right now (the same for an API key and a connected account): 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. Useful for sizing a long job.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
planYes
usedYescalls consumed this period (REST + MCP share one counter)
limitNomonthly quota, null if unlimited
max_pagesYespagination depth cap; deeper pages return an error, narrow with filters instead
remainingNo
pricing_urlNo
period_resetYesISO date when used resets to 0
rate_per_minYes
max_page_sizeYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered; the description goes further by disclosing that the call is free and not counted against the quota, and that the answer is identical for an API key and a connected account. Those are non-obvious behavioral facts an agent could not infer from annotations or schema, and they directly affect whether the agent should call it liberally.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The returned data is front-loaded in the first clause, followed by the quota-exemption note and a short usage hint. Two sentences plus a fragment, with no filler or repetition that does not carry information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only, idempotent status tool with an output schema present, the description covers what it returns, when to reach for it, and its cost model. Nothing an agent needs in order to call it correctly is missing, and the field enumeration is a reasonable convenience even though the output schema also documents the return shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a no-parameter tool applies. The enumerated fields in the description describe outputs rather than inputs, which is harmless but not parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states concretely what the tool returns: plan, calls used, calls remaining, per-minute rate, page-size and pagination caps, and the reset time. That is a specific resource with enumerated fields, not a restatement of the name. It does not explicitly contrast itself with the sibling tools (all domain-data tools like get_entity or search_tenders), though the difference is fairly self-evident.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Useful for sizing a long job" gives a concrete situation in which to call it, and the note that the call is free gives a reason to prefer calling it early. There is no explicit when-not-to-use or named alternative, but for a zero-parameter meta tool the context is clear enough.

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 SuppliersA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
byNodefault spend
roleNodefault buyer
limitNomax 15, default 15 — the published ranking holds the top 15

Output Schema

NameRequiredDescription
byYes
roleYes
resultsYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description goes well beyond them: it discloses that results are precomputed and refreshed every 6 hours, that the published ranking only holds the top 15, and that spend is deduplicated across sources and lifecycle stages with tenders excluded. The Greek term for direct award and the ≤1-bid definition of single_bidder also clarify metric semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then defaults and metric definitions, then the example questions and refresh cadence. The by= parenthetical is dense and slightly overloaded, but every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, yet the description still names the returned fields (afm, name, metric, total) and flags the top-15 ceiling that bounds every call. For a read-only ranking tool, nothing needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and enums are already listed, so baseline would be 3; the description earns more by defining what each enum actually measures (COMMITTED EUR counted once, single_bidder award count, direct_award = απευθείας ανάθεση) and by explaining the hard 15 cap on limit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (rank) and resource (Greek public-procurement buyers/suppliers), plus the two axes of ranking. This is clearly distinct from lookup siblings like find_entity and get_entity, which retrieve a single entity rather than a leaderboard.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Example phrasings ('top 10 suppliers by public revenue', 'which buyers award most without competition') map directly onto parameter choices, and defaults are stated. It does not explicitly exclude or route away from siblings like spend_by_cpv or entity_counterparties, so it stops short of full when-not guidance.

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 ActsA
Read-onlyIdempotent
Inspect

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. Summing amount_net across results double-counts, because one procurement appears at several stages; rank_entities and spend_by_cpv count each procurement once.

NameRequiredDescriptionDefault
qNofree-text search over the act title
cpvNoCPV code (e.g. 79710000)
pageNo1-based page number; pagination DEPTH is capped per plan
yearNo4-digit issue year, e.g. 2026 — restricts to acts issued that year
regionNoNUTS region code prefix, e.g. EL30 (Attica), EL52 (Central Macedonia). Matches by prefix, so EL3 covers all of Attica.
sourceNofilter by data source
statusNo
buyer_afmNo9-digit buyer ΑΦΜ
cancelledNoonly acts the source marked as cancelled
has_chainNoonly acts linked into a reconstructed lifecycle chain (request→tender→award→contract→payment)
page_sizeNomax 200
budget_maxNomaximum amount_net in EUR
budget_minNominimum amount_net in EUR
price_onlyNoonly awards/contracts decided on lowest-price alone (award_criteria = Βάσει τιμής / Χαμηλότερη Τιμή), excluding most-economically-advantageous (MEAT) criteria
direct_awardNoonly direct awards (procedure = απευθείας ανάθεση) — a published ΚΗΜΔΗΣ fact
supplier_afmNo9-digit supplier ΑΦΜ
single_bidderNoonly contracts where ≤1 bid was submitted (maxBidsSubmitted; single bidder)
deadline_afterNoISO 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

NameRequiredDescription
dataYes
nextYesnext page NUMBER, or null when there are no more pages — not a URL
pageYes
totalYestotal acts matching the filters
page_sizeYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent annotations, it discloses that results are a paginated envelope where 'next' is a page number or null, that natural-person counterparties are redacted, and that one procurement appears at multiple lifecycle stages causing double-counting. Those are exactly the non-obvious behaviors an agent needs before trusting results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core scope and filter list, then the caveats in the final sentences, with no filler. It is a dense single block with a long parenthetical filter enumeration, which costs a little readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 18-parameter open search with an output schema, the description covers purpose, filter semantics, pagination return shape, redaction, and the main analytical pitfall. An agent can call it correctly without reading anything else.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 94%, so the baseline is 3; the description earns more by explaining intent-level meaning — lifecycle status values, procurement signals as published ΚΗΜΔΗΣ facts (direct_award = απευθείας ανάθεση, single_bidder = ≤1 bid), and the TODAY/deadline idiom. It does not cover every parameter (e.g. has_chain, price_only, page_size caps) in prose, leaving minor gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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) and names the three cross-linked sources it spans (Διαύγεια, ΚΗΜΔΗΣ, EU TED). It also distinguishes itself from aggregation siblings by warning that summing amount_net double-counts and naming rank_entities and spend_by_cpv as the correct alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete combinatorial guidance — deadline_after=TODAY with status=tender yields open tenders — and routes aggregate questions to rank_entities/spend_by_cpv. It does not explicitly state when to prefer get_act, get_chain, or find_entity over this tool, so the sibling routing is partial rather than complete.

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 CategoryA
Read-onlyIdempotent
Inspect

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. Divisions outside the top list are available through search_tenders with cpv=.

NameRequiredDescriptionDefault
yearNo4-digit year; omit for all-time

Output Schema

NameRequiredDescription
yearYesthe year filtered on, or 'all'
divisionsYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the read-only annotations: value is counted once per procurement with deduplication across sources and award/contract/payment stages, tenders are excluded, and results are precomputed nightly so calls are instant. The main gap is that it doesn't say how large the 'top list' is, so an agent can't judge truncation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each carrying distinct information: definition, deduplication rule, return shape, freshness, and alternatives. Scope and exclusions are front-loaded before the sibling routing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With safety covered by annotations and return fields by an output schema, the description supplies exactly the missing pieces: valuation methodology, exclusion of tenders, precomputation/freshness, and the boundary of coverage with a fallback tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents the year parameter including 'omit for all-time'. The description only restates optionality ('optionally for one year'), so it adds little beyond what the schema provides — baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific measure (deduplicated committed procurement value) against a specific dimension (CPV 2-digit division) with an optional year scope. The parenthetical naming of search_tenders for out-of-top-list divisions makes it clearly distinguishable from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the exact question it answers ('what does the Greek state spend the most on') and explicitly routes the agent elsewhere — search_tenders with cpv= — when a division falls outside the precomputed top list. Both the use case and the escape hatch are named.

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.

  1. 1 tool update
    • Changedget_act1 field changed
      • changedOutput schema / properties / discount / description
        Previous value: -"Contractor discount, only on tenders and on public-works (CPV 45) awards/contracts. The key is ABSENT when there is nothing to show (not null). basis \"document\" = the percentage exactly as the award decision states it (measure average_discount | discount_on_budget, with document_ref and document_url to the source), Pro plan and above. basis \"calculated\" = Diavgis' own 1 - award_net / tender_budget_net, single winner only, shown only when the award is 30-100% of the budget and, where the document states a figure, within 1 point of it. official_locked: true + upgrade_url = the document states an official figure this plan does not include. Never present a calculated value as the official one."New value: +"Contractor discount, only on tenders and on public-works (CPV 45) awards/contracts. The key is ABSENT when there is nothing to show (not null). basis \"document\" = the percentage exactly as the award decision states it (measure average_discount | discount_on_budget, with document_ref and document_url to the source), Pro plan and above. basis \"calculated\" = Diavgis' own 1 - award_net / tender_budget_net, single winner only, shown only when the award is 30-100% of the budget and, where the document states a figure, within 1 point of it. official_locked: true + upgrade_url = the document states an official figure this plan does not include. A calculated value is not the official one."
  2. 1 tool update
    • Changedget_act1 field changed
      • addedOutput schema / properties / discount
        Added value: +{
        +  "description": "Contractor discount, only on tenders and on public-works (CPV 45) awards/contracts. The key is ABSENT when there is nothing to show (not null). basis \"document\" = the percentage exactly as the award decision states it (measure average_discount | discount_on_budget, with document_ref and document_url to the source), Pro plan and above. basis \"calculated\" = Diavgis' own 1 - award_net / tender_budget_net, single winner only, shown only when the award is 30-100% of the budget and, where the document states a figure, within 1 point of it. official_locked: true + upgrade_url = the document states an official figure this plan does not include. Never present a calculated value as the official one.",
        +  "properties": {
        +    "basis": {
        +      "enum": [
        +        "document",
        +        "calculated"
        +      ],
        +      "type": "string"
        +    },
        +    "document_ref": {
        +      "type": "string"
        +    },
        +    "document_url": {
        +      "type": "string"
        +    },
        +    "formula": {
        +      "type": "string"
        +    },
        +    "measure": {
        +      "enum": [
        +        "average_discount",
        +        "discount_on_budget"
        +      ],
        +      "type": "string"
        +    },
        +    "official_locked": {
        +      "type": "boolean"
        +    },
        +    "upgrade_url": {
        +      "type": "string"
        +    },
        +    "value": {
        +      "description": "percent, one decimal",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "basis"
        +  ],
        +  "type": "object"
        +}
  3. 1 tool update
    • Changedget_quota1 field changed
      • changedOutput schema / properties / plan / enum
        Previous value: -[
        -  "free",
        -  "pro",
        -  "business"
        -]New value: +[
        +  "free",
        +  "basic",
        +  "pro",
        +  "business"
        +]
  4. 2 tool updates
    • Changedget_act1 field changed
      • changedOutput schema / properties / act / properties / supplier_afm / description
        Previous value: -"null when the counterparty is a redacted natural person"New value: +"9-digit ΑΦΜ of a company supplier; a pseudonym \"Φ-XXXXXXXXXX\" for a natural-person contractor; null when the counterparty is a redacted natural person"
    • Changedsearch_tenders1 field changed
      • changedOutput schema / properties / data / items / properties / supplier_afm / description
        Previous value: -"null when the counterparty is a redacted natural person"New value: +"9-digit ΑΦΜ of a company supplier; a pseudonym \"Φ-XXXXXXXXXX\" for a natural-person contractor; null when the counterparty is a redacted natural person"
  5. 3 tool updates
    • Changedexpiring_contracts1 field changed
      • changedOutput 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"
        +}
    • Addedfind_entity
    • Addedget_quota
  6. 1 tool update
    • Changedsearch_tenders2 fields changed
      • addedInput schema / properties / deadline_after
        Added 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"
        +}
      • addedInput schema / properties / region
        Added value: +{
        +  "description": "NUTS region code prefix, e.g. EL30 (Attica), EL52 (Central Macedonia). Matches by prefix, so EL3 covers all of Attica.",
        +  "type": "string"
        +}
  7. 1 tool update
    • Changedrank_entities1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"max 50, default 15"New value: +"max 15, default 15 — the published ranking holds the top 15"
  8. 8 tool updates
    • First observedentity_counterparties
    • First observedexpiring_contracts
    • First observedget_act
    • First observedget_chain
    • First observedget_entity
    • First observedrank_entities
    • First observedsearch_tenders
    • First observedspend_by_cpv

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables 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
  • F
    license
    A
    quality
    C
    maintenance
    Enables 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.
    12
    1
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.