{
  "markdown": "[![DSH Market](https://raw.githubusercontent.com/2BingLing/dsh-market/master/assets/readme/badge-listed-zh.svg)](https://dsh.market/)\n[![MCP](https://img.shields.io/badge/MCP-search2chart--mcp-blue)](https://npmjs.com/package/search2chart-mcp) \n[![Downloads](https://img.shields.io/npm/dm/search2chart-mcp)](https://npmjs.com/package/search2chart-mcp)\n\n# search2chart-mcp\n\n> Turn any tabular data into **inline charts directly inside agent conversations**. Zero runtime dependencies, multi-client adaptive.\n\n把「任意表格数据」变成**直接内联在 agent 对话流里的图表**。零运行时依赖，多端自适应。\n\n<img width=\"1912\" height=\"948\" alt=\"image\" src=\"https://github.com/user-attachments/assets/676c42c7-dfa0-48ff-8ec9-9f1d51a2e7b2\" />\n\n\n## 安装\n\n```bash\n# 方式一：DSH 原生插件（DeepSeek Harness 用户推荐，真·内联）\ndsh plugin --profile web add dsh-chart\n\n# 方式二：npx（通用 MCP server，无需 clone）\nnpx search2chart-mcp\n\n# 方式三：git clone\ngit clone https://github.com/iqingyoung/search2chart-mcp.git\n```\n\n## 两条路径\n\n| 路径 | 目录 | 适用 |\n|------|------|------|\n| **通用 MCP server** | [`mcp/`](mcp/) | ZCode / Claude Desktop / Cursor / WorkBuddy / Trae / Codex / DSH 通用 |\n| **原生 DSH 插件** | [`dsh/`](dsh/) | DeepSeek Harness（真·内联，图片直接进对话） |\n\n- 用 MCP 客户端 → 用 `mcp/`，对话框直接出图\n- 用 DSH 且想要原生体验 → 用 `dsh/`；DSH 里也能用 `mcp/`（走文件链接）\n- 两者可并存\n\n## 快速开始\n\n### 1. 在你的 MCP 配置里加入\n\n```json\n{\n  \"mcpServers\": {\n    \"search2chart-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"search2chart-mcp\"],\n      \"env\": {}\n    }\n  }\n}\n```\n\n> 如果 npx 拉不到，用 clone 后的绝对路径：`\"command\": \"node\", \"args\": [\"<仓库>/mcp/server.js\"]`\n\n### 2. 首次接入：测试你的 Agent 能渲染哪种图片\n\n不同 Agent 渲染器对图片格式支持各异。先用 `all` 模式一次性测试：\n\n**临时配置**（在 MCP 配置里加环境变量）：\n\n```json\n{\n  \"env\": {\n    \"ECHARTS_INLINE_MODE\": \"all\"\n  }\n}\n```\n\n**发给 Agent 的测试 prompt**：\n\n```\n用 chart_from_data 生成一个简单柱状图。\n数据：[[\"城市\",\"销量\"],[\"北京\",120],[\"上海\",200],[\"广州\",150]]\n标题：城市销量对比\nchartType：bar\n```\n\nAgent 返回 3-4 行图，分别标记为：\n- **【1·data URI】** — 自包含 base64，无需联网\n- **【2·localhost http】** — 本地 HTTP 服务\n- **【3·file://】** — 本地文件路径\n- **【4·CDN 公网 https】** — GitHub + jsDelivr 公网地址\n\n**哪个在对话框里真正渲染成了图片，你的 Agent 就支持哪种。**\n\n### 3. 固定模式\n\n| 能渲染的格式 | 设置 |\n|---|---|\n| data URI ✅ | `ECHARTS_INLINE_MODE=inline`（默认） |\n| file:// ✅ | `ECHARTS_INLINE_MODE=file` |\n| localhost http ✅ | `ECHARTS_INLINE_MODE=inline` |\n| CDN 公网 https ✅ | `ECHARTS_INLINE_MODE=cdn` |\n| MCP image block ✅ | `inline` + 调用时 `returnImage:true` |\n| 都显示不了 | `ECHARTS_INLINE_MODE=none`，用 `.html` 交互图 |\n\n### Agent 自动检测\n\n工具结果里已内置 Agent 指令，告诉模型如何根据用户反馈自动设置模式：\n\n```\n[Agent]: 返回 4 行图片，哪张正常显示？\n[User]:  3正常\n[Agent]: 确认了。file:// 可渲染 → 请设置 ECHARTS_INLINE_MODE=file\n```\n\n> **已知客户端实测**：ZCode → `file`，OpenCode → `inline`（data URI），WorkBuddy → `cdn`，DSH → `inline`（localhost http），Claude/Cursor → `inline` + `returnImage:true`。\n\n## 核心能力\n\n### 多客户端内联适配\n\n通过 `ECHARTS_INLINE_MODE` 环境变量控制内联行为：\n\n| 模式 | 行为 | 适用客户端 |\n|---|---|---|\n| `inline`（默认） | data URI → localhost http → file:// 自动 fallback | OpenCode / DSH / 通用 |\n| `file` | 只输出 `file://` 本地路径 | ZCode |\n| `cdn` | 上传 GitHub+jsDelivr，输出公网 https | WorkBuddy |\n| `all` | 测试模式：一次返回所有格式 | 首次接入时测试 |\n| `none` | 纯文本（.html 路径 + 数据），无内联 | 纯文本模型 / 终端 |\n\n### CDN 公网图床\n\n- SVG → PNG 栅格化（@resvg/resvg-js，可选依赖）\n- GitHub Contents API 上传 + jsDelivr CDN 加速\n- GitHub Actions 定时清理（默认保留 3 天）\n\n### 清洗数据留存\n\n结果附带完整数据（JSON，代码块包裹），让纯文本模型在上下文里继续做占比/趋势/对比分析，无需看图。`returnData: false` 可关。\n\n### 自包含可交互 HTML\n\n图表同时写入 `.html` 文件，浏览器打开即支持 hover / 缩放 / 类型切换 / 配色调整。\n\n## 工具\n\n| 工具 | 作用 |\n|------|------|\n| `chart_from_data` | 结构化数据 → 图表 HTML + 内联图片 |\n| `chart_from_file` | CSV/XLSX 路径 → 图表 HTML + 内联图片 |\n| `list_chart_types` | 列出支持的类型 / 配色与字段约定 |\n\n字段约定：第一列 = 类别轴；其余列 = 数值序列（多列即多序列）；`chartType: auto` 按数据自动选 饼/柱。\n\n## 接入各客户端\n\n详见 [`mcp/README.md`](mcp/README.md)。\n\n## 目录\n\n```\nsearch2chart-mcp/\n├── mcp/              # 跨端 MCP server（内联 SVG + 可交互 HTML）\n│   ├── server.js     # MCP stdio 协议 + 工具入口\n│   ├── lib/\n│   │   ├── chart.js      # 数据归一化 + ECharts option\n│   │   ├── html.js       # 自包含可交互 HTML\n│   │   ├── svg.js        # 零依赖 SVG 渲染器\n│   │   ├── httpserver.js # 本地 HTTP 服务\n│   │   ├── rasterize.js  # SVG→PNG\n│   │   ├── upload.js     # GitHub + jsDelivr CDN\n│   │   └── parse.js      # CSV/XLSX 解析\n│   └── scripts/\n│       ├── selftest.js    # 端到端自检\n│       └── verify_cdn.cjs # CDN 端到端验证\n├── dsh/              # 原生 DSH 内联插件\n├── LICENSE\n└── README.md\n```\n\n## License\n\nMIT\n",
  "bytes": 4233,
  "sha": "26f06f83a7a4473873cd155eb06bf566c45a26d2f12a6b2ad5bd21ac537e476f",
  "repo_slug": "iqingyoung/search2chart-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_iqingyoung_search2chart_mcp_e4092386/readme"
}