Prozorro MCP Server
The Prozorro MCP Server enables AI models to search and retrieve Ukrainian government procurement (tender) data, with the following capabilities:
Search by EDRPOU code: Look up tenders from a specific procuring organization using their Ukrainian tax ID
Search by legal name: Find tenders by a substring of the procuring organization's name (case-insensitive)
Search by tenderer/supplier name: Find individual entrepreneurs (FOPs) as bidders by name substring, since FOPs may not have EDRPOU codes
Filter by date range: Narrow results using
dateFrom/dateToparameters (ISO 8601 format)Sort results: Sort by amount (ascending/descending) or last-modified date, applied across the full matching dataset
Paginate: Page through large result sets using
offset, with up to 100 records per pageGet total count: Optionally include the total number of matching tenders across all pages via
includeTotalCombine filters: Use multiple parameters together for more targeted queries
The server integrates with Claude Desktop and other MCP-compatible clients, and currently provides data for 2025.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Prozorro MCP Serversearch for tenders from EDRPOU 12345678 in 2025"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Prozorro MCP Server
A Model Context Protocol (MCP) server that provides AI models with seamless access to Ukrainian government procurement data from Prozorro - Ukraine's public procurement system.
❗❗❗ Providing all the available features requires to have a proxy server and database, so right now MCP API is not available publicly. To get API URL and API token, please contact the author.
Features
🔍 Search Tenders: Advanced search capabilities by EDRPOU code, legal name, tenderer/supplier name, or date ranges
↕️ Server-side Sorting: Sort results by amount or last-modified date, so "biggest"/"latest" queries return the actual top results, not an arbitrary page
📄 Pagination: Page through result sets larger than 100 rows via
offset⚡ Fast: Direct API integration with Prozorro's public procurement database
🛠️ Easy Integration: Simple setup with Claude Desktop and other MCP clients
Related MCP server: Taiwan Tender MCP
Available Tools
search_tenders
Searches for government tenders based on various criteria (Right now data are available only for 2025 year).
Parameters:
EDRPOUCode(string, optional): The unique identifier code of the procuring organization (Ukrainian tax ID)legalName(string, optional): A substring to match against the procuring organization's legal nametendererName(string, optional): A substring to match against the tenderer/supplier/bidder's name (not the procuring entity). Use this to find individual entrepreneurs (FOPs) as bidders — see Known Limitations below.dateFrom(string, optional): Start date for the search (ISO 8601 format, e.g.,2025-01-01)dateTo(string, optional): End date for the search (ISO 8601 format, e.g.,2025-12-31)sortBy(string, optional): One ofamount_desc,amount_asc,dateModified_desc,dateModified_asc. Sorting is applied server-side across the full matching dataset before pagination, so e.g.amount_descreliably returns the biggest tenders even if there are thousands of matches.offset(number, optional): Number of records to skip, for paging beyond the firstlimitresults (default: 0)includeTotal(boolean, optional): If true, the response includestotal_count— the true total number of matching results across all pages. Costs an extra query server-side, so it's opt-in; omit it for routine paging (default: false)limit(number, optional): Maximum number of records to return per page (default: 100, max: 100 — the server hard-caps at 100 regardless of the value requested; useoffsetto fetch additional pages)
Returns: An object with data (array of tender objects with detailed information including tender ID, title, organization details, dates, and procurement status), plus count (rows in this page), total_count (true total matching the filters across all pages — null unless includeTotal was set), limit_applied, offset_applied, and sort_applied.
Known Limitations
Individual entrepreneurs (FOP): Prozorro's public data source masks individual-entrepreneur identifier IDs (EDRPOU-style codes) to
0000000000for privacy. This meansEDRPOUCode/tenderer-ID-based search does not reliably find FOPs. UsetendererName(substring match) instead — FOPs almost always appear as bidders/suppliers (tenderers), not as the procuring entity.
Installation
Method 1: Install from npm (Recommended)
The easiest way to install the MCP server is via npm:
npm install -g prozorro-mcp-serverAfter installation, add to Claude Desktop configuration:
Windows: %APPDATA%\Claude\claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"prozorro": {
"command": "prozorro-mcp-server",
"env": {
"PROZORRO_API_TOKEN": "your-api-token-here",
"PROZORRO_SERVICE_URL": "mcp-api-url-here"
}
}
}
}Restart Claude Desktop and you're ready to use the server!
Note: On Linux/macOS, if you encounter permission issues, you may need to use
sudo npm install -g prozorro-mcp-serveror configure npm to use a user directory.
Method 2: Install from GitHub
Install globally via npm from GitHub:
npm install -g git+https://github.com/VladyslavMykhailyshyn/prozorro-mcp-server.gitAdd to Claude Desktop configuration:
Windows: %APPDATA%\Claude\claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"prozorro": {
"command": "prozorro-mcp-server",
"env": {
"PROZORRO_API_TOKEN": "your-api-token-here",
"PROZORRO_SERVICE_URL": "mcp-api-url-here"
}
}
}
}Restart Claude Desktop - The server will be ready to use!
Method 3: Local Development Installation
Clone the repository:
git clone https://github.com/VladyslavMykhailyshyn/prozorro-mcp-server.git
cd prozorro-mcp-serverInstall dependencies:
npm installBuild the project:
npm run buildAdd to Claude Desktop configuration (use absolute path):
{
"mcpServers": {
"prozorro": {
"command": "node",
"args": ["/absolute/path/to/prozorro-mcp-server/build/index.js"],
"env": {
"PROZORRO_API_TOKEN": "your-api-token-here",
"PROZORRO_SERVICE_URL": "https://prozorro.gov.ua"
}
}
}
}Configuration
The server requires specific environment variables to function correctly. You can set these in the Claude Desktop configuration or in a .env file for local development.
Variable | Description | Required | Example |
| Your Bearer token for the Prozorro API | Yes |
|
| Base URL for the API | Yes |
|
Getting API Credentials
To obtain API credentials and URL for Prozorro:
Contact the author
Retrieve API token and URL
Use the token and URL in your configuration
Common Usage Workflows
Workflow 1: Search Tenders by Organization
1. Use search_tenders with EDRPOUCode to find all tenders from a specific organization
2. Review the returned tender details including dates, amounts, and status
3. Filter results by date range if neededWorkflow 2: Find Recent Tenders
1. Use search_tenders with dateFrom and dateTo parameters
2. Optionally filter by organization name using legalName
3. Limit results for better performanceWorkflow 3: Find the Biggest or Most Recent Tenders
1. Use search_tenders with sortBy: "amount_desc" to get the biggest tenders by value,
or sortBy: "dateModified_desc" for the most recently updated tenders
2. Combine with legalName/EDRPOUCode/tendererName/date filters as needed
3. The top results are guaranteed to be the actual top matches, not just an
arbitrary page of the full result setWorkflow 4: Paginate Through Large Result Sets
1. Call search_tenders with limit: 100 and offset: 0
2. Repeat the call with the same filters/sortBy, increasing offset by 100 each
time, until a page comes back with fewer than 100 results
3. If you need to know the total number of matches upfront (e.g. to answer
"how many tenders in total"), pass includeTotal: true and read total_count
from the response — leave it off for routine paging, since it costs an
extra queryTroubleshooting
Server not appearing in Claude Desktop
Check that the path in
claude_desktop_config.jsonis correctEnsure you've built the project with
npm run buildVerify that Node.js is installed (version 18 or higher required)
Restart Claude Desktop
Check Claude Desktop logs for errors
API Request Failures
Verify your
PROZORRO_API_TOKENis valid and not expiredCheck that
PROZORRO_SERVICE_URLis correctThe Prozorro API may have rate limits - consider adding delays between requests
Network connectivity to prozorro.gov.ua is required
Some tenders might be temporarily unavailable
Authentication Errors
Ensure your API token includes the
Bearerprefix if requiredCheck that your token has the necessary permissions
Verify the token hasn't expired
Development
Project Structure
prozorro-mcp-server/
├── src/
│ ├── index.ts # Main MCP server entry point
│ ├── tenders.ts # Tender search implementation
│ └── types.ts # TypeScript type definitions
├── build/ # Compiled JavaScript (generated)
├── package.json
├── tsconfig.json
└── README.mdRunning in Development Mode
# Watch mode - auto-rebuild on changes
npm run dev
# In another terminal
npm startBuilding for Production
npm run buildAPI Information
This server uses the Prozorro public API to retrieve tender information. For more details about the Prozorro system and available data:
Prozorro Website: https://prozorro.gov.ua/
API Documentation: https://prozorro.gov.ua/api
Data Format: JSON responses with detailed tender information
License
ISC
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Contact
For issues and questions, please use the GitHub Issues page.
Tool Call Examples
Example search_tenders arguments for common queries.
Find all tenders from a specific organization:
{
"EDRPOUCode": "21560045"
}Find tenders by organization name within a date range:
{
"legalName": "Укрпошта",
"dateFrom": "2025-01-01",
"dateTo": "2025-06-30"
}Find the biggest tenders by value:
{
"legalName": "Укрпошта",
"sortBy": "amount_desc",
"limit": 100
}Find the most recently updated tenders:
{
"sortBy": "dateModified_desc",
"limit": 20
}Find an individual entrepreneur (FOP) as a bidder/supplier:
{
"tendererName": "Петренко Іван Іванович"
}Page through a large result set (second page, 100 rows each):
{
"legalName": "Укрпошта",
"sortBy": "amount_desc",
"limit": 100,
"offset": 100
}Get the true total number of matches, not just the current page:
{
"legalName": "Укрпошта",
"includeTotal": true
}Response includes "total_count": 4832 alongside "count" (rows in this page) and "data".
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Tools
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server