Skip to main content
Glama

Mingli MCP Server

by spyfree
MIT License
  • Apple
  • Linux
DEPLOYMENT.md6.58 kB
# 部署指南 ## 📦 方案A:发布到PyPI(推荐) ### 1. 准备工作 ```bash # 安装构建工具 pip install build twine # 清理旧的构建文件 rm -rf dist/ build/ *.egg-info ``` ### 2. 构建包 ```bash # 构建分发包 python -m build # 会生成: # dist/mingli-mcp-1.0.0.tar.gz # dist/mingli_mcp-1.0.0-py3-none-any.whl ``` ### 3. 测试本地安装 ```bash # 在新环境中测试 python -m venv test_env source test_env/bin/activate pip install dist/mingli_mcp-1.0.0-py3-none-any.whl # 测试命令 mingli-mcp --help # 清理 deactivate rm -rf test_env ``` ### 4. 发布到PyPI ```bash # 上传到测试PyPI(可选) twine upload --repository testpypi dist/* # 上传到正式PyPI twine upload dist/* ``` ### 5. 在Coze中使用 发布后,在Coze的"自定义MCP扩展"中配置: ```json { "mcpServers": { "mingli": { "command": "uvx", "args": ["mingli-mcp@1.0.0"], "env": { "LOG_LEVEL": "INFO" } } } } ``` 或使用pip方式: ```json { "mcpServers": { "mingli": { "command": "python", "args": ["-m", "pip", "install", "mingli-mcp", "&&", "mingli-mcp"], "env": {} } } } ``` --- ## 🌐 方案B:HTTP服务(适合多平台) ### 1. 实现HTTP传输层 创建 `transports/http_transport.py`: ```python from fastapi import FastAPI, Request from fastapi.responses import JSONResponse import uvicorn from .base_transport import BaseTransport class HttpTransport(BaseTransport): def __init__(self, host: str = "0.0.0.0", port: int = 8080): self.host = host self.port = port self.app = FastAPI(title="Mingli MCP Server") self._setup_routes() def _setup_routes(self): @self.app.post("/mcp") async def handle_mcp(request: Request): data = await request.json() response = self.message_handler(data) return JSONResponse(response) @self.app.get("/health") async def health(): return {"status": "ok"} def start(self): uvicorn.run(self.app, host=self.host, port=self.port) def send_message(self, message): # HTTP模式不需要主动发送 pass def receive_message(self): # HTTP模式由FastAPI处理 pass ``` ### 2. 添加HTTP依赖 在 `requirements.txt` 添加: ```txt fastapi>=0.104.0 uvicorn[standard]>=0.24.0 ``` ### 3. 启动HTTP服务 ```bash # 修改 config.py TRANSPORT_TYPE = "http" HTTP_HOST = "0.0.0.0" HTTP_PORT = 8080 # 启动服务 python mingli_mcp.py ``` ### 4. 在Coze中配置HTTP MCP ```json { "mcpServers": { "mingli": { "url": "https://your-domain.com/mcp", "headers": { "Authorization": "Bearer YOUR_API_KEY" } } } } ``` ### 5. 部署到云端 可选择: - Railway.app(免费额度) - Render.com(免费额度) - Fly.io(免费额度) - 阿里云/腾讯云 **Dockerfile 示例**: ```dockerfile FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . ENV TRANSPORT_TYPE=http ENV HTTP_HOST=0.0.0.0 ENV HTTP_PORT=8080 EXPOSE 8080 CMD ["python", "mingli_mcp.py"] ``` --- ## 🔧 方案C:私有PyPI服务器(企业内网) 如果不想公开发布,可以搭建私有PyPI: ### 使用 devpi ```bash # 安装devpi pip install devpi-server devpi-web devpi-client # 启动服务器 devpi-server --start --init # 创建索引 devpi use http://localhost:3141 devpi login root --password='' devpi index -c dev bases=root/pypi # 上传包 devpi use root/dev devpi upload ``` ### 在Coze中使用私有源 ```json { "mcpServers": { "mingli": { "command": "pip", "args": [ "install", "--index-url", "http://your-devpi-server:3141/root/dev/+simple/", "mingli-mcp", "&&", "mingli-mcp" ] } } } ``` --- ## 📊 方案对比 | 方案 | 优点 | 缺点 | 适用场景 | |------|------|------|---------| | **PyPI包** | 标准、易用、支持Coze | 需要公开代码 | 开源项目 | | **HTTP服务** | 灵活、支持所有平台 | 需要服务器 | 商业项目 | | **私有PyPI** | 不公开代码、内网可用 | 需维护服务器 | 企业内部 | --- ## 🎯 推荐实施路线 ### 阶段1:PyPI发布(1-2小时) 1. ✅ 完善 `pyproject.toml` 2. ✅ 构建和测试 3. ✅ 发布到PyPI 4. ✅ 在Coze测试 ### 阶段2:HTTP支持(2-3小时) 1. 实现 `http_transport.py` 2. 添加FastAPI依赖 3. 本地测试HTTP模式 4. 部署到云端 ### 阶段3:文档完善(1小时) 1. 更新README添加部署说明 2. 创建Coze使用教程 3. 添加API文档 --- ## 🧪 测试清单 ### PyPI包测试 - [ ] 本地构建成功 - [ ] 虚拟环境安装成功 - [ ] 命令行工具可用 - [ ] 在Coze中配置成功 - [ ] 在Coze中调用成功 ### HTTP服务测试 - [ ] 本地启动成功 - [ ] 健康检查接口正常 - [ ] MCP请求响应正常 - [ ] 云端部署成功 - [ ] 远程调用成功 --- ## 📞 常见问题 ### Q1: Coze一直显示"扩展加载失败" **A**: 检查: 1. Python版本兼容性(>=3.8) 2. 依赖是否完整安装 3. 日志中的错误信息 ### Q2: HTTP服务如何添加认证? **A**: 在FastAPI中添加依赖注入: ```python from fastapi import Depends, HTTPException, Header async def verify_token(authorization: str = Header(...)): if not authorization.startswith("Bearer "): raise HTTPException(401) # 验证token return True @app.post("/mcp", dependencies=[Depends(verify_token)]) async def handle_mcp(request: Request): ... ``` ### Q3: 如何监控服务运行状态? **A**: 添加监控端点: ```python @app.get("/metrics") async def metrics(): return { "requests_total": request_counter, "requests_success": success_counter, "requests_failed": error_counter, "uptime_seconds": time.time() - start_time } ``` --- ## 🔐 安全建议 1. **环境变量**: 敏感配置使用环境变量 2. **API认证**: 生产环境必须添加认证 3. **HTTPS**: 使用HTTPS加密传输 4. **限流**: 添加请求频率限制 5. **日志**: 记录关键操作但不记录敏感信息 --- ## 📚 参考资源 - [MCP Protocol Specification](https://modelcontextprotocol.io) - [Coze MCP文档](https://www.coze.cn/docs/guides/mcp) - [PyPI Publishing Guide](https://packaging.python.org/tutorials/packaging-projects/) - [FastAPI Documentation](https://fastapi.tiangolo.com/)

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/spyfree/mingli-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server