关于 Prozorro
Prozorro 是用于分析乌克兰公共采购数据的 MCP 服务和命令行工具。它将指定地区的数据同步到本地数据库,提供招标、供应商、竞争对手、计划和风险分析,无需 API 密钥,也不调用 LLM。
主要功能
- 01按地区和时间同步公开数据
- 02搜索招标和即将进行的采购计划
- 03分析买方、供应商和竞争对手
- 04计算市场指标并识别风险信号
- 05通过 MCP 服务或命令行使用
适用场景
- 01查找指定地区的开放招标及截止日期
- 02在招标发布前查看采购计划
- 03比较供应商中标情况和竞争对手记录
- 04发现值得进一步核查的采购模式
MCP 相关
本地服务通过 stdio 或流式 HTTP 向 MCP 客户端提供采购搜索和分析工具。大多数工具读取本地数据库;stdio 服务还支持同步数据和管理已保存的搜索。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
prozorro-mcp
一个面向 Prozorro(乌克兰公共采购系统)的 MCP 服务和命令行工具。它会保存你所选地区官方开放数据的本地副本。然后,你可以向 AI 助手(Claude、Cursor、VS Code Copilot 等)提问,也可以单独使用 CLI,例如:
- “利沃夫州有哪些开放的实验室试剂招标?截止日期是什么时候?”
- “下个月我所在地区的医院会采购什么?请列出尚未成为招标的计划。”
- “这里谁中标的面粉招标最多?每千克价格是多少?”
- “我们通常与谁竞争(EDRPOU 12345678)?我们击败他们的频率如何?”
- “这家买方有什么风险信号吗:只有一名投标人、某个供应商拿走了大部分资金?”
所有数字都由代码根据数据计算,助手只负责撰写文本。无需 API 密钥:Prozorro API 是公开的,而且这里没有调用任何 LLM。
面向非开发者的乌克兰语分步指南:docs/guide.uk.md。
一分钟试用(打包演示,无需同步)
你需要 uv(或直接运行 pip install prozorro-mcp):
uvx prozorro-mcp search --demo --query борошно --status any
演示内容是利沃夫州一周的真实快照(2026 年 10 月 5 日至 12 日):5,479 个招标,其中 1,120 个有公开投标,另有 1,619 个即将开始的采购计划。联系人信息已移除。
Claude Desktop:一键扩展
下载 prozorro-mcp.mcpb
并打开(或将其拖入“设置” → “扩展”)。Claude Desktop 会自行安装 Python 和程序包,因此无需安装其他内容,也无需编辑配置。在安装对话框中,输入州名(例如 Львівська, Волинська)和历史数据天数。
系统会在后台下载你的地区数据;首次下载完成前,Claude 会提示数据尚未就绪并显示进度。如果设置留空,Claude 会询问要下载哪个州以及多少天的数据。每次启动时都会获取自上次启动以来的更新。之后如需添加地区,可以向 Claude 提问:“下载沃伦州过去两周的数据”。
连接到其他 AI 客户端
服务通过 stdio 在本地运行。选择你的客户端:
Claude Code
claude mcp add prozorro -- uvx prozorro-mcp serve
Claude Desktop(不使用扩展):设置 → 开发者 → 编辑配置。在 Windows 上,配置文件为
%APPDATA%\Claude\claude_desktop_config.json;在 macOS 上为
~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"prozorro": {
"command": "uvx",
"args": ["prozorro-mcp", "serve"]
}
}
}
Cursor(~/.cursor/mcp.json)以及 Windsurf、Cline 和其他客户端:使用与 Claude Desktop 相同的 mcpServers 配置块。
VS Code(.vscode/mcp.json):
{
"servers": {
"prozorro": {
"type": "stdio",
"command": "uvx",
"args": ["prozorro-mcp", "serve"]
}
}
}
要先用演示数据试用,请在 "serve" 后添加 "--demo"。编辑配置后,重启客户端。
浏览器中的 ChatGPT 和 claude.ai 只能连接通过 HTTPS 提供服务的远程服务。请参阅 HTTP 模式。
同步自己的数据
uvx prozorro-mcp sync --region Львівська --days 7
- 地区可以使用任意拼写:
Львів、львовская、Lviv、Kyiv city、Київська。需要多个地区时,可重复使用--region。根据法律,军事单位会隐藏其地址,因此其招标没有地区信息。 使用--region "без регіону"将其添加进来。 - 首次同步会从变更流的最新变更开始向后遍历,因此当前仍开放的招标会在最初几分钟内到达,
并在到达所选时间段的起点时停止。数据繁忙的州,每周数据大约需要 20 分钟(利沃夫:约 5,500 个招标和同等数量的计划,磁盘占用约
350 MB),大部分时间都在等待公共 API 响应;请求会谨慎地以每次 5 个的速度发送,并在失败时重试。
--cpv 33(或--cpv реактиви)只保留你的 类别。 - 后续运行(不带选项运行
prozorro-mcp sync)只会获取自上次运行以来发生变化的数据。 按 Ctrl+C 是安全的:再次运行命令即可从停止处继续。 - 从服务端启动:
prozorro-mcp serve --sync-on-start会在客户端启动服务时于后台获取变更数据(添加--region和--days可扩大覆盖范围)。首次同步前,数据 工具会返回no_data,并提示向用户询问州和时间段;同步期间,结果会带有sync_in_progress。 - 状态:
prozorro-mcp status会显示当前覆盖范围。数据存储在~/.prozorro-mcp/data.db;设置PROZORRO_MCP_DB可更改存储位置。
不使用 AI 客户端
同样的数据也可以输出为表格、CSV(可在 Excel 中打开,西里尔字母显示正常)或 JSON。只需安装一次命令
uv tool install prozorro-mcp,然后:
prozorro-mcp search --cpv реактиви --region Львівська # open tenders, nearest deadline first
prozorro-mcp plans --query "лабораторні" --budget-min 100000 # upcoming purchases
prozorro-mcp flags --buyer 05498849 # red flags for one buyer
prozorro-mcp watch add "реактиви Львів" --cpv 33696 --region Львівська
prozorro-mcp digest --since 24h --format csv --out digest.csv # what is new for your saved searches
每天早上用任务计划程序或 cron 运行 sync 和 digest(指南中有具体说明),就能每天获取一份新招标清单,无需打开任何网站。
工具
11 个工具只读取本地数据库。每个工具都声明了 readOnlyHint: true、
destructiveHint: false、idempotentHint: true 和 openWorldHint: false。本地 stdio 服务中还提供另外 3 个工具,HTTP 模式下不提供,并根据其用途标记:sync_data 会下载数据
(readOnlyHint: false、openWorldHint: true),watch_add 会保存搜索条件,watch_remove 会删除搜索条件
(destructiveHint: true)。只有在用户同意后,服务才会请求助手开始下载。
| 工具 | 返回内容 |
|---|---|
coverage | 已同步的地区、时间段、数量、上次同步时间;以及用于添加更多数据的命令 |
find_entity | 根据名称片段查找买家和供应商的 EDRPOU 代码 |
search_tenders | 按关键词、CPV、地区、状态、金额、截止日期、发布日期搜索招标 |
get_tender | 单个招标:标的、标段、每份投标、获胜者、带直接链接的文件 |
market_overview | 数量和金额、竞争份额、平均投标人数、单价分布、头部买家和获胜者 |
supplier_profile | 中标情况、买家、CPV、中标率、中位折扣 |
buyer_profile | 采购内容、供应商、采购程序构成、单一投标人占比 |
competitors | 在同一招标中投标的对象及正面交锋得分 |
upcoming_plans | 尚未发布招标的年度计划项目 |
red_flags | 以下 4 项标记,每项都附有证据和链接 |
watch_digest | 已保存搜索条件对应的新招标 |
sync_data | 在后台开始下载指定地区或更长时间段的数据;coverage 会显示进度 |
watch_add、watch_remove | 直接在聊天中为 watch_digest 保存或删除搜索条件 |
如果问题需要尚未同步的数据,例如另一个州或更早的时间段,结果会说明这一点,并给出准确的 sync 命令。它不会返回一个看似表示“什么都不存在”的空列表。
数字的定义
- 公开招标:状态为
active.tendering或active.enquiries,且截至最近一次同步时,截止日期尚未到。Prozorro 有时会延迟更新状态。 - 竞争性程序:公开招标、低于门槛采购、报价采购、竞争性对话、框架协议遴选等类似类型。
reporting(直接合同)和negotiation不属于竞争性程序。完整列表见src/prozorro_mcp/models.py。 - 已决标招标:有有效授标的招标。
- 单价:授标金额 ÷ 数量。仅对恰好有一个标的的招标计算,并按完整 CPV 代码和单位分组,因此不会将千克与吨进行比较。其他招标计为
excluded。 - 中标率:中标的已决标招标数 ÷ 参与投标的已决标招标数。投标信息只有在竞拍后才会公开。
- 折扣:(预期金额 − 授标金额)÷ 预期金额,适用于不分标段的竞争性招标。
风险标记
标记是进一步审查的理由,并非不当行为的证据。
| 标记 | 规则(默认值为参数) |
|---|---|
single_bidder | 以仅有一名投标人结束的竞争性程序 |
supplier_concentration | 某供应商获得了采购方超过 50% 的授标金额,且至少有 5 次授标 |
price_above_median | 单价至少高于至少 5 个可比招标(CPV 和单位相同)中位数的 30% |
short_tender_period | 招标期短于 7 天(公开招标)、15 天(欧盟)、3 天(低于门槛采购、报价采购)。这是启发式判断,并非法律审查:战时规则经常变化 |
评估
无需密钥或网络即可运行,所有结果均由代码计算:prozorro-mcp eval --suite all。最新结果见 evals/RESULTS.md。
- 标记:35 个已标注案例,包括接近阈值的反例,例如高于中位数 29% 与 30%,或金额恰好占一半。每种标记的精确率和召回率均为 1.0。
- 地区和 CPV 关键词:94 种拼写,识别率为 98.9%。唯一未识别的项见结果。
- 核对:将分析得出的采购方和类别总额,与对演示快照原始 JSON 的独立重新统计结果进行核对。共 35 个汇总项,0 个不匹配。
HTTP 模式
prozorro-mcp serve --http --host 127.0.0.1 --port 8000 # MCP endpoint: http://127.0.0.1:8000/mcp
相同的工具也通过可流式传输的 HTTP 提供。要从 ChatGPT 或 claude.ai 访问,请使用 HTTPS 反向代理(Caddy、nginx)。版本 1 没有身份验证:数据公开且只读。对外开放前,请在代理上添加速率限制。
限制
- 本地副本:按需同步。整个月的乌克兰数据约需调用公共 API 10 万次,这并非本地使用的预期方式。
- 时间段指最后修改时间:同步涵盖过去 N 天内有变更的招标。仍在更新的旧招标也会一并获取。
- 隐藏地址:Prozorro 中的军事单位招标没有地区信息(参见
--region "без регіону")。 - 按关键词匹配 CPV:匹配官方的 ДК 021 名称。关键词过于宽泛时,请传入代码前缀。工具会回显所用类别。
开发
python -m venv .venv && .venv/bin/pip install -e ".[dev]" # Windows: .venv\Scripts\pip
pytest -q # 228 tests, no network: recorded API responses and built tenders
ruff check .
python scripts/capture_fixtures.py # refresh the recorded API responses
python scripts/build_demo.py # rebuild the demo snapshot (live sync, about 20 minutes)
python scripts/build_mcpb.py # the Claude Desktop extension (needs Node for the official packer)
代码按职责划分:api(数据源客户端)→ sync → store(SQLite)→ analytics(所有数字)→ server(MCP)和 cli。normalize 负责处理地区和 CPV。
路线图
- v2:新增
price_raised_after_signing标记,用于价格因合同修订而上涨的合同。这需要同步合同变更。 - 后续:为 ChatGPT 和 claude.ai 提供托管 HTTP 实例;将 Telegram 或电子邮件提醒作为独立服务;从 EDR 登记册获取公司所有者信息。
- 不计划实现:提供“中标机会”或“推荐投标”。那只不过是把猜测包装成事实。
联系方式
欢迎提供反馈、创意、工作邀约或定制项目(n8n、MCP、AI 自动化):[email protected]。欢迎通过 Issues 提交错误报告和功能请求。
数据与致谢
招标和计划数据来自公开的 Prozorro API。ДК 021 (CPV)名称和地区列表来自 ProzorroUKR/standards (Apache-2.0);请参阅 NOTICE。
MIT 许可证。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。