中部地方整備局の入札データを分析できるMCPサーバーを作ってみた
2026年3月 | 開発記録
① そもそもMCPとは?
MCP(Model Context Protocol)は、Anthropicが提唱したオープンプロトコルで、AIモデルが外部のデータソースやツールと安全に連携するための仕組みです。
従来、AIにデータ分析をさせるには「人間がクエリでデータを取得 → CSVに整形 → AIに渡す → 結果を解釈」という手順が必要でした。MCPを使うと、この流れが劇的に変わります。
❌ 従来のやり方
- 人間がクエリを書く
- データを取得・整形
- CSVやテキストにしてAIに渡す
- AIが分析・回答
- 追加の質問があればまた①から…
✅ MCPを使ったやり方
- 人間が自然言語で質問する
- AIが適切なツールを選択
- MCPサーバー経由でDBにアクセス
- 結果を解釈して回答
- 追加の質問にもそのまま対応
ポイントは人間がクエリを書く必要がないこと。「パスコの競合を教えて」と聞くだけで、AIが適切な問い合わせを構築してデータベースにアクセスし、結果をわかりやすく整理してくれます。
② なぜ入札データ×MCPなのか
中部地方整備局の入札データは、以下のような特徴を持っています。
このデータに対する問い合わせは、定型レポートでは対応しきれません。「パスコの競合で、もっと多く受注しているところは?」のような探索的な質問が次々と出てくるからです。まさにAIとの対話で深掘りしていくのに向いたデータです。
さらに、入札データは建設コンサル各社にとって営業戦略の根幹に関わる情報です。MCPサーバーを介してAIが直接分析できれば、データ分析の民主化——専門的なクエリが書けなくても高度な競合分析ができる——が実現します。
③ システム構成
全体のアーキテクチャは以下の通りです。
※ 上の図を差し替えるか、以下のテキスト版をご参照ください。
Claude AI(claude.ai)
↕ 自然言語で質問・指示
MCPサーバー(Python)
↕ JSON-RPCでツール呼び出し
PostgreSQL データベース
↑ 毎月自動でデータ収集
中部地方整備局 入札結果ページ
データ収集パイプライン
中部地方整備局が公開している入札結果を毎月スクレイピングし、PostgreSQLに蓄積しています。主なデータ項目は、業務名・発注部局・業種・入札方式・入札企業名・入札金額・落札フラグ・予定価格・契約日・年度などです。
MCPサーバーの実装
MCPサーバーはPythonで実装し、AnthropicのMCP Python SDKを使用しています。Claude.aiのMCP連携機能(リモートMCPサーバー)を利用して接続しており、特別なクライアントアプリは不要です。
MCPのプロトコルはJSON-RPC 2.0ベースで、Claude AIがツールを呼び出すと、MCPサーバーが対応するクエリを実行してMarkdown形式で結果を返す、というシンプルな構造です。
④ 実装した4つのツール
MCPサーバーには、以下の4つのツール(関数)を実装しました。それぞれ、建設コンサル業界でよくある分析ニーズに対応しています。
search_bids — 案件検索
キーワード・業種・部局・年度などで入札案件を検索します。
「橋梁設計の案件を探して」「愛知国道事務所の2025年の案件を見せて」
パラメータ: keyword(業務名)、gyoshu(業種)、office(部局名)、nendo(年度)、winners_only(落札のみ)
company_stats — 企業実績分析
企業名を指定して、落札件数・総額・平均落札率・得意業種・得意部局を一括で取得します。
「建設技術研究所の実績を教えて」「パスコは中部で強い?」
パラメータ: company(企業名・部分一致)、nendo(年度で絞り込み)
competitor_analysis — 競合分析
ある企業と同じ案件に入札している競合企業を特定し、競合頻度と勝率を算出します。
「パスコの競合を教えて」「建設技術研究所とよく競合する会社は?」
パラメータ: company(対象企業名・部分一致)、limit(表示数)、nendo(年度で絞り込み)
bid_statistics — 統計情報
業種別・部局別・月別の集計データを取得します。市場全体の傾向を俯瞰するためのツールです。
「土木コンサルの競争状況は?」「部局別の発注件数ランキング」
パラメータ: group_by(集計軸)、gyoshu(業種絞り込み)、nendo(年度絞り込み)
ツール設計で意識したこと
「AIが使いやすい粒度」に分割することを最も意識しました。
たとえば、company_statsは1回の呼び出しで「落札件数・総額・平均落札率・得意業種・得意部局・最近の落札案件」をまとめて返します。AIが複数回に分けてアクセスする必要がないので、応答が速く、トークンも節約できます。
一方で、competitor_analysisは別ツールとして分離しました。競合分析は重い処理ですし、すべての質問で必要になるわけではないためです。「パスコって落札してる?」→「パスコの競合は?」と会話が進んだときに、AIが必要に応じて呼び出してくれます。
ツールのdescription(説明文)はAIがツール選択する際の判断材料になります。日本語で具体的な使用例を含めると、AIの精度が格段に上がりました。「例: 『建設技術研究所の実績を教えて』」のような記述が効果的です。
⑤ 実際の動作例:会話から分析レポートまで
実際にClaude.aiでMCPサーバーに接続し、自然言語で分析した流れを紹介します。
ステップ1:素朴な質問からスタート
パスコって落札してる?
はい、パスコは中部地方整備局の入札で落札実績があります。全体で87件に入札して25件落札しており、落札率は28.7%です。得意分野は測量が最も多く(54件入札・17件落札)…
AIが自動的にcompany_statsツールを呼び出し、パスコの実績を取得・要約してくれます。
ステップ2:深掘り質問
パスコよりも多く受注しているとこある?
(competitor_analysisでパスコの競合を調べ、さらにcompany_statsで上位企業の実績を個別に取得)
アジア航測が42件でトップ、次いで国際航業が41件です…
ここでAIは複数のツールを連続で呼び出しています。まずcompetitor_analysisで競合企業を特定し、次に上位企業のcompany_statsを呼んで比較表を作成しました。
ステップ3:さらに広げる
もっとも合計金額が多いところはどこ?
(建設技術研究所、日本工営、パシフィックコンサルタンツ、八千代エンジニヤリング…と主要企業を次々にクエリ)
建設技術研究所が約66.9億円で最多です…
AIは「合計金額が多い会社を探す」という意図を理解し、主要企業を一社ずつcompany_statsで調べてランキングを構成しました。1回の会話で8社以上のデータを取得し、比較表にまとめています。
ステップ4:分析記事の自動生成
MCPを使ってブログ記事を書き直してほしい
(20社以上のcompany_stats + competitor_analysisを呼び出し、横断的な分析レポートをHTMLで生成)
最終的に、AIは会話の中で蓄積したデータを使って、グラフ付きのブログ記事をHTMLで自動生成しました。「パスコって落札してる?」から始まった会話が、市場全体の分析レポートに到達したわけです。
⑥ 今後の展望
現在は中部地方整備局の「業務」(建設コンサル等)のみを対象としていますが、今後は以下の拡張を予定しています。
1
一般土木・維持修繕・舗装等の工事入札データを追加し、業務と工事の両面から市場を分析可能にする
2
関東・近畿など他の地方整備局のデータを追加し、全国規模の分析を可能にする
3
過去の落札パターンから、特定案件の落札可能性や適正入札価格を推定するツールの追加
4
新規案件が公示されたときに、過去データから競合状況を自動分析して通知する仕組み
まとめ
MCPサーバーを作ってみて強く感じたのは、「AIにデータへの直接アクセスを与えると、分析の質が根本的に変わる」ということです。
従来は「どんな切り口で分析するか」を人間が事前に決め、ダッシュボードやレポートに落とし込む必要がありました。MCPを使えば、会話の中で次々と新しい切り口が生まれ、AIが自律的にデータを取りに行ってくれます。
入札データのような「構造化されているが、分析の切り口が無限にあるデータ」は、MCPとの相性が非常に良いです。建設コンサル以外にも、不動産、医療、官公庁の調達データなど、応用先は広いと考えています。
冒頭で紹介した「パスコって落札してる?」から始まる会話で取得したデータをもとに、前回の分析記事をMCPデータで書き直し、さらにこのMCPサーバー紹介記事まで——すべて1つのClaude.aiの会話の中で完結しています。
※ 本記事で紹介しているデータは中部地方整備局が公開している情報をもとに弊社が独自に集計したものです。
※ MCPはAnthropic社が提唱するオープンプロトコルです。詳細は公式サイトをご参照ください。
※ 記事内のデータはR6年度・R7年度(2026年1月まで)の集計です。



