关于 TapeAPI: signed BNB Chain reads
TapeAPI 为 TapeOut 服务提供链上解析与签名调用能力,面向需要验证 AI 响应或 MCP 工具结果的开发者。它将签名、收据和链上工具定义结合,并支持加密容器通信。
主要功能
- 01签名响应与使用收据
- 02按 TAP 规范解析服务名
- 03链上固定 MCP 工具定义
- 04容器间端到端加密通信
适用场景
- 01验证 AI 响应及其使用收据
- 02向 MCP 客户端提供可验证工具结果
MCP 相关
向 MCP 客户端提供带签名和收据的工具结果,并通过链上哈希固定工具定义;也提供本地验证工具。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://api.tapeapi.fun/mcpclaude mcp add --transport http brucelanlan-tapeapi https://api.tapeapi.fun/mcp{"mcpServers":{"brucelanlan-tapeapi":{"type":"http","url":"https://api.tapeapi.fun/mcp"}}}在 Cursor 中打开{"servers":{"brucelanlan-tapeapi":{"type":"http","url":"https://api.tapeapi.fun/mcp"}}}在 VS Code 中打开{"mcpServers":{"brucelanlan-tapeapi":{"type":"http","url":"https://api.tapeapi.fun/mcp"}}}{"mcpServers":{"brucelanlan-tapeapi":{"serverUrl":"https://api.tapeapi.fun/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
8此工具无需参数。
详细介绍
TapeAPI
每次 AI 调用都有一份签名回执。 在兼容 OpenAI 或 Anthropic 的 API 前面放置一个伴随服务,每个 回答都会附带一份回执,任何人都可以验证:由谁回答、对应哪个请求、包含哪些字节,以及申报了多少用量和价格。 用户可以继续使用官方 SDK,只需更改基础 URL。
TapeAPI 是 TapeOut 的签名 API 层。同一链上身份和签名也适用于 MCP 工具以及端到端加密的频道和群组,覆盖 BNB Chain、X Layer 和 Base。
中文说明 · 网站 · 文档 · 指南 · 规范 · 示例 · 变更日志 · 路线图 · 升级到 2.0
2.0:默认遵循标准。 不传入任何选项时,
createTapeAPI()会按 TapeOut 官方 TAP 的要求解析服务:TAP-10 v1.1 §3 至 §7 和 TAP-11 §2;所有读取均在同一个固定区块进行;链上节点与所有者必须严格一致;如果某个名称从未开启(not-opened)、尚未激活或付款已用尽(unpaid),或者 TapeOut 的站点存储或付款合约运行的实现不在 SDK 列表中(store-changed),则会返回一个明确的状态,而不是默默报成功。TAP-11 和 TAP-13 是我们编写并提交的草案;编辑者已将两者合并到官方仓库,标记为 草案,但合并为草案不代表已获采纳。TAP-10 和 TAP-11 都是草案,因此默认行为遵循其中一条规则:在 2.x 次要版本中放宽规则或新增状态名称;收紧规则则先作为可选配置档提供,并在 3.0 中设为默认值。1.x 的行为只需一个选项即可启用:conform: false(已弃用,但会在所有 2.x 版本中保留)。一个已知例外:未使用allChains时,会拒绝 processor 合约#ID;详见升级到 2.0。2.0 还包括:私有频道和群组使用 TAP 编辑者要求的tape-channel/和tape-group/标签。 2.0 新增内容 · 升级到 2.0
实验性功能,首次在 2.0 公开:有上限的 Agent。 AI Agent 可以为容器付款,而其最大损失由托管合约设定,并且任何人都能在链上核验:每个服务使用一个托管频道,为 Agent 配置一次性会话密钥,限额器绝不会签署超出上限的内容;订单在重启后可以恢复,密钥和订单记录均以加密方式保存。明确说明限制:托管合约尚未审计,也尚未部署,因此目前无法在主网使用;此功能仅在本地区块链和测试中经过验证,并且
@tapeapi/sdk/agent不在 2.x 兼容性承诺范围内。有上限的 Agent 状态:已发布,2.4.0。 当前上线的所有功能均免费。TapeAPI 遵循语义化版本规范:为 2.0 文档编写的代码在每个 2.x 版本中都能继续运行;1.x 则会在 2.0.0 发布后 6 个月内获得安全修复。付费调用 (TAPI-22)仍处于实验阶段,尚未部署。本文所述内容均未经过第三方审计。**安全提示:**在 1.0.0 至 1.4.0 中,流式 AI 回执验证在特定分块情况下,可能会将已截断或注入内容的流报告为已验证;此问题已在 1.5.0 中修复 (发行说明)。
功能介绍
- 签名回答和回执(自 1.0 起稳定)。每个回答都由电路持有者在链上委托的密钥签名,并与其请求绑定;AI 调用还会获得一份使用量回执,价格根据链上的表格计算。 调用服务 · 面向 AI 提供方
- 按照 TapeOut 官方 TAP 规范进行解析(自 2.0 起为默认行为)。按照 TAP-10 v1.1 和 TAP-11 §2(草案)的规定,在一个固定区块解析名称;每次失败都会返回 TAP 规范中的状态(
e.data.status)。此功能于 1.4 中作为可选的conform: 'tap10'引入;conform: false可在 2.x 中保留 1.x 的解析行为。状态名称只会增加,并且在 2.0 中仍处于实验阶段。 升级到 2.0 - MCP 工具(自 1.0 起稳定)。提供带回执的签名结果,以及通过哈希固定在链上的工具定义:包括公共端点、自有服务的签名代理,以及可在本地检查每个回答的
tapeapi-mcp。 MCP - 私密频道和群组(自 1.0 起稳定;其规范的第 2 版默认启用,带有
tape-channel/和tape-group/标签,自 2.0 起生效)。在容器之间端到端加密,可通过中继或 ChannelBus 传输。 频道 · 群组 - 带有可验证使用量的流式 AI 回执(1.5 至 1.6)。如果流被截断或添加了内容,流式回执验证就会失败;可选的
requestUsage会将流式 OpenAI Chat 回答的使用量放入签名流中,从而像完整回答的使用量一样进行验证(但无法证明上游自己的计数)。 流式使用量:三种方式 - 容器 Agent(实验性)。阶段 0(1.7):由持有者签名的授权、从报价到接受的任务线程,以及只读支付检查;没有新增合约,也不进行强制执行。受限 Agent(2.0):授权中指定资金,由托管频道强制执行;仅适用于本地区块链和测试。 容器 Agent · 受限 Agent
- 以美元定价、以 BEM 付款,以及容器之间的评价(2.0,实验性)。这是我们以拉取请求(#52 和 #54)提交的两项 TAP 草案的参考实现,尚未合并。没有部署托管,因此不会收取任何调用费用。 下文介绍了其他 2.0 实验功能
2.0 新增内容
2.0 的核心主题是:我们提交给 TapeOut 官方 TAP 流程的内容,以及 TapeOut 自身的规范,就是 SDK 在你未传入任何参数时采用的行为,但有一个已知例外(见下文)。所有破坏性变更以及相应的替代写法,都列在从 1.x 升级到 2.0中;TAPI-20 至 TAPI-27 的传输格式和冻结常量均未改变,因此 2.0 客户端可以验证所有 1.x 清单、委托、签名响应和回执。
默认遵循标准
import { createTapeAPI, rpcUrlsFor } from '@tapeapi/sdk'
// 2.0: TAP-10 / TAP-11 §2 resolution, exactly what conform: 'tap10' did in 1.x
const api = createTapeAPI({ rpcUrls: rpcUrlsFor(56) })
// 2.0: the 1.x resolution, request for request (deprecated; kept in all of 2.x; one onWarning when the client is made)
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 以草案形式合并(合并不代表采纳),因此其文本仍可能变更。发生变更时,放宽限制或新增状态名称会在 2.x 次要版本中成为默认值;收紧限制则会先作为可选的新配置文件提供,并在 3.0 中成为默认值。状态名称只会增加。conform: false 完全不遵循 TAP 规范。
默认值如何跟随变更
- 根据
e.data.status分支处理,不要根据消息处理:状态名称采用 TAP 中的小写名称(unsupported、hub-changed和container-mismatch是 TapeAPI 自己的名称)。名称只会增加;2.0 中的data.status是实验性功能 (它遵循一份 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时仍会发出警告。 - Agent 工具包也一样。 如果不传入
resolve,createAgentKit(@tapeapi/sdk/agent,实验性功能)会按照 TAP-11 §2 解析 Agent 和提供方。 dev: true表示conform: false,不会发出警告:开发模式不会检查链身份。- 代价如何。 在 BNB Smart Chain 上使用默认节点进行测量,冷启动解析一项服务约发送 45 次 JSON-RPC 调用,而不是约 24 次(约为 2 倍);同一客户端重复解析约发送 36 次,而不是约 9 次(约为 4 倍)。如果公共节点对你进行速率限制,请将自己的运营方添加到
rpcUrls。 - 检查方式。 对 637 个案例进行差异测试:在全部 637 个案例中,
conform: false发出的请求顺序和请求内容均与 1.8.1 的默认设置相同,结果也一致(仅允许以下差异:弃用警告,以及chain.channelKeys报告的 version-2 收件箱房间)。我们的服务11.1013.tape和12.1013.tape使用 TAP-10 解析方式可在主网上解析;两者均已激活,付款有效期至 2036-08-09。 - 如果你提供服务: 使用 2.0 安装运行
tapeapi-doctor <your name>。如果前七项检查(从名称到委托)通过,2.0 客户端就能解析该服务;之后的检查针对 AI 服务,因此非 AI 服务会像在 1.x 中一样在ai-field处失败。如果名称的付款到期,2.0 客户端会看到unpaid,收据检查器也无法再检查你的服务在付款有效期内签署的收据。
其他重大变更
- **私密频道和群组默认使用 TAPI-26 v2 和 TAPI-27 v2:**标签以
tape-channel/和tape-group/开头,而不是TAP-26/和TAP-27/;这是 TAP 编辑者在合并草案 #12 和 #20 前提出的要求。labels: 'v1'会选择 version 1(在 2.x 中已弃用,但不会在 2.x 中移除)。两个版本不能互通,而且不会以开放失败方式处理:不匹配的一对会超时,或产生带名称的不匹配错误(data.labels、data.peerLabels)。群组会终身沿用其版本,因此 1.x 群组恢复后仍是 version-1 群组。频道记录、中继和 ChannelBus 均未改变;持有者无需重新签名。 TapeAPIError移除了e.data中字段的已弃用顶层别名:请读取e.data.*,所有详细信息自 1.0 起都在此处(列表见升级指南)。- 频道模块会像其他所有模块一样,将你自己的选项或参数错误报告为
INVALID_ARGUMENT;验证失败的 TAPI-26 数据仍会报告为CHANNEL_INVALID。
有界 Agent(实验性,无法在主网使用)
Phase 0(1.7)会记录哪些主体可以代表某个容器执行操作,以及可以执行哪些任务,但不会强制执行任何限制。有界 Agent 属于 Phase 1: Agent 可以替容器支出,而容器的最大损失由托管合约固定,并且可在链上核验。电路的持有者会为 Agent 可以付款的每项服务各注资一个托管通道,并将仅用于该项授权的密钥设为这些通道的会话密钥,直至授权到期。密钥一旦泄露或 Agent 行为不当,最多只会损失这些通道中的资金,且只能用于授权中列出的服务。
- 核验。
verifyMandate和verifyTaskThread配合{ enforcement: 'escrow-channel' },会在一个固定区块读取每个设有上限的通道;只有所有读取结果都通过,才会报告该授权已受强制执行。链上限制的始终是通道余额(bound: 'channel')。 - 持有者的计划。
holderPlan会从链上读取所需信息,并返回未签名的approve、fund和authorizeSession交易;这些交易可由持有者的钱包发送,也可通过容器发送。afterPlan会读取交易结果,closeOut则会提取剩余资金。会话历史可防止重复运行计划时再次为同一密钥注资。 - Agent 自身的限额。
createSpendLimiter绝不会为超过通道初始claimedOf加上限额的凭证签名;默认情况下,还会拒绝单次支出超过限额 10% 的调用。 - 重启。 配合密钥保险库(
passphraseKeyVault:scrypt 和 XChaCha20-Poly1305),Agent 的会话密钥以及examples/agent-service中的订单记录都会经过加密封存;resume会在重启后继续处理订单,但绝不会继续处理已停止、已撤销或已过期的订单。 - 交付内容中的资金信息。 交付内容可以附带由 Agent 签名的支出声明,并根据链上信息和收据进行核对。
限制。 此功能依赖的托管合约(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*')。此功能为实验性功能,不属于 2.x 兼容性承诺的范围。Phase 1 TAP 草案已提交至 TapeOutProtocol/TAPs#60(目前仍为开放的草案 PR),其依赖的托管合约接口已提交至 #59(目前仍为开放的草案 PR)。
2.0 中同样具有实验性的功能
- 以美元计价,以 BEM 支付(TAPI-22 §3.6;TAP 草案 #52,一个开放的拉取请求)。清单可以用美元为方法定价;提供方会在签名报价中说明 BEM 汇率,客户端会在签署凭证前根据链上参考池进行核验,每个有价格的回答都会附带签名的收费记录。方法的
priceBEM仍然是单次调用的最高费用。没有usdPricing的清单,其回答和付款仍与以前完全相同。目前尚未部署托管合约,因此不会产生任何收费。 - 容器之间的评审(
@tapeapi/sdk/review;TAP 草案 #54,一个开放的拉取请求)。评审由评审者的持有者或代理签名,且只有附有证据才有效:评审者收到的签名回答,或两个容器之间的任务线程。摘要统计不同的评审者和持有者,绝不统计金额。运行tapeapi-verify review <name>可打印这些摘要。
从这里开始
| 你的身份 | 前五分钟要做什么 | 指南 |
|---|---|---|
| AI 提供商或中继服务(new-api、网关、自有模型) | 在 examples/new-api-sidecar 中运行 docker compose up,在 holder console 中发布价格表,将用户的基础 URL 指向 sidecar,然后运行 tapeapi-doctor <your name> | 面向 AI 提供商 |
| MCP 服务作者 | 在你的服务前运行签名代理,然后通过控制台发布清单 | 为你的 MCP 服务签名 |
| 应用开发者 | 运行下面的示例;使用 createVerifyingFetch 检查 AI 回执;从 examples/group-chat 启动频道和群组 | 调用服务 · 频道 · 群组 |
| 从 1.x 升级 | 在代码中搜索 conform、labels、顶层的 TapeAPIError 别名和 CHANNEL_INVALID;在使用自有地址或本地链的地方添加 conform: false | 升级到 2.0 |
| TapeOut 电路持有者 | 打开电路的容器并激活其名称,然后生成服务密钥、签署委托,并在控制台中发布清单 | 运行服务 |
| Claude、Cursor 或其他 MCP 用户 | 添加 https://api.tapeapi.fun/mcp 作为连接器 | MCP |
| 为容器雇用 Agent,或构建 Agent(实验性) | 在检出代码后运行 node examples/agent-service/hire.mjs,并了解每个步骤要求钱包签署的内容 | 容器 Agent |
试用
带签名的答案。 公共服务 11.1013.tape 提供 BNB Chain 上 8 次免费的区块固定读取:
curl -s https://api.tapeapi.fun/tapeapi/v1/bnbUsd -H 'content-type: application/json' -d '{"id":"1","params":{}}'
curl 会显示签名信封,但不会检查任何内容。SDK 会进行检查。目前它还未发布到 npm;请从 GitHub release 安装(Node.js 20 或更高版本):
npm install https://github.com/BruceLanLan/tapeapi/releases/download/v2.4.0/tapeapi-sdk-2.4.0.tgz
服务端软件包(@tapeapi/server:providers、AI sidecar、MCP 代理)依赖此 SDK,而 SDK 也未发布到
npm,因此单独安装会失败并返回 404:请用一条命令同时安装两者:
npm install https://github.com/BruceLanLan/tapeapi/releases/download/v2.4.0/tapeapi-sdk-2.4.0.tgz https://github.com/BruceLanLan/tapeapi/releases/download/v2.4.0/tapeapi-server-2.4.0.tgz。
// try.mjs: node try.mjs
import { createTapeAPI, rpcUrlsFor } from '@tapeapi/sdk'
const api = createTapeAPI({ rpcUrls: rpcUrlsFor(56) }) // nodes of 3 distinct operators; most reads need 2 to agree,
// ownerOf and eth_chainId need all 3 (strict)
const service = await api.resolve('11.1013.tape') // TAP-10 / TAP-11 §2: one pinned block, opened, activated
const { result, verified } = await api.call(service, 'bnbUsd', {})
console.log(result.bnbUsd, verified) // true only after the signature checked out
解析失败时,e.data.status 会用 TAP 自己的措辞说明原因:
try {
await api.resolve('11.1013.tape')
} catch (e) {
if (e.data?.status === 'not-opened' || e.data?.status === 'unpaid') { /* the provider's to fix: do not retry */ }
else if (e.data?.status === 'unavailable') { /* a node did not answer or disagreed: retry */ }
else throw e
}
本地服务、本地区块链或你自己的部署。 开发模式只需指定 dev,无需其他选项;对于不在 TapeOut 链 TAP-10 列表中的区块链,需要设置 conform: false,否则 createTapeAPI() 会因 INVALID_ARGUMENT 而停止:
const dev = createTapeAPI({ dev: true }) // a local http:// service without an on-chain manifest
const local = createTapeAPI({ // an anvil chain with your own TapeOut contracts
rpcUrls: ['http://127.0.0.1:8545'], allowSingleNode: true, allowHttp: true,
chainId: 31337, hub: HUB, factory: FACTORY, siteRegistry: SITE_REGISTRY,
conform: false, // the 1.x resolution; deprecated, kept in 2.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') // the AI provider's name (an example)
const { baseUrl } = service.manifest.ai.endpoints.find((e) => e.format === 'openai-chat')
const client = new OpenAI({
baseURL: baseUrl, // the address the provider published on chain
apiKey: process.env.API_KEY, // your key with that provider, as before
fetch: ai.createVerifyingFetch({ api, service }), // checks every receipt; a bad one throws
})
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 中的参考 sidecar(本地开发模式)运行;使用真实提供商时,只需更改名称。
Claude Code 和 Codex 无法自行读取收据。运行本地验证代理,并将它们指向该代理:
# Terminal 1 (it keeps running). 42.1013.tape is an example name: put your AI provider's TapeOut name here
npx -y --package=https://github.com/BruceLanLan/tapeapi/releases/download/v2.4.0/tapeapi-sdk-2.4.0.tgz tapeapi-verify 42.1013.tape
# Terminal 2, macOS or Linux
ANTHROPIC_BASE_URL=http://127.0.0.1:8790 claude
OPENAI_BASE_URL=http://127.0.0.1:8790/v1 codex # Codex (or base_url in config.toml)
# Terminal 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(实验性)也包含在同一个 release 软件包中。
MCP。 同样的 8 次读取也是 https://api.tapeapi.fun/mcp 上的工具,每个结果都附带签名收据:
claude mcp add --transport http tapeapi https://api.tapeapi.fun/mcp
完全无需安装:playground 会在浏览器中运行 SDK。
工作原理
flowchart LR
client["Client<br/>official SDK, Claude Code, Codex"]
sidecar["Signing sidecar or MCP proxy<br/>(you run it)"]
upstream["Your API or MCP server"]
chain[("On chain: BNB Chain, X Layer, Base<br/>identity, manifest, price table, signer delegation")]
client -- "request" --> sidecar
sidecar -- "same bytes" --> upstream
sidecar -- "answer + signed receipt" --> client
sidecar -. "published once by the holder" .-> chain
client -. "verify against" .-> chain
| 层 | 内容 | 规范 |
|---|---|---|
| 身份 | TapeOut 电路的 ERC-6551 容器。持有电路的人拥有该服务;转移电路,服务也会随之转移。解析方式符合 TAP-10 和 TAP-11 §2 的规定。 | TAPI-20、TAP-11(草案) |
| 清单 | 容器链上站点中的 .well-known/tapeapi.json:端点、方法、AI 价格表、MCP 工具定义的哈希、签名密钥及持有者对该密钥的授权。 | TAPI-20 |
| 签名答案和收据 | 每个答案都经过签名并绑定到其请求;AI 调用会获得使用收据。 | TAPI-21、TAP-13(草案) |
| 通道和群组 | 通过中继或 ChannelBus 进行端到端加密;传输方只能看到密文。 | TAPI-26 v2、TAPI-27 v2 |
回执能证明什么,不能证明什么
回执能证明是谁作答(电路持有者在链上委托的密钥)、对应的确切请求字节、 确切的响应字节,以及所声明的用量和价格;价格依据链上的价格表计算。
回执不能证明实际运行的是哪个模型:提供方可能把较便宜模型的回答标成较贵的模型。签名所带来的 是可追责性。回执无法抵赖,因此任何人运行 spot-check probe 并公布结果,都会留下证据。
状态与承诺
- **已上线、免费、无需注册:**公共服务
api.tapeapi.fun(8 个方法)、其 MCP 端点、公共中继relay.tapeapi.fun(relaySend、relayHandshake、relayRecv)、 ChannelBus,以及网站上的 控制台、回执检查器、 操场和状态页面。 - **已提供,可自行运行:**AI 签名 sidecar 和 new-api 软件包、MCP 签名代理、
tapeapi-verify、tapeapi-mcp、spot-check probe,以及 SDK 中的一次调用群组投递(deliverGroupUpdate)。 - **实验性,尚未部署:**付费调用和托管合约(TAPI-22,§3.6 中以美元计价、用 BEM 支付)、 服务目录和经电路验证的方法(TAPI-25)。
- **实验性,位于 SDK 中:**容器 Agent(
@tapeapi/sdk/agent:第 0 阶段自 1.7 起提供,有界 Agent 自 2.0 起提供, 仅限本地链)和评审(@tapeapi/sdk/review,自 2.0 起提供),不在 2.x 兼容性承诺范围内。 - **2.0 的承诺:**针对 2.0 文档编写的代码,在所有 2.x 版本中都能继续运行;除标记为
@experimental或@internal的内容外,其他一切均为 Stable。这包括data.status、SiteStatus和svc.conform,它们遵循 Draft: TAP-10 和 TAP-11 是 Draft,因此默认行为按一条规则遵循其文本:在 2.x 次要版本中放宽要求或新增状态名称, 收紧要求时先作为可选配置文件提供,并在 3.0 中设为默认值。conform: false和labels: 'v1'已弃用,并会在所有 2.x 版本中保留。1.x 将在 2.0.0 发布后 6 个月内收到安全修复。若从 1.x 升级: 升级到 2.0。 - **我们不会做的事:**替任何人托管 sidecar(它会接触用户的 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 会在每次推送时运行这三项测试。在 2.4.0 发布提交中,本仓库的npm test会运行 2,230 项 JavaScript 测试:2,227 项通过,3 项跳过,没有失败。
隐私,一目了然
- **受保护:**频道和群组内容(端到端加密);AI 回执仅携带哈希;通过 SDK 或
tapeapi-verify发送的请求会加入 128 位随机空白,因此无法通过哈希确认简短提示词;MCP 验证链接默认仅携带哈希;SDK 的busPrivacyReader(实验性)会读取整个 ChannelBus 并在本地筛选,因此节点无法看到你的房间。 - **不隐藏:**服务会看到其处理的内容(你的请求、IP、API 密钥);公共 RPC 节点会看到你的 IP 以及你检查的是哪个服务;中继和链会看到频道房间、时间和大小;链上的所有内容都是公开的,包括未来的付款。2.0 中默认关闭
allChains,因为启用后会将你的查询发送到其他链的公共节点。因此,默认会拒绝 processor contract#ID 字符串(这是 TAP-11 §2.1 中一个已知的例外;参见升级到 2.0)。
费用
没有强制性的协议费用;默认收取 1% 的维护贡献,任何提供方都可以关闭;运营方没有费用开关。仅当付费频道结算时,才会从提供方的份额中扣除这笔贡献,用户价格不会改变。提供方也可以设置更高的比例,最高为合约上限 20%。付费调用托管尚未部署,因此目前不会对任何调用收费。AI 提供方仍像现在一样在链下向用户收费;其清单中公布的是价格,并非结算价格。用于审计的托管计划首先支持 BEM,并按需支持与 USDT 挂钩的资产和 WBNB(TAPI-22 §3.5)。参见 docs/FEES.md。
规范
这些是 TapeAPI 自身的规范,并非 TAP。TapeOut 以 TAP 的形式发布其标准,由编辑在 TapeOutProtocol/TAPs 中按 TAP-01 编号。我们为其中部分内容提交了十四份 TAP 草案:八份于 2026-09-30 和 2026-10-01 提交,两份关于容器 Agent 格式的草案于 2026-10-04 和 2026-10-05 提交,两份于 2026-10-08 提交(支付凭证、评审),另有两份于 2026-10-13 提交(托管频道、受限 Agent)。其中两份已合并为草案(TAP-11、TAP-13),另有十二份仍是开放的拉取请求;其中三份(#54、#59、#60)目前是草案 PR,因此不会进入编辑队列。另有一份信息类草案 #61(隐私图)已提交,目前仍作为草案 PR 开放。编辑审核的是格式,而非内容价值(TAP-01 §4),因此合并为草案并不代表采纳。TAPI-20 至 TAPI-27(包括 TAPI-26 和 TAPI-27 的第 2 版)仍是 2.x 兼容性承诺的依据。
| 我们的规范 | 草案(拉取请求) | 截至 2026-10-21 的状态 |
|---|---|---|
| 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 | 开放;使用编辑者要求的 tape-channel/ 标签,这是 2.0 默认值 |
| TAPI-20 §3.8、TAPI-21 | MCP 工具绑定,#16 | 开放;所需草案(TAP-11、TAP-13)已合并为 Draft |
| TAPI-23 | 从独立服务进行经证明的读取,#18 | 开放;所需草案(TAP-11、TAP-13)已合并为 Draft |
| TAPI-27(v2,仅格式 1) | 私有群组,#20 | 开放;使用编辑者要求的 tape-group/ 标签,这是 2.0 默认值 |
| TAPI-20 §3.9、TAPI-21 §3.5 | AI 使用凭证,#26 | 开放;根据编辑者在 #25 中的回复进行了修订 |
| TAPI-20 §3.2(证明模式,说明性) | 经证明验证的读取,#28 | 开放 |
| 容器 Agent 强制要求和任务消息,阶段 0(无 TAPI 规范) | #47 | 开放 |
| 服务清单中的 Agent 成员(#41 的列表部分) | #49 | 开放 |
| TAPI-22 §3.1、§3.2、§3.6 | 付款凭证:以美元定价,以 BEM 结算,#52 | 开放 |
无 TAPI 规范(@tapeapi/sdk/review) | 容器之间有证据支持的评审,#54 | 开放(草案 PR) |
| TAPI-22 §3.3 至 §3.5(托管接口) | 用于支付容器服务费用的托管频道(标准),#59 | 开放(草案 PR) |
| 容器 Agent,阶段 1:有界 Agent(无 TAPI 规范) | 通过托管频道强制执行容器 Agent 要求,阶段 1,#60 | 开放(草案 PR) |
| 无 TAPI 规范(信息类草案) | 容器站点、消息和服务的隐私映射(信息类),#61 | 开放(草案 PR) |
| 对 TAP-11 的修改 | 关于 verifyingContract 的安全说明 #35 和中文翻译 #36;删除对 TAP-26/ 标签的提及 #51;补充两句话,说明 priceBEM 是每次调用的上限以及托管所用的链 #53;更新参考实现,并加入一个以 resolved 结束的主网向量 #55 | #35 和 #36 于 2026-10-04 合并;#51、#53 和 #55 等待编辑者处理 |
| 对 TAP-13 的修改 | 关于保留名称的措辞,#46;参考实现部分中的过时句子 #56 | #46 于 2026-10-05 合并;#56 等待编辑者处理 |
除 §3.1 至 §3.6 外,TAPI-22、TAPI-24 和 TAPI-25 尚未提交。编辑者为其他草案分配编号后,我们会相应更新对它们的引用。
| 规范 | 标题 | 状态 |
|---|---|---|
| TAPI-1 | TapeAPI 的文档流程和状态,以及 Stable(vN) | 草案 |
| TAPI-20 | 服务身份和清单,包含 AI 价格表和多链名称 | Stable(v1);§3.5 为 Experimental |
| TAPI-21 | 签名响应封装,包含 AI 使用收据 | Stable(v1) |
| TAPI-22 | 计量付费:凭证和托管;托管资产(§3.5,首先支持 BEM)以及以美元计价、用 BEM 支付的价格(§3.6) | Experimental |
| TAPI-23 | 经独立提供方交叉核验的证明读取 | Stable(v1) |
| TAPI-24 | 意图 RFQ | 已撤回 |
| 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)。
仓库
sdk/ @tapeapi/sdk(解析、调用、验证、AI 收据、通道、群组、MCP、容器 Agent、评审)·
server/ @tapeapi/server(提供方、AI 侧车、MCP 代理)·
contracts/(ChannelBus,以及实验性的托管和目录)·
spec/(规范、测试向量、Python 验证器)· examples/ ·
conformance/ · site/(网站)· docs/。
合约地址见简介。
请按照 SECURITY.md 中的说明私下报告安全问题。欢迎提交问题和拉取请求;请参阅 CONTRIBUTING.md 和行为准则。
许可证
代码采用 MIT 许可证(LICENSE):contracts/、sdk/、server/、examples/、conformance/、scripts/、site/。
spec/ 中的规范采用 CC0-1.0 许可证(LICENSE-SPEC)。
致谢
TapeOut 服务层这一构想——“DeWEB 是网站,TapeSend 是消息传递,TapeAPI 是服务”——来自 @Theairresearch。自 2026-10-05 起,TapeAPI 每季度收入的 10% (扣除支付给第三方的直接现金成本后)将永久支付给他们(定义见 BUSINESS.md)。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。