mcpField
P
Prozorro

Prozorro

本地服务
github.com法律与政务11 周前更新

关于 Prozorro

Prozorro 是用于分析乌克兰公共采购数据的 MCP 服务和命令行工具。它将指定地区的数据同步到本地数据库,提供招标、供应商、竞争对手、计划和风险分析,无需 API 密钥,也不调用 LLM。

主要功能

  1. 01按地区和时间同步公开数据
  2. 02搜索招标和即将进行的采购计划
  3. 03分析买方、供应商和竞争对手
  4. 04计算市场指标并识别风险信号
  5. 05通过 MCP 服务或命令行使用

适用场景

  1. 01查找指定地区的开放招标及截止日期
  2. 02在招标发布前查看采购计划
  3. 03比较供应商中标情况和竞争对手记录
  4. 04发现值得进一步核查的采购模式

MCP 相关

本地服务通过 stdio 或流式 HTTP 向 MCP 客户端提供采购搜索和分析工具。大多数工具读取本地数据库;stdio 服务还支持同步数据和管理已保存的搜索。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"kotiniiqq-prozorro": {
"command": "uvx",
"args": [
"prozorro-mcp"
]
}
}
}
启动命令uvx prozorro-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypiprozorro-mcp0.1.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

prozorro-mcp

一个面向 Prozorro(乌克兰公共采购系统)的 MCP 服务和命令行工具。它会保存你所选地区官方开放数据的本地副本。然后,你可以向 AI 助手(Claude、Cursor、VS Code Copilot 等)提问,也可以单独使用 CLI,例如:

  • “利沃夫州有哪些开放的实验室试剂招标?截止日期是什么时候?”
  • “下个月我所在地区的医院会采购什么?请列出尚未成为招标的计划。”
  • “这里谁中标的面粉招标最多?每千克价格是多少?”
  • “我们通常与谁竞争(EDRPOU 12345678)?我们击败他们的频率如何?”
  • “这家买方有什么风险信号吗:只有一名投标人、某个供应商拿走了大部分资金?”

所有数字都由代码根据数据计算,助手只负责撰写文本。无需 API 密钥:Prozorro API 是公开的,而且这里没有调用任何 LLM。

prozorro-mcp 流程

面向非开发者的乌克兰语分步指南:docs/guide.uk.md。

Prozorro MCP 服务

一分钟试用(打包演示,无需同步)

你需要 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 许可证。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。