mcpField
P
Portugal Tenders

Portugal Tenders

リモート
pipeworx.io法務・行政02 週間前に更新
リポジトリ公式サイト

Portugal Tenders について

Portugal Tendersは、IMPICのオープンデータを使ってポルトガルの入札公告や落札契約を検索する、調達チーム、研究者、供給業者向けのMCPサーバーです。検索と詳細取得に対応し、応答には読み込み済みデータの期間が示されます。

主な機能

  1. 01入札公告の検索
  2. 02金額や供給業者による契約絞り込み
  3. 03公告と契約の詳細取得
  4. 04出典とデータ期間の表示

活用シーン

  1. 01CPVで調達公告を検索
  2. 02発注者や供給業者で契約を絞り込み
  3. 03契約金額、期限、場所の確認

MCP 対応

MCPサーバーは公告と契約の検索・詳細取得ツールを公開します。データはIMPICのオープンデータに基づき、結果には出典、ライセンス、読み込み済み期間が含まれます。

設定

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

エンドポイントhttps://gateway.pipeworx.io/portugal-tenders/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 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

45
パラメーター型必須説明
qstringいいえquestion の別名。
askstringいいえquestion の別名。
textstringいいえquestion の別名。
inputstringいいえquestion の別名。
packsarrayいいえ任意。ルーティング対象をこれらのパックスラッグに限定します(例:["sec-form-d","sec-13f"])。その場合、ルーターは該当パック内のツールのみを選択します。省略すると、デフォルトの全カタログへのルーティングになります。スラッグは list_packs / search_packs / https://pipeworx.io/directory から取得できます。リストにない、または不明なスラッグは無視され、_meta.pack_scope.ignored に記載されます。該当するスラッグが 1 つもない場合は、カタログ全体にルーティングし、_meta.pack_scope.full_catalog:true を設定します(空の回答にはなりません)。
querystringいいえquestion の別名。
promptstringいいえquestion の別名。
messagestringいいえquestion の別名。
questionstringはい自然言語での質問またはリクエスト。query、q、prompt、text、input、ask、message をエイリアスとして使用できます。

詳細

@pipeworx/portugal-tenders

IMPIC(Instituto dos Mercados Públicos, do Imobiliário e da Construção。ポルトガルの公共調達規制機関)が公開する、ポルトガルの公共調達に関する入札公告および落札契約です。Fleet #3111。

Pipeworx の一部です。Pipeworx は、AI エージェントを1808以上のリアルタイムデータソースに接続する MCP ゲートウェイです。これは独立した非公式の連携機能であり、上流プロバイダーとは提携しておらず、承認も公開も受けていません。

ツール

  • pt_announcement_search(query?, cpv?, buyer?, date_from?, date_to?, limit?) -- 自由入力のキーワード(公告タイトル)、CPV 分類コード/プレフィックス、発注機関(買い手)名の部分一致、および公開日の期間(デフォルトは過去90日間)で入札公告を検索します。各公告の内部 ID、IMPIC 公告 ID、買い手、タイトル、公告種別、契約種別、基準金額(EUR)、CPV、公開日、提案期限を返します。
  • pt_announcement_detail(id) -- pt_announcement_search が返す内部 ID を使って、公告1件の全記録を取得します。買い手の NIF 納税者番号、手続きモデル、ロットの説明、公式公告文書へのリンクが含まれます。
  • pt_contract_search(query?, buyer?, supplier?, amount_min?, amount_max?, date_from?, date_to?, limit?) -- 自由入力のキーワード(契約タイトル)、買い手(adjudicante)名の部分一致、落札業者(adjudicatário)名の部分一致、契約金額の範囲(EUR)、および公開日の期間で落札契約を検索します。各契約の ID、タイトル、買い手、納入業者、金額、契約種別、CPV、公開日、署名日を返します。
  • pt_contract_detail(idcontrato) -- 契約 ID を使って、契約1件の全記録を取得します。買い手と納入業者の NIF 納税者番号、詳細な説明、調達基準価格、履行期限と場所、手続きの種類、引用されている法制度が含まれます。

すべての応答には、source、source_url、licence、data_as_of が含まれます。また、検索結果または該当なしの応答には、該当する *_window_from/*_window_to のペア(このパックが現在そのデータセットについて保持している期間)も含まれるため、呼び出し側は「このトピックのデータがない」のか、「その期間のデータが読み込まれていない」のかを判別できます。

認証

キーは不要です。ツールは、データを保持する Pipeworx ゲートウェイ経由でのみ応答します。スタンドアロンでインストールした場合は読み取れるデータがなく、すべてのツールは空のリストではなく、「このランタイムではストアがバインドされていません」という明確なエラーを返します。

データソース

  • IMPIC(Instituto dos Mercados Públicos, do Imobiliário e da Construção) -- ポルトガルの公共調達規制機関で、国の入札登録簿 Portal BASE を運営しています。Fleet #3088 では BASE への直接アクセスを検討し、稼働中の経路が2つあることを確認しましたが、どちらも追加の作業なしには使えませんでした。BASE 独自の旧 REST API は応答の途中で毎回接続をリセットし、IMPIC の新しい API はアカウント登録とトークンが必要です(Bruce はそのため、2026-10-15 に「ポルトガルを登録する」と判断しました。これは別途進行中の作業であり、このパックはその完了を待ちません)。IMPIC の公式ドキュメントによると、新しい API が返すのは、ポルトガルの国立オープンデータポータルにある IMPIC のデータセット(https://dados.gov.pt/organizations/impic-i-p-instituto-dos-mercados-publicos-do)としてすでに公開しているファイルと同じフィールドです。データセットは入札公告と落札済み契約の2つで、それぞれ暦年ごとにファイルが分かれ、毎週更新されます。どちらのデータセットもサーバー側で検索できないため、このパックはリクエストごとにプロキシするのではなく、データを読み込んでストアを構築します(scripts/portugal-tenders/load-data.mjs)。これは Bruce の継続的なルール(2026-09-23)に従っています。ライブサービスで対応できない場合は、自分でストアを構築し、更新手段を用意して、すべての応答に data_as_of を含めること。

    ライセンス(dados.gov.pt のデータセット API からの引用。2026-10-15 にライブで確認): どちらのデータセットも "license": "other-pd"、"license_title": "Outra (Domínio Público)" としており、再利用と再配布を明示的に許可するパブリックドメインです。このケースには「ミラーには再利用許諾が必要」というルール(mirror-needs-grant-proxy-does-not、Bruce、2026-09-08)は該当しません。すでにライセンスで許諾されているためです。出典は、すべての応答の source/source_url フィールドに記載されています。

既知の制限 -- このパックを拡張する前にお読みください

このパックが保持するのは、直近2年間(現在の暦年とその前年)のデータであり、IMPIC の2012~2026年の全履歴ではありません。 落札済み契約だけでも、1年分で約190,000行/非圧縮 JSON 約340MB に達します(2026年の部分的な年について2026-10-15にライブで計測)。15年分では GB 単位になり、1つのパックの D1 データベースに保持するには大きすぎます。pt_announcement_search/pt_contract_search は、結果が見つからない場合の応答ごとに、読み込み済みの期間(ann_window_from/ann_window_to、contract_window_from/contract_window_to)を返すため、呼び出し元は本当に結果がない場合と、読み込み範囲外の日付の場合を区別できます。

buyer/supplier/query フィルターでは、アクセントや発音区別符号を無視した照合は行いません。 buyer: "camara" で検索しても、「Câmara Municipal de Lisboa」には一致しません。照合は大文字小文字を区別しない単純な部分文字列検索であり、「a」は「â」や「ã」と同等には扱われません。IMPIC の記録どおり、アクセント付きの表記で検索すれば一致します。実際に検索漏れが問題となる場合は、後から正規化/折りたたみ済みの列を使って対処できます。

IMPIC 独自の公告 ID(IdIncm)は、一意とは限りません。 「-1」というセンチネル値は、Diário da República ではなく地方官報(たとえばアゾレス諸島の JORAA)のみで公開された公告を示し、同じ年に数百件がこの値を共有しています。そのため、pt_announcement_detail は IdIncm 自体ではなく、このパックが割り当てる合成内部 ID をキーとして使います。この ID は pt_announcement_search から id として返されます。IdIncm も参照用に返されますが、元の値が「-1」センチネルの場合、応答では null になります。

構築するのは公告と落札済み契約だけです。 IMPIC は同じオープンデータポータルで契約変更データセットと発注者ディレクトリデータセットも公開していますが、fleet #3111 が求めた範囲(公告検索、契約検索、詳細)にこのパックを限定するため、ここでは構築していません。後からの変更で、上記のスキーマに触れずにどちらかを追加できます。

データの更新

node scripts/portugal-tenders/load-data.mjs --years 2025,2026 [--retain-from-year 2025] [--init-schema on the very first run] -- dados.gov.pt 独自のデータセット API を通じて、指定した各年の発表リソースと契約リソースをリアルタイムで解決します(ハードコードされた日付付きパスは使用しません。基盤となるストレージ URL にはタイムスタンプのセグメントが含まれており、IMPIC の週次更新のたびに変わります)。これらをダウンロードしてストリーミングし、D1 に読み込みます。発表データは、信頼できる自然キーがないため、1 年分を一度に全件削除して再読み込みします(「既知の不足」を参照)。契約データは idcontrato をキーとして upsert(INSERT OR REPLACE)するため、読み込み済みの年を再読み込みするだけで、IMPIC が更新した行が反映されます。Pipeworx の Cloudflare アカウントにログイン済みの wrangler と unzip CLI が必要です。

GitHub ワークフロー .github/workflows/portugal-tenders-refresh.yml は毎週実行され、現在の暦年と前年のデータを再取得し、--retain-from-year を更新して、テーブルが際限なく増えないようにします。

デプロイ前のスモークテスト(本番 D1 不要)
node --experimental-strip-types scripts/portugal-tenders/build-local-sqlite.mjs \
  --year 2026 --ann <a downloaded anuncios2026.json> --contract <its extracted Contratos2026.json> \
  --out /tmp/portugal-tenders.sqlite
node --experimental-strip-types scripts/portugal-tenders/smoke-local.mjs /tmp/portugal-tenders.sqlite

実際の IMPIC 年次ファイルから構築したローカル SQLite ファイルに対し、D1Like アダプターを使って、このパックの実際の callTool() を実行します。構成は scripts/italy-tenders/{build-local-sqlite,smoke-local}.mjs と同じです。

クイックスタート

MCP クライアント(Claude Desktop、Cursor、Windsurf など)に追加します。

{
  "mcpServers": {
    "portugal-tenders": {
      "url": "https://gateway.pipeworx.io/portugal-tenders/mcp"
    }
  }
}
このエンドポイントが実際に提供するもの

https://gateway.pipeworx.io/portugal-tenders/mcp の tools/list は、上の表にあるツールに加えて、共有 Pipeworx メタツール(ask_pipeworx、discover_tools、search_within、remember/recall など、ゲートウェイ全体で使える一連のツール)を返します。そのため、表示されるツール数はこの表より多くなります。現在、単一パックのエンドポイントには、そのパック独自のツールとともに、およそ 30 個の共有ツールが一覧表示されます。接続の initialize 応答には、その時点での正確な範囲が示され、これがその日の権威ある情報源となります。

これは意図的な設計であり、偶然の多重化ではありません。メタツールを使うことで、このパックが対応していない質問にも、カタログ全体を横断する ask_pipeworx 経由で回答できます。そのために 2 つ目の MCP サーバーを追加する必要はありません。現時点では、メタツールなしでパックのエンドポイントをマウントする方法はありません。追加のスキーマが、ルーティングの利点を上回るコンテキストを消費する場合は、複数のパックエンドポイントではなく、フルゲートウェイに一度接続してください。

このパックのツールだけでなく、すべてのパックのツールを直接一覧表示するには、Pipeworx フルゲートウェイに接続してください。

{
  "mcpServers": {
    "pipeworx": {
      "url": "https://gateway.pipeworx.io/mcp"
    }
  }
}

どちらの URL も同じゲートウェイと同じ 1808 以上のデータソースに接続します。違いは、どのパックのツールが直接一覧表示されるかだけです。どちらからでも ask_pipeworx を使ってすべてのツールにアクセスできます。

MCP クライアントがない場合:HTTP で呼び出す

curl -X POST https://gateway.pipeworx.io/v1/tools/pt_announcement_search \
  -H 'Content-Type: application/json' \
  -d '{"query":"seguros","date_from":"2026-01-01","date_to":"2026-01-31","limit":5}'

最初の呼び出しにアカウントは不要です。ツールを確認するには、GET https://gateway.pipeworx.io/v1/tools/pt_announcement_search を使います。ツールを探すには、{"query":"..."} を指定して POST https://gateway.pipeworx.io/v1/tools/search_packs を使います。

スタンドアロン(ゲートウェイアカウント不要)

このパッケージは、ローカルの stdio MCP サーバーとしても実行できます。Pipeworx アカウントも、ゲートウェイへの往復も不要です。

{
  "mcpServers": {
    "portugal-tenders": {
      "command": "npx",
      "args": ["-y", "@pipeworx/mcp-portugal-tenders"]
    }
  }
}

または、直接実行して起動を確認できます。

npx -y @pipeworx/mcp-portugal-tenders

stdin/stdout 経由で MCP を使用し、このパック独自のツールのみを対象に initialize/tools/list/tools/call に応答します。上記のゲートウェイ接続で追加される共有メタツールはありません。同じソース、同じツールで、ask_pipeworx によるルーティングはありません。

ask_pipeworx の使用

ツールを直接呼び出す代わりに、自然な英語で質問できます。これは、上記のパックエンドポイントでもフルゲートウェイでも利用できます。

ask_pipeworx({ question: "your question about Portugal Tenders data" })

ゲートウェイが適切なツールを選び、引数を自動的に設定します。

詳細

ライセンス

MIT

コメント

MCP は初めてですか?

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

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