关于 Italy Tenders
Italy Tenders 是面向意大利公共采购公告的 MCP 服务,数据来自 ANAC 的月度开放数据,并覆盖近期滚动时间窗口。它支持按关键词、CPV、采购方、地区和日期搜索,也可按 CIG 获取记录详情。
主要功能
- 01按关键词、CPV、采购方和地区搜索
- 02按发布日期范围筛选公告
- 03按 CIG 获取公告详情
- 04返回金额、状态、截止日期和结果
- 05标示已加载数据的时间窗口
适用场景
- 01查找特定地区或机构发布的采购公告
- 02按 CPV 分类筛选招标机会
- 03核对单个 CIG 公告及其结果
- 04区分无匹配结果与日期范围未加载
MCP 相关
向 MCP 客户端提供 ANAC 意大利采购公告的搜索和详情工具。该包依赖 Pipeworx 网关中的数据存储;独立安装没有可查询数据。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://gateway.pipeworx.io/italy-tenders/mcpclaude mcp add --transport http pipeworx-io-italy-tenders https://gateway.pipeworx.io/italy-tenders/mcp{"mcpServers":{"pipeworx-io-italy-tenders":{"type":"http","url":"https://gateway.pipeworx.io/italy-tenders/mcp"}}}在 Cursor 中打开{"servers":{"pipeworx-io-italy-tenders":{"type":"http","url":"https://gateway.pipeworx.io/italy-tenders/mcp"}}}在 VS Code 中打开{"mcpServers":{"pipeworx-io-italy-tenders":{"type":"http","url":"https://gateway.pipeworx.io/italy-tenders/mcp"}}}{"mcpServers":{"pipeworx-io-italy-tenders":{"serverUrl":"https://gateway.pipeworx.io/italy-tenders/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
43| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| q | string | 否 | question 的别名。 |
| ask | string | 否 | question 的别名。 |
| text | string | 否 | question 的别名。 |
| input | string | 否 | question 的别名。 |
| packs | array | 否 | 可选。将路由限制为这些包的 slug(例如 ["sec-form-d","sec-13f"]),路由器随后只会从这些包中的工具进行选择。省略则使用默认的完整目录路由。Slug 可从 list_packs / search_packs / https://pipeworx.io/directory 获取;未列出或未知的 slug 会被忽略,并在 _meta.pack_scope.ignored 中列出。如果没有任何 slug 能匹配问题,则会在整个目录中路由,并设置 _meta.pack_scope.full_catalog:true(绝不会返回空答案)。 |
| query | string | 否 | question 的别名。 |
| prompt | string | 否 | question 的别名。 |
| message | string | 否 | question 的别名。 |
| question | string | 是 | 用自然语言表达的问题或请求。支持 query、q、prompt、text、input、ask、message 作为别名。 |
详细介绍
@pipeworx/italy-tenders
来自 ANAC(Autorità Nazionale Anticorruzione)的意大利公共采购招标公告。该机构是负责运营意大利招标/合同登记库的国家反腐败主管部门。Fleet #3091。
属于 Pipeworx —— 一个将 AI Agent 连接到 1807+ 个实时数据源的 MCP 网关。这是一个独立的非官方集成,与上游提供方无关联、未获其认可,也并非由其发布。
工具
it_tender_search(query?, cpv?, buyer?, province?, date_from?, date_to?, limit?)-- 按自由文本关键词(标题 + CPV 类别描述)、CPV 分类代码/前缀、采购方(合同授予机构)名称子串、意大利省份和发布日期范围搜索招标公告(默认为最近 90 天)。返回每条公告的 CIG、标题、采购方、省份/大区、合同类型、金额(EUR)、状态、CPV、发布日期、投标截止日期,以及 ANAC 已记录的中标结果。it_tender_detail(cig)-- 根据 CIG(Codice Identificativo Gara)查询单条公告的完整记录,包括采购方税号、成本中心、程序类型、实施方式、标段数和结果通报日期。
每个响应都包含 source、source_url、licence、data_as_of,以及(在 it_tender_search/无匹配结果的响应中)window_from/window_to —— 即此数据包当前持有数据的月份范围 —— 以便调用方区分“该主题没有招标”与“未加载该日期范围的数据”。
身份验证
无需密钥。这些工具只能通过持有数据的 Pipeworx 网关提供服务;独立安装没有可读取的数据,因此每个工具都会返回清晰的“store is not bound in this runtime”错误,而不是空列表。
数据来源
-
Autorità Nazionale Anticorruzione (ANAC) —— 意大利国家反腐败主管部门,负责运营该国公共采购公告登记库。ANAC 将登记库作为开放数据发布(dati.anticorruzione.it,一个 CKAN 门户),但仅提供每月批量数据:所有合同资源的
datastore_active: false(不支持服务器端搜索/筛选),因此此数据包会根据 ANAC 自己的“cig-YYYY”月度 CSV 构建数据存储(scripts/italy-tenders/load-data.mjs),而不是逐请求代理。ANAC 唯一提供的实时端点是按单个 CIG 查询,且没有发现路径 —— 无法用于关键词/采购方/CPV/日期搜索,而这正是此数据包提供的功能。许可(逐字引用自 ANAC 自有 CKAN
package_showAPI,已于 2026-10-15 实时核验): “cig-YYYY”软件包报告"license_title": "Creative Commons Attribution Share-Alike 4.0"、"license_id": "CC-BY-SA-4.0";每月资源还额外包含"license_type": "https://w3id.org/italia/controlled-vocabulary/licences/A31_CCBYSA40"。 CC-BY-SA-4.0 明确允许重复使用和再分发,但须注明出处并以相同方式共享 —— “镜像需要获取重复使用授权”规则(mirror-needs-grant-proxy-does-not,Bruce,2026-09-08)不适用于此情况,因为许可中已包含授权。每个响应的source/source_url字段都会注明出处。
已知局限——扩展此数据包前请先阅读
此数据包保存的是滚动的近期数据窗口,而非 ANAC 的完整历史记录。 cig 登记数据可追溯至 2007 年(ANAC 门户上提供 cig-2007 至 cig-2025 的独立年度数据集);仅一个月的 CSV 就有约 11.5 万至 12 万行/未压缩约 100 MB(根据 2025 年 9 月的实时测量)。将约 19 年的完整历史记录载入一个 D1 数据库,其规模将远超此处所有其他由存储支持的数据包。每次无匹配结果时,it_tender_search/it_tender_detail 都会报告已载入的数据窗口(window_from/window_to,取自 it_meta 表),因此调用方可以区分确实没有结果与日期超出已载入范围。
ANAC 提供的这份数据的 OCDS 版本(也是按月发布的 ocds-appalti-ordinari-YYYY)已检查过,但不适用于此数据包的刷新:单月 JSON 发布包有 748 MB 至 3.1 GB(根据 2026-03 和 2025-09 的实时测量),远大于此处用于相同公告的 CSV cig-YYYY 资源。另请注意:mcps/open-contracting 中已有 ANAC/意大利数据的独立且更新频率较低的覆盖(OCP Data Registry 自有的 18 个国家每周更新的 OCDS 镜像)。此数据包构建时已实时确认该覆盖存在,但数据陈旧(oc_coverage 中未记录意大利的 latest_release,抽样行的日期为 2021-2022 年)。这正是此数据包要弥补的实际缺口:为 ANAC/意大利提供真正近期的数据窗口。
未接入 it_tender_detail 的实时补充查询功能(getSmartCig)。 先前废弃的构建版本(fleet #3088)提到可通过 api.anticorruzione.it/apicig/.../getSmartCig/{cig} 实时查询单个 CIG;此构建期间尝试的所有路径变体均返回 404,ANAC 自己的 API 网关(api.anticorruzione.it/apicig/swagger/v1/swagger.json)也返回 404,因此无法确认准确的实时路径。这并非关键问题:已载入的 cig-YYYY CSV 已包含每个 CIG 的完整公告详情(状态、结果、取消字段),所以 it_tender_detail 完全可以从存储中回答。如果之后找到可用的实时端点,它只会补充 ANAC 在每月刷新之间公布的信息。
刷新数据
node scripts/italy-tenders/load-data.mjs --months 2026-09,2026-10 [--retain-from 2025-11] [--init-schema on the very first run]
-- 从 ANAC 下载每个指定月份的 cig-YYYY CSV zip,流式处理并将行写入 D1(以 cig 为键,执行 INSERT OR REPLACE,因此重新载入已存在的月份只会刷新 ANAC 更新过的行——例如在发布数周后才公布的结果)。需要先登录 Pipeworx Cloudflare 账户的 wrangler,并安装 unzip CLI。
GitHub 工作流 .github/workflows/italy-tenders-refresh.yml 每月运行一次,重新拉取当月及之前两个月的数据(以捕获延迟公布的结果更新),并将 --retain-from 向前滚动,避免表无限增长。
部署前冒烟测试(无需生产环境 D1)
node --experimental-strip-types scripts/italy-tenders/build-local-sqlite.mjs \
--csv <a downloaded cig_csv_YYYY_MM.csv> --ym YYYY-MM --out /tmp/italy-tenders.sqlite
node --experimental-strip-types scripts/italy-tenders/smoke-local.mjs /tmp/italy-tenders.sqlite
此测试通过 D1Like 适配器,使用真实 ANAC 月度 CSV 构建的本地 SQLite 文件,对此数据包的实际 callTool() 进行测试——结构与 scripts/fracfocus/{build-local-sqlite,smoke-local}.mjs 相同。
快速开始
添加到你的 MCP 客户端(Claude Desktop、Cursor、Windsurf 等):
{
"mcpServers": {
"italy-tenders": {
"url": "https://gateway.pipeworx.io/italy-tenders/mcp"
}
}
}
此端点实际提供的内容
https://gateway.pipeworx.io/italy-tenders/mcp 上的 tools/list 会返回上表中的工具,以及 Pipeworx 共享元工具——ask_pipeworx、
discover_tools、search_within、remember/recall 和网关范围内的其他工具。因此,你看到的工具数量会多于表格所列:目前,单个工具包端点会列出大约 30 个共享工具,以及该工具包自身的工具。连接的 initialize 响应会说明其确切范围,是了解当天情况的权威依据。
这是有意为之,并非意外的多路复用。元工具让作用域受限的连接也能回答本工具包未涵盖的问题——通过可跨整个目录路由的
ask_pipeworx 实现——无需你再添加第二个 MCP 服务。目前无法挂载不含这些元工具的工具包端点;如果额外的架构定义所占用的上下文成本超过了路由带来的价值,请连接一次完整网关,而不是连接多个工具包端点。
或者连接完整的 Pipeworx 网关,直接列出所有工具包的工具,而不只是此工具包的工具:
{
"mcpServers": {
"pipeworx": {
"url": "https://gateway.pipeworx.io/mcp"
}
}
}
两个 URL 都会访问同一网关和同样的 1807+ 个数据源。唯一的区别是直接列出哪个工具包的工具;无论连接哪一个,ask_pipeworx
都能访问所有工具包的工具。
没有 MCP 客户端?通过 HTTP 调用
curl -X POST https://gateway.pipeworx.io/v1/tools/it_tender_search \
-H 'Content-Type: application/json' \
-d '{"buyer":"COMUNE DI MILANO","date_from":"2025-12-01","date_to":"2025-12-31","limit":5}'
首次调用无需账号。查看任意工具:GET https://gateway.pipeworx.io/v1/tools/it_tender_search。查找工具包:使用 {"query":"..."} 调用 POST https://gateway.pipeworx.io/v1/tools/search_packs。
独立运行(无需网关账号)
此软件包也可作为本地 stdio MCP 服务运行——无需 Pipeworx 账号,也无需通过网关往返:
{
"mcpServers": {
"italy-tenders": {
"command": "npx",
"args": ["-y", "@pipeworx/mcp-italy-tenders"]
}
}
}
也可以直接运行,以确认其能正常启动:
npx -y @pipeworx/mcp-italy-tenders
它通过 stdin/stdout 使用 MCP,并响应 initialize/tools/list/tools/call,仅提供此工具包的工具——不包含上述网关连接会添加的共享元工具。使用相同的源码和工具,但不支持 ask_pipeworx 路由。
使用 ask_pipeworx
你可以用通俗的英语提问,而不是直接调用工具——在上述工具包端点和完整网关上都可以这样做:
ask_pipeworx({ question: "your question about Italy Tenders data" })
网关会选择合适的工具,并自动填入参数。
更多内容
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。