mcpField
I
ihalent

ihalent

本地服务
github.com/gulmezeren2-byte法律与政务412 周前更新

关于 ihalent

ihalent 是面向土耳其公共采购分析的 CLI、库和 MCP 服务,可将 EKAP 结果公告整理为结构化数据并统计企业历史、折扣与竞争情况。它不负责抓取数据,并让统计值可追溯至公告。

主要功能

  1. 01整理 EKAP 结果公告
  2. 02查询企业中标历史与金额
  3. 03按机构等维度分析折扣
  4. 04识别单一投标及其他风险
  5. 05统计获胜者集中度

适用场景

  1. 01评估企业参与公共招标的竞争情况
  2. 02比较不同机构的历史授标折扣
  3. 03筛查单一投标和接近估算价的项目

MCP 相关

可选 MCP 服务将分析能力作为工具提供,包括概览、企业查询、折扣、集中度、风险标记、公告解析和数据导入。它处理由其他方式收集的数据,不负责抓取 EKAP。

配置

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

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

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

安装包
pypiihalent0.3.0

工具

还没有获取到工具列表

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

详细介绍

ihalent

土耳其公共招标中标情报:谁中标、金额多少、折扣多少、面对多少家投标方。

CI PyPI Python License: MIT

基于 saidsurucu/ihale-mcp 构建——ihale-mcp 负责访问 EKAP;ihalent 则负责整理和分析返回的数据。

土耳其的每项公共招标最终都会发布一份 Sonuç İlanı(结果公告),其中列明估算金额、合同金额、中标方以及投标企业数量。这些公告都是公开的。但它们是逐条发布的、没有结构,也无法进行横向分析:你无法向 EKAP 询问“这家公司过去两年中标了哪些项目”,也无法问“这个主管部门的实际授标价格比估算低多少”。ihalent 将这些公告转换为结构化记录,准确回答这些问题——包括企业历史、折扣(kırım)分布和竞争指标,并确保每个数字都能追溯到其来源公告。

ihalent 概览:展示 2025 年 12 月至 2026 年 1 月期间九个真实授标案例中的中标方集中度和采购风险信号

这是对 2025 年 12 月至 2026 年 1 月期间九个真实建筑工程授标案例的实际分析结果(见 examples/)。范围底部的 -2.96% 不是错误:伊斯坦布尔大学通过紧急“pazarlık”程序,将一项价值 6.15 亿里拉的校园工程授予中标方,金额比自己的估算高出 2.96%——合同签订金额超过了公开估算。正是这类情况,本应很容易被发现,但目前却并非如此。

为什么要做这个项目

我是一名工业工程师,从事建筑行业。我们公司评估公共招标时,决定投标的关键问题都与其他企业的过往记录有关:这个主管部门通常以低于估算多少的价格授标?通常有多少家企业参与?某个竞争对手中标过哪些项目、价格又是多少?所有这些信息都是公开的——它们散落在 EKAP 上数以万计的结果公告中——却无法查询。因此,每个人都只能手动用电子表格重建一份不完整的私人数据,做得还很糟糕。

现在已经有一个很出色的工具可以获取这些数据: saidsurucu/ihale-mcp 解决了经身份验证访问 EKAP 的问题,并为你提供公告。ihalent 则是在其之上的一层,负责将一堆公告转化为答案。它不会重新抓取 EKAP,而是整理你已收集的数据,并完成目前尚不存在的分析。

它能回答什么

企业历史——汇总数据集中的所有中标记录,并合并不同拼写形式:

$ ihalent firm examples/sample-awards.jsonl "ÖZDEN YEL"
ÖZDEN YEL
  wins: 1   joint ventures: 1   total contract value: 19.709.997,40 TL
Discount (kırım) — ÖZDEN YEL         
┌────────┬────────┬────────┬────────┐
│ mean   │ median │ min    │ max    │
├────────┼────────┼────────┼────────┤
│ 33.87% │ 33.87% │ 33.87% │ 33.87% │
└────────┴────────┴────────┴────────┘
based on all 1 awards.
  top awarding authorities:
      1x  DSİ 14. Bölge Müdürlüğü

折扣分布——分组并排序,最高的排在前面:

$ ihalent discounts examples/sample-awards.jsonl --by authority
Mean discount by authority                                     
┌──────────────────────────────────┬────────┬────────┬────────┐
│ authority                        │   mean │ median │ awards │
├──────────────────────────────────┼────────┼────────┼────────┤
│ DSİ 14. Bölge Müdürlüğü          │ 33.87% │ 33.87% │    1/1 │
│ Ziraat Bankası Genel Müdürlüğü   │ 31.41% │ 31.41% │    1/1 │
│ İstanbul YİKOB                   │ 26.98% │ 26.98% │    1/1 │
│ İSKİ Genel Müdürlüğü             │ 26.66% │ 26.66% │    1/1 │
│ İTÜ Rektörlüğü                   │ 22.68% │ 22.68% │    1/1 │
│ Esenler Belediyesi               │ 21.99% │ 21.99% │    1/1 │
│ Ağrı İl Özel İdaresi             │ 19.99% │ 19.99% │    1/1 │
│ Kağıthane Belediyesi             │ 17.41% │ 17.41% │    1/1 │
│ İstanbul Üniversitesi-Cerrahpaşa │ -2.96% │ -2.96% │    1/1 │
└──────────────────────────────────┴────────┴────────┴────────┘
awards column: used / considered (excluded lack an estimate).

竞争情况——有多少份有效投标,以及有多少次恰好只有一份(只有一家投标的授标情况,是采购监督机构关注的风险信号)。上方的概览中已展示这些信息。

唯一原则

每个数字都必须有据可依。 平均折扣总会同时注明“基于多少次授标计算,其中多少次因缺少估算金额而被排除”。如果某家企业的部分中标项目没有公开价格,其合同总额会明确说明这一点,因此你看到的是下限,而非完整金额。未公布估算金额时,折扣值为 None,绝不会是 0——ihalent 不会捏造政府未公布的数字。这类工具的价值,有一半在于拒绝猜测。

安装

pip install ihalent           # add [mcp] for the MCP server: pip install "ihalent[mcp]"

也可以从源代码安装:pip install git+https://github.com/gulmezeren2-byte/ihalent。

工作流

ihalent 会读取包含授标信息的 JSONL 文件。你可以通过收集结果公告来生成该文件——最简单的方法是使用 ihale-mcp,然后让 ihalent 对其进行结构化处理:

# 1. collect: with ihale-mcp connected to your agent, save what its
#    get_tender_announcements returns (one or many tenders) to bundle.json

# 2. structure:
ihalent ingest bundle.json -o awards.jsonl

# 3. ask:
ihalent overview  awards.jsonl
ihalent firm      awards.jsonl "ACME İNŞAAT"
ihalent discounts awards.jsonl --by province --min 5

每条命令都支持 --json,便于用于管道和 Agent。或者跳过收集,直接试用随附示例:

git clone https://github.com/gulmezeren2-byte/ihalent && cd ihalent
python examples/build_sample.py       # parses the real notices in examples/notices/
ihalent overview examples/sample-awards.jsonl

命令

命令功能
ihalent overview AWARDS查看数据集的价值、折扣、竞争情况和数据缺口
ihalent firm AWARDS "NAME"查看一家公司的中标情况、总价值、折扣和中标地区
ihalent discounts AWARDS --by X按主管机构、省份或 tender_type 分组,计算平均折扣和中位数折扣
ihalent single-bid AWARDS列出只有一个有效投标的授标记录——没有真正的竞争(监管机构关注的指标)
ihalent concentration AWARDS [--authority X]查看中标方集中度(HHI)——是不是总是那几家公司中标?
ihalent flags AWARDS查看每条授标记录的风险标记:单一投标、价格接近估算价、没有估算价、弃标率高
ihalent parse NOTICE.md将一份结果公告转换为结构化 JSON
ihalent ingest BUNDLE.json将收集到的 ihale-mcp/EKAP 输出转换为授标信息 JSONL

与 AI Agent 搭配使用

结果公告是非结构化文本;真正值得关注的问题往往涉及汇总分析。这不太适合逐条处理公告的 Agent,却很适合作为工具:提供字段稳定的 --json 输出、有实际含义的退出码,以及能合并拼写变体的公司名称匹配功能,让 Agent 无须为此费心。

ihalent 提供原生的 MCP 服务(pip install 'ihalent[mcp]'),可将分析功能作为工具公开——overview、firm、discounts、concentration、flags、parse_notice、ingest_bundle——供你指定的数据集使用:

IHALENT_AWARDS=awards.jsonl ihalent-mcp

没有本地 Python?Dockerfile 可以构建相同的服务: docker build -t ihalent . && docker run --rm -i -e IHALENT_AWARDS=/data/awards.jsonl -v "$PWD:/data:ro" ihalent。

将它与 ihale-mcp 搭配使用,Agent 就能在一个会话中收集公告并对其进行分析:ihale-mcp 负责获取,ihalent 负责结构化和汇总。如果你更愿意编写脚本,Python API(ihalent.ingest_bundle、ihalent.analytics.firm_profile)只需三层调用即可完成。

诚实说明范围

  • 这是分析工具,不是爬虫。 收集工作由 ihale-mcp 负责(它做得很好);ihalent 刻意只负责上层处理,对你提供的数据执行纯函数操作——不访问网络、不需要签名密钥,也不会因 EKAP 更换请求头而失效。
  • 公司名称的归并有意采取保守策略。 它会合并法律形式后缀和土耳其语拼写变体;宁可把一家公司的名称显示为两行,也不愿把两家公司合并成一行。因此,firm 会报告查询匹配到多少种不同拼写,并在数量超过一种时发出警告。
  • 解析器只处理一种文档:结果公告。 公告中没有投标级别的详细信息(还有谁投标、报价是多少),因此这里也不包含这些信息。折扣是估算价与合同价之间的差额,公告中会列出这两项价格。
  • 授标金额采用印刷出来的名义里拉。 如何结合手头的日期比较 2023 年和 2026 年的合同,由你自行分析;ihalent 不会悄悄进行通胀调整。

ihalent 不是什么

它不是 ihale-mcp 的替代品,而是构建在其之上。它不是实时仪表板,也不是付费招标提醒服务;它是一个库和一个命令行工具,用于处理你自己掌控的数据。它也不再分发数据集:随附的 examples/ 中只有少量真实公告,以及用于结构化你自己的数据的代码。

关于数据的说明

公共招标结果属于公共信息,由国家发布以供公众监督。ihalent 对 EKAP 已公开的信息进行结构化处理。出现的公司名称均为以公开商业身份开展活动的法人实体,而非个人。

本项目的构建方式

模型和分析由我设计,每一行代码也都由我审核;为了加快实现速度,我会大量使用 AI Agent(Claude Code),提交记录中的尾注也说明了这一点。衡量标准是测试——共 80 个,基于 EKAP 和 ihale-mcp 输出的确切 JSON 结构构建,其中包括一份折扣为负数的结果公告,以及一份已取消的招标。至于代码是谁敲的,这些测试并不在意。

相关项目

  • acikpoz — 补全土耳其公共采购全貌的另一半。ihalent 读取招标结果公告,告知谁中标以及折扣是多少;acikpoz 读取单价(birim fiyat)目录,说明工程本该花费多少。两者遵循同样的原则:每个数字都有据可查,绝不凭空捏造。

Eren Gülmez 的更多工具。

许可证

MIT — Mehmet Eren Gülmez

评论

支持 Markdown

第一次接触 MCP?

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

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