vergabe-api: German public procurement notices について
vergabe-apiは、ドイツの公共調達公告をソフトウェアエージェントや調達ツール向けのJSONに正規化します。CPV、NUTS、期限などの項目を提供し、無料サンプルと従量課金の検索を利用できます。
主な機能
- 01公告をJSONに正規化
- 02CPV、NUTS、日付で絞り込み
- 03ロット、期限、落札情報を提供
- 04無料の統計とサンプルAPI
- 05x402による従量課金
活用シーン
- 01地域やカテゴリで入札を絞り込む
- 02期限が近い案件を探す
- 03個別公告の全レコードを取得
MCP 対応
リモートのStreamable HTTP MCPサーバーは、無料のサンプル、統計、API説明ツールを提供します。リモートの有料ツールは支払い要件のみを返します。ローカルのstdio MCPサーバーでは、ウォレットを使って検索や公告詳細の取得を従量課金で実行できます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://vergabe-api.applehorsefrog.workers.dev/mcpclaude mcp add --transport http applehorsefrog-vergabe-api https://vergabe-api.applehorsefrog.workers.dev/mcp{"mcpServers":{"applehorsefrog-vergabe-api":{"type":"http","url":"https://vergabe-api.applehorsefrog.workers.dev/mcp"}}}Cursor で開く{"servers":{"applehorsefrog-vergabe-api":{"type":"http","url":"https://vergabe-api.applehorsefrog.workers.dev/mcp"}}}VS Code で開く{"mcpServers":{"applehorsefrog-vergabe-api":{"type":"http","url":"https://vergabe-api.applehorsefrog.workers.dev/mcp"}}}{"mcpServers":{"applehorsefrog-vergabe-api":{"serverUrl":"https://vergabe-api.applehorsefrog.workers.dev/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
5| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| cpv | string | いいえ | CPV コードまたはプレフィックス。例:72(IT)、45(建設) |
詳細
vergabe-api
ドイツの公共調達公告を、EU の基準額以上・未満の両方について、ソフトウェアエージェントや調達ツール向けに正規化した JSON API として提供します。x402(HTTP 402、USDC)による従量課金です。アカウント、API キー、サブスクリプションは不要です。
ベース URL:https://vergabe-api.applehorsefrog.workers.dev(viono-insights.de 配下のブランドドメインは後日公開予定です)。2026-09-14 以降、決済は Base mainnet 上で USDC により精算されます。ファシリテーターは PayAI です。
利用できるデータ
ドイツの公式公告サービス(Datenservice Öffentlicher Einkauf、eForms-DE)では、毎日およそ 1,000 件の公告が公開されます。元データは 1 日あたり 20 MB の XML ファイルを収めた ZIP で、組織の連絡先、ロット、期限、分類情報が UBL 拡張に散在しています。この API は各公告を次のようなフラットなレコードに変換します。
| フィールド | 意味 |
|---|---|
id, notice_id, version | 公告の UUID とバージョン |
published, issue_date | エクスポートの公開日、公告に記載された発行日 |
kind | competition(入札公告)、result(落札結果)、planning(計画)、change(変更) |
notice_type, subtype, procedure, legal_basis, nature | eForms コード(cn-standard、open、vgv、works など) |
title, description | ドイツ語のテキスト。個人の連絡先情報は削除済みです |
cpv_main, cpv_additional | チェックディジットなしの CPV コード |
buyer_name, buyer_type, buyer_city, buyer_postal, buyer_nuts, buyer_website | 発注機関(組織レベルのみ) |
place_nuts, place_city | 履行場所 |
estimated_value, currency | 記載がある場合 |
deadline_date, deadline_time, deadline_kind | 最も早いロットの期限。tender または participation |
documents_url, submission_url | 入札書類の掲載場所 |
lots | タイトル、CPV、NUTS、金額、期限、期間を含むロットの配列 |
winners, total_awarded | 落札公告の場合の、組織名のみの落札者情報 |
source_url | oeffentlichevergabe.de 上の元の公告 |
サンプル日のデータ範囲(2026-09-10):公告 1,067 件、入札公告 589 件、そのうち提出期限の記載があるもの 569 件、CPV の記載があるもの 1,036 件、NUTS の記載があるもの 985 件。
エンドポイント
| エンドポイント | 価格 | 備考 |
|---|---|---|
GET / | 無料 | サービスの説明 |
GET /openapi.json | 無料 | OpenAPI 3.1 |
GET /v1/stats | 無料 | 過去 30 日間の日別公告数 |
GET /v1/sample?cpv=72 | 無料 | 最新の入札公告 5 件。フィールドは簡潔な形式 |
GET /v1/notices | $0.01 | フィルター付き一覧。最大 100 件 |
GET /v1/notice/{id} | $0.002 | 1 件の全レコード |
POST /mcp | 無料 | リモート MCP サーバー(Streamable HTTP)、無料のツール |
GET /.well-known/x402 | 無料 | x402 ディスカバリーマニフェスト |
/v1/notices のフィルター
kind(デフォルトは competition。result、planning、change、all)、cpv(コードまたは接頭辞。カンマ区切り:45,7131)、nuts(接頭辞:DE2,DE1)、q(タイトル、説明、発注者に含まれる部分文字列)、since / until(公開日)、deadline_after / deadline_before、nature、procedure、legal_basis、buyer_type、min_value、limit(最大 100)、offset(最大 5000)、fields=full(ロットを含むすべての列)、sort=deadline。
GET /v1/notices?cpv=45,71&nuts=DE2&deadline_after=2026-09-20&limit=20
GET /v1/notices?q=Photovoltaik&since=2026-09-01&fields=full
GET /v1/notices?kind=result&cpv=72&since=2026-09-01
x402 での支払い
支払いなしでリクエストすると、金額(USDC)、ネットワーク、受取アドレスを示す PAYMENT-REQUIRED ヘッダーとともに 402 が返されます。たとえば @x402/fetch のような x402 クライアントを使えば、これらの処理は自動的に行われます。
import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm";
import { privateKeyToAccount } from "viem/accounts";
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`); // holds USDC on Base
const fetchWithPay = wrapFetchWithPaymentFromConfig(fetch, {
schemes: [{ network: "eip155:8453", client: new ExactEvmScheme(account) }],
});
const r = await fetchWithPay("https://vergabe-api.applehorsefrog.workers.dev/v1/notices?cpv=72");
console.log(await r.json());
価格は米ドル建てで、Base(eip155:8453)上で USDC により精算されます。当方から追加で請求する手数料はありません。wrangler.jsonc で X402_NETWORK=eip155:84532 と X402_FACILITATOR=https://x402.org/facilitator を設定すれば、同じコードを Base Sepolia に対して実行できます。
MCP サーバー
MCP クライアント(Claude Desktop、Claude Code、Cursor、その他の MCP ホスト)からデータを使用する方法は 2 つあります。
リモート、無料ツールのみ(インストール不要):ストリーミング可能な HTTP エンドポイント https://vergabe-api.applehorsefrog.workers.dev/mcp で、sample_tenders、tender_stats、describe_api を利用できます。有料ツールも一覧に表示されますが、リモートサーバーにはウォレットがないため、支払い要件のみを返します。
ローカル、有料ツールあり(stdio、Node 20+):クライアントが、ユーザー自身が管理するウォレットから呼び出しごとに支払います。
{
"mcpServers": {
"vergabe": {
"command": "npx",
"args": ["-y", "github:applehorsefrog/vergabe-api"],
"env": { "VERGABE_PAYER_KEY": "0x<private key of a wallet holding USDC on Base>" }
}
}
}
ツール:search_tenders(1 回の呼び出しにつき $0.01、/v1/notices のすべてのフィルター)、get_tender($0.002)、sample_tenders、tender_stats、describe_api(無料)。VERGABE_PAYER_KEY が設定されていない場合、有料ツールはデータの代わりに x402 の支払い要件と HTTP URL を返します。このキーには残高の少ない専用ウォレットを使用してください。サーバーがキーをどこかに送信することはありません。各呼び出しの正確な料金分の USDC 送金承認(EIP-3009)に署名するだけです。ソース:mcp/server.mjs。
データソース、ライセンス、プライバシー
データ:Datenservice Öffentlicher Einkauf、https://oeffentlichevergabe.de、CC0 1.0 の下で公開されています。すべてのレスポンスには X-Data-Source と X-Data-License ヘッダーが含まれます。このリポジトリのコード:MIT。
連絡担当者、メールアドレス、電話番号、FAX 番号は、インポート時(etl/etl.py)に、構造化フィールドと自由記述の両方から削除されます。組織レベルのデータのみを提供します。削除されずに残っている個人データを見つけた場合は、Issue を作成してください。削除します。
これは技術的なデータサービスであり、法律上の助言ではありません。入札前に、期限と条件を必ず情報源で確認してください。
実行方法
src/index.ts:@x402/hono決済ミドルウェア、D1(SQLite)データベース、リモート MCP エンドポイントを備えた Cloudflare Worker(Hono)。mcp/server.mjs:@x402/fetchを使用して有料エンドポイントに支払うローカル MCP サーバー(stdio)。etl/etl.py:日次 eForms ZIP をダウンロードし、lxml で解析して個人データを除去し、INSERT文を書き出します。.github/workflows/daily-etl.yml:ETL を 1 日 2 回(06:30 と 14:00 UTC)実行し、直近 3 日分を再インポートして、wrangler d1 executeで行を読み込みます。
ローカル開発:
npm install
npx wrangler d1 execute vergabe --local --file=schema.sql
python etl/etl.py --day 2026-09-10 --out etl/out/d.sql && for f in etl/out/d*.sql; do npx wrangler d1 execute vergabe --local --file=$f; done
npx wrangler dev
提供者、法的通知、プライバシー
Dr. Josua Decker、Viono Insights(https://viono-insights.de)が運営しています。法的通知(Impressum、§ 5 DDG):https://viono-insights.de/impressum.html。`GET /impressum でも提供されます。この API のプライバシー通知(GDPR 第 13 条):GET /datenschutz`。連絡先:[email protected]。このリポジトリを公開している GitHub アカウントは、提供者に代わって Claude を使用して運用されている自動化アカウントです。
開示
このサービスは、AI(Claude)の多大な支援を受けて構築されており、提供者が内容を確認し、責任を負います。Issue とプルリクエストを歓迎します。自動化によるコントリビューションには、その旨が表示されます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。