Skip to main content
Glama
LZMW

Aurai Advisor (上级顾问 MCP)

by LZMW
README.md
# Aurai Advisor MCP

让本地 AI(Claude Code)在遇到复杂编程问题时,向远程大模型继续请教的 MCP 服务。

**工作原理**: 本地 AI 通过 `sync_context` 上传代码文件 → `consult_aurai` 提交问题 → 远程顾问返回分析 + 可执行步骤 → 本地 AI 用 `report_progress` 汇报进展 → 循环直到解决。

**关键约束**: 远程顾问**无法直接访问你的文件系统**。它只能看到你通过 `sync_context` 上传的文件内容和 `consult_aurai` 描述的信息。

---

## 安装

### 1. 环境要求

- Python 3.10+
- Claude Code(或其他支持 MCP stdio 的客户端)

### 2. 下载并安装依赖

```bash
git clone https://github.com/LZMW/mcp-aurai-server.git
cd mcp-aurai-server
python -m venv venv
venv\Scripts\activate        # Windows
# source venv/bin/activate   # macOS / Linux
pip install -e .
```

### 3. 在 Claude Code 中注册

```bash
claude mcp add --scope user --transport stdio aurai-advisor \
  --env AURAI_API_KEY="你的API密钥" \
  --env AURAI_BASE_URL="https://你的API地址/v1" \
  --env AURAI_MODEL="模型名称" \
  -- "完整路径\venv\Scripts\python.exe" "-m" "mcp_aurai.server"
```

**Windows 实际示例**:

```bash
claude mcp add --scope user --transport stdio aurai-advisor \
  --env AURAI_API_KEY="sk-xxxxxxxxxxxxxxxx" \
  --env AURAI_BASE_URL="https://api.openai.com/v1" \
  --env AURAI_MODEL="gpt-4o" \
  -- "D:\mcp-aurai-server\venv\Scripts\python.exe" "-m" "mcp_aurai.server"
```

`--scope user` 表示在所有项目中可用。

### 4. 验证

```bash
claude mcp list
```

看到 `aurai-advisor: ✓ Connected` 即成功。

### 5. 卸载

```bash
claude mcp remove "aurai-advisor" -s user
```

---

## 配置参数

所有参数通过环境变量设置,在 `claude mcp add` 时用 `--env` 传入。

### 必填

| 环境变量 | 说明 | 示例 |
|----------|------|------|
| `AURAI_API_KEY` | API 密钥 | `sk-xxxxxxxx` |
| `AURAI_BASE_URL` | OpenAI 兼容接口地址 | `https://api.openai.com/v1` |
| `AURAI_MODEL` | 模型名称 | `gpt-4o` / `claude-opus-4-1-20250805-thinking` |

### AI 调用控制

| 环境变量 | 默认值 | 范围 | 说明 |
|----------|--------|------|------|
| `AURAI_TEMPERATURE` | `0.7` | 0.0–2.0 | 生成温度。越低越确定,越高越随机 |
| `AURAI_MAX_TOKENS` | `32000` | ≥1 | 远程顾问单次回复的最大输出长度(tokens) |
| `AURAI_CONTEXT_WINDOW` | `200000` | ≥1 | 模型上下文窗口大小(tokens)。输入 + 输出的总上限 |
| `AURAI_MAX_MESSAGE_TOKENS` | `150000` | ≥1 | 单个文件超过此值会自动拆分成多段发送 |
| `AURAI_MAX_ITERATIONS` | `50` | 1–200 | 单个问题最多对话轮数。50 轮内解决 → 自动清空历史;超限 → 清空历史并返回 `requires_human_intervention` |

**上下文预算 & Token 监控**:

| 环境变量 | 默认值 | 范围 | 说明 |
|----------|--------|------|------|
| `AURAI_CONTEXT_HIGH_WATERMARK` | `0.85` | 0.5–1.0 | 上下文高水位线。输入 tokens 超过此比例时返回预警并主动压缩历史 |

每次 `consult_aurai` / `report_progress` 响应中均包含 `token_usage` 字段,实时展示输入 tokens、使用率、是否触发预警。当超过高水位线时,会主动压缩历史为输出腾空间。本地 AI 可根据 `warning=true` 提示调用 `sync_context(operation='clear')` 清空历史。

**上下文预算分配策略**: 优先保证 `AURAI_MAX_TOKENS` 的输出预算。输入过大时裁剪历史消息,不压缩输出。仅当基础消息(系统提示词 + 当前问题)本身就超过窗口时才缩减输出。

### 对话历史

| 环境变量 | 默认值 | 范围 | 说明 |
|----------|--------|------|------|
| `AURAI_MAX_HISTORY` | `50` | 1–200 | 每个会话在本地最多保留多少条历史记录 |
| `AURAI_PROMPT_HISTORY_TURNS` | `10` | 1–50 | 每次发送给远程顾问时附带最近多少轮原始对话(摘要不受此限制) |
| `AURAI_ENABLE_PERSISTENCE` | `true` | bool | 是否将历史保存到磁盘。关闭后重启 Claude Code 历史丢失 |
| `AURAI_HISTORY_PATH` | `~/.mcp-aurai/history.json` | — | 历史文件存储路径 |
| `AURAI_HISTORY_LOCK_TIMEOUT` | `10` | 1–120s | 跨进程文件锁等待超时 |
| `AURAI_ENABLE_HISTORY_SUMMARY` | `true` | bool | 是否启用历史摘要。仅在接近 max_history(80%)时触发,保留 60% 原始记录 |

**历史机制说明**:

- `AURAI_MAX_HISTORY`(50 条)是本地存储上限——现代 200K 上下文下纯对话远填不满,真正的瓶颈是 `sync_context` 上传的大文件
- 摘要不再按固定条数触发,而是在接近 max_history 时(40/50 条)才启动
- Token 水位线预警(`AURAI_CONTEXT_HIGH_WATERMARK`)是实时防线,在每次请求前检查
- 不同 `session_id` 的历史互相隔离

### 进程管理

| 环境变量 | 默认值 | 范围 | 说明 |
|----------|--------|------|------|
| `AURAI_STDIO_IDLE_TIMEOUT_SECONDS` | `600` | 0–86400 | 空闲多久后自动退出。`0` = 永不退出(推荐) |
| `AURAI_STDIO_IDLE_CHECK_INTERVAL_SECONDS` | `30` | 1–3600 | 空闲检查间隔 |

**推荐设置 `AURAI_STDIO_IDLE_TIMEOUT_SECONDS=0`**,避免 Claude Code 还在运行但 MCP 因空闲被误杀。空闲退出前会检查父进程是否存活,但如果不在意残留进程,直接禁用最省心。

### 其他

| 环境变量 | 默认值 | 说明 |
|----------|--------|------|
| `AURAI_LOG_LEVEL` | `INFO` | 日志级别:`DEBUG` / `INFO` / `WARNING` / `ERROR`。调试时建议 `DEBUG` |

---

## 使用指南

MCP 注册后,Claude Code 中自动出现 4 个工具:

### 典型调用流程

```
1. sync_context(operation='sync', files=['src/bug.py'], project_info={...})
   ↑ 让顾问看到你的代码

2. consult_aurai(problem_type='runtime_error', error_message='...')
   ↑ 提交问题,获取分析

3. 如返回 status='need_info' → 搜集顾问反问的信息 → 再次 consult_aurai(answers_to_questions='...')
   ↑ 多轮对齐

4. 如返回 status='success' → 按 action_items 执行修改

5. report_progress(actions_taken='改了X', result='success')
   ↑ 汇报进展,获取下一步指导

6. 重复 4-5,直到 resolved=true
```

### 工具速查

| 工具 | 用途 |
|------|------|
| `sync_context` | 上传文件和项目背景。`operation='sync'` 追加,`'clear'` 清空 |
| `consult_aurai` | 提交问题。支持多轮:收到反问→搜集信息→`answers_to_questions` 继续 |
| `report_progress` | 按顾问指导执行后汇报结果,获取下一步 |
| `get_status` | 查看会话状态(历史条数、模型、空闲时间) |

### 会话隔离

不同任务传不同的 `session_id`,避免上下文串扰:

```
consult_aurai(session_id='bug-123', ...)   # 修 Bug A
consult_aurai(session_id='feature-456', ...) # 写功能 B
```

---

## 常见问题

### 上级顾问收不到我上传的代码?

检查 `sync_context` 返回的 `uploaded_files` 和 `skipped_files`。二进制文件(图片、压缩包)会被自动跳过。代码文件(.py/.js/.ts 等)会自动转换为文本发送。

### 不同问题互相干扰?

给不同问题传不同的 `session_id`。或设置 `is_new_question=true` 清空当前会话历史。

### Claude Code 提示 MCP 连不上?

- 检查 `claude mcp list` 确认状态
- 查看 `AURAI_STDIO_IDLE_TIMEOUT_SECONDS`,推荐设为 `0` 禁用空闲退出
- 查看日志:`AURAI_LOG_LEVEL=DEBUG` 可看到详细日志(输出到 stderr)

### 历史文件变得很大?

历史摘要在自动工作。旧记录被压缩为纪要而非删除,可设置 `AURAI_ENABLE_HISTORY_SUMMARY=false` 完全禁用摘要(不推荐)。

### 怎么切换模型?

```bash
claude mcp remove "aurai-advisor" -s user
claude mcp add --scope user --transport stdio aurai-advisor \
  --env AURAI_API_KEY="sk-..." \
  --env AURAI_BASE_URL="https://api.openai.com/v1" \
  --env AURAI_MODEL="新模型名称" \
  -- "D:\mcp-aurai-server\venv\Scripts\python.exe" "-m" "mcp_aurai.server"
```

TDQS

A4.2/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a distinct, non-overlapping purpose: consult_aurai for core advice, sync_context for file uploads, report_progress for progress updates, and get_status for status checks. The descriptions clearly differentiate their roles, with no ambiguity in when to use each tool.

Naming Consistency5/5

All tool names follow a consistent snake_case pattern with clear verb_noun structures: consult_aurai, sync_context, report_progress, get_status. This uniformity makes the set predictable and easy to understand for an agent.

Tool Count5/5

With 4 tools, this server is well-scoped for its purpose of providing AI-guided problem-solving. Each tool serves a specific function in the workflow (consult, sync, report, status), and there are no extraneous or missing tools for the domain.

Completeness5/5

The tool set fully covers the intended workflow: initiating consultations (consult_aurai), providing context (sync_context), reporting progress (report_progress), and checking status (get_status). There are no gaps; agents can handle the entire lifecycle from problem submission to resolution.

Maintenance

ActivityInactive
ResponsivenessNo issues