Tanilo

io.github.TKCollectivev3.0.0更新於 Oct 9, 2026

Tanilo checks the premise before an AI agent acts.

已驗證STDIO僅桌面Business & CommerceFinance

概覽

AI 產生的概覽

讓助理核對報價單價是否與呼叫方提供的合約條款一致,並回傳判定結果與簽章收據。

功能
Tanilo 提供一個檢查工具,也就是合約價格檢查,另有兩個狀態文件工具。給定報價(單價、幣別、單位,以及選用的 quantity、seller、sku、offered_at)與一組條款,它會把報價價格與適用條款比對,回傳 verified、contradicted 或 indeterminate 及原因,並附上簽章收據。這項比對是確定性的算術運算,不涉及模型呼叫,條款由呼叫方提供。另外兩個工具會回傳 API 健康文件與探索清單。
適用情境
當助理即將接受某個報價,而你希望用自己手上的條款做一次確定性、可重算的核對,並取得結果的簽章收據時,適合使用。它不是合約查詢服務,也不決定是否付款。
執行需求
透過 npx tanilo-mcp 安裝,以 stdio 在本機執行,需要連線至 Tanilo API 的網路。相關路由處於免費測試期,有速率限制,不需要金鑰。未宣告任何環境變數或憑證;TANILO_PYTHON 與 TANILO_API_BASE 僅供開發與測試使用。
安裝前請注意
此伺服器會把你的報價與條款傳送到第三方 API。有效簽章只能說明是哪個金鑰簽署了這些位元組、以及內容未被更動,並不證明所提供的條款真實有效。伺服器本身不驗證簽章,需使用另外的離線驗證工具。它不保存密鑰、不進行付款,也沒有錢包。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Tanilo,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

Tanilo MCP server

An MCP server that connects Claude Desktop, Cursor, Windsurf or any other MCP client to the Tanilo API at https://api.tanilo.io.

Tanilo checks the premise before an AI agent acts. This server exposes one check, the contract price check, and two status documents. The routes it calls are live in free beta, rate-limited, no key needed. The server holds no secrets and makes no payments.

Tanilo was AgentOracle until September 2026. Versions up to 2.1.2 were published as agentoracle-mcp; that package is no longer maintained.

This README describes version 3.0.0. The outputs below were captured on 2026-10-08 by running the tools against the live API.


Install

bash
npx tanilo-mcp

Claude Desktop

Open your Claude Desktop config file:

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

Add this and restart Claude Desktop:

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

Cursor (Settings → MCP → Add Server) and Windsurf (Settings → MCP Servers → Add) take the same tanilo block.


Tools

check-contract-price

Does this offer match the terms you supplied? Before an agent accepts an offer, contract_price_match compares the offer's unit price with the applicable term among the terms you supply, and signs the result when signing succeeds.

No model is involved: the result is arithmetic and exact comparison, and anyone holding the same input can recompute it. You supply the terms; Tanilo does not hold or look up your contracts. Three results: verified, contradicted, or indeterminate with a reason. A verified result says the price matches the supplied term. Whether to pay is your policy's decision.

Input: offer (unit_price, currency, unit, and optionally quantity, seller, sku, offered_at) and terms (a list; each has agreement_id, version, currency, unit, and either price_per_unit or tiers, plus optional seller, product_scope, effective_from, effective_to, supersedes). Prices and quantities are decimal strings such as "2.00". The full input rules, tiers and amendments are at https://tanilo.io/docs/contract-price-check.

The tool returns the check result and the signed receipt. Captured live on 2026-10-08 for the docs example (an offer of USD 2.00 per call against a supplied term of USD 1.00 per call), trimmed:

json
{  "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": [ … ] }}

With "terms": [] the same offer gives state indeterminate, reason no_applicable_term, verdict halt.

A valid signature shows which key signed these bytes and that they have not changed since. It does not show that the supplied terms were genuine. Check the signature offline with tanilo-receipt-verify against the key set at https://tanilo.io/.well-known/jwks.json:

bash
pip install tanilo-receipt-verifypython3 -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)"

where receipt.json holds the tool's receipt object and jwks.json the key set.

check-health

Returns the API's status document (GET /health): service status, the live routes and their prices, the retired routes, and rate limits.

get-manifest

Returns the API's discovery document (GET /.well-known/x402-manifest.json). It lists no payable resources: the paid research routes were retired on 2026-10-04.


What this server does not do

  • It has no tool for Tanilo's claim check (POST /evaluate) yet. The route is free during the beta and can be called directly; see https://tanilo.io/pricing.
  • It does not pay for anything, hold a wallet, or read any key. The x402 payment code of earlier versions is gone.
  • It does not verify signatures itself; use tanilo-receipt-verify as above.

Development

bash
npm installnpm run buildnpm test          # starts the built server over stdio and calls the live API (free beta route)

Set TANILO_PYTHON to a Python that has tanilo-receipt-verify installed and the test also verifies the returned receipt's signature offline. Set TANILO_API_BASE to point the server at another host (tests only).


Links

Contact: [email protected]

MIT licensed. TK Collective LLC.

來源:README.md,提交 25fbca9

工具

0
工具後設資料尚未被收錄。

版本歷史

1
  1. v3.0.0最新Oct 9, 2026