政府采购数据访问服务器

一个为AI模型提供乌克兰政府采购数据无缝访问的MCP服务器,支持高级搜索、排序和分页功能。

  • by VladyslavMykhailyshyn
  • TypeScript
  • 本地部署
  • 12 星标
  • 更新于
在 GitHub 查看 VladyslavMykhailyshyn/prozorro-mcp-server

使用说明

Prozorro MCP服务器

模型上下文协议(MCP)服务器,为人工智能模型提供无缝访问乌克兰政府采购数据的能力 窗口 -乌克兰的公共采购制度。

❗❗❗ 提供所有可用的功能需要有一个代理服务器和数据库,所以现在MCP API不公开。若要获取API URL和API令牌,请与作者联系。

特性

  • 🔍 搜索投标:按EDRPOU代码、法定名称、投标人/供应商名称或日期范围提供高级搜索功能
  • ↕️ 服务器端排序:按金额或上次修改日期对结果进行排序,因此“最大”/“最新”查询返回实际的顶部结果,而不是任意页面
  • 📄 分页:通过页面浏览大于100行的结果集 offset
  • ⚡ 快:API与Prozorro的公共采购数据库直接集成
  • 🛠️ 易于集成:使用Claude Desktop和其他MCP客户端进行简单设置

可用工具

search_tenders

根据各种标准搜索政府招标(目前只有2025年的数据)。

参数:

  • EDRPOUCode (字符串,可选):采购组织的唯一标识符代码(乌克兰税务ID)
  • legalName (string,可选):与采购组织的法定名称匹配的子字符串
  • tendererName (string,可选):与投标人/供应商/投标人名称(非采购实体)匹配的子字符串。使用此功能查找作为投标人的个体企业家(FOP)——请参阅 已知限制 在......下面
  • dateFrom (字符串,可选):搜索的开始日期(ISO 8601格式,例如。, 2025-01-01)
  • dateTo (字符串,可选):搜索的结束日期(ISO 8601格式,例如。, 2025-12-31)
  • sortBy (字符串,可选):其中之一 amount_desc, amount_asc, dateModified_desc, dateModified_asc排序是在分页之前在服务器端对整个匹配数据集进行的,例如。 amount_desc 即使有数千场比赛,也能可靠地返回最大的投标。
  • offset (number,可选):要跳过的记录数,用于分页超过第一条的记录 limit 结果(默认值:0)
  • includeTotal (boolean,可选):如果为true,则响应包括 total_count --所有页面上匹配结果的真实总数。需要额外的服务器端查询,因此它是可选的;在常规分页中省略它(默认值:false)
  • limit (number,可选):每页返回的最大记录数(默认值:100,最大值:100——服务器硬上限为100,不管请求的值是多少;使用 offset 获取其他页面)

退货: 一个物体 data (一系列包含详细信息的招标对象,包括招标ID、标题、组织详细信息、日期和采购状态),以及 count (本页中的行), total_count (真实总数与所有页面的过滤器匹配-- null 除非 includeTotal 已设置), limit_applied, offset_applied,以及 sort_applied.

已知限制

  • 个体企业家(FOP):Prozorro的公共数据源掩盖了个人企业家标识符ID(EDRPOU风格的代码) 0000000000 为了隐私。这意味着 EDRPOUCode/基于投标人ID的搜索 不 可靠地找到FOP。使用 tendererName (子字符串匹配)相反,FOP几乎总是以投标人/供应商(投标人)的身份出现,而不是以采购实体的身份出现。

安装

方法1:从npm安装(推荐)

安装MCP服务器最简单的方法是通过npm:

npm install -g prozorro-mcp-server

安装后,添加到Claude Desktop配置:

视窗: %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"
      }
    }
  }
}

重新启动Claude Desktop,您就可以使用服务器了!

备注:在Linux/macOS上,如果您遇到权限问题,可能需要使用 sudo npm install -g prozorro-mcp-server 或者配置npm使用用户目录。

方法2:从GitHub安装

  1. 从GitHub通过npm全局安装:
npm install -g git+https://github.com/VladyslavMykhailyshyn/prozorro-mcp-server.git
  1. 添加到Claude桌面配置:

视窗: %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"
      }
    }
  }
}
  1. 重新启动克劳德桌面 -服务器将准备就绪!

方法3:本地开发安装

  1. 克隆存储库:
git clone https://github.com/VladyslavMykhailyshyn/prozorro-mcp-server.git
cd prozorro-mcp-server
  1. 安装依赖项:
npm install
  1. 构建项目:
npm run build
  1. 添加到Claude桌面配置 (使用绝对路径):
{
  "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"
      }
    }
  }
}

配置

服务器需要特定的环境变量才能正常运行。您可以在Claude Desktop配置或 .env 本地开发文件。

变量 描述 必填 示例
PROZORRO_API_TOKEN 您的Prozorro API Bearer代币 是 Bearer abc123...
PROZORRO_SERVICE_URL API的基本URL 是 https://mcp-service-url....

正在获取API凭据

要获取Prozorro的API凭据和URL,请执行以下操作:

  1. 联系作者
  2. 检索API令牌和URL
  3. 在配置中使用令牌和URL

常用工作流

工作流程1:按组织搜索标书

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 needed

工作流程2:查找最近的投标

1. Use search_tenders with dateFrom and dateTo parameters
2. Optionally filter by organization name using legalName
3. Limit results for better performance

工作流程3:查找最大或最近的投标

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 set

工作流程4:遍历大型结果集

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 query

故障排除

服务器未出现在Claude Desktop中

  1. 检查路径是否正确 claude_desktop_config.json 是正确的
  2. 确保您已使用以下工具构建了项目 npm run build
  3. 验证是否安装了Node.js(需要版本18或更高版本)
  4. 重新启动克劳德桌面
  5. 检查Claude Desktop日志是否有错误

API请求失败

  • 验证您的 PROZORRO_API_TOKEN 有效且未过期
  • 检查一下 PROZORRO_SERVICE_URL 是正确的
  • Prozorro API可能有速率限制-请考虑在请求之间添加延迟
  • 需要连接到prozorro.gov.ua的网络
  • 部分标书可能暂时无法获取

身份验证错误

  • 确保您的API令牌包括 Bearer 前缀(如果需要)
  • 检查您的令牌是否具有必要的权限
  • 验证令牌是否未过期

发展

项目结构

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.md

以开发模式运行

# Watch mode - auto-rebuild on changes
npm run dev

# In another terminal
npm start

生产大楼

npm run build

API信息

该服务器使用Prozorro公共API检索投标信息。有关Prozorro系统和可用数据的更多详细信息:

  • Prozorro网站: https://prozorro.gov.ua/
  • API文档: https://prozorro.gov.ua/api
  • 数据格式:包含详细招标信息的JSON响应

许可证

国际学生中心

贡献

欢迎投稿!请随时提交拉取请求。

联系

有关问题和疑问,请使用 GitHub问题 页面。

工具调用示例

示例 search_tenders 常见查询的参数。

查找特定组织的所有投标书:

{
  "EDRPOUCode": "21560045"
}

按日期范围内的组织名称查找标书:

{
  "legalName": "Укрпошта",
  "dateFrom": "2025-01-01",
  "dateTo": "2025-06-30"
}

按价值查找最大的投标:

{
  "legalName": "Укрпошта",
  "sortBy": "amount_desc",
  "limit": 100
}

查找最新更新的标书:

{
  "sortBy": "dateModified_desc",
  "limit": 20
}

寻找个人企业家(FOP)作为投标人/供应商:

{
  "tendererName": "Петренко Іван Іванович"
}

浏览大型结果集(第二页,每页100行):

{
  "legalName": "Укрпошта",
  "sortBy": "amount_desc",
  "limit": 100,
  "offset": 100
}

获取真实的匹配总数,而不仅仅是当前页面:

{
  "legalName": "Укрпошта",
  "includeTotal": true
}

响应包括 "total_count": 4832 旁边 "count" (本页中的行)和 "data".