419 lines
10 KiB
Markdown
419 lines
10 KiB
Markdown
# Funstat MCP 完整打包
|
|
|
|
**版本**: 1.16.0
|
|
**打包时间**: 2025-10-27
|
|
**协议**: MCP Streamable HTTP (2025-03-26+)
|
|
|
|
## 项目说明
|
|
|
|
Funstat MCP 提供一个面向多客户端的统一接口,将 Telegram 上的 @openaiw_bot 能力封装为标准化的 MCP 工具。项目集成速率限制、响应缓存与 SSE 输出,方便 Codex、Cursor、Claude Code 等开发工具快速调用。配套脚本覆盖环境初始化、会话创建与生产部署,使得在新机器上即可一键启动 Funstat 服务。
|
|
|
|
---
|
|
|
|
## 📦 包内容概览
|
|
|
|
这个打包包含了完整的 Funstat MCP 服务器实现,以及所有相关文档、配置和工具。
|
|
|
|
### 目录结构
|
|
|
|
```
|
|
funstat_mcp_package/
|
|
├── README.md # 本文件
|
|
├── core/ # 核心代码
|
|
│ ├── server.py # MCP 服务器主程序 ⭐️
|
|
│ ├── start_sse_prod.sh # 生产环境启动脚本 ⭐️
|
|
│ ├── setup.sh # 一键安装脚本
|
|
│ └── ... # 其他测试和调试脚本
|
|
├── docs/ # 文档
|
|
│ ├── ALL_AI_TOOLS_MCP_SETUP.md # 统一配置指南 ⭐️
|
|
│ ├── CODEX_CLI_MCP_SETUP.md # Codex CLI 配置
|
|
│ ├── CURSOR_MCP_SETUP.md # Cursor IDE 配置
|
|
│ ├── STREAMABLE_HTTP_FIX_FINAL.md # 协议修复文档 ⭐️
|
|
│ ├── 007翻译客户获取-多工具组合方案.md # 客户获取方案
|
|
│ ├── 007翻译客户获取-执行报告.md # 执行报告
|
|
│ └── ... # 其他技术文档
|
|
├── scripts/ # 工具脚本
|
|
│ ├── funstat_auto_query.py # 自动查询客户脚本 ⭐️
|
|
│ ├── analyze_customers_v2.py # 客户分析脚本
|
|
│ └── ... # 其他辅助脚本
|
|
├── customer_data/ # 客户数据
|
|
│ ├── funstat_query_results.json # 原始查询结果
|
|
│ ├── 高质量客户清单.json # 高质量客户列表
|
|
│ └── 客户分类清单.json # 分类客户列表
|
|
└── config_examples/ # 配置示例
|
|
├── cursor-mcp.json # Cursor IDE 配置
|
|
└── claude-code-mcp-config.json # Claude Code 配置
|
|
```
|
|
|
|
---
|
|
|
|
## 🎯 核心功能
|
|
|
|
### MCP 工具列表 (8个)
|
|
|
|
| 工具名 | 功能 | 对应命令 |
|
|
|--------|------|---------|
|
|
| `funstat_start` | 启动会话 | `/start` |
|
|
| `funstat_balance` | 查询余额 | `/余额` |
|
|
| `funstat_search` | 搜索群组 | `/search [关键词]` |
|
|
| `funstat_topchat` | 热门群组 | `/topchat` |
|
|
| `funstat_menu` | 显示菜单 | `/menu` |
|
|
| `funstat_text` | 搜索消息内容 | `/text [关键词]` |
|
|
| `funstat_human` | 搜索用户 | `/human [关键词]` |
|
|
| `funstat_user_info` | 查询用户详情 | `/user_info [username]` |
|
|
|
|
### 协议支持
|
|
|
|
- ✅ **Streamable HTTP** (MCP 2025-03-26+) - 主要协议
|
|
- ✅ **AgentAPI Proxy** - 用于 Claude Code 和 Cursor
|
|
- ✅ **直接 HTTP** - Codex CLI 原生支持
|
|
|
|
### 客户端兼容性
|
|
|
|
| 客户端 | 配置方式 | 状态 |
|
|
|--------|---------|------|
|
|
| **Claude Code** | AgentAPI Proxy | ✅ 已测试 |
|
|
| **Cursor IDE** | `.cursor/mcp.json` | ✅ 已测试 |
|
|
| **Codex CLI** | `~/.codex/config.toml` | ✅ 已修复 (405错误) |
|
|
|
|
---
|
|
|
|
## 🚀 快速开始
|
|
|
|
### 前置要求
|
|
|
|
1. **Python 3.9+**
|
|
2. **Telegram Session 文件**: `/Users/lucas/telegram_sessions/funstat_bot.session`
|
|
3. **依赖包**:
|
|
- `mcp` (1.16.0+)
|
|
- `telethon`
|
|
- `starlette`
|
|
- `uvicorn`
|
|
|
|
### 安装步骤
|
|
|
|
#### 1. 安装依赖
|
|
|
|
```bash
|
|
cd core
|
|
chmod +x setup.sh
|
|
./setup.sh
|
|
```
|
|
|
|
或手动安装:
|
|
|
|
```bash
|
|
pip3 install mcp telethon starlette uvicorn
|
|
```
|
|
|
|
#### 2. 配置 Session 文件
|
|
|
|
确保你有有效的 Telegram session 文件:
|
|
|
|
```bash
|
|
ls -l /Users/lucas/telegram_sessions/funstat_bot.session
|
|
```
|
|
|
|
如果没有,请先创建 session (参考 `docs/SESSION_MANAGEMENT.md`)。
|
|
|
|
#### 3. 启动 MCP 服务器
|
|
|
|
**生产环境 (推荐)**:
|
|
|
|
```bash
|
|
cd core
|
|
chmod +x start_sse_prod.sh
|
|
./start_sse_prod.sh
|
|
```
|
|
|
|
**开发环境**:
|
|
|
|
```bash
|
|
cd core
|
|
python3 server.py
|
|
```
|
|
|
|
服务器将在 `http://127.0.0.1:8091/sse` 启动。
|
|
|
|
#### 4. 配置客户端
|
|
|
|
**Codex CLI**:
|
|
|
|
```bash
|
|
codex mcp add --url http://127.0.0.1:8091/sse funstat
|
|
codex mcp get funstat # 验证配置
|
|
```
|
|
|
|
**Cursor IDE**:
|
|
|
|
复制 `config_examples/cursor-mcp.json` 到你的项目 `.cursor/` 目录:
|
|
|
|
```bash
|
|
mkdir -p /path/to/your/project/.cursor
|
|
cp config_examples/cursor-mcp.json /path/to/your/project/.cursor/mcp.json
|
|
```
|
|
|
|
**Claude Code**:
|
|
|
|
已自动配置 (通过 AgentAPI)。
|
|
|
|
---
|
|
|
|
## 📚 文档索引
|
|
|
|
### 设置与配置
|
|
|
|
- **`docs/ALL_AI_TOOLS_MCP_SETUP.md`** - 所有 AI 工具的统一配置指南 ⭐️
|
|
- **`docs/CODEX_CLI_MCP_SETUP.md`** - Codex CLI 详细配置
|
|
- **`docs/CURSOR_MCP_SETUP.md`** - Cursor IDE 详细配置
|
|
- **`docs/AGENTAPI_PROXY_SETUP.md`** - AgentAPI 代理配置
|
|
|
|
### 技术文档
|
|
|
|
- **`docs/STREAMABLE_HTTP_FIX_FINAL.md`** - Streamable HTTP 协议修复说明 ⭐️
|
|
- **`docs/MCP_SSE_FIX_SUMMARY.md`** - SSE 端点修复总结
|
|
- **`docs/PERMANENT_SSE_FIX.md`** - 永久修复方案
|
|
- **`docs/SESSION_MANAGEMENT.md`** - Session 管理文档
|
|
|
|
### 部署文档
|
|
|
|
- **`docs/FUNSTAT_MCP_DEPLOYMENT_REPORT.md`** - 部署报告
|
|
- **`docs/DOCKER_DEPLOYMENT.md`** - Docker 部署方案
|
|
- **`docs/DEPLOYMENT_FOR_OTHERS.md`** - 为他人部署指南
|
|
|
|
### 客户获取文档
|
|
|
|
- **`docs/007翻译客户获取-多工具组合方案.md`** - 客户获取策略 ⭐️
|
|
- **`docs/007翻译客户获取-执行报告.md`** - 执行结果报告 ⭐️
|
|
|
|
---
|
|
|
|
## 🔧 核心文件说明
|
|
|
|
### `core/server.py` (主程序)
|
|
|
|
**关键实现**:
|
|
|
|
```python
|
|
from mcp.server.streamable_http import StreamableHTTPServerTransport
|
|
|
|
# 创建 Streamable HTTP 传输
|
|
session_id = str(uuid.uuid4())
|
|
transport = StreamableHTTPServerTransport(
|
|
mcp_session_id=session_id,
|
|
is_json_response_enabled=True,
|
|
)
|
|
|
|
# 后台运行 MCP 服务器
|
|
async def run_mcp_server():
|
|
async with transport.connect() as streams:
|
|
await self.server.run(streams[0], streams[1], ...)
|
|
|
|
asyncio.create_task(run_mcp_server())
|
|
|
|
# 创建 Starlette 应用
|
|
app = Starlette()
|
|
app.mount("/", transport.handle_request)
|
|
```
|
|
|
|
**端口**: 8091
|
|
**协议**: Streamable HTTP (MCP 2025-03-26+)
|
|
|
|
### `core/start_sse_prod.sh` (启动脚本)
|
|
|
|
**功能**:
|
|
- 停止旧服务器实例
|
|
- 检测并释放 session 文件锁
|
|
- 启动新服务器
|
|
- 自动验证 GET/POST 端点
|
|
|
|
**日志**: `/tmp/funstat_sse.log`
|
|
|
|
### `scripts/funstat_auto_query.py` (自动查询工具)
|
|
|
|
**用途**: 批量查询关键词并解析结果
|
|
|
|
**示例**:
|
|
|
|
```python
|
|
queries = [
|
|
{"type": "pain_point", "keyword": "翻译不准"},
|
|
{"type": "pain_point", "keyword": "翻译太慢"},
|
|
{"type": "recommendation", "keyword": "翻译软件推荐"},
|
|
]
|
|
|
|
# 运行查询
|
|
python3 scripts/funstat_auto_query.py
|
|
```
|
|
|
|
**输出**: `funstat_query_results.json`
|
|
|
|
### `scripts/analyze_customers_v2.py` (客户分析工具)
|
|
|
|
**功能**: 将客户分类为:
|
|
- 💼 代理商/同行 (3 users)
|
|
- 🏢 B端客户 (1 user)
|
|
- 👤 C端/个人用户 (17 users)
|
|
|
|
**输出**: `客户分类清单.json`, `客户清单-表格版.md`
|
|
|
|
---
|
|
|
|
## 🧪 测试验证
|
|
|
|
### 1. 验证服务器启动
|
|
|
|
```bash
|
|
# 检查进程
|
|
ps aux | grep server.py
|
|
|
|
# 检查日志
|
|
tail -f /tmp/funstat_sse.log
|
|
```
|
|
|
|
应该看到:
|
|
```
|
|
INFO: Uvicorn running on http://127.0.0.1:8091
|
|
```
|
|
|
|
### 2. 测试 GET 端点
|
|
|
|
```bash
|
|
curl -N -H "Accept: text/event-stream" http://127.0.0.1:8091/sse
|
|
```
|
|
|
|
预期输出:
|
|
```
|
|
event: endpoint
|
|
data: /messages?session_id=xxx
|
|
```
|
|
|
|
### 3. 测试 POST 端点
|
|
|
|
```bash
|
|
curl -X POST http://127.0.0.1:8091/sse \
|
|
-H "Content-Type: application/json" \
|
|
-H "Accept: application/json" \
|
|
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'
|
|
```
|
|
|
|
预期输出:
|
|
```json
|
|
{
|
|
"jsonrpc":"2.0",
|
|
"id":1,
|
|
"result":{
|
|
"protocolVersion":"2025-03-26",
|
|
"capabilities":{...},
|
|
"serverInfo":{"name":"funstat-mcp","version":"1.16.0"}
|
|
}
|
|
}
|
|
```
|
|
|
|
### 4. 测试 Codex CLI
|
|
|
|
```bash
|
|
codex
|
|
# 然后输入: "列出可用的 MCP 工具"
|
|
```
|
|
|
|
应该看到 8 个 funstat 工具。
|
|
|
|
---
|
|
|
|
## ⚠️ 常见问题
|
|
|
|
### 1. 405 Method Not Allowed
|
|
|
|
**问题**: Codex CLI 报错 `405 Method Not Allowed`
|
|
|
|
**原因**: 使用了旧版 `SseServerTransport` 而不是 `StreamableHTTPServerTransport`
|
|
|
|
**解决**: 已在 `core/server.py` 中永久修复 (Git commit: c4f3673)
|
|
|
|
### 2. Database Locked
|
|
|
|
**问题**: `sqlite3.OperationalError: database is locked`
|
|
|
|
**原因**: 多个进程同时访问 session 文件
|
|
|
|
**解决**: 使用 `start_sse_prod.sh` 启动,自动处理锁问题
|
|
|
|
### 3. Connection Closed
|
|
|
|
**问题**: `connection closed: initialize response`
|
|
|
|
**原因**: 服务器未正确返回初始化响应
|
|
|
|
**解决**: 已在 Streamable HTTP 协议中修复
|
|
|
|
---
|
|
|
|
## 📊 项目成果
|
|
|
|
### 客户获取结果
|
|
|
|
- **查询关键词**: 6 个
|
|
- **找到消息**: 25 条
|
|
- **提取用户**: 21 个
|
|
- **高质量客户**: 13 个 (S/A 级)
|
|
- **痛点明确率**: 92%
|
|
|
|
### 客户分类
|
|
|
|
| 类别 | 数量 | 特点 | 优先级 |
|
|
|------|-----|------|--------|
|
|
| 代理商/同行 | 3 | 可发展为合作伙伴 | S 级 |
|
|
| B端客户 | 1 | 企业/团队采购 | A 级 |
|
|
| C端用户 | 17 | 个人用户 | A-C 级 |
|
|
|
|
详见: `customer_data/客户分类清单.json`
|
|
|
|
---
|
|
|
|
## 🔗 相关资源
|
|
|
|
- **MCP 官方文档**: https://modelcontextprotocol.io/docs
|
|
- **Streamable HTTP 规范**: https://spec.modelcontextprotocol.io/specification/2025-03-26/basic/transports/#streamable-http
|
|
- **MCP Python SDK**: https://github.com/modelcontextprotocol/python-sdk
|
|
- **Codex CLI 文档**: https://docs.openai.com/codex/cli
|
|
|
|
---
|
|
|
|
## 📝 版本历史
|
|
|
|
### v1.16.0 (2025-10-27)
|
|
|
|
- ✅ 完全支持 Streamable HTTP 协议
|
|
- ✅ 修复 Codex CLI 405 错误
|
|
- ✅ 支持 Cursor IDE 和 Claude Code
|
|
- ✅ 完成客户获取自动化工具
|
|
- ✅ 生产级启动脚本
|
|
|
|
### v1.0.0 (2025-10-26)
|
|
|
|
- ✅ 初始版本
|
|
- ✅ 8 个 MCP 工具实现
|
|
- ✅ SSE 传输支持
|
|
- ✅ Claude Code 集成
|
|
|
|
---
|
|
|
|
## 🤝 支持
|
|
|
|
如有问题,请查看:
|
|
|
|
1. **`docs/ALL_AI_TOOLS_MCP_SETUP.md`** - 配置问题
|
|
2. **`docs/STREAMABLE_HTTP_FIX_FINAL.md`** - 协议问题
|
|
3. **`/tmp/funstat_sse.log`** - 服务器日志
|
|
|
|
---
|
|
|
|
**开发者**: Claude Code
|
|
**项目**: Funstat MCP 服务器
|
|
**协议**: MIT License (如适用)
|
|
|
|
---
|
|
|
|
🎉 **感谢使用 Funstat MCP!**
|