mcpField
T
Tanilo

Tanilo

ローカル
github.com/TKCollective金融データ32 週間前に更新

Tanilo について

TaniloのMCPサーバーはTanilo APIの契約価格チェックと支出上限チェックをMCPクライアントに公開し、エージェントが提示された条件や予算上限を確認してからオファーの承諾や購入を行えるようにします。結果には署名付きレシートを含められますが、鍵や支払いを扱わず、実際の予算残高も取得しません。

主な機能

  1. 01提示された契約条件と価格を照合
  2. 02数量から合計額を計算し上限を確認
  3. 03検証済み、矛盾、不確定の結果を返却
  4. 04署名付きチェックレシートを生成
  5. 05API状態とディスカバリ文書を公開

活用シーン

  1. 01オファー承諾前の単価確認
  2. 02購入前の残り支出上限の確認
  3. 03Tanilo APIの状態と利用可能なルートの確認

MCP 対応

Tanilo MCPサーバーはhttps://api.tanilo.ioに接続し、check-contract-price、check-spend-cap、check-health、get-manifestの各ツールをクライアントに提供します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"tkcollective-tanilo": {
"command": "npx",
"args": [
"-y",
"tanilo-mcp"
]
}
}
}
起動コマンドnpx -y tanilo-mcp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmtanilo-mcp3.1.0

ツール

3

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
offerobjectはい確認するオファー
offer.skustringいいえ製品またはリソースの識別子。例:"api.weather.v1"
offer.unitstringはい価格が適用される単位。例:"call"
offer.sellerstringいいえ販売者の識別子。例:"seller.example"
offer.currencystringはいISO 4217 コード。例:"USD"
offer.quantitystringいいえ提示された数量。10 進数の文字列で指定します。例:"1"
offer.offered_atstringいいえオファー提示時刻。RFC 3339 UTC 形式。例:"2026-10-01T12:00:00Z"
offer.unit_pricestringはい単位あたりの提示価格。小数文字列で指定します。例:"2.00"
termsarrayはい指定する条件(呼び出し元が指定したもので、真正性は検証されません)。空でもかまいません。その場合、結果は不確定となり、理由は no_applicable_term です。
agent_idstringいいえレシートに記録する任意のエージェント識別子。指定しない場合、レシートには did:ao:verify-facts:anonymous が含まれます。
claim_hashstringいいえ任意の subject.claim_hash。購入を識別できる任意のハッシュを指定できます。既定では、入力オブジェクトの正規 JSON の SHA-256 が使用されます。

詳細

Tanilo MCP サーバー

Claude Desktop、Cursor、Windsurf、またはその他の MCP クライアントを、https://api.tanilo.io の Tanilo API に接続する MCP サーバーです。

Tanilo は、AI エージェントが行動する前に、前提条件を確認します。このサーバーは、契約価格チェックと支出上限チェックの 2 つのチェック、および 2 つのステータス文書を提供します。呼び出すエンドポイントは、キー不要でレート制限のある無料ベータ版として稼働中です。このサーバーはシークレットを保持せず、支払いも行いません。

Tanilo は 2026 年 9 月まで AgentOracle という名称でした。バージョン 2.1.2 までのバージョンは agentoracle-mcp として公開されていましたが、このパッケージは現在メンテナンスされていません。

この README ではバージョン 3.1.0 について説明します。以下の出力は、稼働中の API に対してツールを実行して取得したものです。契約価格チェックは 2026-10-08、支出上限チェックは 2026-10-13 に取得しました。


インストール

npx tanilo-mcp
Claude Desktop

Claude Desktop の設定ファイルを開きます。

Mac: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

以下を追加して、Claude Desktop を再起動します。

{
  "mcpServers": {
    "tanilo": {
      "command": "npx",
      "args": ["-y", "tanilo-mcp"]
    }
  }
}

Cursor(Settings → MCP → Add Server)と Windsurf(Settings → MCP Servers → Add)でも、同じ tanilo ブロックを使用します。


ツール

check-contract-price

このオファーは、指定した条件に合っていますか?エージェントがオファーを受け入れる前に、contract_price_match が、オファーの単価と指定された条件のうち該当するものを比較し、署名に成功した場合は結果に署名します。

モデルは関与しません。結果は算術と厳密な比較によるもので、同じ入力を持つ人なら誰でも再計算できます。条件は利用者が指定します。Tanilo は利用者の契約を保持したり、参照したりしません。結果は「検証済み」「矛盾あり」、または理由付きの「判定不能」の 3 種類です。「検証済み」は、価格が指定された条件と一致することを示します。支払うかどうかは、利用者のポリシーに基づいて判断します。

入力:offer(unit_price、currency、unit、および任意の quantity、seller、sku、offered_at)と terms(リスト。各項目には agreement_id、version、currency、unit、および price_per_unit または tiers のいずれかと、任意の seller、product_scope、effective_from、effective_to、supersedes が含まれます)。価格と数量は "2.00" のような小数文字列です。入力ルール、段階価格、修正に関する詳細は https://tanilo.io/docs/contract-price-check を参照してください。

このツールはチェック結果と署名済みレシートを返します。ドキュメントの例(1 回あたり USD 1.00 の指定条件に対する、1 回あたり USD 2.00 のオファー)で 2026-10-08 にライブで取得した出力を一部抜粋します。

{
  "verdict": "halt",
  "state": "contradicted",
  "outcome": "fail",
  "reason": "price_mismatch",
  "recommendation": "offer price differs from the applicable term among the supplied terms",
  "evidence": {
    "rule_id": "contract-price-match/v0.1",
    "terms_source": "caller_supplied",
    "expected": { "price_per_unit": "1.00", "currency": "USD", "unit": "call" },
    "offered": { "unit_price": "2.00", "currency": "USD", "unit": "call", "quantity": "1" },
    "difference_per_unit": "1.00",
    "offer_is": "above_term_price"
  },
  "check_mode": "deterministic",
  "canonical_sha256": "sha256-…",
  "kid": "tanilo-2026-10-ed25519-7d885da9",
  "jwks_url": "https://tanilo.io/.well-known/jwks.json",
  "receipt": { "payload": "…", "signatures": [ … ] }
}

"terms": [] とすると、同じオファーの state は indeterminate、reason は no_applicable_term、verdict は halt になります。

有効な署名は、どの鍵でこれらのバイト列に署名したか、また署名後に内容が変更されていないことを示します。指定された条件が真正なものであることを示すものではありません。レシートの署名は、tanilo-receipt-verify を使って、https://tanilo.io/.well-known/jwks.json にある鍵セットと照合し、オフラインで検証できます。

pip install tanilo-receipt-verify
python3 -c "import json; from tanilo_receipt_verify import verify; r = verify(json.load(open('receipt.json')), jwks_by_issuer={'https://tanilo.io/.well-known/jwks.json': json.load(open('jwks.json'))}); print(r.status, r.canonical_sha256)"

ここで、receipt.json にはツールの receipt オブジェクトが、jwks.json には鍵セットが格納されています。

check-spend-cap

このオファーは、指定した上限額の範囲内に収まっていますか?エージェントが購入を確定する前に、spend_cap はオファーの単価に数量を正確に掛け、合計額を指定された残りの上限額と比較します。署名に成功した場合は、結果に署名します。

上限額とalready_spentを指定します。このチェックは予算残高を取得したり、残高を継続的に管理したり、資金を確保したりしません。結果は「検証済み」「否定」または理由付きの「判定不能」の3種類です。「検証済み」の結果は、オファーの合計額が残りの上限額以内であることを示します。支払うかどうかは、お客様のポリシーに基づいて判断してください。

入力:offer(unit_price、currency、および任意のquantity、offered_at、seller、sku)と、cap(amount、currency、per_purchaseまたはper_periodのscope。per_periodの場合は、already_spentと、fromおよびtoを含むperiodも指定します。任意のcap_idも指定できます。任意のclaim_hashとagent_idは、check-contract-priceと同様です。形式についてはドキュメントページをご覧ください:https://tanilo.io/docs/spend-cap-check。

ツールはチェック結果と署名済みレシートを返します。ドキュメントの例(USD 100.00の上限額のうちUSD 70.00をすでに使用した状態で、USD 12.50のオファーに対して3回呼び出し)を2026-10-13にライブ環境でキャプチャし、内容を抜粋しました:

{
  "verdict": "halt",
  "state": "contradicted",
  "outcome": "fail",
  "reason": "cap_exceeded",
  "recommendation": "offer total exceeds the remaining cap the caller supplied",
  "offer_total": "37.50",
  "remaining": "30.00",
  "excess": "7.50",
  "cap_already_exhausted": false,
  "evidence": {
    "rule_id": "spend-cap/v0.1",
    "cap_source": "caller_supplied",
    "offer_total": "37.50",
    "remaining": "30.00",
    "excess": "7.50",
    "cap_already_exhausted": false,
    "offer_sha256": "sha256-…",
    "cap_sha256": "sha256-…",
    "steps": [ … ]
  },
  "check_mode": "deterministic",
  "canonical_sha256": "sha256-…",
  "kid": "tanilo-2026-10-ed25519-7d885da9",
  "jwks_url": "https://tanilo.io/.well-known/jwks.json",
  "receipt": { "payload": "…", "signatures": [ … ] }
}

"already_spent": "62.50"を指定すると、同じオファーは上限額とちょうど一致します。stateはverified、remainingは37.50、excessはnull、verdictはactです。

署名の検証には、check-contract-priceの場合と同様に、Taniloのものとして認証済みの鍵セットを使用してください。有効な署名は、選択した鍵で署名対象の内容が検証され、改ざんされていないことを証明します。ただし、指定した上限額が真正であること、承認済みまたは最新であること、あるいは購入が許可されていることを証明するものではありません。

check-health

APIのステータスドキュメント(GET /health)を返します。サービスの状態、稼働中のルートとその価格、廃止されたルート、レート制限が含まれます。

get-manifest

APIのディスカバリードキュメント(GET /.well-known/x402-manifest.json)を返します。有料リサーチルートは2026-10-04に廃止されたため、有料リソースは記載されていません。


このサーバーが行わないこと

  • Taniloのクレームチェック(POST /evaluate)用ツールは、まだありません。このルートはベータ期間中は無料で、直接呼び出せます。https://tanilo.io/pricing をご覧ください。
  • 何かを支払ったり、ウォレットを保有したり、鍵を読み取ったりすることはありません。以前のバージョンにあったx402決済コードは削除されています。
  • 署名を自ら検証することはありません。前述のtanilo-receipt-verifyを使用してください。

開発

npm install
npm run build
npm test          # starts the built server over stdio and calls the live API (free beta route)

TANILO_PYTHONに、tanilo-receipt-verifyがインストールされたPythonを設定すると、テストで返されたレシートのオフライン署名も検証できます。TANILO_API_BASEを設定すると、サーバーの接続先を別のホストに変更できます(テストのみ)。


リンク

お問い合わせ:[email protected]

MITライセンス。TK Collective LLC。

コメント

MCP は初めてですか?

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

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