mcpField
P
public-tenders-es-eu

public-tenders-es-eu

リモート
github.com/nexus-mcp-infra法務・行政18 週間前に更新
リポジトリ

public-tenders-es-eu について

public-tenders-es-euは、TEDでスペインおよびEUの公共調達公告を正規化して検索します。公告を探す利用者向けで、EU公示基準以上の案件を対象とし、スペイン国内の基準未満案件は含みません。

主な機能

  1. 01国・キーワード・CPV接頭辞で検索
  2. 02公示日の範囲で絞り込み
  3. 03正規化された公告結果の返却
  4. 04公告詳細へのリンク提供
  5. 051時間の検索キャッシュ

活用シーン

  1. 01スペインの公共調達公告を探す
  2. 02分野のキーワードでEU入札を絞る
  3. 03最近公示された公告を確認する
  4. 04公告詳細ページへのリンクを取得する

MCP 対応

MCP クライアント向けに、/mcpでsearch_public_tendersツールを公開します。国、キーワード、CPV接頭辞、日付範囲、件数を指定してTED公告を検索できます。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://public-tenders-es-eu-325572559480.us-central1.run.app/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

詳細

公共入札 ES/EU

TED(Tenders Electronic Daily、EU 公式の調達公告プラットフォーム)で公開された公共部門の入札を正規化して検索できます。スペインとその他の EU 諸国が対象です。NEXUS 候補 #16――手動ビルドで、FORGE による生成ではありません。候補 #3/#4/#6/#8/#9/#13 と同じ、Cloud Run アセットを手動で構築するパターンです。

  • POST /search-public-tenders {"country": "ESP", "keyword": null, "cpv_prefix": null, "days_back": 30, "limit": 20} -- 1 回あたり $0.01。
  • /mcp の MCP ツール search_public_tenders は同じパラメーターに対応します――現在は無料です。「既知の制限事項」を参照してください。
  • GET /health、GET /.well-known/agent-card.json、GET /openapi.json(x-payment-info を含む)、 GET /.well-known/402index-verify.txt(402index の申立てを検証するファイル)。

ソース:明示的な承認を得て、当初の概要から方針を変更(2026-08-23)

タスク概要では、contrataciondelsectorpublico.gob.es/sindicacion/sindicacion_643/(スペインの全国 PLACSP ATOM 配信フィード)が「前回のセッションですでに確認済み」とされていました。今回のセッション開始時に、独立した 2 つの取得経路(curl、WebFetch。ブラウザーの User-Agent の有無もそれぞれ試行)で実際の応答を確認したところ、403 Forbidden でした。また、同ドメインの robots.txt はサイト全体に対して Disallow: / を指定しています。これはレート制限ではなく、サイト全体に対する明示的なブロックです。この種の WAF ルールでよく標的になるデータセンター IP 範囲からのアクセスである Cloud Run も、ほぼ確実にブロックされます。コードを書く前にユーザーへ伝え、黙って別のソースに差し替えることはせず、方針を変更して TED を使うことを選択してもらいました。

TED(Tenders Electronic Daily、api.ted.europa.eu) は、EU 出版局独自の公式公共調達公告検索 API です。無料で、API キーは不要、認証についての記載もありません。今回のセッションで実際にアクセスし、各フィールドを個別に確認しました(サードパーティーの README では初回確認時にクエリーフィールド名が誤っており、たとえば実際の API では buyer-country のみ受け付けるところを country-buyer と記載していました。そのため、以下の各フィールドと演算子はすべて、二次情報を信頼せず、実際の API の応答で確認しています)。

  • POST https://api.ted.europa.eu/v3/notices/search に、query(エキスパート検索文字列)、fields(返却対象とする eForms フィールド名の配列)、limit、scope("ACTIVE" または "ALL")を含む JSON 本文を送信します。
  • 実際の応答で確認済みのクエリーフィールド:publication-date>=YYYYMMDD(8 桁、ハイフンなし)、buyer-country=ESP(ISO-3166 alpha-3)、FT~"phrase"(全文検索)、AND、SORT BY publication-date DESC。
  • 実際の応答で確認済みの出力フィールド:publication-number、notice-title(spa/eng などをキーとする多言語辞書)、buyer-name(値がリストの多言語辞書)、buyer-country、publication-date、classification-cpv(CPV コードのリスト)、total-value(すべての公告種別にあるわけではありません。たとえば資格審査制度の公告には含まれませんが、これはエラーではなく通常の動作です)、notice-type、links(言語ごとの詳細ページ URL。形式は html/pdf/xml)。
  • 実際のクエリーをテストしたところ、確認時点で buyer-country=ESP のみの検索は ACTIVE スコープで 26,314 件の公告に一致しました。publication-date と buyer-country を組み合わせた検索では、8 日間の範囲で 1,058 件に一致しました。これは現在の実データに基づく件数で、古くなったり空になったりしたエンドポイントではありません。

TED はスペイン(EU の公告基準額を超える入札はすべて buyer-country=ESP で掲載されます)とその他の EU 諸国をすでに対象としているため、EU 全域を対象としておりブロックもされていないという点で、当初の概要にある「スペイン/EU」という趣旨に、ブロックされた国内の基準額未満のフィードと同等以上に適合します。ブロックされたソースとの対象範囲の違い:TED に掲載されるのは EU の公告基準額を超える公告のみです。これは実質的で無視できない下限となります(スペイン独自の基準額未満の入札、つまり PLACSP の国内フィードでのみ掲載されていた入札は TED に含まれません)。このアセットは、それらも対象だとは主張しません。total_matching_notices と各結果の source: "TED" フィールドによって、実際の対象範囲を買い手に明示し、それ以上に広い範囲を対象とするかのような印象を与えません。

状態(db_constraint 例外)

兄弟関係にある手動アセット(url-metadata-api、agent-verification-api、document-conversion-api、 new-x402-listings-feed、onchain-activity-index、x402-receipt-verifier)はすべて完全にステートレスです。各呼び出しで上流に新たにアクセスし、標準の traffic_events/revenue_events/ mcp_call_events のテレメトリー3テーブル以外に、NEXUS が所有するテーブルはありません。これは、個別判断による例外が必要となる、8つの手動/FORGE アセットのうち初めてのケースです。新しいテーブル tenders_query_cache(Supabase マイグレーション add_tenders_query_cache_candidate16、 プロジェクト ieduhdgfjdeffvzxvihf)を追加し、このアセットだけが読み書きします。

理由:TED の公式ドキュメントには、明示されたレート制限はないものの、共有の公開リソースに対するリクエスト数は節度ある範囲にするよう記載されています。同一クエリ(country/keyword/ cpv_prefix/days_back/limit が同じもの)を1時間単位でまとめて1時間キャッシュするのは、この指針に従うための適切な対応であり、不要な状態保持ではありません。キャッシュヒットはレスポンス内で "cache_hit": true と示されるため、購入者はキャッシュが使用されたことを確認できます。

これは、当初の PLACSP スクレイピング設計で必要になるはずだった状態管理ではありません。 その設計(フィルター不可の ATOM フィードを順にたどり、差分を検出するために「確認済み」の入札 ID を追跡するもの。new-x402-listings-feed のカタログ走査キャッシュと同じ形式)は、ここでは当てはまりません。TED のサーバー側にある publication-date>= フィルタリングだけで、「X 以降の新着情報」を取得できるため、このアセットが個々の入札について何かを記憶する必要はありません。保持する状態は短期間のレスポンスキャッシュだけであり、入札インデックスではありません。

RLS:anon に付与するのは tenders_query_cache に対する SELECT と INSERT のみです。UPDATE/DELETE は付与しません。これは、ほかのすべての NEXUS テレメトリーテーブルと同じ、挿入専用の運用方針です。キャッシュの「上書き」は、実際には新しい cached_at を持つ行の追加です。検索クエリは常に、TTL の範囲内で最も新しい行を選びます。1時間の TTL を過ぎた古い行は削除しません。7日間の試験期間中に、行数が際限なく増えても(クエリごとに1時間あたり1行)、その影響はごくわずかであり、現時点では許容しています。実際にクリーンアップするには、スケジュールされたジョブか、このアセットに本来不要な DELETE 権限が必要になります。

デプロイ先:Cloud Run

候補 #4/#3/#6/#8/#9/#13 と同じパイプラインです。skills/infra-deploy-ops を参照してください。

# 1. First deploy -- PUBLIC_DOMAIN not known yet, every real request 421s until step 2.
./scripts/deploy_cloud_run.sh public-tenders-es-eu manual_assets/public-tenders-es-eu

# 2. Grab the printed *.run.app URL, then (only if it differs from env-vars.deploy.yaml's guess):
gcloud run services update public-tenders-es-eu --region us-central1 --project nexus-505016 \
    --update-env-vars PUBLIC_DOMAIN=<the-real-domain>

既知の制限事項(意図的に修正していません。CLAUDE.md SS3 に従い、必要性を示す証拠がない限りゲートを設けません)

  • MCP ツール呼び出しは課金されません。 このコードベース内のほかのすべての手動アセットと同じ、プロセス内呼び出しのパターンです。
  • EU の公開基準を満たす入札のみが対象です。 上記の「ソース」を参照してください。スペインの基準額未満の国内入札は TED に掲載されておらず、このアセットの対象外です。
  • cpv_prefix は取得後にクライアント側でフィルタリングされます。 TED のクエリ構文はサーバー側での CPV プレフィックス一致をサポートしていません。cpv_prefix が設定されている場合、このアセットは limit の3倍(最大50件)を取得してから、プロセス内でフィルタリングします。幅広い days_back の期間に対して非常に限定的な cpv_prefix を指定すると、TED の全結果セットには存在していても、取得範囲を超えた実際の一致件数より少ない結果しか得られない場合があります。
  • キャッシュは単純な1時間 TTL であり、新しい TED の公開時には無効化されません。 同じ1時間のバケット内でクエリを繰り返すと、TED の最新情報より最大で約1時間古い結果が返ることがあります。すべてのレスポンスで cache_hit を通じてその旨を開示します。
  • 呼び出し元ごとのレート制限はありません。 使い捨ての7日間の測定期間には問題ありません。
  • tenders_query_cache の行は削除されません。 上記の「状態」を参照してください。

品質ゲート(2026-08-23、設計時点から適用。遡及適用ではありません)

候補 #3/#4/#6/#8/#9/#13 と同じ2エージェントのプロセス(セキュリティの観点、および機能性・品質・購入者体験の観点)です。実施後、結果を以下に記入します。

測定(候補 #16、7日間の期間)

2026-08-23(実際のデプロイ日)から2026-08-30(判断日)までの7日間です。信頼できる情報源: traffic_events/revenue_events/mcp_call_events(asset_name = 'public-tenders-es-eu')であり、Cloud Run のログではありません。7日目に実際のトラフィックがゼロの場合(クローラーを除外)、Cloud Run サービスを一時停止または削除します (gcloud run services delete public-tenders-es-eu --region us-central1 --project nexus-505016)。

コメント

MCP は初めてですか?

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

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