关于 vergabe-api: German public procurement notices
vergabe-api 将德国公共采购公告整理为标准化 JSON,供软件 Agent 和采购工具检索与处理。它提供 CPV、NUTS、截止日期等字段,以及免费示例和按调用付费的查询。
主要功能
- 01公告标准化为 JSON
- 02按 CPV、NUTS 和日期筛选
- 03提供标段、截止日期和授标信息
- 04免费统计与示例接口
- 05x402 按调用支付
适用场景
- 01按地区和采购类别筛选招标
- 02查找即将截止的投标机会
- 03获取单条公告的完整记录
MCP 相关
提供远程 Streamable HTTP MCP 服务,包含免费示例、统计和 API 说明工具;远程付费工具仅返回支付要求。本地 stdio MCP 服务可用自有钱包按调用支付并执行公告搜索和详情查询。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://vergabe-api.applehorsefrog.workers.dev/mcpclaude mcp add --transport http applehorsefrog-vergabe-api https://vergabe-api.applehorsefrog.workers.dev/mcp{"mcpServers":{"applehorsefrog-vergabe-api":{"type":"http","url":"https://vergabe-api.applehorsefrog.workers.dev/mcp"}}}在 Cursor 中打开{"servers":{"applehorsefrog-vergabe-api":{"type":"http","url":"https://vergabe-api.applehorsefrog.workers.dev/mcp"}}}在 VS Code 中打开{"mcpServers":{"applehorsefrog-vergabe-api":{"type":"http","url":"https://vergabe-api.applehorsefrog.workers.dev/mcp"}}}{"mcpServers":{"applehorsefrog-vergabe-api":{"serverUrl":"https://vergabe-api.applehorsefrog.workers.dev/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
5| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| cpv | string | 否 | CPV 代码或前缀,例如 72(IT)、45(建筑) |
详细介绍
vergabe-api
德国公共采购公告(涵盖欧盟门槛以上和以下),以标准化 JSON API 的形式提供给软件 Agent 和采购工具。通过 x402 按次付费(HTTP 402,USDC)。无需账户、API 密钥或订阅。
基础 URL:https://vergabe-api.applehorsefrog.workers.dev(之后将启用 viono-insights.de 下的品牌域名)。自 2026-09-14 起,款项通过 Base 主网以 USDC 结算;支付协调方为 PayAI。
你将获得什么
德国官方公告服务(Datenservice Öffentlicher Einkauf,eForms-DE)每天发布约 1,000 条公告。原始数据源是每天 20 MB 的 XML 文件 ZIP 包,其中的机构联系方式、标段、截止日期和分类分散在 UBL 扩展中。此 API 会将每条公告转换为一条扁平记录:
| 字段 | 含义 |
|---|---|
id, notice_id, version | 公告 UUID 和版本 |
published, issue_date | 导出文件的发布日期、公告中的签发日期 |
kind | competition(招标公告)、result(授标公告)、planning(规划)、change(变更) |
notice_type, subtype, procedure, legal_basis, nature | eForms 代码(cn-standard、open、vgv、works 等) |
title, description | 德语文本,已移除个人联系方式 |
cpv_main, cpv_additional | 不含校验位的 CPV 代码 |
buyer_name, buyer_type, buyer_city, buyer_postal, buyer_nuts, buyer_website | 招标机构(仅组织级信息) |
place_nuts, place_city | 履行地点 |
estimated_value, currency | 如有注明 |
deadline_date, deadline_time, deadline_kind | 最早的标段截止日期;tender 或 participation |
documents_url, submission_url | 招标文件所在位置 |
lots | 标段数组,包含标题、CPV、NUTS、金额、截止日期、期限 |
winners, total_awarded | 适用于授标公告,仅含组织名称 |
source_url | oeffentlichevergabe.de 上的原始公告 |
某个示例日期(2026-09-10)的覆盖情况:1,067 条公告,589 条招标公告,其中 569 条有提交截止日期,1,036 条包含 CPV,985 条包含 NUTS。
端点
| 端点 | 价格 | 说明 |
|---|---|---|
GET / | 免费 | 服务描述 |
GET /openapi.json | 免费 | OpenAPI 3.1 |
GET /v1/stats | 免费 | 最近 30 天每天的公告数量 |
GET /v1/sample?cpv=72 | 免费 | 最新的 5 条招标公告,精简字段 |
GET /v1/notices | $0.01 | 筛选列表,最多 100 条记录 |
GET /v1/notice/{id} | $0.002 | 单条完整记录 |
POST /mcp | 免费 | 远程 MCP 服务(Streamable HTTP),提供免费工具 |
GET /.well-known/x402 | 免费 | x402 发现清单 |
/v1/notices 的筛选条件
kind(默认为 competition;可选 result、planning、change、all)、cpv(代码或前缀,以逗号分隔:45,7131)、nuts(前缀:DE2,DE1)、q(标题、描述、招标方中的子字符串)、since / until(发布日期)、deadline_after / deadline_before、nature、procedure、legal_basis、buyer_type、min_value、limit(最多 100)、offset(最多 5000)、fields=full(所有列,包括标段)、sort=deadline。
GET /v1/notices?cpv=45,71&nuts=DE2&deadline_after=2026-09-20&limit=20
GET /v1/notices?q=Photovoltaik&since=2026-09-01&fields=full
GET /v1/notices?kind=result&cpv=72&since=2026-09-01
使用 x402 付费
未付款的请求会返回 402,并附带 PAYMENT-REQUIRED 标头,其中说明金额(USDC)、网络和收款地址。任何 x402 客户端都可以自动处理,例如 @x402/fetch:
import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm";
import { privateKeyToAccount } from "viem/accounts";
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`); // holds USDC on Base
const fetchWithPay = wrapFetchWithPaymentFromConfig(fetch, {
schemes: [{ network: "eip155:8453", client: new ExactEvmScheme(account) }],
});
const r = await fetchWithPay("https://vergabe-api.applehorsefrog.workers.dev/v1/notices?cpv=72");
console.log(await r.json());
价格以 USD 计价,并通过 Base(eip155:8453)以 USDC 结算;我们不收取其他费用。在 wrangler.jsonc 中设置 X402_NETWORK=eip155:84532 和 X402_FACILITATOR=https://x402.org/facilitator,即可在 Base Sepolia 上运行同一段代码。
MCP 服务
通过 MCP 客户端(Claude Desktop、Claude Code、Cursor 或任何 MCP 主机)使用数据有两种方式:
远程,仅限免费工具(无需安装):Streamable HTTP 端点 https://vergabe-api.applehorsefrog.workers.dev/mcp,提供 sample_tenders、tender_stats、describe_api。付费工具也会在此列出,但只返回付款要求,因为远程服务没有钱包。
本地,提供付费工具(stdio,Node 20+):客户端从你控制的钱包中按次付款。
{
"mcpServers": {
"vergabe": {
"command": "npx",
"args": ["-y", "github:applehorsefrog/vergabe-api"],
"env": { "VERGABE_PAYER_KEY": "0x<private key of a wallet holding USDC on Base>" }
}
}
}
工具:search_tenders(每次调用 $0.01,支持 /v1/notices 的所有筛选条件)、get_tender($0.002)、sample_tenders、tender_stats、describe_api(免费)。如果未设置 VERGABE_PAYER_KEY,付费工具会返回 x402 付款要求和 HTTP URL,而不是数据。请为该密钥使用余额较低的专用钱包;服务端绝不会将密钥发送到任何地方,只会为每次调用的确切价格签署 USDC 转账授权(EIP-3009)。源文件:mcp/server.mjs。
数据来源、许可、隐私
数据:Datenservice Öffentlicher Einkauf,https://oeffentlichevergabe.de,以 CC0 1.0 发布。每个响应都带有 X-Data-Source 和 X-Data-License 标头。本仓库中的代码采用 MIT 许可。
导入期间会移除联系人、电子邮件地址、电话号码和传真号码(etl/etl.py),包括结构化字段和自由文本中的内容。仅提供组织层面的数据。如果你发现有遗漏的个人数据,请提交 issue,我们会将其移除。
这是一项技术数据服务,不构成法律建议。投标前必须向源网站核实截止日期和条件。
运行方式
src/index.ts:Cloudflare Worker(Hono),使用@x402/hono付款中间件、D1(SQLite)数据库和远程 MCP 端点。mcp/server.mjs:本地 MCP 服务(stdio),使用@x402/fetch为付费端点付款。etl/etl.py:下载每日 eForms ZIP 文件,使用 lxml 解析、清除个人数据,并写入INSERT语句。.github/workflows/daily-etl.yml:每天运行两次 ETL(06:30 和 14:00 UTC),重新导入最近三天的数据,并使用wrangler d1 execute加载行数据。
本地开发:
npm install
npx wrangler d1 execute vergabe --local --file=schema.sql
python etl/etl.py --day 2026-09-10 --out etl/out/d.sql && for f in etl/out/d*.sql; do npx wrangler d1 execute vergabe --local --file=$f; done
npx wrangler dev
服务提供方、法律声明、隐私
由 Dr. Josua Decker、Viono Insights(https://viono-insights.de)运营。法律声明(Impressum,§ 5 DDG):https://viono-insights.de/impressum.html,也可通过 GET /impressum 访问。此 API 的隐私声明(GDPR 第 13 条):GET /datenschutz。联系方式:[email protected]。发布本仓库的 GitHub 账户是一个自动化账户,由服务提供方使用 Claude 运营。
说明
本服务是在 Claude 的大量 AI 协助下构建的;服务提供方会对其进行审核并承担责任。欢迎提交 issue 和 pull request;自动化贡献会注明其性质。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。