mcpField
T
toll402 – EU & Nordic Data (x402)

toll402 – EU & Nordic Data (x402)

リモート
toll402.io法務・行政
リポジトリ公式サイト

toll402 – EU & Nordic Data (x402) について

toll402は、EUや北欧の公的データなどを必要とするエージェント向けのリモートMCPサーバー兼HTTP APIです。x402によるステーブルコインの従量課金を採用し、APIキーやアカウントは不要です。

主な機能

  1. 01EU VATと企業情報の検索
  2. 02制裁リストとMiCAの確認
  3. 03ECBおよびデンマークの為替レート
  4. 04北欧カレンダーとデンマークのエネルギーデータ
  5. 05トレンド、求人、広告、入札データ

活用シーン

  1. 01VAT番号と制裁対象の確認
  2. 02公的レートによる通貨換算
  3. 03稼働日と電力の安価な時間帯の確認
  4. 04入札、求人、公開広告ライブラリの検索

MCP 対応

https://toll402.io/mcp でストリーミングHTTPのMCPサーバーを提供し、データAPIをツールとして公開します。呼び出しはx402決済を利用し、未払いのリクエストにはエージェントが支払うための要件が返されます。

設定

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

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

ツール

README(原文)English

プロジェクトの README より

この README の日本語訳はまだありません。以下は英語の原文です。日本語の紹介はページ上部をご覧ください。

toll402: EU & Nordic data for AI agents, paid per call (x402 + MCP)

25 live data endpoints · $0.005–$0.03 per call · no API key, no account, no signup · non-custodial

x402 · MCP · AI agents · agent payments · USDC / EURC on Base · USDC on Polygon & Arc · XRP & RLUSD on the XRP Ledger (RLUSD: non-EU buyers only) · EU VAT / VIES · EU, OFAC, UK & UN sanctions screening · MiCA · ECB FX · Nordic calendars · Danish energy data · Google Trends · Indeed jobs (DK/SE/NO + 57 countries)

Runnable examples (curl, Node x402 client, MCP configs): AtlasDataDenmark/toll402-examples

toll402 is an HTTP API and a remote MCP server that sells official EU and Danish/Nordic public-sector data to AI agents one call at a time. It uses the x402 protocol: an unpaid request gets 402 Payment Required with the payment requirements in the PAYMENT-REQUIRED header (x402 v2) and mirrored in the JSON body (x402Version + accepts), the agent's wallet signs a stablecoin payment, and the call goes through. Funds go straight from the buyer to the seller's address. toll402 never holds funds.

Why: agents that do invoicing, payroll, compliance, logistics or energy scheduling keep needing small facts like "is this VAT number valid?", "is the 24th a Danish banking day?" or "what is the ECB rate for that date?". Today each of those means a separate API key and account. With toll402 one wallet covers all of them, and you pay only for the calls you make.

Endpoints and prices

MCP toolHTTP endpointWhat it returnsPrice (USD)
eu_vat_checkGET /v1/eu/vat-check?vat=DK10150817Live EU VAT number validation against the European Commission's VIES service0.01
no_companyGET /v1/no/company?orgnr=923609016Norwegian company lookup in Brønnøysund Enhetsregisteret by orgnr or name (NLOD 2.0)0.01
fi_companyGET /v1/fi/company?businessId=0112038-9Finnish company lookup in PRH/YTJ open data v3 by Business ID or name (CC BY 4.0)0.01
lei_lookupGET /v1/lei?lei=5493001KJTIIGC8Y1R12Legal Entity Identifier lookup in the GLEIF Global LEI Index by LEI or legal name (CC0)0.01
eu_vat_ratesGET /v1/eu/vat-rates?country=DKStandard, reduced, super-reduced and parking VAT rates for EU member states0.005
eu_sanctionsGET /v1/eu/sanctions?name=WagnerScreen a person or company name against the EU consolidated financial sanctions list (fuzzy match, refreshed every 6 h)0.02
sanctions_screen_globalGET /v1/sanctions/screen?name=WagnerScreen a name against EU, US OFAC SDN, UK Sanctions List (FCDO, incl. HM Treasury/OFSI asset freezes) and UN Security Council lists at once; per match: list, programme, reference, match_score, matched_alias (lists=eu,ofac,uk,un to narrow; refreshed every 6 h)0.03
mica_token_statusGET /v1/eu/mica/token?token=EURCMiCA e-money-token status from ESMA's register0.01
mica_caspGET /v1/eu/mica/casp?name=CoinbaseWhether a crypto firm holds a MiCA CASP authorisation0.01
fx_ecbGET /v1/fx/convert?from=USD&to=DKK&amount=250Conversion at official ECB euro reference rates (~30 currencies, historical dates)0.005
fx_dkkGET /v1/fx/dkk?currency=USD&amount=100Official Danmarks Nationalbank DKK rates0.005
eu_holidaysGET /v1/calendar/holidays?country=SE&year=2026Public holidays, EU/EEA/Nordic (+CH, GB)0.005
eu_working_daysGET /v1/calendar/working-days?country=DK&from=2026-12-01&to=2026-12-31Working days between dates, or date + N working days0.005
dk_bank_daysGET /v1/dk/bank-days?date=2026-12-24&add=3Danish banking days and payment deadlines0.005
dk_power_priceGET /v1/dk/power-price?area=DK2Day-ahead electricity spot prices, 15-min (DK1, DK2, NO2, SE3, SE4, DE-LU)0.005
dk_power_cheapest_windowGET /v1/dk/power-cheapest-window?area=DK1&hours=3Cheapest N-hour window for running a load (EV charging, heat pumps, batch jobs), same zones0.005
dk_co2GET /v1/dk/co2?area=DK2CO₂ intensity of Danish electricity0.005
dk_addressGET /v1/dk/address?q=Rådhuspladsen 1, KøbenhavnDanish address validation + geocoding (official Danish Address Register, DAR)0.005
dk_weatherGET /v1/dk/weather?lat=55.68&lon=12.57Latest DMI weather observation from the nearest station0.005
dk_sea_levelGET /v1/dk/port-sea-level?port=EsbjergSea level and water temperature at Danish ports0.005
stablecoin_receiptGET /v1/accounting/stablecoin-receipt?token=USDC&amount=12.5&date=2026-10-27EUR/DKK accounting voucher data for a stablecoin payment0.01

Temporarily unavailable: dk_company (/v1/dk/company) has been taken out of the paid catalog while we move it to the official CVR source from the Danish Business Authority, because the previous upstream's terms do not allow paid reuse. The path returns 503 and never asks for payment. For a Danish VAT/CVR number, eu_vat_check (VIES) still returns the registered name and address.

From Atlas Data (third-party seller)

These endpoints are provided by Atlas Data, the first outside seller on toll402. toll402 calls Atlas Data's own Apify actors (atlasdata/google-trends-scraper-reliable, atlasdata/indeed-jobs-scraper-reliable, atlasdata/facebook-ad-library-scraper-reliable, atlasdata/linkedin-ad-library-scraper-reliable, atlasdata/eu-tenders-ted-scraper-reliable, atlasdata/finland-ais-vessel-tracker-reliable, atlasdata/eudr-scope-risk-checker-reliable, atlasdata/cbam-cost-calculator-reliable) and returns clean JSON with source and provider set to Atlas Data. Payment works the same as for the other endpoints, on the same rails and to the same addresses.

MCP toolHTTP endpointWhat it returnsPrice (USD)
google_trendsGET /v1/trends/google?keywords=bitcoin,ethereum&geo=DK&timeRange=today%203-mGoogle Trends for 1–5 keywords: relative interest over time (0–100), interest by region, top and rising related queries. Optional category, property (web/images/news/youtube/shopping), compare, maxItems (≤20 per list)0.03
indeed_jobsGET /v1/jobs/indeed?keywords=developer&location=København&country=dk&maxItems=20Live Indeed job listings (Denmark, Sweden, Norway and 57 other Indeed country sites): title, company, location, salary where shown, job type, remote flag, posting date, apply link. Up to 3 keywords, maxItems ≤50; optional radius, datePosted, jobType, remote, minSalary, sort, includeDescription0.02
meta_adsGET /v1/ads/meta?keywords=lego&country=DK&maxItems=10Search the Meta (Facebook/Instagram) Ad Library, Meta's public ad-transparency archive, by keyword or advertiser pageIds: advertiser page, ad text, format, landing page, platforms, start/end dates, active status, and spend/impression ranges where Meta publishes them. Up to 3 searches, maxItems ≤20; optional activeStatus, adType, mediaType, platforms, languages, exactPhrase, dateFrom, dateTo, sort0.02
linkedin_adsGET /v1/ads/linkedin?advertiser=HubSpot&maxItems=10Search the LinkedIn Ad Library, LinkedIn's public ad-transparency archive, by advertiser or keyword: advertiser, headline, ad text, format, landing page; with includeDetails=true also run dates, impression ranges and targeting. Optional countries, dateRange or startDate/endDate, maxItems ≤20. Best-effort: LinkedIn sometimes blocks automated access; a failed run returns 503 within about 40 s and is not charged. Use meta_ads for a more reliable ad source0.02
eu_tendersGET /v1/tenders/eu?keywords=software&countries=DK&onlyOpen=true&maxItems=10EU public procurement notices from TED (Tenders Electronic Daily, official TED Search API): title, buyer, country, CPV, procedure, estimated/awarded value, winners, deadline and TED links, newest first. Filters: keywords (≤5), countries (≤10), cpvCodes (≤10), noticeType, publishedSince (date or e.g. 7 days; default 30 days), publishedUntil, onlyOpen, language, expertQuery (≤300 chars), maxItems ≤25 (default 10). © European Union, https://ted.europa.eu0.03
maritime_vesselsGET /v1/maritime/vessels?lat=60.15&lon=24.95&radiusKm=20&maxItems=10Live AIS vessel positions, northern Baltic Sea and Finland only (Finnish AIS base stations, about 57–66°N, 17–35°E; not global AIS): ships near a point (radiusKm ≤1000, the circle must reach the coverage area) or by mmsi, imo, vesselName, shipCategories; name, IMO, type, speed, course, nav status, destination, ETA, size. maxItems ≤30. Not for navigation0.02
maritime_port_callsGET /v1/maritime/port-calls?ports=FIHEL&maxItems=10Port calls at Finnish ports (Portnet): expected/arrived/departed ships with ETA/ETD/ATA/ATD, berth, vessel name/IMO/MMSI/flag/type, previous/next port. Filters: ports (Finnish UN/LOCODEs), mmsi, imo, vesselName, from/to, status; maxItems ≤150.02
eudr_check`GET /v1/eu/eudr?codes=1801%2000%2000CI,4407%2011SE&companySize=large_or_medium`
cbam_calc`GET /v1/eu/cbam?lines=7208%2051%2020TR100

Input is checked strictly before the 402 step. Only the listed parameters are accepted, the keyword count is capped and maxItems is clamped. Bad input returns 400 with no payment requested. A request with no parameters at all (directory probes) gets the normal 402; if someone pays it anyway, the handler returns 400 and the payment is not settled. Identical queries are cached for up to 6 h (trends, ad libraries), 24 h (EUDR, CBAM), 1 h (jobs, TED tenders), 15 min (port calls) or 3 min (vessel positions), and responses include cached and fetched_at. If the upstream run fails (503, upstream temporarily unavailable) or times out (504; about 40–55 s), or Google Trends has no data (404), the payment is not settled: only 2xx responses are ever settled. Google Trends values are relative interest, not absolute search volume. Ad library results contain only what the public ad library shows; for LinkedIn advertisers that are individual people, profile URL and photo are left out, and message-ad sender names are never returned. /v1/ads/linkedin is best-effort: LinkedIn sometimes blocks automated access, so a run can fail (503) or time out (504); neither is charged.

Prices are per successful call: payment is verified first, and only settled after the endpoint returns a successful (2xx) response. On Base and Polygon the minimum is $0.01 per call, so the $0.005 tools cost $0.01 there; on XRPL and Arc they cost $0.005. The live catalog (prices, input schemas, example outputs) is always at /.well-known/x402 and /openapi.json.

Payment rails

RailNetworkFacilitator
USDC, EURCBase (eip155:8453)PayAI
USDCPolygon (eip155:137)PayAI
USDCArc (eip155:5042)TRDEFI
XRPXRP Ledger (xrpl:0)t54
RLUSD (non-EU buyers only)XRP Ledger, Baset54, PayAI

RLUSD is offered only to buyers outside the EU, because it is not a MiCA-authorised e-money token. Buyers in the EU see USDC, EURC and XRP. Solana USDC is planned.

Use it from Claude Desktop, Cursor or VS Code (MCP)

Cursor (~/.cursor/mcp.json), VS Code and other clients that support remote MCP servers:

{
  "mcpServers": {
    "toll402": { "url": "https://toll402.io/mcp" }
  }
}

Claude Desktop (claude_desktop_config.json), via the mcp-remote bridge:

{
  "mcpServers": {
    "toll402": { "command": "npx", "args": ["-y", "mcp-remote", "https://toll402.io/mcp"] }
  }
}

tools/list is free. A tool call returns an x402 payment-required error until it is paid, so paid calls need an x402-capable MCP client such as @x402/mcp (example below).

Use it over HTTP

curl -i "https://toll402.io/v1/eu/vat-rates?country=DE"
# HTTP/2 402
# PAYMENT-REQUIRED: <base64 JSON listing the accepted rails, amounts and payTo>
# body: {"x402Version":2,"error":"Payment required","resource":{...},"accepts":[...same requirements...]}
x402 client (TypeScript, @x402/fetch)
import { x402Client, wrapFetchWithPayment } from "@x402/fetch";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";

// Use a dedicated agent wallet holding a small amount of USDC on Base
const client = new x402Client();
registerExactEvmScheme(client, { signer: privateKeyToAccount(process.env.AGENT_KEY as `0x${string}`) });

const pay = wrapFetchWithPayment(fetch, client);
const res = await pay("https://toll402.io/v1/eu/vat-check?vat=DK10150817");
console.log(await res.json());
Paid MCP calls (TypeScript, @x402/mcp)
import { createx402MCPClient } from "@x402/mcp";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
import { ExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";

const account = privateKeyToAccount(process.env.AGENT_KEY as `0x${string}`);
const mcp = createx402MCPClient({
  name: "my-agent", version: "1.0.0",
  schemes: [{ network: "eip155:8453", client: new ExactEvmScheme(account) }],
  autoPayment: true,
});
await mcp.connect(new StreamableHTTPClientTransport(new URL("https://toll402.io/mcp")));
const r = await mcp.callTool("dk_bank_days", { date: "2026-12-24", add: "3" });
console.log(r.content[0].text);

Self-hosting and development

Production runs on Cloudflare Workers (src/worker.mjs, Hono + @x402/hono). There is also a local Express gateway (src/gateway.mjs) for tests.

npm install
npm test                      # unit + integration tests
cp .env.example .env.testnet  # public receive addresses only, never keys
npm run gateway               # local gateway on testnets

To add an endpoint, add a file in src/endpoints/ and register it in src/endpoints/index.mjs. It is then served over HTTP and MCP and appears in the manifests and tests automatically.

Data sources

European Commission (VIES, EU VAT rates, EU sanctions list), U.S. Treasury OFAC SDN list (public domain; fetched from OFAC, or when OFAC's server is unreachable from Cloudflare, from the SDN entries of the U.S. International Trade Administration Consolidated Screening List at data.trade.gov, also public domain), UK Sanctions List (FCDO; contains public sector information licensed under the Open Government Licence v3.0), UN Security Council Consolidated List, Brønnøysund Register Centre (Enhetsregisteret, NLOD 2.0), Finnish Patent and Registration Office / YTJ open data (CC BY 4.0), GLEIF Global LEI Index (CC0), ESMA (interim MiCA register), European Central Bank, Danmarks Nationalbank, Energi Data Service (Source: Energinet, energidataservice.dk, CC BY 4.0; also used for NO2/SE3/SE4/DE prices), DMI, Danish Address Register (DAR, © Klimadatastyrelsen, CC BY 4.0, via adressevaelger.dk). Google Trends, Indeed, Meta Ad Library, LinkedIn Ad Library, TED and Digitraffic data are collected, and the EUDR and CBAM calculations are made, by Atlas Data. EUDR/CBAM: © European Union, reuse under Commission Decision 2011/833/EU; informational only, not legal or tax advice and not legally binding (only the Official Journal texts are authentic). TED notices: © European Union, https://ted.europa.eu (reuse under Commission Decision 2011/833/EU). AIS and port calls: Source: Fintraffic / digitraffic.fi, license CC 4.0 BY. toll402 and Atlas Data are not affiliated with Google, Indeed, Meta or LinkedIn. toll402 is not affiliated with any of these bodies. Check legally binding facts with the primary source.

コメント

MCP は初めてですか?

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

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