内容
# 特勒克斯
一个带有邮政主题的小型消息代理,通过 [MCP](https://modelcontextprotocol.io) 进行通信。代理作为MCP客户端连接,**给邮局发送信件**,并轮询他们的邮箱以收取等待的消息。没有什么复杂的,只需要四个工具和一个签名的邮戳。
## 为什么使用邮政隐喻?
因为一个普通的报文代理太过枯燥。在这里,你不只是发送一条消息,而是**邮寄一封信**。它有一个`发件人地址`和一个`收件人地址`。当邮局处理它时,会在上面盖一个**邮戳** —— 一个真正的Ed25519签名,这样收件人就可以证明这封信的来源,并且没有人篡改过。
你也不能在这里进行垃圾邮件轰炸。每个发件人都会得到一本**邮票**(一个速率限制)。发送速度太快就会用完,邮局就会拒绝你,直到你的邮票重新充值。
邮局是相互隔离的。`柏林`和`汉堡`不共享邮箱、密钥或邮票计数。客户端指向不同的邮局,它们永远不会看到对方的邮件。
## 运行它
```
go run ./cmd/telex
```
在`:1456`上启动一个MCP服务器,支持流式HTTP。任何MCP客户端都可以指向`http://localhost:1456`。
## 身份验证
设置`TELEX_TOKEN`以在每个请求上要求Bearer令牌:
```
TELEX_TOKEN=some-long-secret go run ./cmd/telex
```
然后客户端发送`Authorization: Bearer some-long-secret`。任何没有有效令牌的请求都会得到`401`响应。如果`TELEX_TOKEN`未设置,服务器将开放运行(带有警告)—— 适用于本地开发,但不适用于公开暴露。
这是一个单一的共享令牌:它控制整个邮局的访问权限。它**不**将调用者绑定到特定身份,因此无法阻止已身份验证的客户端在信件上使用任意`发件人地址`或读取其他人的邮箱。按身份划分的令牌(无发件人伪造,仅限于自己的邮箱读取,按邮局访问)是下一步的改进目标。
## 工具
每个工具都可以选择一个`office`参数。省略它将使用`default`邮局。
- **发送信件** `{office?, sender_address, recipient_address, content}` — 邮寄一封信。邮局会盖上签名的邮戳并将其放入收件人的邮箱中。返回邮戳。如果邮票用完或邮箱已满,则返回错误。
- **检查邮箱** `{office?, address}` — 收集等待`address`的所有信件并清空邮箱。这是接收邮件的方式;需要主动轮询。
- **邮局密钥** `{office?}` — 返回邮局的Ed25519公钥(base64),用于自行验证邮戳。
- **验证邮戳** `{office?, sender_address, recipient_address, content, stamped_at, signature}` — 为您检查邮戳签名并返回其是否有效。
信件在邮箱中等待(缓冲,最多100封),直到被收取,因此收件人不需要在信件发送的确切时刻监听。
## 邮戳
邮戳签名以下字段,按换行符(`\n`)连接,按此顺序:
```
sender_address
recipient_address
content
office
stamped_at
```
`stamped_at`是一个unix-nano整数。使用邮局的公钥验证它 —— 可以通过`office_key`自行验证,或将字段传递给`verify_postmark`。
## 布局
```
cmd/telex MCP服务器和工具连接
internal/postal 信件、邮戳、邮票、邮局
```