内容
<p align="center">
<a href="https://three.ws"><img src="https://three.ws/three-ws-mcp-icon.svg" alt="three.ws" width="88" height="88"></a>
</p>
<h1 align="center">@three-ws/tutor-mcp</h1>
<p align="center"><strong>从任意 AI 代理管理按学习付费的辅导会话 - 读取其逐项运行标签并关闭它以获取有证明的发票。</strong></p>
<p align="center">
<a href="https://www.npmjs.com/package/@three-ws/tutor-mcp"><img alt="npm" src="https://img.shields.io/npm/v/@three-ws/tutor-mcp?logo=npm&color=cb3837"></a>
<img alt="license" src="https://img.shields.io/npm/l/@three-ws/tutor-mcp?color=3b82f6">
<img alt="node" src="https://img.shields.io/node/v/@three-ws/tutor-mcp?color=339933&logo=node.js">
<a href="https://registry.modelcontextprotocol.io/?q=io.github.nirholas"><img alt="MCP Registry" src="https://img.shields.io/badge/MCP%20Registry-io.github.nirholas-0ea5e9"></a>
<a href="https://three.ws"><img alt="three.ws" src="https://img.shields.io/badge/built%20by-three.ws-000"></a>
</p>
---
> 一个 [Model Context Protocol](https://modelcontextprotocol.io) 服务器,暴露 three.ws **按学习付费的辅导账本** 通过 stdio。读取辅导会话的逐项标签 - 每个回答问题一行,包含每个项目的费用和运行总费用 - 并关闭会话以密封有证明的发票。
辅导员按回答问题收费;**此服务器的工具是免费的**。查看运行标签和关闭会话永远不会向学习者收费 - 学习者永远不需要支付查看他们欠费或结束会话的费用。会话通过不透明的 `sessionId` 地址,因此不需要 API 密钥和签名者 - 将 `THREE_WS_BASE` 指向部署并开始。
## 安装
```bash
npm install @three-ws/tutor-mcp
```
或使用 `npx` 运行(无需安装):
```bash
npx @three-ws/tutor-mcp
```
## 快速开始
**Claude Code**,一行:
```bash
claude mcp add tutor -- npx -y @three-ws/tutor-mcp
```
**Claude Desktop / Cursor** (`claude_desktop_config.json` 或 `mcp.json`):
```json
{
"mcpServers": {
"tutor": {
"command": "npx",
"args": ["-y", "@three-ws/tutor-mcp"]
}
}
}
```
使用 MCP Inspector 检查表面:
```bash
npx -y @modelcontextprotocol/inspector npx @three-ws/tutor-mcp
```
## 工具
| 工具 | 类型 | 它能做什么 |
| --------------- | ----- | ---------------------------------------------------------------------------------------------------------------------------- |
| `load_session` | 读取 | 通过 `sessionId` 读取会话的逐项运行标签 - 行项目(问题、级别、令牌、费用)、状态和运行总费用。 |
| `close_session` | 写入 | 完成会话并返回其有证明的发票 - 用 SHA-256 证明密封账本并锁定进一步计费。 |
两个工具都是 **免费** 的,并且不移动资金:按问题付费的答案(在其他地方处理)。`load_session` 读取实时数据 - 标签随着问题计费而增长,因此它不是幂等的。`close_session` 修改状态(打开 → 关闭)但本身是幂等的:重新关闭返回相同的逐项总费用。
### 输入参数
**`load_session`** — `sessionId`(必填,≤100 个字符)。
**`close_session`** — `sessionId`(必填,≤100 个字符)。
## 示例
```jsonc
// load_session
> { "sessionId": "learn-abc123" }
{
"ok": true,
"sessionId": "learn-abc123",
"status": "open",
"createdAt": "2026-06-24T03:40:00.000Z",
"questionCount": 2,
"lineItems": [
{ "n": 1, "question": "什么是 Solana PDA?", "level": "intro", "outputTokens": 180, "costAtomics": 10000, "costUsd": "0.010000", "at": "2026-06-24T03:41:00.000Z" },
{ "n": 2, "question": "CPI 是如何工作的?", "level": "intro", "outputTokens": 220, "costAtomics": 10000, "costUsd": "0.010000", "at": "2026-06-24T03:42:00.000Z" }
],
"totalAtomics": 20000,
"totalUsd": "0.020000"
}
```
```jsonc
// close_session
> { "sessionId": "learn-abc123" }
{
"ok": true,
"sessionId": "learn-abc123",
"createdAt": "2026-06-24T03:40:00.000Z",
"closedAt": "2026-06-24T03:45:00.000Z",
"questionCount": 2,
"lineItems": [ /* 相同的逐项行项目 */ ],
"totalAtomics": 20000,
"totalUsd": "0.020000",
"attestation": "sha256:…"
}
```
没有存储历史记录的 `sessionId` 返回一个空的打开会话(`questionCount: 0`)而不是错误 - 一个诚实的“尚未计费”,而不是失败。
## 要求
- **Node.js >= 20.**
- 可以访问 `https://three.ws`(或您自己的 `THREE_WS_BASE`)。
### 环境变量
| 变量 | 是否必填 | 默认值 |
| --------------------- | -------- | ------------------ |
| `THREE_WS_BASE` | 否 | `https://three.ws` |
| `THREE_WS_TIMEOUT_MS` | 否 | `20000` |
## 链接
- 首页:https://three.ws
- 更新日志:https://three.ws/changelog
- 问题:https://github.com/nirholas/three.ws/issues
- 许可证:Apache-2.0 — 见 [LICENSE](./LICENSE)
---
<p align="center">
<sub>
three.ws SDK 套件的一部分 — 3D AI 代理、链上身份和代理支付。<br/>
<a href="https://three.ws">网站</a> · <a href="https://three.ws/changelog">更新日志</a> · <a href="https://github.com/nirholas/three.ws">GitHub</a>
</sub>
</p>
## 许可证
版权所有 © 2026 nirholas。保留所有权利。
本软件是专有软件 - 见 [LICENSE](./LICENSE)。未经版权所有者明确书面许可,不得授予任何权利。