Skip to main content
Glama
VladyslavMykhailyshyn

Prozorro.Sale MCP Server

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
PROZORRO_SALE_API_BASENoFull base URL override
PROZORRO_SALE_INSTANCENoEnvironment: production, staging (synthetic data) or dgfproduction
PROZORRO_SALE_MAX_PAGESNoHard ceiling per call40
PROZORRO_SALE_TIMEOUT_MSNoPer-request timeout in milliseconds45000
PROZORRO_SALE_MAX_RETRIESNoRetries on network/5xx errors2
PROZORRO_SALE_CACHE_TTL_MSNoFeed-page cache lifetime in milliseconds120000
PROZORRO_SALE_DEFAULT_PAGESNoFeed pages a search scans by default (100 auctions each)8

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
search_auctionsA

Find auctions of Ukrainian public assets. The entry point for any "what is available" question.

WHEN TO USE: the user describes what they are looking for rather than naming one auction. For a specific auction id, call get_auction instead.

KEY PARAMETERS

  • procedure_type: name the asset programme whenever the user implies one ("land", "privatisation", "lease"). This switches to per-type feeds and covers far more relevant auctions. Family names ("landRental") expand to every format; exact values ("landRental-english") are used as-is. Call list_procedure_types if unsure of the vocabulary.

  • open_for_bids: true for "what can I bid on" — keeps only auctions whose deadline has not passed.

  • keyword: Ukrainian free text over title, description, items, classification, locality. All words must match.

  • region / classification / min_value / max_value / published_from / published_to: narrowing filters.

  • seller / seller_edrpou: the body RUNNING the auction (often a regional SPFU office).

  • property_owner / property_owner_edrpou: the organisation the asset BELONGS to — the university, hospital or school whose premises are leased out. Use this when the user names an institution: on lease auctions the institution is almost never the seller. EDRPOU is exact, prefer it. Published by the legitimatePropertyLease family only; elsewhere owner and seller are the same body.

  • changed_since + changed_until: scan a specific historical period instead of recent activity.

  • scan_pages: raise (up to 40) when a broad query comes back thin or truncated.

EXAMPLE — everything Lviv Polytechnic put up for lease this year: {"procedure_type":["legitimatePropertyLease"],"property_owner_edrpou":"02071010", "changed_since":"2026-01-01","changed_until":"2026-08-06","scan_pages":40}

EXAMPLE — property lease near Lviv, still open, under 50 000 UAH: {"procedure_type":["legitimatePropertyLease"],"open_for_bids":true,"region":"Львів","max_value":50000,"limit":10}

EXAMPLE — everything privatisation-related sold in July 2026: {"procedure_type":["smallPrivatization","largePrivatization"],"status":["complete"], "changed_since":"2026-07-01","changed_until":"2026-07-31","scan_pages":25}

RETURNS: compact auction summaries (id, title, status, price, region, seller, propertyOwner, deadlines, auctionUrl) plus a "scanned" block. ALWAYS relay that block's window and truncation to the user — an empty result means "not in the scanned window", never "does not exist".

get_auctionA

Everything about a single auction: the asset, the financial terms, the seller, and whichever sub-sections are asked for.

WHEN TO USE: the user names an auction, or a search result needs expanding. For deadlines alone use get_auction_timeline; for the outcome alone use get_auction_results — both are much smaller responses.

KEY PARAMETERS

  • auction (required): public id from the website ("SPD001-UA-20260806-70620") or the internal 24-character procedure id. Both work everywhere.

  • include: sections to expand. Defaults to ["items","terms"]. items — what is physically being sold: area, cadastral number, address, classification terms — starting price, minimal step, guarantee deposit, registration fee, lease duration, conditions, restrictions documents — attached files with download URLs questions — clarification questions and the seller's answers bids — submitted bids (amounts appear only after the auction concludes) awards — winner determination contracts — signed contracts

EXAMPLE — full picture before deciding whether to bid: {"auction":"SPD001-UA-20260806-70620","include":["items","terms","documents","questions"]}

EXAMPLE — minimal lookup: {"auction":"LRE001-UA-20260708-03894"}

RETURNS: auction summary, seller, description, per-section counts, and the requested sections. Lease auctions additionally carry propertyOwner (the institution the asset belongs to, with its EDRPOU), ownershipType and currentTenants (sitting tenants and their contract dates). Redacted personal data appears as "[redacted]".

get_auction_timelineA

The stage clock for one auction: what has passed, what is running now, what comes next, and how much time is left to bid.

WHEN TO USE: any time-related question — "how long do I have", "when is the auction", "has the question period closed", "what happens after bidding". Far smaller than get_auction for this.

KEY PARAMETERS

  • auction (required): public auction id or 24-character procedure id.

  • include_revisions: true to also list archived revisions, showing when the seller amended the terms. Use when the user suspects the conditions changed. Default false.

EXAMPLE — "can I still bid on this?": {"auction":"LRE001-UA-20260708-03894"}

EXAMPLE — "did the seller change anything after publishing?": {"auction":"LRE001-UA-20260708-03894","include_revisions":true}

RETURNS: status with its plain-language meaning, every stage marked past/current/upcoming, the next deadline, and a bidding block with closesAt / stillOpen / hoursRemaining. Cancellation reasons appear when the auction was withdrawn.

get_auction_resultsA

How one auction ended: sold or not, for how much, to how many bidders.

WHEN TO USE: "what did it go for", "did it sell", "how many people bid", "why was it cancelled". Works on in-progress auctions too — it reports outcome "in_progress" rather than failing.

KEY PARAMETERS

  • auction (required): public auction id or 24-character procedure id. No other parameters.

EXAMPLE: {"auction":"SPE001-UA-20260729-69703"}

RETURNS: outcome (contract_signed / winner_determined / ended_without_winner / cancelled_by_seller / in_progress), starting vs final price with priceUpliftPercent between them, bid and disqualified-bid counts, attemptNumber (>1 means the lot failed to sell before), awards, contracts and cancellation reasons. Winner identities are redacted by the platform; bid amounts appear only after the auction concludes.

get_auction_documentsA

Files published for one auction, each with a direct public download URL that can be fetched without authentication.

WHEN TO USE: "show me the documents", "where is the technical specification", "get the signed contract", "is there a photo of the property".

KEY PARAMETERS

  • auction (required): public auction id or 24-character procedure id.

  • document_type: case-insensitive substring of the type. Common values: technicalSpecifications, illustration, notice, contractSigned, transferAct, act, cancellationDetails, evaluationCriteria.

  • include_attachments_of: which sets to return. Defaults to ["auction"]. Add "awards" and "contracts" for outcome paperwork (protocols, signed contracts, transfer acts), "cancellations" for the withdrawal justification.

  • include_superseded: true to also list earlier revisions of files the seller later replaced. Use when the user asks what changed. Default false — current versions only.

EXAMPLE — just the technical spec: {"auction":"SPD001-UA-20260806-70620","document_type":"technicalSpecifications"}

EXAMPLE — the complete paper trail including the signed contract: {"auction":"SPD001-UA-20260806-70620","include_attachments_of":["auction","awards","contracts"]}

RETURNS: per set, a list of documents with title, type, format, publication date and downloadUrl. Documents attached to bids are never published.

find_comparable_auctionsA

Takes one auction and finds recent comparable ones, then reports median prices and how often that kind of lot actually sells.

WHEN TO USE: valuation and risk questions — "is this price reasonable", "what do similar plots go for", "how likely is this to sell", "should I bid at the starting price".

KEY PARAMETERS

  • auction (required): the reference auction — public auction id or procedure id.

  • match_on: what a comparable must share. Default ["sellingMethod","classification"]. sellingMethod — same auction format and programme classification — same CAV asset category region — same oblast; add this for a local benchmark, which is usually what is wanted valueRange — within ±50% of the starting price; use to exclude outliers Adding more criteria gives a tighter but smaller sample.

  • concluded_only: default true — compares only against finished auctions, which is what a price benchmark needs. Set false to also see what is currently on the market.

  • limit / scan_pages: widen the sample when comparableCount comes back low.

EXAMPLE — price benchmark for a land lease: {"auction":"LRE001-UA-20260708-03894","match_on":["sellingMethod","classification"]}

EXAMPLE — what similar assets are on the market right now: {"auction":"SPD001-UA-20260806-70620","concluded_only":false,"limit":25}

RETURNS: the reference summary, median starting and achieved prices, sold share, and the comparable auctions themselves. Re-listings of the same lot are excluded so one asset is not counted twice. The sample comes from recent activity, not full history — say so when quoting a figure.

track_auction_changesA

What appeared or changed in a niche since a given moment. Cursor-based, so repeated calls make forward progress without re-reading the same activity.

WHEN TO USE: monitoring rather than searching — "anything new since yesterday", "did anything change on the lots I am watching", "keep me posted on timber auctions". For a one-off "what exists" question use search_auctions instead.

KEY PARAMETERS

  • since: ISO instant to watch from. Defaults to 24 hours ago. On follow-up polls pass back the nextCursor from the previous response — that is the whole point of this tool.

  • procedure_type / status / keyword / region: narrow the watch to one niche.

  • limit / scan_pages: raise when a busy window truncates.

EXAMPLE — first poll of a niche: {"procedure_type":["landRental"],"region":"Полтав","limit":20}

EXAMPLE — follow-up poll using the cursor from the previous response: {"procedure_type":["landRental"],"region":"Полтав","since":"2026-08-06T06:27:21.880000Z"}

RETURNS: changed auctions with changedAt and an isNew flag distinguishing brand-new listings from updates to existing ones, a newlyPublished count, and nextCursor for the following poll. The cursor is inclusive, so the last auction may repeat once.

analyze_auction_marketA

Counts, price statistics and sold-share over a window of auction activity, broken down by a dimension of your choice.

WHEN TO USE: questions about volume and trends rather than individual lots — "how much land was auctioned last week", "which regions are most active", "what share of timber lots actually sell", "who are the biggest sellers".

KEY PARAMETERS

  • group_by: the breakdown dimension. "direction" (asset programme, default), "sellingMethod", "status", "region" or "seller".

  • since / until: the period to analyse. Omit both to analyse the most recent activity.

  • procedure_type / status / region / keyword: narrow the population before aggregating.

  • scan_pages: default 15. Raise for a larger, more representative sample.

EXAMPLE — which regions had the most land activity recently: {"procedure_type":["landRental","landSell"],"group_by":"region","scan_pages":25}

EXAMPLE — how privatisation performed in July 2026: {"procedure_type":["smallPrivatization"],"since":"2026-07-01","until":"2026-07-31", "group_by":"sellingMethod","scan_pages":30}

RETURNS: totals with count/total/mean/median/min/max starting prices, a status histogram, soldSharePercentOfSettled (settled = complete, unsuccessful or cancelled only), and the same figures per group. CRITICAL: these describe only auctions CHANGED inside the scanned window, not the whole catalogue. Always report the window and coverage alongside any number.

list_procedure_typesA

The vocabulary every other tool filters on. Cheap, cached, no network cost after the first call.

WHEN TO USE: before a search whose asset programme is unclear, or when the user asks what kinds of auctions exist, what a status means, or what an auction id prefix stands for. Call this rather than guessing a procedure_type value — an unrecognised one silently returns nothing.

KEY PARAMETERS

  • filter: substring to narrow the list, e.g. "land", "lease", "privat", "timber".

  • include_status_glossary: default true. Set false when only the programme list is needed.

EXAMPLE — what land-related programmes exist: {"filter":"land"}

EXAMPLE — the full vocabulary: {}

RETURNS: 33 programme families, each with its auction formats, the exact sellingMethod values to pass as procedure_type, and the three-letter auction-id prefix each produces (LRE = landRental-english, SPE = smallPrivatization-english, and so on). Plus the auction-id format and, by default, what each of the ten procedure statuses means.

get_publication_constraintsA

Seller-side planning: if a lot is published today, how soon may the auction itself run.

WHEN TO USE: the user is preparing to list something and needs to plan dates — "how far ahead do I need to publish", "what is the minimum notice period", "can we hold the auction before the 20th". This is the only forward-looking tool here; everything else describes auctions that already exist.

KEY PARAMETERS

  • procedure_type (required): a selling method such as "smallPrivatization-english". A family name such as "smallPrivatization" is also accepted and every format it supports is checked at once, which is useful for comparing notice periods before choosing a format.

EXAMPLE — notice period for one format: {"procedure_type":"landRental-english"}

EXAMPLE — compare every format of a programme: {"procedure_type":"smallPrivatization"}

RETURNS: per selling method, earliestAuctionStart (the soonest auctionPeriod.startDate the platform would accept for a procedure published now) and noticeDays, that gap in days. The value is computed live and moves with the calendar, so it is not cached.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/VladyslavMykhailyshyn/prozorro-sale-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server