Skip to main content
Glama
README.md
# draw-guess-mcp

让非多模态 AI 也能玩「你画我猜」的 MCP server 骨架。

核心不是让模型真的看见图片,而是把画变成结构化线条(SVG 路径 + ASCII 网格),
通过 MCP 工具让模型 读 / 画 / 猜。

思路整理自教程《让非多模态 AI 也能玩你画我猜》。

## 两种玩法

- 玩法 A:AI 画,用户猜。AI 调 draw_start 传入答案与线条数组,前端展示 SVG,用户猜。
- 玩法 B:用户画,AI 猜。用户在前端画图,后端压成 SVG + ASCII 给 AI,AI 调 draw_status 读取后 draw_guess 提交。(本骨架当前完整实现玩法 A;玩法 B 见文末扩展。)

## 三个 MCP 工具

| 工具 | 作用 | 是否含答案 |
| --- | --- | --- |
| draw_start(answer, content, aliases, artist) | AI 开始一题,生成 SVG + ASCII | 输入含答案,但不回传 |
| draw_status(round_id?) | 查看当前画作(SVG + ASCII 网格) | 绝不返回答案 |
| draw_guess(guess, guesser?, round_id?) | 提交猜测 | 只回猜对了 / 没猜中,不剧透 |

## 运行

    pip install -r requirements.txt
    python draw_guess_server.py
    # 客户端连 http://localhost:3456/mcp

本地 stdio 接入(Claude Desktop 等):把 __main__ 里换成 mcp.run()。

## Docker

不想自己管 Python 环境,用 Docker 一键起常驻服务:

    docker compose up -d
    # 客户端连 http://localhost:3456/mcp

服务容器内监听 0.0.0.0:3456(本仓库已设置),映射到宿主 3456。
停止:docker compose down

## 示例(玩法 A)

调用 draw_start,传入一颗五角星的 polyline(具体 payload 见 examples/build_star.py,运行它会打印可直接粘贴的参数)。
draw_status 会返回 drawing_svg 与 ascii_grid,但没有 answer。

## 扩展点

- 多人历史:已用 guesses 列表记录每人的猜测
- 别名答案:draw_start 的 aliases 已支持
- 难度模式:draw_start 加 max_lines,截断 strokes[:N]
- 回放模式:把 content 按笔画顺序存下来
- 玩法 B:加 submit_user_drawing(svg/ascii) 工具,AI 调 draw_status 来猜

## 部署 / Deploy

server 监听端口可用环境变量 PORT 覆盖(默认 3456),host 固定 0.0.0.0,方便上云。

### Hugging Face Spaces(Docker SDK,免费)
1. 新建 Space,SDK 选 Docker。
2. 上传本仓库文件(含 Dockerfile)或关联此 GitHub 仓库。
3. HF 注入 PORT=7860,server 自动监听;Space 公开后地址形如 https://<user>-<space>.hf.space/mcp 。

### Render(免费)
仓库根已有 Dockerfile。新建 Web Service 连本仓库,Runtime 选 Docker,部署后 Render 注入 PORT,地址形如 https://draw-guess-mcp.onrender.com/mcp 。

### Railway
仓库根有 railway.json。导入 GitHub 仓库即部署,Railway 注入 PORT。

### Fly.io
仓库根有 fly.toml。执行 fly launch / fly deploy 即可,已配置监听 PORT=8080。

## License

MIT