toll402 – EU & Nordic Data (x402) について
toll402は、EUや北欧の公的データなどを必要とするエージェント向けのリモートMCPサーバー兼HTTP APIです。x402によるステーブルコインの従量課金を採用し、APIキーやアカウントは不要です。
主な機能
- 01EU VATと企業情報の検索
- 02制裁リストとMiCAの確認
- 03ECBおよびデンマークの為替レート
- 04北欧カレンダーとデンマークのエネルギーデータ
- 05トレンド、求人、広告、入札データ
活用シーン
- 01VAT番号と制裁対象の確認
- 02公的レートによる通貨換算
- 03稼働日と電力の安価な時間帯の確認
- 04入札、求人、公開広告ライブラリの検索
MCP 対応
https://toll402.io/mcp でストリーミングHTTPのMCPサーバーを提供し、データAPIをツールとして公開します。呼び出しはx402決済を利用し、未払いのリクエストにはエージェントが支払うための要件が返されます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://toll402.io/mcpclaude mcp add --transport http io-toll402-toll402 https://toll402.io/mcp{"mcpServers":{"io-toll402-toll402":{"type":"http","url":"https://toll402.io/mcp"}}}Cursor で開く{"servers":{"io-toll402-toll402":{"type":"http","url":"https://toll402.io/mcp"}}}VS Code で開く{"mcpServers":{"io-toll402-toll402":{"type":"http","url":"https://toll402.io/mcp"}}}{"mcpServers":{"io-toll402-toll402":{"serverUrl":"https://toll402.io/mcp"}}}コマンドはターミナルで実行し、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.
- Website: https://toll402.io
- MCP (streamable HTTP):
https://toll402.io/mcp - XRPL merchant file:
/.well-known/trustline-merchant.txt - Discovery:
/llms.txt·/openapi.json·/.well-known/x402·/.well-known/mcp.json·/samples(free example outputs)
Endpoints and prices
| MCP tool | HTTP endpoint | What it returns | Price (USD) |
|---|---|---|---|
eu_vat_check | GET /v1/eu/vat-check?vat=DK10150817 | Live EU VAT number validation against the European Commission's VIES service | 0.01 |
no_company | GET /v1/no/company?orgnr=923609016 | Norwegian company lookup in Brønnøysund Enhetsregisteret by orgnr or name (NLOD 2.0) | 0.01 |
fi_company | GET /v1/fi/company?businessId=0112038-9 | Finnish company lookup in PRH/YTJ open data v3 by Business ID or name (CC BY 4.0) | 0.01 |
lei_lookup | GET /v1/lei?lei=5493001KJTIIGC8Y1R12 | Legal Entity Identifier lookup in the GLEIF Global LEI Index by LEI or legal name (CC0) | 0.01 |
eu_vat_rates | GET /v1/eu/vat-rates?country=DK | Standard, reduced, super-reduced and parking VAT rates for EU member states | 0.005 |
eu_sanctions | GET /v1/eu/sanctions?name=Wagner | Screen a person or company name against the EU consolidated financial sanctions list (fuzzy match, refreshed every 6 h) | 0.02 |
sanctions_screen_global | GET /v1/sanctions/screen?name=Wagner | Screen 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_status | GET /v1/eu/mica/token?token=EURC | MiCA e-money-token status from ESMA's register | 0.01 |
mica_casp | GET /v1/eu/mica/casp?name=Coinbase | Whether a crypto firm holds a MiCA CASP authorisation | 0.01 |
fx_ecb | GET /v1/fx/convert?from=USD&to=DKK&amount=250 | Conversion at official ECB euro reference rates (~30 currencies, historical dates) | 0.005 |
fx_dkk | GET /v1/fx/dkk?currency=USD&amount=100 | Official Danmarks Nationalbank DKK rates | 0.005 |
eu_holidays | GET /v1/calendar/holidays?country=SE&year=2026 | Public holidays, EU/EEA/Nordic (+CH, GB) | 0.005 |
eu_working_days | GET /v1/calendar/working-days?country=DK&from=2026-12-01&to=2026-12-31 | Working days between dates, or date + N working days | 0.005 |
dk_bank_days | GET /v1/dk/bank-days?date=2026-12-24&add=3 | Danish banking days and payment deadlines | 0.005 |
dk_power_price | GET /v1/dk/power-price?area=DK2 | Day-ahead electricity spot prices, 15-min (DK1, DK2, NO2, SE3, SE4, DE-LU) | 0.005 |
dk_power_cheapest_window | GET /v1/dk/power-cheapest-window?area=DK1&hours=3 | Cheapest N-hour window for running a load (EV charging, heat pumps, batch jobs), same zones | 0.005 |
dk_co2 | GET /v1/dk/co2?area=DK2 | CO₂ intensity of Danish electricity | 0.005 |
dk_address | GET /v1/dk/address?q=Rådhuspladsen 1, København | Danish address validation + geocoding (official Danish Address Register, DAR) | 0.005 |
dk_weather | GET /v1/dk/weather?lat=55.68&lon=12.57 | Latest DMI weather observation from the nearest station | 0.005 |
dk_sea_level | GET /v1/dk/port-sea-level?port=Esbjerg | Sea level and water temperature at Danish ports | 0.005 |
stablecoin_receipt | GET /v1/accounting/stablecoin-receipt?token=USDC&amount=12.5&date=2026-10-27 | EUR/DKK accounting voucher data for a stablecoin payment | 0.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 returns503and 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 tool | HTTP endpoint | What it returns | Price (USD) |
|---|---|---|---|
google_trends | GET /v1/trends/google?keywords=bitcoin,ethereum&geo=DK&timeRange=today%203-m | Google 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_jobs | GET /v1/jobs/indeed?keywords=developer&location=København&country=dk&maxItems=20 | Live 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, includeDescription | 0.02 |
meta_ads | GET /v1/ads/meta?keywords=lego&country=DK&maxItems=10 | Search 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, sort | 0.02 |
linkedin_ads | GET /v1/ads/linkedin?advertiser=HubSpot&maxItems=10 | Search 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 source | 0.02 |
eu_tenders | GET /v1/tenders/eu?keywords=software&countries=DK&onlyOpen=true&maxItems=10 | EU 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.eu | 0.03 |
maritime_vessels | GET /v1/maritime/vessels?lat=60.15&lon=24.95&radiusKm=20&maxItems=10 | Live 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 navigation | 0.02 |
maritime_port_calls | GET /v1/maritime/port-calls?ports=FIHEL&maxItems=10 | Port 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 ≤15 | 0.02 |
eudr_check | `GET /v1/eu/eudr?codes=1801%2000%2000 | CI,4407%2011 | SE&companySize=large_or_medium` |
cbam_calc | `GET /v1/eu/cbam?lines=7208%2051%2020 | TR | 100 |
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
| Rail | Network | Facilitator |
|---|---|---|
| USDC, EURC | Base (eip155:8453) | PayAI |
| USDC | Polygon (eip155:137) | PayAI |
| USDC | Arc (eip155:5042) | TRDEFI |
| XRP | XRP Ledger (xrpl:0) | t54 |
| RLUSD (non-EU buyers only) | XRP Ledger, Base | t54, 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.
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。