Diavgeia

Every administrative act the Greek state publishes under the Transparency Programme (ν. 4305/2014): appointments, expenditure, contract awards and regulatory decisions, each carrying a unique ΑΔΑ and a signed PDF.

Publisher
Ypourgeio Psifiakis Diakyvernisis — Programma DIAVGEIA
Licence
CC-BY-4.0
Attribution
Programma DIAVGEIA (diavgeia.gov.gr)

MCP server

https://agoramcp-server.vercel.app/gr/mcp/diavgeia

HTTP API

https://agoramcp-server.vercel.app/gr/api/diavgeia

Its own server, with the tools under their plain names. On Greece's server the same tools answer as diavgeia_.

Tools

17 tools, each with the description a model is given, its arguments and the example it ships with. Over HTTP a tool answers at /gr/api/diavgeia/{tool}; over MCP, as itself.

search_decisions >Search Diavgeia decisions

Search the Greek transparency register of administrative acts. Returns matching decisions with their ΑΔΑ, subject, issuing body, declared expenditure and a link to the signed PDF. Filters combine with AND. Use `text` for a free-text search across the whole record and `subject` to match only the act's subject line. IMPORTANT: Διαύγεια searches at most 180 days of issue dates per call. With no date range it searches the last six months; with a longer range it silently truncates to the first 180 days from `issuedFrom`. To cover a longer period, repeat the search over consecutive windows and read `coverage` to see what each call actually searched — `coverage.note` says where to continue. The archive goes back to 2010. Call `list_decision_types` first if you need a valid `decisionType` code, and `search_organizations` to turn a body's name into an `organizationId`. For OR between values, several bodies or types at once, or type-specific fields, use search_decisions_advanced. This searches act metadata, not the text inside the PDFs.

Arguments

textstring, up to 200 characters
Free-text search across the whole record, including the subject and the issuing body.
subjectstring, up to 200 characters
Match only against the act's subject line. Narrower and more precise than `text`.
protocolNumberstring, up to 60 characters
The body's own reference number for the act (αριθμός πρωτοκόλλου), matched exactly. Bodies number independently, so combine with organizationId.
organizationIdstring
Numeric uid of the issuing body, from search_organizations or `organization.id` on a previous result.
unitIdstring
Numeric uid of the issuing unit within the body, from list_organization_units.
signerIdstring
Numeric uid of the signing official.
decisionTypestring
Decision type code such as 'Β.2.2' (payment) or 'Δ.1' (award). Get valid codes from list_decision_types.
thematicCategorystring
Thematic category code, e.g. '20' for finance. Get valid codes from list_thematic_categories.
issuedFromstring, YYYY-MM-DD
Earliest issue (signing) date, inclusive. Required to search beyond the last six months.
issuedTostring, YYYY-MM-DD
Latest issue (signing) date, inclusive.
publishedFromstring, YYYY-MM-DD
Earliest publication date, inclusive — when the act appeared on Διαύγεια, which can be days after it was signed. The issue-date window still applies alongside this.
publishedTostring, YYYY-MM-DD
Latest publication date, inclusive.
statusstring, one of published, revoked, all
'published' (default) returns only acts currently in force; 'revoked' only acts that have been withdrawn; 'all' both.
pageinteger, ≥ 0
Zero-based page number. Defaults to 0.
sizeinteger, 1–100
Results per page, 1-100. Defaults to 20.

Example arguments

{
  "subject": "προμήθεια",
  "issuedFrom": "2026-01-01",
  "issuedTo": "2026-01-31",
  "size": 5
}

search_decisions_advanced >Search Diavgeia decisions with a Lucene query

Search the register with a Lucene query written by hand, for what the fixed filters of search_decisions cannot express: OR between values, several bodies or types at once, numeric ranges, and the type-specific fields that get_decision_type lists as `searchField`. Returns the same shape as search_decisions. Syntax: `field:"value"` clauses joined with AND or OR and grouped with parentheses; ranges as `field:[a TO b]` with both bounds given; dates as `DT(YYYY-MM-DDTHH:MM:SS)` in Athens time, e.g. issueDate:[DT(2026-01-01T00:00:00) TO DT(2026-03-31T23:59:59)]. NOT, `-`, wildcards and open ranges (`*`) are rejected. Fields: q (whole record), subject, ada, protocolNumber, organizationUid, unitUid, signerUid, decisionTypeUid, thematicCategoryUid, status ("Αναρτημένη" in force, "Ανακληθείσα" revoked), issueDate, publishTimestamp, documentType, plus per-type fields such as cpv, assignmentType, textFinancialYear, employerOrg and numberOfPeople. Two things upstream does on its own: it caps issueDate at 180 days from the start of the range (no range means the last six months), and it applies no status filter, so revoked acts are included unless you add status:"Αναρτημένη". `upstreamQuery` shows exactly what ran; a malformed query is rejected with upstream's own message.

Arguments

querystring, up to 2000 charactersrequired
The Lucene query, e.g. (decisionTypeUid:"Δ.1" OR decisionTypeUid:"Δ.2.2") AND cpv:"33600000-6".
pageinteger, ≥ 0
Zero-based page number. Defaults to 0.
sizeinteger, 1–100
Results per page, 1-100. Defaults to 20.

Example arguments

{
  "query": "(decisionTypeUid:\"Δ.1\" OR decisionTypeUid:\"Δ.2.2\") AND organizationUid:\"99221912\" AND status:\"Αναρτημένη\" AND issueDate:[DT(2026-01-01T00:00:00) TO DT(2026-06-30T23:59:59)]",
  "size": 5
}

get_decision >Get a Diavgeia decision by ADA

Fetch one published administrative act by its ΑΔΑ (the unique code Διαύγεια assigns on publication, e.g. 9ΓΓ346ΝΨ2Ν-Β5Τ). Returns the full record: subject, issuing body, signers, declared expenditure with budget codes, type-specific fields, any attached files, and a link to the signed PDF. Use search_decisions when you do not already have an ΑΔΑ, get_decision_text to read what the PDF says, and get_decision_history to see whether the act was corrected or revoked.

Arguments

adastring, matches ^[0-9A-ZΑ-Ω]{4,}-[0-9A-ZΑ-Ω]{3}$required
The act's ΑΔΑ, e.g. 9ΓΓ346ΝΨ2Ν-Β5Τ.

Example arguments

{
  "ada": "9ΓΓ346ΝΨ2Ν-Β5Τ"
}

get_decision_text >Read a decision's PDF

Read the text of the signed PDF behind an act — the decision itself rather than the record around it: the reasoning, the articles, the amounts in the tables, the names. search_decisions and get_decision return only metadata; this is the only way to see what an act actually says. Text comes back page by page, 10 pages at a time by default and never more than 40,000 characters per call — read `nextPage` to continue a long act. A scanned PDF has no text layer and comes back empty with a note saying so; the file itself is always at `documentUrl`.

Arguments

adastring, matches ^[0-9A-ZΑ-Ω]{4,}-[0-9A-ZΑ-Ω]{3}$required
The act's ΑΔΑ, e.g. ΨΕ1Ψ46ΨΧΞ5-ΝΝΖ.
fromPageinteger, ≥ 1
First page to return, 1-based. Defaults to 1.
maxPagesinteger, 1–50
Most pages to return, 1-50. Defaults to 10.

Example arguments

{
  "ada": "ΨΕ1Ψ46ΨΧΞ5-ΝΝΖ",
  "maxPages": 2
}

get_decision_history >Get a decision's version history

List every version filed under one ΑΔΑ, oldest first, with when each was filed, its status and the note the body entered. This is how to answer 'is this act still in force?', 'was it corrected, and when?' and 'why was it revoked?' — a correction keeps the ΑΔΑ and adds a version; a revocation adds versions in PENDING_REVOCATION and then REVOKED, usually with the reason as the note. get_decision returns only the current version.

Arguments

adastring, matches ^[0-9A-ZΑ-Ω]{4,}-[0-9A-ZΑ-Ω]{3}$required
The act's ΑΔΑ, e.g. 9ΓΓ346ΝΨ2Ν-Β5Τ.

Example arguments

{
  "ada": "630ΜΩ1Ρ-ΤΧΝ"
}

list_decision_types >List Diavgeia decision types

List the controlled vocabulary of decision types, with each code, its Greek label and its parent group. These codes are the valid values for the `decisionType` filter on search_decisions — call this first rather than guessing a code. get_decision_type explains what an act of one type carries.

Arguments

includeGroupsboolean
Include the parent grouping nodes that cannot themselves be assigned to an act. Defaults to false.

get_decision_type >Describe a Diavgeia decision type

Describe one decision type: its label, its group, and every field an act of that type carries beyond the common record — the keys that appear in `extraFields` on get_decision, with their meaning, whether they are required, the closed set of values where there is one, and the vocabulary they draw from. Each field also names its `searchField`: the Lucene field to use in search_decisions_advanced, or null when the field is not indexed. Use it to interpret an act's type-specific data, or to find out what can be filtered on — e.g. that awards (Δ.1) carry `cpv` and `assignmentType`, both searchable, and `awardAmount`, which is not.

Arguments

codestring, up to 20 charactersrequired
Decision type code from list_decision_types, e.g. 'Δ.1' or 'Β.2.2'.

Example arguments

{
  "code": "Δ.1"
}

search_organizations >Find a Greek public body

Find a Greek public body by name or VAT number (ΑΦΜ), and get the numeric uid that search_decisions needs for its `organizationId` filter. Matching ignores case and accents, so 'Καλαμάτας', 'καλαματα' and 'ΚΑΛΑΜΑΤΑΣ' are equivalent. This is the usual first step when the user names a ministry, municipality or hospital rather than a uid: find the body here, then pass its `id` to search_decisions. Covers the roughly 5,400 bodies currently active; `includeInactive` adds the 400 or so that have been dissolved or merged, which still appear as the issuer of older acts.

Arguments

querystring, 2–120 charactersrequired
Part of the body's name in Greek, or its VAT number. Accents and case are ignored.
categorystring
Restrict to one category, e.g. 'MINISTRY', 'NPDD', 'OTA1'. Case-insensitive; search_dictionary with ORG_CATEGORY lists them.
includeInactiveboolean
Include bodies that have been dissolved or merged, and the few pending registration. Defaults to false.
limitinteger, 1–100
Most bodies to return, 1-100. Defaults to 20.

Example arguments

{
  "query": "δήμος αθηναίων",
  "limit": 5
}

get_organization >Get a Greek public body

Fetch the full register record of one public body by its numeric uid: official name, VAT number, category, website, the body that supervises it and the Government Gazette issue that established it. Use search_organizations when you have a name rather than a uid.

Arguments

organizationIdstring, matches ^\d+$required
Numeric uid of the body, e.g. 99221912.

Example arguments

{
  "organizationId": "99221912"
}

list_organization_units >List a body's units

List the departments, directorates and branches of one public body, with the uid of each. These uids are the valid values for the `unitId` filter on search_decisions, which narrows a search from a whole ministry to one directorate inside it. Units nest: `parentId` points at the containing unit, or at the body itself for a top-level one. Defunct units are excluded unless `includeInactive` is set — they still appear on the older acts they signed.

Arguments

organizationIdstring, matches ^\d+$required
Numeric uid of the body whose units to list.
includeInactiveboolean
Include units that have been dissolved or merged. Defaults to false.

Example arguments

{
  "organizationId": "99221912"
}

get_unit >Get a unit by uid

Resolve the uid of a unit — a department, directorate or branch — into its name, category, active dates and what it sits inside, without knowing which body it belongs to. Decisions carry only `unitIds`; this is how to name the office that issued one. `parent` is the containing unit, or the body itself for a top-level unit. Use list_organization_units to see a body's whole structure.

Arguments

unitIdstring, matches ^\d+$required
Numeric uid of the unit, e.g. 75159.

Example arguments

{
  "unitId": "75159"
}

list_organization_signers >List who signs for a body

List the officials registered to sign acts for one public body: name, the posts they hold and in which units, and whether they may sign for the body as a whole rather than for one unit. This answers 'who runs this hospital?' or 'who can sign for the ministry?' — the head of a body is the signer with `canSignForOrganization` and a top-level posting, listed first. Each `id` is a valid `signerId` filter on search_decisions. Officials who have left are excluded unless `includeInactive` is set; they still appear on the acts they signed.

Arguments

organizationIdstring, matches ^\d+$required
Numeric uid of the body whose signers to list.
includeInactiveboolean
Include officials whose signing rights have ended. Defaults to false.

Example arguments

{
  "organizationId": "99221912"
}

get_signer >Get a Diavgeia signer

Resolve the uid of an official who signed an act into a person: name, the body they belong to, the posts they hold and in which units. Decisions carry only `signerIds`, which say nothing on their own — this is how to answer 'who signed this?'. The uid is also a valid `signerId` filter on search_decisions, so this doubles as the way to check whose acts you are about to list. list_organization_signers goes the other way, from a body to everyone who signs for it.

Arguments

signerIdstring, matches ^\d+$required
Numeric uid from `signerIds` on a decision.

Example arguments

{
  "signerId": "100090423"
}

list_positions >List position titles

List the position titles the register knows — Υπουργός, Διοικητής, Προϊστάμενος Τμήματος — either the roughly 230 used anywhere in the state, or only the ones one body uses. `positionId` on a signer's postings refers to these, as does the `position` field on acts appointing secretaries-general (type 100). Mostly a lookup for a code or a title you have been given; the signer tools already carry the title alongside the code.

Arguments

organizationIdstring, matches ^\d+$
Only the titles this body uses. Omit for every title in the state.
querystring, up to 120 characters
A code such as 'POS_10017', or part of a title. Accents and case are ignored.
limitinteger, 1–300
Most titles to return, 1-300. Defaults to 50.

Example arguments

{
  "organizationId": "99221912"
}

list_thematic_categories >List Diavgeia thematic categories

List the controlled vocabulary of thematic categories — the broad subject areas an act can be filed under, such as finance, public health or education. These codes are the valid values for the `thematicCategory` filter on search_decisions; call this rather than guessing one. A thematic category says what an act is about, where a decision type says what kind of act it is — the two filters are independent and combine.

Arguments

None. Call it with an empty object.

list_dictionaries >List Diavgeia vocabularies

List the controlled vocabularies Διαύγεια publishes — CPV procurement codes, organisation categories, Government Gazette issue types, the Kallikratis regions and municipalities, currencies, revocation reasons and the rest — with the code search_dictionary takes for each. Call it to find out which vocabulary a code you have been given belongs to.

Arguments

None. Call it with an empty object.

search_dictionary >Look up a Diavgeia vocabulary

Look up entries in one of Διαύγεια's controlled vocabularies by code or by part of a label: what CPV code 33600000-6 means, which ORG_CATEGORY codes exist, or which municipalities ADMIN_STRUCTURE_KALLIKRATIS places in a region. Codes from these vocabularies appear in `extraFields` on decisions (cpv, kanonistikipraxitype, …) and in the register (organisation categories, FEK issue types); get_decision_type says which vocabulary a field uses. Matching ignores case and accents. With no `query` the vocabulary is listed from the start — fine for the small ones, but CPV has 10,357 entries, so search it.

Arguments

dictionarystring, up to 60 charactersrequired
Vocabulary code from list_dictionaries, e.g. 'CPV', 'ORG_CATEGORY', 'FEKTYPES', 'ADMIN_STRUCTURE_KALLIKRATIS'. Case-insensitive.
querystring, up to 120 characters
A code, or part of a label. Accents and case are ignored.
parentstring
Only entries filed under this parent code — e.g. a region's code in ADMIN_STRUCTURE_KALLIKRATIS lists its municipalities. Most vocabularies are flat.
limitinteger, 1–500
Most entries to return, 1-500. Defaults to 50.

Example arguments

{
  "dictionary": "CPV",
  "query": "φάρμακα",
  "limit": 5
}