# 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!**