内容
# Aurais MCP 机器人
五个 Aurais MCP 服务器加上一个离线证明链验证器 — 一个单体仓库,一个共享核心。每个机器人都是一个独立的模型上下文协议(MCP)服务器,您可以将其部署到 Claude Desktop、Claude Code 或任何 MCP 客户端。每次运行都会生成一个签名的 Aurais 证明链,您可以离线验证(参见 [验证证明链](#验证证明链))。
## 机器人列表
| 软件包目录 | npm 名称 | 工具 | 功能 |
| --- | --- | --- | --- |
| `packages/journal-companion` | `@vorionsys/aurais-mcp-journal-companion` | `reflect_on_entry` | 粘贴日记条目,获取结构化反思(情绪,主题,感恩,一个温和的问题)。危机意识。 |
| `packages/market-scout` | `@vorionsys/aurais-mcp-market-scout` | `brief_tickers` | 输入 ticker,输出每个 ticker 的简报(RSI,MACD,SMA,成交量,与 SPY 的相对强度)。 |
| `packages/meeting-distiller` | `@vorionsys/aurais-mcp-meeting-distiller` | `distill_meeting` | 粘贴会议记录,获取决策 + 行动项(负责人 /截止日期)+ 后续 + 开放问题 + 风险。 |
| `packages/research-reader` | `@vorionsys/aurais-mcp-research-reader` | `read_source` | 粘贴论文或文章,获取带有逐字验证引用的结构化阅读内容。 |
| `packages/writing-editor` | `@vorionsys/aurais-mcp-writing-editor` | `critique_draft` | 粘贴草稿 + 受众 + 语气,获取结构 / 句子级别 / 语气批评。永远不会重写您的文字。 |
每个机器人还暴露 `get_agent_identity` — 返回机器人的 CAR ID、层级、功能和部署指纹,无需 API 调用。
## 机器人链式调用(跨机器人溯源)
每个工具都接受一个可选的 `upstreamProof` 参数:来自先前 Aurais 机器人运行的 `tipHash`。当提供时,它会记录在此运行的 `session_started` 事件中,因此验证器可以追溯一个机器人的输出到为其提供输入的上游运行 — 跨机器人而非仅在单个机器人内的溯源图。
```
research-reader.read_source(paper) → tipHash A
writing-editor.critique_draft( → tipHash B,其链记录
draft, upstreamProof: A) upstream_proof = A
```
每个 `session_started` 事件还记录 `package_version`(运行包的实际版本,从其 `package.json` 读取 — 而不是硬编码),因此链条证明了确切的已发布版本。
## 架构
所有五个机器人共享 `@vorionsys/aurais-core` 以实现负载信任原语:
- **`ProofChain`** — Ed25519 签名,sha256 链式事件日志。每个机器人运行都会发出 `session_started` → `commentary_generated` → `briefing_assembled` 事件。
- **`deriveAgentIdentity`** — 从 `(slug, version, manifest_hash)` 确定性离线 CAR ID 派生。返回层级、天花板、功能和部署指纹。
- **`canonicalJSON`** + **`sha256`** — 确定性序列化 + 哈希助手(重新导出,以便调用者生成与库匹配的摘要)。
每个机器人为自己保留:
- **`identity.ts`** — 机器人的 `*_IDENTITY` 常量(slug,版本,名称,层级,功能)。在运行时馈送到 `@vorionsys/aurais-core` 的 `deriveAgentIdentity`。
- **`lib/<domain>.ts`** — 机器人的领域逻辑(分析器 / 蒸馏器 / 简报 / 等)。
- **`index.ts`** — MCP 服务器线路(工具定义,传输)。
这是 **步骤 2 of 3** 在 aurais-mcp 合并中 — 所有三个步骤现已完成。步骤 1 提取了 [`@vorionsys/aurais-core`](https://www.npmjs.com/package/@vorionsys/aurais-core) (规范仓库 `vorionsys/aurais-core`,发布到 npm);步骤 2(此仓库)将机器人重复代码转移到它并发布所有软件包;步骤 3 废除了 Aurais Next.js 应用中的重复副本,该应用现在直接依赖于 `@vorionsys/aurais-core`。
## 溯源
来源:`voriongit/vorion` 单体仓库,工作树在分支 `pre-split-capture-20260418` 的 HEAD `94a6de87720b2280d59e36442370078275bdc959` 于 2026-04-25。
每个软件包都是从 `vorion/packages/aurais-mcp-<name>/` 提取的。每个机器人的源文件(`index.ts`、`lib/<domain>.ts`、`identity.ts`)都保留不变 — 只有重复的 `proof-chain.ts`、`car-identity.ts` 和内联的 `canonicalJSON` 被删除并替换为来自 `@vorionsys/aurais-core` 的导入。
> 关于 `meeting-distiller` 的说明:源树副本的 `index.ts`、`lib/distiller.ts` 和 `lib/car-identity.ts` 在本地克隆中被截断(`pre-split-capture-20260418` 分支上已知的预先存在条件)。截断的尾部从软件包的编译 `dist/`(在损坏之前构建)中重建,并针对 `index.ts` 中的运行时调用站点进行验证。CAR 身份模块被替换,其截断仅影响每个机器人的 `MEETING_DISTILLER_IDENTITY` 常量 — 从 `dist/lib/car-identity.js` 完全恢复。
## 开发
```bash
npm install
npm run typecheck # 所有工作区
npm run build # 所有工作区(tsc → dist/)
npm test # 所有工作区(如果没有测试脚本则跳过)
```
每个机器人的开发:
```bash
cd packages/journal-companion
npm run dev # tsx src/index.ts — 在 stdio 上运行 MCP 服务器
```
## 作为 MCP 服务器运行
构建后,在您的 MCP 客户端中注册一个机器人。Claude Desktop / Claude Code 示例(`~/.config/claude/claude_desktop_config.json`):
```json
{
"mcpServers": {
"aurais-meeting-distiller": {
"command": "npx",
"args": ["-y", "@vorionsys/aurais-mcp-meeting-distiller"],
"env": {
"ANTHROPIC_API_KEY": "sk-ant-...",
"AURAIS_SIGNING_KEY_PRIV": "<可选的 base64 PKCS8 以与规范 Aurais 密钥共同签名>"
}
}
}
}
```
(将 `meeting-distiller` 替换为其他四个机器人名称。每个机器人都发布为 `@vorionsys/aurais-mcp-<name>`。)
### 远程(HTTP)模式
相同的二进制文件也作为 **远程** MCP 服务器通过 Streamable HTTP 运行 — 设置 `AURAIS_TRANSPORT=http`(默认为 stdio,不更改)。在 HTTP 模式下,调用者通过 `X-Anthropic-Key` 头部提供他们自己的 Anthropic 密钥,因此服务器上没有长期密钥:
```bash
AURAIS_TRANSPORT=http PORT=3000 npx -y @vorionsys/aurais-mcp-meeting-distiller
# MCP 端点:POST http://<host>:3000/mcp
# 头部:X-Anthropic-Key: sk-ant-...
```
| | stdio(默认) | http(`AURAIS_TRANSPORT=http`) |
|---|---|---|
| 受众 | 本地(Claude Desktop/Code) | 远程连接器 / 共享服务器 |
| API 密钥 | `ANTHROPIC_API_KEY` 环境变量 | `X-Anthropic-Key` 请求头部 |
| 会话 | 每个进程 | 无状态(无会话 ID) |
> **在 TLS 后面提供 HTTP 服务。** 每个请求都发送密钥,因此在公开之前,请在代理(或容器前面)终止 HTTPS。内置服务器使用纯 HTTP 通信,旨在位于该边界后面。
### OAuth 2.1(远程服务器的规范身份验证)
在 HTTP 模式下,每个机器人还可以作为 **OAuth 2.1 资源服务器**,按照 [MCP 授权规范(2025-06-18)](https://modelcontextprotocol.io/specification/2025-06-18/basic/authorization) 运行。启用它,指向您的授权服务器并声明其自己的规范 URL:
```bash
AURAIS_TRANSPORT=http PORT=3000 \
AURAIS_OAUTH_ISSUER=https://auth.example.com \
AURAIS_OAUTH_RESOURCE=https://bots.example.com/mcp \
npx -y @vorionsys/aurais-mcp-meeting-distiller
```
启用后,每个 MCP 请求都必须携带 `Authorization: Bearer <jwt>`,并且机器人强制执行规范的 MUST:
- **签名** — 使用发行者的 JWKS(通过 RFC 8414 / OIDC 元数据发现,缓存,轮换感知)验证。
- **受众绑定(RFC 8707)** — `aud` 必须等于 `AURAIS_OAUTH_RESOURCE`;为其他服务颁发的令牌将被拒绝。入站令牌永远不会转发上游(规范禁止令牌直传)。
- **发行者 + 过期时间** — `iss` 必须匹配,`exp` 会被强制执行(5 秒时钟容差)。
- **发现** — RFC 9728 受保护资源元数据在 `/.well-known/oauth-protected-resource` 处提供(和路径追加形式),401 响应携带 `WWW-Authenticate: Bearer … resource_metadata="…"`,以便 MCP 客户端可以自动找到您的授权服务器。
OAuth **验证调用者**;它不会取代 BYOK — `X-Anthropic-Key` 头部仍然提供调用者的 Anthropic 密钥。任何 OAuth 2.1 / OIDC 提供者签名 JWT 访问令牌并提供 JWKS 都可以用作授权服务器(Auth0、Keycloak、WorkOS 等)。两个环境变量都不设置 → 不需要身份验证,与以前一样。
## `@vorionsys/aurais-core` 依赖
所有六个软件包 — 五个机器人和验证器 — 通过 semver 范围从 npm 消耗共享核心:
```json
"@vorionsys/aurais-core": "^0.1.0"
```
`@vorionsys/aurais-core@0.1.0` 公开发布在 npm 上,因此 `npm install`、CI 和 `npx -y @vorionsys/aurais-mcp-<name>` 都可以在没有令牌或 SSH 密钥的情况下解析它。(早期预发布版本的此仓库依赖于 GitHub URL,需要 CI 中的 `GH_TOKEN` 秘密 — 现在不再需要。)
## 验证证明链
运行任意机器人,捕获 JSON 输出,并使用捆绑的验证器离线验证 — 无需网络,无需 API 密钥:
```bash
# 验证保存的结果(裸链或完整工具结果 JSON 均可)
npx @vorionsys/aurais-verify result.json
# 或直接将机器人的输出导入
some-aurais-bot | npx @vorionsys/aurais-verify
```
它检查每个事件的 **ed25519 签名**,事件之间的 **哈希链接**,**序列** 完整性和 **密钥一致性**,然后重新计算提示。退出代码 `0` = 已验证,`1` = 失败。参见 [`packages/proof-verifier`](packages/proof-verifier) 获取完整检查列表,库 API (`verifyProofChain`) 以及关于完整性和签名者身份之间重要区别的说明(对于会话范围密钥,它无法做到)。
更喜欢库吗?`@vorionsys/aurais-core` 导出与链条构建相同的 `canonicalJSON` + `sha256` 原语。网页验证器也运行在 `https://www.aurais.net/verify`。
## 许可证
Apache-2.0。参见 `LICENSE`。