Content
<!-- mcp-name: io.github.atomno-mcp/mcp-zakupki -->
# Tool List
> **MCP server for Russian government procurement data** (44-FZ / 223-FZ /
> 615-PP) — find tenders, customer/supplier history, OKPD2 lookup directly
> from Cursor, Claude Desktop, Cline, Goose and any MCP-compatible client.
[](https://pypi.org/project/atomno-mcp-zakupki/)
[](LICENSE)
[](https://www.python.org/downloads/)
[](https://modelcontextprotocol.io)
`atomno-mcp-zakupki` is an [MCP](https://modelcontextprotocol.io) server
(Model Context Protocol — an open protocol for connecting LLM clients to
external tools), which turns the portal [`zakupki.gov.ru`](https://zakupki.gov.ru) into a set of tools for AI assistants.
## Purpose
| Pain | Currently | With `atomno-mcp-zakupki` |
|---|---|---|
| Every morning, 30–60 minutes to sift through EIS manually or pay 16–67 K ₽/year for Kontur / Seldon | Excel summaries + email notifications | One MCP call from Cursor → LLM filters, explains, and compares |
| Python scripts on `ftp.zakupki.gov.ru` broke in January 2025 | Searching for a replacement through commercial APIs | Hybrid providers: DaMIA, GosPlan API v2, navodki; optional EIS token |
| AI agent cannot read tender itself | Copy-paste into chat | `get_tender(reg_number)` returns the entire card as JSON |
## What's Inside (Open Client)
| Tool | Tier | What it does |
|---|---|---|
| `search_tenders` | **Self-hosted** | Search for tenders by 30+ filters. Requires DaMIA / GosPlan / navodki API key. |
| `get_tender` | **Self-hosted** | Tender card by registry number. Requires provider API key. |
| `lookup_okpd2` | **Free** | Search for OKPD2 / KTRU code by text (local directory, no network). |
| `get_customer_history` | **Pro hosted** | Customer procurement history — only `MCP_ZAKUPKI_API_KEY`. |
| `get_supplier_stats` | **Pro hosted** | Supplier statistics — only `MCP_ZAKUPKI_API_KEY`. |
> **Production:** recommended corporate API Atomno (`MCP_ZAKUPKI_API_KEY` on
> [`api.atomno-mcp.ru/zakupki/`](https://atomno-mcp.ru/pricing#zakupki-pro)).
> Self-hosted (own DaMIA/GosPlan key) — for development and pilots; aggregated
> analytics and extended reports available through corporate endpoint.
> **v0.1.1:** unofficial HTML parsing of EIS removed. Tools `get_customer_history`
> and `get_supplier_stats` require a corporate API key.
## Quick Start
### 1. Installation
```bash
# Using uvx (recommended — no system installation):
uvx atomno-mcp-zakupki --help
# Using pipx:
pipx install atomno-mcp-zakupki
atomno-mcp-zakupki --version
# In a project virtual environment:
pip install atomno-mcp-zakupki
```
Optional extra for official EIS token (requires Ministry of Finance certificate):
```bash
pip install "atomno-mcp-zakupki[eis-official]"
```
### 2. Configuration
**For production** — get a hosted Pro key:
[`atomno-mcp.ru/pricing#zakupki-pro`](https://atomno-mcp.ru/pricing#zakupki-pro)
→ `MCP_ZAKUPKI_API_KEY`.
**For development (self-hosted)** — key of one API provider
(DaMIA / GosPlan / navodki) for `search_tenders` and `get_tender`.
Without keys, only `lookup_okpd2` works (local OKPD2 directory).
> **HTML fallback removed in v0.1.1.** Parsing `zakupki.gov.ru` without API —
> only on hosted backend (private server, Phase 2).
| Variable | Description | Where to get |
|---|---|---|
| `MCP_ZAKUPKI_DAMIA_KEY` | DaMIA API-Zakupki API key | <https://damia.ru/apizakupki> (free tariff "Start" ≈ 100 requests/month) |
| `MCP_ZAKUPKI_GOSPLAN_KEY` | GosPlan API v2 API key | <https://wiki.gosplan.info> (sandbox without registration: `fz44test.gosplan.info`) |
| `MCP_ZAKUPKI_NAVODKI_KEY` | navodki.ru API key | <https://navodki.ru> |
| `MCP_ZAKUPKI_EIS_TOKEN` | EIS token (via `pmd/auth/welcome`) | <https://zakupki.gov.ru/pmd/auth/welcome> + Ministry of Finance certificate |
| `MCP_ZAKUPKI_API_KEY` | **Pro hosted** — required for `get_customer_history` / `get_supplier_stats` and future AI tools | <https://atomno-mcp.ru/pricing#zakupki-pro> |
| `MCP_ZAKUPKI_LOG_LEVEL` | DEBUG / INFO / WARNING / ERROR / CRITICAL | default `INFO` |
| `MCP_ZAKUPKI_CACHE_DB` | Path to SQLite cache | default `./mcp_zakupki_cache.sqlite` |
| `MCP_ZAKUPKI_PROVIDERS` | Fallback chain (BYOK) | default `damia,gosplan,navodki` |
| `MCP_ZAKUPKI_RPS` | Request limit per minute | default `30` |
### 3. Connecting to Cursor
Open `~/.cursor/mcp.json` (or `Cursor → Settings → Model Context
Protocol`) and add:
```json
{
"mcpServers": {
"zakupki": {
"command": "uvx",
"args": ["atomno-mcp-zakupki"],
"env": {
"MCP_ZAKUPKI_DAMIA_KEY": "your-damia-key-here",
"MCP_ZAKUPKI_LOG_LEVEL": "INFO"
}
}
}
}
```
### 4. Connecting to Claude Desktop
`%APPDATA%\Claude\claude_desktop_config.json` (Windows) or
`~/Library/Application Support/Claude/claude_desktop_config.json` (macOS):
```json
{
"mcpServers": {
"zakupki": {
"command": "uvx",
"args": ["atomno-mcp-zakupki"]
}
}
}
```
### 5. Connecting to Cline / Goose / Kiro
Any MCP client: run `atomno-mcp-zakupki` (default stdio
transport) and register its launch command in the config.
For HTTP mode:
```bash
atomno-mcp-zakupki --transport http --host 127.0.0.1 --port 8765
```
## Examples
### Morning Tender Monitoring
```
[Cursor]: Show fresh tenders for today by OKPD2 62.0 in UrFO
with NMCK 500K-3M ₽, SMP-only.
→ search_tenders(
okpd2_codes=["62.01", "62.02", "62.09"],
regions=["66", "74", "59", "45", "72", "86", "89"],
price_min_rub=500000, price_max_rub=3000000,
smp_only=True,
publish_date_from="2026-04-26",
status=["applications_open"]
)
← 7 tenders found in 412 ms.
```
### Tender Card
```
[Cursor]: Tell me in detail about registry number 0173100007426000018.
→ get_tender(reg_number="0173100007426000018", include_documents=True)
← All fields: customer, NMCK, documentation (PDF), deadlines, platform...
```
### Customer Analysis (Pro)
```
[Cursor]: Who is INN 7449023800? Show procurement history for 2 years.
→ get_customer_history(inn="7449023800", period_from="2024-01-01")
← Requires MCP_ZAKUPKI_API_KEY (hosted Pro).
```
### OKPD2 Code Selection
```
[Cursor]: What OKPD2 is for web portal development?
→ lookup_okpd2(query="web portal development", limit=5)
← [{"code":"62.01.11.000","name":"IS design services","match":0.94}, ...]
```
## CLI
```text
atomno-mcp-zakupki --help
atomno-mcp-zakupki --version
atomno-mcp-zakupki --check-config
atomno-mcp-zakupki --log-level DEBUG
atomno-mcp-zakupki --transport http --host 127.0.0.1 --port 8765
atomno-mcp-zakupki --transport sse --port 9000
```
Full list of options in `atomno-mcp-zakupki --help`.
## Data Sources
| Provider | Tariff | What it covers | When used |
|---|---|---|---|
| **DaMIA API-Zakupki** | Free "Start" ≈ 100/month → per-request | 44-FZ + 223-FZ + 615-PP, methods `zakupka`, `contract`, `zsearch`, `customer`, `eruz`, `rnp` | Default 1st (if `MCP_ZAKUPKI_DAMIA_KEY` exists) |
| **GosPlan API v2** | Free sandbox + paid plans | 44-FZ (Beta), 615-PP (Pre1), 223-FZ (Pre2) | Fallback 2nd |
| **navodki.ru** | Free | 44-FZ + 223-FZ | Fallback 3rd |
| **EIS official** (optional) | Free for individuals with token | SOAP `int.zakupki.gov.ru` | If `MCP_ZAKUPKI_EIS_TOKEN` exists |
BYOK chain: `MCP_ZAKUPKI_PROVIDERS=damia,gosplan,navodki`.
HTML scraping **removed** in v0.1.1 — use hosted Pro.
If none respond, the tool returns a typed error
`provider_unavailable`.
## Architecture (briefly)
```
AI client (Cursor / Claude / Cline) ──MCP──▶ atomno-mcp-zakupki
│
├──▶ lookup_okpd2 (offline)
├──▶ Self-hosted API (search/get)
└──▶ hosted Pro (api.atomno-mcp.ru) — production
```
All providers implement a common `BaseProvider` interface. Responses
are normalized into Pydantic models `Tender`, `Customer`, `Document`,
`OrgHistorySummary`.
## Development
```bash
git clone https://github.com/atomno-mcp/mcp-zakupki.git
cd mcp-zakupki
python -m venv .venv
source .venv/bin/activate # Linux/macOS
# .venv\Scripts\activate # Windows
pip install -e ".[dev]"
pytest -v --cov=src/mcp_zakupki
ruff check src tests
```
## Disclaimer
- The service is **not affiliated** with the Ministry of Finance of the Russian Federation, FAS, EIS operator or specific ETPs.
- EIS data is obtained through **licensed API providers**, official EIS token or **hosted backend** Atomno — not through scraping open-client.
- HTML fallback was removed in v0.1.1 (compliance with ToS of the procurement registry).
- Use at your own risk. Decisions to submit tender applications are the user's responsibility.
## License
[MIT](LICENSE) 2026 Atomno.
## MCP Server Family by Atomno
`atomno-mcp-zakupki` is the fifth server in the `atomno-mcp-*` family:
- [`atomno-mcp-cbr-rates`](https://github.com/atomno-mcp/mcp-cbr-rates) — Central Bank of Russia exchange rates
- [`atomno-mcp-egrul`](https://github.com/atomno-mcp/mcp-egrul) — legal entity details from the Unified State Register of Legal Entities
- [`atomno-mcp-fns-check`](https://github.com/atomno-mcp/mcp-fns-check) — tax reliability
- [`atomno-mcp-fssp`](https://github.com/atomno-mcp/mcp-fssp) — debts and executive proceedings (in preparation)
- **`atomno-mcp-zakupki`** — *you are here*
- [`atomno-mcp-rosreestr`](https://github.com/atomno-mcp/mcp-rosreestr) — real estate, cadastre (in preparation)
- [`atomno-mcp-sudact`](https://github.com/atomno-mcp/mcp-sudact) — judicial practice (in preparation)
Connect all together and get a complete B2G dossier on the tender in one prompt.