内容
# @helm-protocol/ttt-mcp
> [draft-helmprotocol-tttps](https://datatracker.ietf.org/doc/draft-helmprotocol-tttps/) 参考实现(IETF 实验)
**OpenTTT 的 MCP 服务器 - 面向 AI 代理的时间证明工具**
---
## 问题:工作流失忆
每个 Claude Code 长时限工作流都会遇到同一个障碍:**上下文压缩会擦除操作历史**。
代理 B 不记得代理 A 做出了什么决定。代理 A 在压缩后恢复,没有记录自己的先前步骤。重复工作。丢失决定。状态损坏。
**ttt-mcp 是外部因果链,能够在上下文压缩后存活下来**。
每个工作流步骤都锚定在 **外部服务器**上的加密时间戳上 - 物理上与 Claude 的上下文窗口分开。当发生压缩时,代理调用 `pot_query(eventId)` 以实现 O(1) 精确步骤召回,并使用完整的因果上下文恢复工作流。
```
Claude 工作流 → [上下文压缩] → 代理调用 pot_query(eventId)
→ 外部服务器返回完整时间线
→ 工作流恢复,零丢失状态
```
---
## 数学保证
| 层 | 机制 | 保证 |
|-------|-----------|-----------|
| **身份** | SHA-3 eventId(256 位) | 碰撞概率 2⁻²⁵⁶ — 实际为零 |
| **查找** | O(1) 精确检索 | 历史重建不消耗上下文 |
| **排序** | TTTPS 因果时间戳 | 事件的总顺序 — 防篡改序列证明 |
| **因果链** | prevEventId 有向图 | O(深度) 遍历 — 深度 ~100,适用于 10 億令牌工作流 |
| **不可否认** | Ed25519 签名 | 谁在何时采取行动的加密证明 |
| **弹性** | 擦除编码的加密分片 | BER=0.05 时 ≥97% 恢复,BER=0.02 时 99.88%(理论) |
| **持久性** | Redis AOF + 90 天 TTL | 服务器在上下文压缩和重启中存活 |
---
## 快速入门
### Claude Code
```bash
claude mcp add ttt -- npx -y @helm-protocol/ttt-mcp@0.3.0
```
使用 API 密钥(将免费限制提高到您的计划月额度):
```bash
claude mcp add ttt -e TTT_API_KEY=your-key -- npx -y @helm-protocol/ttt-mcp@0.3.0
```
### Claude 桌面版
将以下内容添加到 `claude_desktop_config.json`:
```json
{
"mcpServers": {
"ttt": {
"command": "npx",
"args": ["-y", "@helm-protocol/ttt-mcp@0.3.0"],
"env": { "TTT_API_KEY": "your-key" }
}
}
}
```
### Cursor
[](https://cursor.com/install-mcp?name=ttt&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBoZWxtLXByb3RvY29sL3R0dC1tY3BAMC4zLjAiXX0=)
一键安装,或将相同的 `mcpServers` 块添加到 `.cursor/mcp.json`。
免费层:每天 100 次调用/ IP - 无需注册。
---
## 5 分钟测试
连接后,在 Claude 中运行此序列:
**步骤 1 — 打上工作流步骤的时间戳:**
只需自然地告诉 Claude:
> "将此步骤标记为 my-first-step"
> "记录我刚刚完成的操作为 refactor-auth-step1"
Claude 会自动调用 `pot_generate`。或者直接调用:
```
pot_generate(eventId: "my-first-step")
```
**步骤 2 — 模拟上下文压缩:** 启动新的 Claude 会话
**步骤 3 — 在新会话中恢复:**
告诉 Claude:
> "我在 my-first-step 中做了什么?"
> "恢复我的最后一个工作流状态"
或者直接调用:
```
pot_query(eventId: "my-first-step")
```
→ 返回精确记录。失忆症消失。
**步骤 4 — 构建因果链:**
```
pot_generate(eventId: "step-2", prevEventId: "my-first-step")
pot_graph(eventId: "step-2", depth: 5)
```
→ 完整的后向链。加密有序。
---
## 7 种工具
| 工具 | 用途 |
|------|---------|
| `pot_generate` | 为工作流步骤打上加密时间戳 |
| `pot_verify` | 验证 PoT 签名 |
| `pot_query` | 通过 eventId 实现 O(1) 精确查找 — 核心失忆恢复 |
| `pot_graph` | 遍历因果有向图(后向 + 前向链) |
| `pot_checkpoint` | 将事件滚动到压缩摘要 — 每 ~100 事件或在长时间任务之前使用 |
| `pot_stats` | 服务器统计信息和模式状态 |
| `pot_health` | 健康检查 |
---
## 工具参数
### pot_generate
为工作流步骤打上加密时间戳。对于 Claude Code:使用 `eventId` + `prevEventId`。对于 DeFi:使用 `txHash` + `chainId` + `poolAddress`。`eventId` 或 `txHash` 之一是必需的。
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| eventId | 字符串 | 二选一 | 工作流步骤标识符。例如 `"refactor_auth_step1"` |
| prevEventId | 字符串 | 否 | 上一步骤的 eventId — 将步骤链接成因果链 |
| txHash | 字符串 | 二选一 | 交易哈希(DeFi,十六进制前缀为 0x) |
| chainId | 数值 | 否 | EVM 链 ID(DeFi) |
| poolAddress | 字符串 | 否 | DEX 池合约地址(DeFi) |
### pot_query
查询时间证明记录。使用 `eventId` 进行 O(1) 精确查找,在上下文压缩后。
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| eventId | 字符串 | 否 | 精确步骤查找 — 碰撞概率 2⁻²⁵⁶ |
| startTime | 数值 | 否 | 开始时间(unix 毫秒)。默认为 24 小时前 |
| endTime | 数值 | 否 | 结束时间(unix 毫秒)。默认为现在 |
| limit | 数值 | 否 | 返回的最大条目数。默认为 100,最大 1000 |
### pot_graph
从任意步骤遍历因果链。返回后向链(祖先)和前向链(后代)。
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| eventId | 字符串 | 是 | 要遍历的步骤 |
| depth | 数值 | 否 | 最大后向深度。默认为 10,最大 100 |
**返回:**
* `backwardChain` — 按时间顺序排列的祖先(深度压缩的大型链)
* `forwardChain` — 在给定 eventId 之后发生的步骤
* `chainBroken` — 如果检测到间隙(祖先从环形缓冲区中被逐出,或链根引用未知条目),则为 `true`
* `brokenAt` — 如果间隙由服务器重启引起,则为 `"server_restart"`;否则为间隙发生时的 eventId;如果链完整,则为 `null`
* `reachableDepth` — 成功遍历的祖先数量(或链根)
**因果链间隙原因:**
* **`server_restart`**:服务器重启并清除内存 DAG。如果配置了 Redis(设置了 `REDIS_URL`),则 DAG 在启动时从 Redis 重建 - 减少重启间隙。
* **环形缓冲区逐出**:环形缓冲区保存最近 10,000 个事件的内存。超过该窗口的祖先显示为 `chainBroken: true`,且 `brokenAt` 设置为最老的可用 eventId。
**从间隙中恢复:** 在长时间任务之前调用 `pot_checkpoint` 以压缩和保留链在令牌预算内,或使用 Redis 持久性以在重启时存活。
### pot_verify
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| potHash | 字符串 | 是 | 要验证的 PoT 哈希(十六进制前缀为 0x) |
| grgShards | 字符串数组 | 是 | 经过十六进制编码的加密完整性分片数组 |
| chainId | 数值 | 是 | EVM 链 ID |
| poolAddress | 字符串 | 是 | Uniswap V4 池地址 |
### pot_stats
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| period | `"day"` \| `"week"` \| `"month"` | 是 | 统计时间段 |
### pot_health
无参数。
### pot_checkpoint
创建工作流历史的压缩滚动检查点。
**何时使用:** 在接近上下文限制、长时间任务之前,或每 ~100 个事件时。
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| fromEventId | 字符串 | 否 | 范围起点 — 要包含的因果链中的第一个 eventId |
| toEventId | 字符串 | 否 | 范围终点 — 要包含的因果链中的最后一个 eventId |
| startTime | 数值 | 否 | Unix 毫秒。默认为 1 小时前 |
| endTime | 数值 | 否 | Unix 毫秒。默认为现在 |
| maxTokens | 数值 | 否 | 汇总输出的近似最大令牌数。默认为 2000 |
**返回:**
* `checkpointId` — 唯一的检查点标识符
* `rollup` — 压缩事件历史(深度自适应:完整/紧凑/最小/汇总)
* `summary` — 人类可读的检查点单行摘要
* `chainIntact` — 因果链是否未断裂
* `nextCheckpointHint` — 建议的事件数量在下一个检查点之前
**深度自适应压缩:
| 深度 | 格式 | ~令牌数 |
|-------|--------|---------|
| 1–5 | 完整条目 | ~200/事件 |
| 6–20 | 紧凑(id+hash+ts) | ~80/事件 |
| 21–50 | 最小(id+ts) | ~30/事件 |
| 51+ | 汇总字符串 | ~10/事件 |
---
## 用例
### 1. Claude Code 工作流 — 防止失忆
**问题:** 一个 20 代理动态工作流在数小时内重构一个 500K 行代码库。在每次上下文压缩后,代理都无法记住他们已经处理过的内容。重复工作。状态损坏。
**解决方案:** 每个代理使用 `pot_generate(eventId, prevEventId)` 为其步骤打上时间戳。在压缩后,它调用 `pot_query(eventId)` 以恢复其确切的操作历史记录 — 在外部服务器上发生、时间和顺序 — 从而不会影响 Claude 的上下文窗口。
```typescript
// 代理启动工作流步骤
const pot = await client.callTool({
name: "pot_generate",
arguments: {
eventId: "refactor_auth_module_step3",
prevEventId: "refactor_auth_module_step2"
}
});
// pot.potHash — 此步骤在此时发生的加密证明
// 上下文压缩后,代理恢复其历史记录:
const history = await client.callTool({
name: "pot_query",
arguments: { eventId: "refactor_auth_module_step3" }
// history.local[0] — 精确记录:时间戳、prevEventId、potHash
// history.found: true — O(1) 查找,碰撞概率 2⁻²⁵⁶
// 遍历完整因果链:
const chain = await client.callTool({
name: "pot_graph",
arguments: { eventId: "refactor_auth_module_step3", depth: 20 }
// chain.backwardChain — 所有祖先步骤按时间顺序排列
// chain.forwardChain — 在给定 eventId 之后的步骤
// chain.chainBroken — 如果在祖先链中检测到间隙,则为 true
// chain.brokenAt — 如果服务器重启并清除
// 了内存 DAG,则为 "server_restart";否则为间隙发生时的 eventId;如果链完整,则为 null
// chain.reachableDepth — 在间隙之前恢复的祖先数量
// 处理服务器重启间隙:
if (chain.chainBroken && chain.brokenAt === "server_restart") {
// 服务器清除内存状态;除非配置了 Redis(REDIS_URL),否则间隙前的祖先将被清除
// 恢复时,请查询最近的检查点或从已知步骤重新启动。
}
```
**在长时间任务或每 ~100 个事件之前 — 创建检查点:
```typescript
// 通过因果范围压缩工作流历史:
const checkpoint = await client.callTool({
name: "pot_checkpoint",
arguments: {
fromEventId: "refactor_auth_module_step1",
toEventId: "refactor_auth_module_step3"
}
// checkpoint.checkpointId — 存储此值;在压缩后从此处恢复
// checkpoint.rollup — 深度自适应压缩历史(10–200 令牌/事件)
// checkpoint.chainIntact: true — 因果链验证为未断裂
// checkpoint.nextCheckpointHint: 87 — 建议的事件数量在下一个检查点之前
// 或通过时间窗口和令牌预算压缩:
const checkpoint = await client.callTool({
name: "pot_checkpoint",
arguments: {
startTime: Date.now() - 3_600_000, // 最后一小时
maxTokens: 1500
}
}
// 上下文压缩后,从检查点恢复而不是查询所有事件:
const history = await client.callTool({
name: "pot_query",
arguments: { eventId: checkpoint.checkpointId }
// 完整的因果上下文在单个调用中恢复
}
```
**结果:** 零重复工作流。即使在完整的上下文重置后,也可恢复完整的工作流时间线。
---
### 2. MEV 机器人 — 交易顺序证明
**问题:** 你被抢跑。你无法证明 — 内存池时间戳每个节点都是本地的、无签名的。
**解决方案:** 在每次提交之前调用 `pot_generate`。 PoT 收到的数据由三个独立的时间来源签名(NIST、Google、Cloudflare)。如果发生前向运行,链上哈希可以通过单独的 Base Sepolia TTT ERC-1155 合约锚定。
```typescript
const pot = await client.callTool({
name: "pot_generate",
arguments: { txHash: pendingTxHash, chainId: 8453, poolAddress: "0x..." }
}
// pot.potHash — 您的证据,由 NIST+Google+Cloudflare 签名
```
> **注意:** DeFi 路径 (`txHash` + `chainId` + `poolAddress`) 需要启用了完整性分片管道的服务器端构建。公共 `openttt` npm 包中不可用;调用它将会抛出异常。Claude Code 路径 (`eventId`) 开箱即用。
---
### 3. DEX 协议 — 防止 Sandwich 攻击
**解决方案:** 集成 `TTTHookSimple`(Uniswap V4 hook,Base Sepolia: `0x8C633b05b833a476925F7d9818da6E215760F2c7`)。诚实的构建者获得 `turbo` 模式。篡改的序列获得 `full` 模式(惩罚延迟)。经济学,而不是治理。
> **注意:** 基于分片的验证 (`pot_verify` 带有 `grgShards`) 需要启用了完整性分片管道的服务器端构建 — 在公共 `openttt` npm 包中不可用。
---
### 4. 基金/自营交易 — MiFIR Art.22c 合规
**问题:** MiFIR 第 22c 条 / RTS 25 需要微秒精度 UTC 同步时间戳。硬件 PTP 设备成本为 $50K-$500K。
**解决方案:** `pot_generate` 生成具有不确定性界限的 Ed25519 签名时间戳。结构兼容 RTS 25 审计记录格式。每个交易一个 API 调用。
```typescript
const audit = await client.callTool({
name: "pot_generate",
arguments: { txHash: tradeHash, chainId: 8453 }
})
// audit.timestamp: 高分辨率时间戳
// audit.uncertainty: ± 界限(RTS 25 不确定性字段)
// audit.confidence: 达成一致的来源分数
```
> **精度说明:** 默认网络时间源(Roughtime / NTP)提供数毫秒的不确定性界限。 MiFIR Art. 22c / RTS 25 ±1ms(和更严格的要求)仅在添加 GEO 时间源(KTSat)时满足;这是路线图配置,而不是默认部署。
**结果:** 结构兼容的审计线索。IETF 规范:`draft-helmprotocol-tttps`.
---
### 5. 多代理协调 — 因果顺序证明
**问题:** 当多个 AI 代理在管道中交互时,因果顺序对于调试和审计至关重要。代理日志不可验证。
**解决方案:** 每个代理使用 `pot_generate` 为其操作打上时间戳。potHash 链可以独立验证。 `pot_graph` 重建谁做了什么以及按什么顺序。
---
## 它与众不同 — 不同的工作,不仅仅是“更好”
| 工具 | 集成 | 回忆内容 | 完整性 | 热点成本 |
|------|-------------|-----------------|-----------|---------------|
| Letta (MemGPT) | 拥有代理循环 | 自我编辑语义记忆 | 无 | 每个内存操作嵌入 + 向量搜索 |
| LangGraph / LangMem | 仅限 LangGraph | 图状态 / 语义 | 无 | 检查点 I/O (+ 嵌入) |
| RAG / 向量数据库 | 附加 | 模糊相似性 | 无 | 每个项目嵌入 + 向量搜索 |
| **ttt-mcp** | **2 分钟 MCP 改造** | **确切的因果步骤(按 eventId)** | **Ed25519 + TTTPS 时间戳** | **签名 + 哈希 + 写入 — 0 嵌入调用** |
**成本差异是结构性的,而不是偶然的。**
Letta 和 Mem0 将代理内存视为语义搜索问题 — 每次回忆都会强制进行 LLM 嵌入调用和向量搜索。 ttt-mcp 直接绕过 LLM/嵌入层:状态恢复是一个 O(1) 次加密哈希查找。边际成本是商品 CPU + 存储,而不是 API 令牌。
**范围:** 代理商会为值得检查的步骤打上时间戳 — 而不是每个令牌,每个查询。交易量跟踪决策,而不是总聊天流量。
如果您需要模糊语义搜索过去的对话,请使用 Letta 或向量数据库。如果您需要一个零嵌入、确定性的状态恢复层,用于在上下文压缩后长时间工作流程存活下来,请使用 ttt-mcp。
---
## 定价
| 层级 | 价格 | 每月调用次数 |
|------|-------|-------------|
| 免费 | $0 | 每天 100 次调用/ IP — 无需注册 |
| 开发版 | $29/月 | 100K |
| 专业版 | $99/月 | 1M |
| 团队版 | $299/月 | 10M + $0.01/1K 超额 |
| 企业版 | $999+/月 | 1亿调用/月 · $0.001/1K 超额 · SLA 99.9% |
| 平台许可证 | 协商($2M+/年) | 交易量上限协商 · 原生集成 |
**订阅:
开发版 **$29/月** · 专业版 **$99/月** · 团队版 **$299/月** — 要订阅,请发送电子邮件至 [peter@kenosian.com](mailto:peter@kenosian.com)。
企业和平台许可证:[peter@kenosian.com](mailto:peter@kenosian.com)
联系方式:peter@kenosian.com
**stdio 与 HTTP 报价机制:
- **HTTP 模式** (Glama / Smithery 容器,设置 `PORT`):每个 IP 的免费层级限制(每天 100 次调用)在服务器进程中本地强制执行。
- **stdio 模式** (Claude Code `npx`,Claude 桌面版):没有每个 IP 的计数器。工具调用被委派给 `api.kenosian.com`,通过 `X-TTT-API-Key`;配额根据您的计划的每月津贴在服务器端强制执行。没有 `TTT_API_KEY`,本地备用运行没有每日上限,但计划功能(服务器端 DAG 持久性,多会话因果链)不可用。
---
## 要求
- Node.js >= 18
- 网络访问,用于时间合成(HTTPS 访问 time.nist.gov, time.google.com, time.cloudflare.com)
**时间源层级(自动回退):
| 层级 | 源 | 分层 | 备注 |
|------|--------|---------|-------|
| 1(首选) | PTP / 硬件时钟 | 0–1 | 需要本地 PTP 守护进程 |
| 2 | Roughtime / NTP(NIST,谷歌,Cloudflare) | 2–4 | 大多数部署的默认设置 |
| 3(离线备用) | 本地系统时钟 | 16 | RFC 5905 未同步分层 — 当所有网络源都无法访问时使用 |
服务器自动回退到分层 16;无需手动配置。`stratum` 字段在每次 `pot_generate` 响应中指示使用的是哪个层级。
**Redis 持久性(可选):
Redis 不是必需的。内存 DAG 在运行时是权威的。如果设置了 `REDIS_URL`,事件将被写入 Redis,TTL 为 90 天,服务器重启时 DAG 将从 Redis 重建 — 从而减少 `server_restart` 链间隙。没有 Redis,内存 DAG 将在重启时被清除。
---
## 生产提示
**冷启动预热** — 首次启动时,BatchSigner 需要一个请求来初始化。调用 `pot_health` 或发送单个虚拟 `pot_generate` 请求,然后再进行负载均衡器健康检查。
```bash
# Kubernetes / Docker:添加到启动脚本
curl -s http://your-server/pot/health > /dev/null
```
---
## 了解更多
- [OpenTTT SDK](https://www.npmjs.com/package/openttt) — 底层 SDK
- [IETF 草案:draft-helmprotocol-tttps](https://datatracker.ietf.org/doc/draft-helmprotocol-tttps/) — TTTPS 协议规范
- [Helm 协议](https://github.com/Helm-Protocol) — GitHub
## 许可证
BSL-1.1 — 非商业用途免费。
**商业用途**(生产机器人,交易员,交易台)需要许可证。
Change Date: 2029-05-28 → Apache 2.0
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器