Files
funstat-mcp/README.md

438 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 服务。
---
> ⚠️ **端口更新**:当前本地部署已改为监听 `http://127.0.0.1:8094`(原默认 8091。请在 Codex、Cursor、Claude Code 等客户端更新为 `http://127.0.0.1:8094/sse`。
## ⚙️ 新版数据流概览
- **PostgreSQL 本地存储**:所有 MCP 查询结果会自动写入本地 Postgres默认通过 `docker compose up -d postgres` 启动,端口 `5433`)。数据包含原始返回、解析后的实体,以及同步状态。
- **自动远端沉淀**:后台会周期性将去重后的最新数据打包为 JSON并通过 `sshpass` 上传到 `172.16.74.159``~/funstat_data/inbox` 目录,方便集中备份(暂不直接对外提供查询)。
- **配置模块化**`core/config.py` + `.env` 控制 Telegram API、Bot Token、数据库与同步参数。每位同事只需复制 `.env.example`,填写自己的 session / token 即可。
- **Bot 可热切换**:所有脚本与服务器都不再写死 token替换 `.env` 中的 `TELEGRAM_BOT_TOKEN` 即可切换镜像机器人。
- **默认镜像机器人**:发行包已预置最新官方镜像 `@ktqiangda_bot`Token`7321478881:AAFVmSXsfAbXI2Sfx9Sg3UW5ufAKvPsbO4U`)。如后续提供新的镜像,只需改 `.env` 即可。
### 快速启动顺序
1. `cp .env.example .env` 并根据实际环境填写(尤其是 Telegram API、Bot Token、session 路径)。
2. 启动本地 Postgres`docker compose up -d postgres`(如本机已有 5433 占用,可在 `.env` 里改为其他端口)。
3. 安装依赖:`pip3 install -r requirements.txt --user --break-system-packages`
4. 使用自己的 Telegram 账号创建 session`python3 scripts/create_session_safe.py`
5. 运行服务器:`cd core && python3 server.py``./start_sse_prod.sh`
只要 `.env` 中的远端 SSH 信息保持有效,所有数据会自动异步推送到服务器侧的归档目录,无需额外手动操作。
## 📦 包内容概览
这个打包包含了完整的 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!**