mcpField
I
ihalent

ihalent

ローカル
github.com/gulmezeren2-byte法務・行政412 週間前に更新

ihalent について

ihalentは、トルコの公共調達結果を分析するCLI、ライブラリ、MCPサーバーです。EKAPの結果公告を構造化し、企業の受注履歴、割引率、競争状況を出典付きで示します。データ収集は行いません。

主な機能

  1. 01EKAP結果公告の構造化
  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 に「この企業は過去2年間に何を落札したか」や「この発注機関は実際に見積額をどれほど下回る金額で落札しているか」と尋ねることはできません。ihalent はこれらの公告を構造化された記録に変換し、企業の落札履歴、割引(kırım)分布、競争状況の指標といった、まさにこうした疑問に答えます。数値はすべて、元となった公告まで追跡できます。

ihalentの概要。2025年12月から2026年1月にかけての実際の落札事例9件における落札者の集中状況と調達上の注意点

これは、2025年12月から2026年1月にかけての実際の建設工事の落札事例9件を分析した出力です(examples/)。範囲の下端にある -2.96% はバグではありません。イスタンブール大学が、緊急の「pazarlık」方式で、見積額を2.96%上回る6億1,500万リラのキャンパス工事を発注しました。これは公示された見積額を上回る金額で契約が結ばれた事例であり、本来なら簡単に確認できるべきなのに、現在はそうなっていません。

このプロジェクトが生まれた理由

私は工業エンジニアで、建設業界で働いています。勤務先が公共入札への参加を検討するとき、入札額を決めるうえで重要な疑問は、他社の過去の実績に関するものばかりです。この発注機関は見積額をどれほど下回る金額で落札しているのか、通常何社が参加するのか、特定の競合企業は何をいくらで落札してきたのか。これらの情報はすべて公開されています。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).

競争状況 — 有効な入札はいくつあるのか、また、ちょうど1件だけの場合はどれほどあるのかが分かります(単独入札による落札は、調達監視団体が注視する指標です)。上記の概要に掲載しています。

唯一のルール

根拠のない数値は決して表示しません。 平均割引率には必ず「対象となる落札件数はいくつか、見積額がないため除外された件数はいくつか」を添えます。企業の契約総額についても、落札した案件の一部に公表価格がない場合は、その旨を示します。こうすることで、総額ではなく下限として読み取れます。見積額が公表されていない場合、割引率は 0 ではなく None です。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 を指定できます。収集を省略して、同梱のサンプルを直接試すこともできます。

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"1 社の落札状況、総額、割引率、落札先を確認します
ihalent discounts AWARDS --by X発注機関、県、または tender_type ごとの平均/中央値の割引率を確認します
ihalent single-bid AWARDS有効な入札が 1 件のみの落札案件を表示します(実質的な競争がないことを示す監視上のフラグです)
ihalent concentration AWARDS [--authority X]落札者の集中度(HHI)を確認します。同じ数社がすべてを落札しているでしょうか?
ihalent flags AWARDS案件ごとの危険信号を表示します。単独入札、予定価格に近い価格、予定価格なし、大幅な辞退などです
ihalent parse NOTICE.md1 件の結果通知を構造化 JSON に変換します
ihalent ingest BUNDLE.json収集済みの ihale-mcp/EKAP 出力を awards JSONL に変換します

AI エージェントでの利用

結果通知は非構造化テキストですが、興味深い問いは集計に関するものです。そのため、通知を 1 件ずつ扱うエージェントには不向きですが、ツールには適しています。--json 出力には安定したフィールドがあり、終了コードにも意味があり、企業名の照合では表記揺れを吸収するため、エージェントがその処理を担う必要はありません。

分析機能をツールとして公開するネイティブな 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 と組み合わせれば、エージェントは 1 つのセッション内で通知を収集し、それらを横断して推論できます。ihale-mcp が取得し、ihalent が構造化して集計します。スクリプトでの利用を希望する場合、Python API(ihalent.ingest_bundle、ihalent.analytics.firm_profile)は 3 回の呼び出しで利用できます。

対応範囲について

  • これは分析ツールであり、スクレイパーではありません。 収集は ihale-mcp の役割です(優れた仕事をしています)。ihalent は意図的にその上位のレイヤーを担い、渡されたデータだけを処理する純粋関数として動作します。ネットワーク通信も署名キーもなく、EKAP がヘッダーを変更しても壊れることはありません。
  • 企業名の表記揺れの統合は、意図的に慎重に行っています。 法的形態を示す接尾辞やトルコ語の表記揺れは統合しますが、2 社を 1 社として扱うより、同じ会社を 2 行に分けて表示する方を優先します。そのため firm は、クエリに一致した異なる表記の数を報告し、複数ある場合は警告します。
  • パーサーが扱うのは 1 つの文書、つまり結果通知です。 入札単位の詳細(ほかに誰が、いくらで入札したか)は通知に記載されていないため、ここでは扱いません。割引率は予定価格と契約価格の差で、これは通知に記載されています。
  • 落札額は、印刷されたとおりの名目リラ額です。 2023 年と 2026 年の契約を比較するには、日付を踏まえて分析してください。ihalent が暗黙にインフレ調整することはありません。

ihalent が対象としないもの

ihale-mcp の代替ではなく、その上位で動作します。ライブダッシュボードでも、有料の入札通知サービスでもありません。利用者が管理するデータを指定して使うライブラリおよび CLI です。また、データセットを再配布するものでもありません。examples/ に含まれているのは、少数の実際の通知と、独自のデータを構造化するためのコードです。

データについて

公共調達の結果は公開情報であり、一般の監視を目的として国が公表しています。ihalent は EKAP がすでに公開している情報を構造化します。掲載される企業名は、公開された商業上の立場にある法人のものであり、個人のものではありません。

このプロジェクトの開発方法

モデルと分析は私が設計し、すべての行をレビューしています。実装を速めるために AI エージェント(Claude Code)を積極的に活用しており、コミットのトレーラーにもそのことが記されています。基準となるのはテストです。EKAP と ihale-mcp が出力する正確な JSON 形式に基づいて 80 件用意しており、割引額がマイナスの結果通知や、中止された入札も含まれています。誰が入力したかは関係ありません。

関連プロジェクト

  • acikpoz — トルコの公共調達を理解するためのもう一つの要素です。ihalent は落札者と割引額を伝える入札結果通知を読み取り、acikpoz は工事に本来かかるべき費用を示す単価(birim fiyat)カタログを読み取ります。どちらも同じ方針に基づいており、すべての数値は出典まで追跡でき、捏造はありません。

Eren Gülmez によるその他のツール。

ライセンス

MIT — Mehmet Eren Gülmez

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。