Server data from the Official MCP Registry
Signed BNB Chain reads (balances, tokens, NFTs, prices, TapeOut names) with verifiable receipts
About
Signed BNB Chain reads (balances, tokens, NFTs, prices, TapeOut names) with verifiable receipts
Remote endpoints: streamable-http: https://api.tapeapi.fun/mcp
Security Report
Valid MCP server (1 strong, 1 medium validity signals). No known CVEs in dependencies. Imported from the Official MCP Registry.
8 tools verified · Open access · No issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
Permissions Found in Source Code
Found by scanning the linked source code. This listing connects to a hosted endpoint, so none of this runs on your machine: it describes what the server software does where it is hosted.
How to Connect
Remote Plugin
No local installation needed. Your AI client connects to the remote endpoint directly.
Add this to your MCP configuration to connect:
{
"mcpServers": {
"io-github-brucelanlan-tapeapi": {
"url": "https://api.tapeapi.fun/mcp"
}
}
}Documentation
View on GitHubFrom the project's GitHub README.
中文 | English
TapeAPI
每个 Agent,都能被陌生人核验。 每次 AI 调用都附一张签名回执:谁回答的、回答的是哪个请求、回了哪些字节、声称用了多少 token、收多少钱,任何人都能核验;3.0 起,一个 Agent 是谁、守什么规矩,别人也能在自己的机器上重新查一遍。
English · 网站 · 手册 · 指南 · 规范 · 示例 · 更新日志 · 路线图 · 升级到 2.0 · 升级到 3.0
它是什么
TapeAPI 是 TapeOut 的签名 API 层。在你的 OpenAI 或 Anthropic 兼容接口前面加一个旁路,每个回答都会带上一张任何人都能核验的回执;你的用户照旧用官方 SDK,只改 base URL,不改代码。同一套链上身份和签名,也用在 MCP 工具、容器之间端到端加密的通道与群聊上,支持 BNB Chain、X Layer 和 Base。3.0 又加了四样,都能在你自己的机器上重新核对:身份(Agent 护照)、工具(钉在链上的 MCP 工具定义)、账目(回执、对账、花费清单、本地预算)和规则(策略电路)。
现状
最新发布的版本是 3.0.0(2026-11-06)。 今天上线的一切都免费。**稳定的:**除标注
@experimental或@internal的以外,其余全部;按 3.0 文档写的代码,在所有 3.x 版本里都能继续工作。实验性的,不在兼容承诺之内:三个新包(@tapeapi/interop、@tapeapi/passport、@tapeapi/policy-circuit,都是 0.1.0)、@tapeapi/sdk/agent、@tapeapi/sdk/review,以及没有部署的付费调用(TAPI-22):托管合约未经审计、未部署。**支持期:**3.0.0 发布后 2.x 继续获得 6 个月的安全修复,1.x 到 2027-04-12,0.x 的包没有支持期(修复只随新的 0.x 版本发布)。所有代码和合约都没有经过第三方审计。**安全说明:**1.0.0 至 1.4.0 的流式 AI 回执核验,在特定分块下可能把被截断或被注入内容的流显示为“已核验”;1.5.0 已修复(更新说明)。
从这里开始
-
你在运行 AI 服务(new-api、网关、自建模型):在
examples/new-api-sidecar里docker compose up,到持有人操作台发布价目表,把用户的 base URL 指向旁路,再跑一遍tapeapi-doctor <你的名字>。指南:AI 服务方指南。 -
**你在调用服务:**从发布页安装 SDK(Node.js 22 或以上),然后用
tapeapi-verify <服务方名字>核验每个回答(Claude Code 和 Codex 可以指向它),或在代码里用createVerifyingFetch。指南:调用服务;具体命令见试一试。npm install https://github.com/BruceLanLan/tapeapi/releases/download/v3.0.0/tapeapi-sdk-3.0.0.tgz -
**你在做 Agent,或要雇一个 Agent:**让它调用之前先查一遍。
tapeapi passport <名字>解析它的 Agent 护照(需要同一发布里的 passport 包),tapeapi receipts statement汇总它的回执声称花了多少。指南:Agent 护照、策略电路、对账、容器代理。tapeapi passport 4246.0.tape # 一个 TapeOut 名字(示例);只有 CONFIRMED 时退出码才是 0
| 你是 | 第一步 | 指南 |
|---|---|---|
| MCP 服务器作者 | 在你的服务器前面跑签名代理,再用操作台发布清单 | Tape out 你的 MCP 服务器 |
| Claude、Cursor 等 MCP 客户端的用户 | 把 https://api.tapeapi.fun/mcp 添加为连接器 | MCP 指南 |
| TapeOut 电路持有人 | 开通电路的容器并激活名字,然后在操作台里生成服务密钥、签委托、发布清单 | 运行服务 |
| 应用开发者 | 用 createVerifyingFetch 核验 AI 回执;通道和群聊从 examples/group-chat 开始 | 私密通道 · 群聊 |
| 想为容器雇一个代理,或自己做代理(实验性) | 在仓库检出里运行 node examples/agent-service/hire.mjs,看每一步要钱包签什么 | 容器代理 |
| 从 2.x 或 1.x 升级 | 3.0 有五项破坏性修改(见下);从 1.x 升级的话,还要在代码里搜 conform、labels、TapeAPIError 的顶层别名和 CHANNEL_INVALID,用自定义地址或本地链的地方加 conform: false | 升级到 3.0 · 升级到 2.0 |
3.0 新增
3.0 只有一个主题:让一个 Agent 调用你之前,你自己先查一遍。新增的部分都是实验性的,不在兼容承诺之内;2.x 能做的,3.0 照样能做,只有下面「升级」里的五项修改除外。线上服务的回答与 2.5.0 相同,只有版本号不同。
- Agent 护照(
tapeapi passport <名字>与@tapeapi/passport0.1.0)。只读地解析:同一个钱包持有一个 ERC-8004 身份和一枚 TapeOut 电路,并且持有人公开了这层关联。所有读取都在同一个钉住的区块上,至少两家运营方的节点必须一致;结果是一个状态词(CONFIRMED、BROKEN、UNAVAILABLE……)加一个具名原因,读取不一致就是「不知道」,绝不猜。它跟随未合并的草案 TAPs #83(已提交,评审中);本包按头提交cae25e6的文字实现,草案此后又改过,每个结果都带着它读取时依据的头。*限制:*护照不说明 Agent 跑什么代码,也不说明它诚实与否,主网上目前还没有已知的 CONFIRMED 护照。Agent 护照 - 策略电路(
@tapeapi/policy-circuit0.1.0)。委托人把花钱的规则写成一个小电路,按哈希固定,用签名绑到一个账户;对方在自己机器上把这笔请求重跑一遍,守门方的admit()只要拿不准就拒绝(没有电路、哈希不对、绑定过期或被撤销、换了持有人、读不到撤销记录)。它跟随未合并的草案 TAPs #84,头提交0b73174(已提交,评审中,目前转为 draft PR)。*限制:*这是链下检查,只约束去检查它的一方,不部署任何东西,也不发交易。策略电路 - 花费清单与本地预算。
tapeapi receipts statement按服务、模型、UTC 天汇总回执所声称的花费,并列出你的限额;客户端预算会在调用发出之前就拒绝会超限的调用。两者都建立在 2.x 已有的签名回执与tapeapi reconcile之上,那些格式不变。*限制:*回执只证明签名方说了什么,花费清单没有任何人签名。对账 - 3.0 里另外几项实验性功能:容器应用之间的访客授权(
@tapeapi/interop0.1.0,是原型,背后没有任何 TAP,见 TAPI-28);给有界代理用的 x402 批量结算后端(enforcement: 'x402-batch',默认关闭,付款方只能是普通钱包,没有在主网上运行过);收据引用提案(ai.receiptRef,默认关闭)。每个付费调用现在都先核对托管的代币,核对不了就以未签名的 503 拒绝。托管合约仍然未经审计、未部署。更新日志
提交 TAP 草案不等于被采纳:#83 和 #84 只是已提交,尚未合并。
升级
五项破坏性修改:Node.js 22 或更高版本;createAIProxy 默认拒绝未声明的格式;createMcpProxy 拒绝你没有列出的浏览器来源;tapeapi-verify 默认严格;MCP 代理默认先协商上游的版本。除第一条外,每一项都有保留 2.x 行为的选项。升级到 3.0
各部分怎么配合
flowchart LR
client["客户端<br/>官方 SDK、Claude Code、Codex"]
sidecar["签名旁路或 MCP 代理<br/>(由你自己部署)"]
upstream["你的接口或 MCP 服务器"]
chain[("链上:BNB Chain、X Layer、Base<br/>身份、清单、价目表、签名密钥的委托")]
client -- "请求" --> sidecar
sidecar -- "原样转发" --> upstream
sidecar -- "回答 + 签名回执" --> client
sidecar -. "持有人发布一次" .-> chain
client -. "对照链上核验" .-> chain
| 层 | 是什么 | 规范 |
|---|---|---|
| 身份 | 一枚 TapeOut 电路的 ERC-6551 容器。谁持有电路,谁就拥有这个服务;电路转手,服务跟着走。按 TAP-10 与 TAP-11 §2 解析。 | TAPI-20、TAP-11(Draft) |
| 清单 | 容器链上站点里的 .well-known/tapeapi.json:接口地址、方法、AI 价目表、MCP 工具定义的哈希、签名密钥,以及持有人对这把密钥的委托。 | TAPI-20 |
| 签名回答与回执 | 每个回答都有签名,并和它的请求绑定;AI 调用另有一张用量回执。 | TAPI-21、TAP-13(Draft) |
| 通道与群聊 | 端到端加密,经中继或 ChannelBus 传递;承载方只看得到密文。 | TAPI-26 v2、TAPI-27 v2 |
回执能证明什么,不能证明什么
回执能证明:谁回答的(电路持有人在链上委托的密钥)、回答的是哪个请求(请求的确切字节)、回了什么(回答的确切字节;流式回答则是按固定规则读出的事件数据),以及声称的用量和价格(按链上价目表计算)。
回执不证明实际跑的是哪个模型:服务方可以把便宜模型的回答标成贵的。签名带来的是可追责:回执无法抵赖,任何人用抽检探针发测试请求并公开结果,都会留下证据。回执只证明签名方说了什么。
试一试
**一个带签名的回答。**公共服务 11.1013.tape 提供 8 个免费的读取方法,每个都钉在一个 BNB Chain 区块上:
curl -s https://api.tapeapi.fun/tapeapi/v1/bnbUsd -H 'content-type: application/json' -d '{"id":"1","params":{}}'
curl 只显示签名信封,不做任何核对;核对交给 SDK。SDK 还没发到 npm,从 GitHub Release 安装(Node.js 22 或以上):
npm install https://github.com/BruceLanLan/tapeapi/releases/download/v3.0.0/tapeapi-sdk-3.0.0.tgz
服务端包(@tapeapi/server:服务提供方、AI 旁路、MCP 代理)依赖这个 SDK,而 SDK 也不在 npm 上,所以单独安装服务端包会报 404:请用一条命令同时安装两者,npm install https://github.com/BruceLanLan/tapeapi/releases/download/v3.0.0/tapeapi-sdk-3.0.0.tgz https://github.com/BruceLanLan/tapeapi/releases/download/v3.0.0/tapeapi-server-3.0.0.tgz。
// try.mjs:node try.mjs
import { createTapeAPI, rpcUrlsFor } from '@tapeapi/sdk'
const api = createTapeAPI({ rpcUrls: rpcUrlsFor(56) }) // 3 家不同运营方的节点;多数读取 2 家一致即可,
// ownerOf 与 eth_chainId 要 3 家都作答且一致(严格)
const service = await api.resolve('11.1013.tape') // 按 TAP-10 / TAP-11 §2:同一钉块、已开通、已激活
const { result, verified } = await api.call(service, 'bnbUsd', {})
console.log(result.bnbUsd, verified) // 验签通过才为 true
Claude Code 和 Codex 自己读不到回执。在本机开一个核验代理,再把它们指过去:
# 终端 1(会一直运行)。42.1013.tape 是示例名:换成 AI 服务方的 TapeOut 名字
npx -y --package=https://github.com/BruceLanLan/tapeapi/releases/download/v3.0.0/tapeapi-sdk-3.0.0.tgz tapeapi-verify 42.1013.tape
# 终端 2,macOS 或 Linux
ANTHROPIC_BASE_URL=http://127.0.0.1:8790 claude
OPENAI_BASE_URL=http://127.0.0.1:8790/v1 codex # Codex(或 config.toml 里的 base_url)
# 终端 2,Windows PowerShell
$env:ANTHROPIC_BASE_URL="http://127.0.0.1:8790"; claude
$env:OPENAI_BASE_URL="http://127.0.0.1:8790/v1"; codex
tapeapi-verify 会打印一行 resolution:,写明用了哪种解析;加 --no-conform 用 1.x 的方式。照原样运行 tapeapi-verify 42.1013.tape 会停下:这个名字是示例名,链上没有以它发布的服务。不依赖任何服务方、想看回执端到端核验通过,就在本仓库的检出里跑本地试跑(不需要密钥、电路,也不花钱),先在根目录安装一次依赖:
git clone https://github.com/BruceLanLan/tapeapi.git && cd tapeapi
npm ci --no-audit --no-fund
node examples/relay-trial/trial.mjs
自己要做 AI 服务?从从零到上线开始;服务方的检查工具 tapeapi-doctor(实验性)在同一个发布包里。
**MCP。**同样的 8 个读取方法也是 MCP 工具,地址是 https://api.tapeapi.fun/mcp,每个结果都带签名回执:
claude mcp add --transport http tapeapi https://api.tapeapi.fun/mcp
什么都不想装:调试台在浏览器里跑同一个 SDK。
解析失败时,e.data.status 用 TAP 自己的名字说明原因:
try {
await api.resolve('11.1013.tape')
} catch (e) {
if (e.data?.status === 'not-opened' || e.data?.status === 'unpaid') { /* 要服务方处理:不要重试 */ }
else if (e.data?.status === 'unavailable') { /* 有节点没作答或不一致:重试 */ }
else throw e
}
**本地服务、本地链或你自己的部署。**开发模式只要 dev;不是 TAP-10 列出的 TapeOut 链,要传 conform: false,否则 createTapeAPI() 直接报 INVALID_ARGUMENT:
const dev = createTapeAPI({ dev: true }) // 本地 http:// 服务,不需要链上清单
const local = createTapeAPI({ // anvil 本地链,用你自己部署的 TapeOut 合约
rpcUrls: ['http://127.0.0.1:8545'], allowSingleNode: true, allowHttp: true,
chainId: 31337, hub: HUB, factory: FACTORY, siteRegistry: SITE_REGISTRY,
conform: false, // 1.x 的解析方式;已弃用,3.x 内保留
})
**AI 回执。**把 createVerifyingFetch 接进官方 OpenAI SDK(npm install openai;Anthropic SDK 同样接受 fetch)。把 42.1013.tape 换成服务方的 TapeOut 名字:
import OpenAI from 'openai'
import { createTapeAPI, rpcUrlsFor, ai } from '@tapeapi/sdk'
const api = createTapeAPI({ rpcUrls: rpcUrlsFor(56) })
const service = await api.resolve('42.1013.tape') // AI 服务方的名字(示例)
const { baseUrl } = service.manifest.ai.endpoints.find((e) => e.format === 'openai-chat')
const client = new OpenAI({
baseURL: baseUrl, // 服务方发布在链上的地址
apiKey: process.env.API_KEY, // 你在该服务方的密钥,照旧
fetch: ai.createVerifyingFetch({ api, service }), // 核验每张回执,不通过就抛错
})
const r = await client.chat.completions.create({ model: 'gpt-4o-mini', messages: [{ role: 'user', content: 'Hello' }] })
console.log(r.choices[0].message.content)
链上还没有外部服务方发布价目表,所以这段代码是对 examples/ai-proxy 里的参考旁路(本地开发模式)实际跑通的;接真实服务方时只换名字。
已上线的服务与承诺
- **已上线,免费,无需注册:**公共服务
api.tapeapi.fun(8 个方法)和它的 MCP 端点,公共中继relay.tapeapi.fun(relaySend、relayHandshake、relayRecv),ChannelBus,以及网站上的持有人操作台、回执核验页、调试台和状态页。 - **可用,由你自己部署:**AI 签名旁路与 new-api 一键包、MCP 签名代理、
tapeapi-verify、tapeapi-mcp、抽检探针,以及 SDK 里的群聊一步投递(deliverGroupUpdate)。 - **实验性,未部署:**付费调用与托管合约(TAPI-22,§3.6 为美元报价、BEM 结算)、服务目录、可由电路验证的方法(TAPI-25)。
- **实验性,在 SDK 里:**容器代理(
@tapeapi/sdk/agent:阶段 0 自 1.7 起,有界代理自 2.0 起,只在本地链可用)与评价(@tapeapi/sdk/review,自 2.0 起),不受兼容承诺约束。 - **3.0 承诺什么(3.0.0,2026-11-06):**按 3.0 文档写的代码,在所有 3.x 版本里都能继续工作;除了标注
@experimental或@internal的,其余全部是稳定的;三个新包(@tapeapi/interop、@tapeapi/passport、@tapeapi/policy-circuit,都是 0.1.0)不在承诺之内。3.0 有五项破坏性修改,除 Node.js 22 下限外,每一项都有保留 2.x 行为的选项。3.0 没有任何 TAP 收紧成为默认,规则照旧:放宽与新增状态名在 3.x 次版本里生效,收紧先作为可选 profile、默认到 4.0 才切。conform: false整个 3.x 保留(已弃用,最早 4.0 才移除);labels: 'v1'保留(已弃用)。3.0.0 发布后 2.x 继续获得 6 个月的安全修复,1.x 到 2027-04-12。从 2.x 升级:升级到 3.0。 - **我们不做的事:**不替任何人托管旁路(它会经手你用户的 API 密钥,只能你自己部署);不发币;不帮任何人绕开上游服务商的封禁或地区限制(TapeAPI 只面向在上游条款范围内经营的服务方)。
- **链:**BNB Chain(chainId 56)什么都能做,将来的支付也只在这条链上。X Layer(196)和 Base(8453)只读:身份、解析、回执和 MCP 核验。X Layer 只有两家独立的 RPC 运营方,在 2.0 默认下每次严格读取两家都必须作答。
- **没有经过第三方审计。**测试:JavaScript 测试(
npm test)、合约测试(forge test),另有一份独立的 Python 实现核对每一处 签名、哈希和编码(python3 spec/vectors/verify.py);三者在每次推送时都由 CI 运行。在 3.0.0 的发布提交上,本仓库的npm test共 2,702 项 JavaScript 测试:2,698 项通过,4 项跳过,0 失败。
规范与 TAP 状态
这些是 TapeAPI 自己的规范,不是 TAP。TapeOut 的标准以 TAP 的形式发布,由 TapeOutProtocol/TAPs 的编辑按 TAP-01 编号。我们就其中部分内容提交了 14 份 TAP 草稿:8 份在 2026-09-30 至 10-01,2 份关于容器代理格式在 2026-10-04 与 10-05,2 份在 2026-10-08(付费凭证、评价),2 份在 2026-10-13(托管通道、有界代理)。其中 7 份已合并为 Draft(TAP-11、TAP-13、TAP-14、TAP-15、TAP-16、TAP-17、TAP-18;合并不等于被采纳),另 7 份已提交(评审中):#20、#28、#49、#52、#54、#59、#60(#60 目前转为 draft PR)。另有 1 份 Information 草稿 #61,已提交(评审中)。编辑审的是格式而不是方案本身(TAP-01 §4),所以合并为 Draft 不等于被采纳。TAPI-20 至 TAPI-27(含 TAPI-26、TAPI-27 的第 2 版)仍是兼容承诺的依据。
| 我们的规范 | 草稿(拉取请求) | 状态(截至 2026-11-06) |
|---|---|---|
| TAPI-20(核心:§3.1 至 §3.4、§3.6、§3.10) | 服务身份与清单,#8 | 2026-10-01 合并为 TAP-11,Draft。2.0 默认按它的 §2 解析 |
| TAPI-21 | 签名响应,#10 | 2026-10-04 合并为 TAP-13,Draft |
| TAPI-26(v2) | 私密通道,#12 | 2026-11-03 合并为 TAP-14,Draft(合并不等于被采纳);已改用编辑要求的 tape-channel/ 标签,即 2.0 的默认 |
| TAPI-20 §3.8、TAPI-21 | MCP 工具绑定,#16 | 2026-11-03 合并为 TAP-15,Draft(合并不等于被采纳);它要求的草稿(TAP-11、TAP-13)也已合并为 Draft |
| TAPI-23 | 多家独立服务的交叉验证读取,#18 | 2026-11-03 合并为 TAP-16,Draft(合并不等于被采纳);它要求的草稿(TAP-11、TAP-13)也已合并为 Draft |
| TAPI-27(v2,仅格式 1) | 私密群聊,#20 | 已提交(评审中);已改用编辑要求的 tape-group/ 标签,即 2.0 的默认 |
| TAPI-20 §3.9、TAPI-21 §3.5 | AI 用量回执,#26 | 2026-11-03 合并为 TAP-17,Draft(合并不等于被采纳);已按编辑在 #25 的答复修订 |
| TAPI-20 §3.2(证明模式,说明性) | 证明核验读取,#28 | 已提交(评审中) |
| 容器代理授权书与任务消息,阶段 0(没有对应的 TAPI 规范) | #47 | 2026-11-03 合并为 TAP-18,Draft(合并不等于被采纳) |
| 清单里的代理成员(#41 的上架部分) | #49 | 已提交(评审中) |
| TAPI-22 §3.1、§3.2、§3.6 | 付费凭证:美元报价、BEM 结算,#52 | 已提交(评审中) |
没有对应的 TAPI 规范(@tapeapi/sdk/review) | 有证据的容器间评价,#54 | 已提交(评审中) |
| TAPI-22 §3.3 至 §3.5(托管接口) | 支付容器服务的托管通道(Standards),#59 | 已提交(评审中) |
| 容器代理,阶段 1:有界代理(没有对应的 TAPI 规范) | 由托管通道强制执行的容器代理授权书(阶段 1),#60 | 已提交,目前转为 draft PR |
| 没有对应的 TAPI 规范(Information 草稿) | 容器网站、消息与服务的隐私地图(Information),#61 | 已提交(评审中) |
| TAP-11 的后续修改 | 安全说明补一句 verifyingContract #35、说明性中文译文 #36;删去对 TAP-26/ 标签的提及 #51;两句澄清:priceBEM 可作单次调用的上限、托管合约所在的链由谁规定 #53;参考实现更新到当前版本,并加一条以 resolved 结束的主网向量 #55 | #35、#36 于 2026-10-04 合并;#51、#53、#55 于 2026-11-03 合并 |
| TAP-13 的后续修改 | 保留名的措辞,#46;参考实现一节里一句过时的话 #56 | #46 于 2026-10-05 合并;#56 于 2026-11-03 合并 |
| 对 TAP-11、TAP-13 至 TAP-18 的进一步修改 | 十三份措辞与规则的小修改,#89 至 #101 | 已提交(评审中) |
上面没有计入的:另外 4 份与 3.0 有关的较晚草稿,都没有合并。代理护照 #83,已提交(评审中),实验性的 @tapeapi/passport 跟随它;策略电路闸门 #84,已提交,目前转为 draft PR,实验性的 @tapeapi/policy-circuit 跟随它;电路任务 #85,已提交,目前转为 draft PR,只有一篇指南;容器服务调用的访客授权 #77,已提交(评审中)。@tapeapi/passport 实现的是 #83 在头提交 cae25e6 时的文字;草稿此后已有更新(现为 cbf4e03),跟进新文字的包已列入计划。实验性的 @tapeapi/interop 实现的是我们自己的 TAPI-28(不是 TAP),而不是 #77。
TAPI-22(§3.1 至 §3.6 以外)、TAPI-24、TAPI-25 没有提交。2026-11-03 拿到编号的五份草稿(TAP-14 至 TAP-18)上面已按编号称呼;其余的仍按拉取请求称呼,直到编辑给它们编号。
| 规范 | 标题 | 状态 |
|---|---|---|
| TAPI-1 | TapeAPI 的文档流程与状态,含 Stable (vN) | Draft |
| TAPI-20 | 服务身份与清单,含 AI 价目表与多链名字 | Stable (v1)(稳定);§3.5 实验性 |
| TAPI-21 | 签名响应信封,含 AI 用量回执 | Stable (v1)(稳定) |
| TAPI-22 | 计量支付:凭证与托管;托管资产(§3.5,BEM 优先)与美元报价、BEM 结算(§3.6) | Experimental(实验性) |
| TAPI-23 | 多家交叉验证的读取 | Stable (v1)(稳定) |
| TAPI-24 | 跨链意图询价 | Withdrawn(已撤回) |
| TAPI-25 | 可由电路验证的方法 | Experimental(实验性) |
| TAPI-26 v2 | 容器间的私密通道,tape-channel/ 标签 | Stable (v2)(稳定),2.0 起为 SDK 默认 |
| TAPI-27 v2 | 最多 32 个容器的私密群聊(实验性的格式 2 最多 128 个),tape-group/ 标签 | Stable (v2)(稳定),2.0 起为 SDK 默认 |
| TAPI-26、TAPI-27 | 两者的第 1 版:内容相同,使用冻结的 TAP-26/…、TAP-27/… 标签 | Stable (v1)(稳定);2.x 中用 labels: 'v1'(已弃用) |
规范中英双语,以英文为准。**TAPI-1 与 TAPI-20 至 TAPI-27 是 TapeAPI 自己的文档名,不是 TAP 编号。**含有旧名字的冻结常量(例如第 1 版的 TAP-26/…、TAP-27/… 标签)永不改变;第 1 版保持 Stable (v1),最早在第 2 版成为 Stable 12 个月之后才可能撤回(TAPI-1 §4.1)。
更早的版本
2.0 引入过什么、承诺过什么,全部保留在这里。从 2.x 升级请看 3.0 的升级指南。
2.0 新增
2.0 只有一个主题:我们向 TapeOut 官方 TAP 流程提交的规则,以及 TapeOut 自己规定的规则,就是你什么都不传时 SDK 的行为(有一个已知例外,见下)。每一项破坏性修改和对应的改法见从 1.x 升级到 2.0;TAPI-20 至 TAPI-27 的线上格式与冻结常量一个字节都不变,所以 2.0 的客户端照样核验所有 1.x 的清单、委托、签名回答和回执。不传任何选项,createTapeAPI() 就按 TapeOut 官方 TAP 的规定解析服务:TAP-10 v1.1 §3 至 §7 与 TAP-11 §2,所有读取钉在同一个区块上,链 ID 与持有人要所有节点一致;名字从未开通(not-opened)、未激活或付费到期(unpaid)、TapeOut 的站点存储或付费合约换成了 SDK 不认识的实现(store-changed),都会得到一个明确的状态,而不是悄悄解析成功。TAP-11 与 TAP-13 是我们起草并提交的草稿,编辑已把两份合并进官方仓库,状态是 Draft;合并为 Draft 不等于被采纳。TAP-10 与 TAP-11 还是 Draft,默认按一条规则跟随它们的文本:放宽与新增状态名在 2.x 次版本里生效,收紧先作为可选 profile、默认到 3.0 才切。要 1.x 的行为,只需一个选项 conform: false(已弃用,整个 3.x 保留,最早 4.0 才移除)。一个已知例外:不开 allChains 时,"处理器合约#ID"会被拒绝,见升级到 2.0。2.0 同时把私密通道与群聊的标签换成 TAPs 编辑要求的 tape-channel/、tape-group/。
标准即默认
import { createTapeAPI, rpcUrlsFor } from '@tapeapi/sdk'
// 2.0:按 TAP-10 / TAP-11 §2 解析,正是 1.x 里 conform: 'tap10' 的行为
const api = createTapeAPI({ rpcUrls: rpcUrlsFor(56) })
// 2.0:1.x 的解析方式,请求逐个相同(已弃用;整个 3.x 保留;建客户端时 onWarning 提示一次)
const legacy = createTapeAPI({ rpcUrls: rpcUrlsFor(56), conform: false })
| 1.x 默认 | 2.0 默认 | |
|---|---|---|
| 怎么解析 | TapeAPI 自己的方式(TAPI-20) | TAP-10 v1.1 §3 至 §7 与 TAP-11 §2 |
| 读取用哪个区块 | 最新块,不钉定 | 一个 TAP-10 钉块,按块号和哈希确认 |
| 节点怎样算一致 | 多数运营方一致 | eth_chainId、ownerOf 与合约持有人的 EIP-1271 调用要所有运营方都作答且一致;其余多数一致 |
| 从未开通的名字 | 清单有效就解析成功 | SITE_STATUS,data.status: 'not-opened' |
| 未激活或付费到期的名字 | 解析成功 | SITE_STATUS,data.status: 'unpaid' |
| TapeOut 升级了站点存储或付费合约 | 解析成功,只告警 | CONTRACT_UNKNOWN,data.status: 'store-changed'(失败关闭,直到补丁版收录新实现) |
自定义地址、本地链或分叉、显式 pin | 允许 | 建客户端时 INVALID_ARGUMENT,提示传 conform: false |
| "处理器合约#ID"字符串 | 在本链解析 | INVALID_ARGUMENT,data.status: 'unsupported',除非 allChains: true(TAP-11 §2.1 的已知例外) |
| 清单缓存多久 | 3,600 秒 | 60 秒 |
TAP-10 与 TAP-11 是合并为 Draft 的(合并不等于被采纳),文本还可能改。改动时:放宽与新增状态名在 2.x 的次版本里直接成为默认;收紧先作为可选的新 profile 提供,默认到 3.0 才切换。状态名只增不改。conform: false 完全不跟随 TAP。默认如何跟随官方 TAP 的变化
- 按
e.data.status分支,不要按错误信息:状态名就是 TAP 里的小写名(unsupported、hub-changed、container-mismatch是 TapeAPI 自己的名字)。状态名只增不改;data.status在 2.0 里仍是实验性的(它跟随的是 Draft),待 TAP-11 评审期满且无未解决的异议后再考虑升为 Stable。not-opened、unpaid要服务方自己处理(不要重试),store-changed要升级 SDK(临时办法是conform: false),unavailable是节点问题(重试,或加一个自己的运营方)。 - 命令行跟着变。
tapeapi-verify、tapeapi-mcp、tapeapi-doctor都用新默认,输出里写明用了哪种解析,加--no-conform回到 1.x 的方式。在默认下,tapeapi-doctor对未激活的名字判为失败(默认客户端解析不了它);加--no-conform仍只是警告。 - **代理工具包也一样。**不给
resolve时,createAgentKit(@tapeapi/sdk/agent,实验性)按 TAP-11 §2 解析代理与服务方。 dev: true就等于conform: false,不出弃用提示:开发模式本来就不核对链上身份。- **代价。**在 BNB Smart Chain 上用默认节点实测:冷客户端解析一个服务,约 45 次 JSON-RPC 调用,1.x 约 24 次(约 2 倍);同一客户端再解析一次约 36 次,1.x 约 9 次(约 4 倍)。公共节点限流时,先给
rpcUrls加一个自己的运营方。 - **我们怎么核对的。**637 个用例的差分测试:
conform: false在全部 637 个用例里与 1.8.1 的默认发出相同的请求、顺序相同、结果相同(只允许两处差异:弃用提示,以及chain.channelKeys报告的收件房间变成第 2 版的房间)。我们自己的11.1013.tape与12.1013.tape按 TAP-10 的方式在主网上解析正常,两者都已激活,付费到 2036-08-09。 - **如果你提供服务:**用 2.0 的安装跑
tapeapi-doctor <你的名字>。前 7 项(name 至 delegation)通过,2.0 的客户端就能解析你;之后各项是针对 AI 服务的,不是 AI 服务的会在ai-field失败,与 1.x 相同。名字的付费一旦到期,2.0 客户端看到的是unpaid,回执核验页也不能再核验你的服务在付费期间签发的回执。
其它破坏性修改
- **私密通道与群聊默认使用 TAPI-26 v2 与 TAPI-27 v2:**标签以
tape-channel/、tape-group/开头,不再是TAP-26/、TAP-27/,这是 TAPs 编辑在评审草稿 #12(现为 TAP-14)、#20 时提出的要求。labels: 'v1'选用第 1 版(2.x 内弃用,不删除)。两个版本不互通,也不会失败放行:不一致的双方会超时,或得到一个写明不一致的错误(data.labels、data.peerLabels)。群聊终身保持创建时的版本,1.x 的群恢复后仍是第 1 版。通道记录、中继和 ChannelBus 都不变,持有人不需要重新签任何东西。 TapeAPIError去掉了弃用的顶层别名(即e.data里各字段的顶层别名):读e.data.*,1.0 起所有细节都在那里(完整列表见升级指南)。- 通道模块把调用方自己的选项或参数错误报为
INVALID_ARGUMENT,与其它模块一致;TAPI-26 数据本身出错仍是CHANNEL_INVALID。
有界代理(实验性,主网不可用)
**实验性,在 2.0 首次公开。**AI 代理可以替容器花钱,但容器最多会亏多少,由托管合约算死、任何人都能在链上核对:每个服务一条托管通道,代理用一把一次性的会话钥匙,限额器绝不签出超过上限的凭证,重启后接着处理订单,钥匙与订单记录加密保存。边界如实说:托管合约未经审计、未部署,所以今天在主网上不可用;只在本地链与测试中可以验证;
@tapeapi/sdk/agent不受兼容承诺约束。
阶段 0(1.7)只记录谁可以替哪个容器做哪件任务,什么都不强制执行。有界代理是阶段 1:代理可以替容器花钱,而容器最多会亏多少,由托管合约算死、可以在链上核对。电路持有人为代理可以付费的每个服务各充值一条托管通道,并把一把只为这份授权书生成的钥匙授权为这些通道上的会话钥匙,有效期到授权书到期为止。代理的钥匙泄露或代理作恶,损失最多是放进这些通道的钱,而且只能付给授权书点名的服务。
- 核验。
verifyMandate与verifyTaskThread加{ enforcement: 'escrow-channel' }时,在同一个钉块上读取每条有上限的通道,全部读数通过才报告“已强制执行”;链上真正限住的始终是通道余额(bound: 'channel')。 - 持有人的计划。
holderPlan从链上读取事实,给出未签名的approve、fund、authorizeSession交易,从持有人钱包或经容器发出;afterPlan读回核对,closeOut取回剩余的钱。会话历史防止同一份计划跑两次、给同一把钥匙充两次值。 - 代理自己的限额。
createSpendLimiter绝不签出累计超过“开始时通道的claimedOf加上限”的凭证;默认拒绝单次超过上限 10% 的调用。 - **重启。**配一个钥匙保险箱(
passphraseKeyVault:scrypt 与 XChaCha20-Poly1305),代理的会话钥匙,以及examples/agent-service里的订单记录,都加密保存;resume在重启后接着处理订单,已停止、已撤销或已过期的订单绝不恢复。 - **交付里的钱。**交付可以附上代理签名的花费声明,与链上读数和回执逐项对账。
**边界。**它依赖的托管合约(TAPI-22,contracts/src/TapeAPIEscrow.sol)未经审计、未在任何链上部署,SDK 的已审计托管列表是空的,所以在主网上都不可用。它在 SDK 的假链上验证(node --test examples/agent-service/agent-service-spend.test.mjs),交易与凭证另在本地的托管合约副本上验证(cd contracts && forge test --match-path 'test/Phase1*')。它是实验性的,不受兼容承诺约束。阶段 1 的 TAP 草稿已提交为 TapeOutProtocol/TAPs#60(已提交,目前转为 draft PR),它依赖的托管接口已提交为 #59(评审中)。
2.0 里另外两项实验性功能
- 容器代理(实验性)。阶段 0(1.7):持有人签名的授权书、从报价到验收的任务线程、只读的付款核验,不需要新合约,不做强制执行。有界代理(2.0):写了金额的授权书由托管通道强制执行,只在本地链与测试中可用。容器代理 · 有界代理
- 美元报价、BEM 结算(TAPI-22 §3.6;TAP 草稿 #52,已提交,评审中)。清单可以用美元给方法定价;服务方在签名的报价里给出 BEM 汇率,客户端签凭证之前对照链上的参考池核对,每个收费的回答都附一张签名的收费记录。方法的
priceBEM仍是单次调用最多花多少。没有usdPricing的清单,回答与付款逐字节照旧。托管合约没有部署,所以不收任何费用。 - 容器之间的评价(
@tapeapi/sdk/review;TAP 草稿 #54,已提交,评审中)。评价由评价方的持有人或其委托的密钥签名,有证据才计入:评价方收到过的签名回答,或两个容器之间的任务线程。汇总只数不同的评价方与持有人,从不按金额加权。tapeapi-verify review <名字>可以把它们打印出来。 - **更早的功能,留作记录。**按 TapeOut 官方 TAP 解析(1.4 起以可选的
conform: 'tap10'提供,2.0 起为默认);MCP 工具与私密通道、群聊(1.0 起稳定);流式 AI 回执,用量也能核验(1.5 至 1.6):被截断或被追加内容的流,回执核验不通过;可选的requestUsage把流式 OpenAI Chat 回答的用量放进签名的流里,像整段回答一样核对(它不证明上游自己的计数),见流式 Chat 的用量:三条路。指南:MCP · 私密通道 · 群聊。
2.0 当时的承诺,照原样记录:
- 2.0 承诺过什么(历史): 按 2.0 文档写的代码,在所有 2.x 版本里都能继续工作;除了标注
@experimental或@internal的, 其余全部是稳定的;其中包括data.status、SiteStatus与svc.conform,它们跟随的是 Draft:TAP-10 与 TAP-11 还是 Draft,默认按一条规则 跟随它们的文本,放宽与新增状态名在 2.x 次版本里生效,收紧先作为可选 profile、默认到 3.0 才切。conform: false与labels: 'v1'已弃用, 整个 2.x 保留。从 1.x 升级:升级到 2.0。
隐私,如实说
- **受保护的:**通道和群聊的内容(端到端加密);AI 回执只带哈希,经 SDK 或
tapeapi-verify发出的请求还会追加 128 位随机空白,短提示词没法靠猜哈希对上;MCP 核验链接默认只带哈希;SDK 的busPrivacyReader(实验性)读取整个 ChannelBus 后在本地筛选,节点看不出你的房间。 - **藏不住的:**服务方看得到它处理的一切(你的请求、IP 和 API 密钥);公共 RPC 节点看得到你的 IP 和你在核验哪个服务;中继和链看得到通道的房间、时间和大小;链上的一切都是公开的,将来的付款也一样。2.0 默认仍不开
allChains,因为一开就会把你的查询发给其它链的公共节点。因此"处理器合约#ID"字符串默认被拒绝(TAP-11 §2.1 的已知例外,见升级到 2.0)。
费用
无强制协议费;默认 1% 维护贡献,任何服务方都可以关闭;运营方没有费率开关。这 1% 只在付费通道结算时从服务方所得中扣,用户的价格不变。服务方也可以设得更高,但不超过合约上限 20%。付费托管合约尚未部署,所以今天所有调用都不收费。AI 服务方照旧在链下向用户收费;清单里的价格是公开的声明,不经过结算。送审的托管合约计划首先托管 BEM,USDT 锚定币与 WBNB 按需(TAPI-22 §3.5)。详见 docs/FEES.md。
仓库
sdk/ @tapeapi/sdk(解析、调用、验签、AI 回执、通道、群聊、MCP、容器代理、评价)· server/ @tapeapi/server(服务端、AI 旁路、MCP 代理)· contracts/(ChannelBus,以及实验性的托管合约和服务目录)· spec/(各规范、测试向量、Python 验证器)· examples/ · conformance/ · site/(网站)· docs/。合约地址见入门。
安全问题请按 SECURITY.md 私下报告。欢迎提 issue 和 pull request,见 CONTRIBUTING.md 与行为准则。
许可证
代码采用 MIT(LICENSE):contracts/、sdk/、server/、examples/、conformance/、scripts/、site/。spec/ 里的规范采用 CC0-1.0(LICENSE-SPEC)。
致谢
为 TapeOut 做一个服务层的想法,也就是“DeWEB 是网站,TapeSend 是消息,TapeAPI 是服务”,来自 @Theairresearch。TapeAPI 的收入自 2026-10-05 起,按季度扣除第三方现金成本后,余额的 10% 永久归他们(口径见 BUSINESS.md)。
Reviews
No reviews yet
Be the first to review this server!
More Developer Tools MCP Servers
Rea
Freeby Morluto · Developer Tools
Reverse engineer anything from your terminal or agent with one CLI and MCP server.
Paperclip
Freeby Paperclipai · Developer Tools
Trending hip-hop artist momentum scores across four cultural dimensions.
Fetch
Freeby Modelcontextprotocol · Developer Tools
Web content fetching and conversion for efficient LLM usage
Git
Freeby Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
Toleno
Freeby Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
MCP Marketplace
Freeby mcp-marketplace · Developer Tools
Search and install MCP servers from inside your AI client.
