UNPKG

chart-mcp-service

Version:

MCP服务,实现根据输入自动生成对应图表的功能

189 lines (145 loc) 4.99 kB
# Chart MCP Service 一个基于MCP(Model Context Protocol)的图表服务,实现根据输入自动生成对应图表的功能。该服务使用模板方式引入@alife/bi-material-center-chart组件,不直接在MCP包中引入依赖。 ## 功能特性 - 🎯 **智能识别图表类型** - 输入任何图表需求描述,自动识别最适合的图表类型 -**生成图表代码** - 基于@alife/bi-material-center-chart生成完整的React组件代码 - 📊 **图表管理** - 创建、查看、更新、删除图表配置 - 📚 **规则查看** - 查看完整的图表组件规则、触发关键词和模板 - 💡 **最佳实践** - 获取特定图表类型的开发最佳实践和注意事项 -**配置验证** - 检查图表配置是否符合最佳实践和规则要求 ## 支持的图表类型 - **line** - 折线图 - **bar** - 柱状图 - **pie** - 饼图 - **area** - 面积图 - **scatter** - 散点图 - **radar** - 雷达图 - **heatmap** - 热力图 - **wordcloud** - 词云图 - **strip** - 水平条形图 - **sankey** - 桑基图 - **treemap** - 矩形树图 ## 安装和使用 ### 1. 安装依赖 \`\`\`bash npm install \`\`\` ### 2. 编译项目 \`\`\`bash npm run build \`\`\` ### 3. 启动服务 \`\`\`bash npm start \`\`\` ### 4. 开发模式 \`\`\`bash npm run dev \`\`\` ## MCP工具列表 ### 1. identify_chart_type 智能识别图表类型 - **参数**: `description` - 图表需求描述 - **示例**: "显示销售趋势"、"创建一个饼图"、"用户分布可视化" ### 2. generate_chart_code 生成图表代码 - **参数**: `type` - 图表类型 - **返回**: 完整的React组件代码,包含导入语句 ### 3. create_chart 创建图表实例 - **参数**: `id`, `type`, `title`, `config`(可选) - **返回**: 包含完整代码和配置的图表对象 ### 4. get_chart 获取图表详情 - **参数**: `id` - 图表ID - **返回**: 图表的完整信息 ### 5. list_charts 列出所有图表 - **返回**: 当前存储的所有图表列表 ### 6. update_chart 更新图表配置 - **参数**: `id`, `updates` - 要更新的字段 ### 7. delete_chart 删除图表 - **参数**: `id` - 要删除的图表ID ### 8. get_chart_rules 获取图表规则 - **参数**: `type`(可选) - 特定图表类型 - **返回**: 图表规则、触发关键词和模板 ### 9. get_best_practices 获取最佳实践 - **参数**: `type` - 图表类型 - **返回**: 特定图表类型的开发最佳实践 ### 10. validate_chart_config 验证图表配置 - **参数**: `type`, `config` - **返回**: 验证结果,包含错误、警告和建议 ## 使用示例 ### 识别图表类型 \`\`\` 输入: "我想展示一下销售数据的时间变化趋势" 输出: { "type": "line", "confidence": 80, "reasons": ["匹配关键词: 趋势, 时间, 变化"], "suggestions": [ "建议使用 折线图 来展示您的数据", "推荐导入: import { Line, LineProps } from '@alife/bi-material-center-chart'" ] } \`\`\` ### 生成图表代码 \`\`\`javascript // 生成面积图代码示例 import { Area, AreaProps } from '@alife/bi-material-center-chart'; import React from 'react'; const AreaChart: React.FC = () => { const data = [ { month: '1月', value: 3, category: '产品A' }, { month: '2月', value: 4, category: '产品A' }, // ... 更多数据 ]; const config: AreaProps = { data, xField: 'month', yField: 'value', seriesField: 'category', height: 500, point: { size: 4 }, area: { style: { fillOpacity: 0.3 } }, legend: { position: 'top' }, tooltip: { shared: true }, color: ['#1890ff', '#2fc25b'] }; return <Area {...config} />; }; \`\`\` ## 颜色配置最佳实践 - **分类数据使用seriesField进行颜色映射** - 用于展示同一维度下的不同系列数据 - **数值映射使用colorField** - 用于连续数值到颜色的映射 - **多系列对比使用seriesField** - 如柱状图中的不同系列 - **单一维度分类使用colorField** - 如饼图的不同扇形 ## 项目结构 \`\`\` chart-mcp-service/ ├── src/ │ ├── index.ts # MCP服务主文件 │ ├── rules.ts # 图表规则处理类 │ └── chart-generator.ts # 图表代码生成器类 ├── dist/ # 编译输出目录 ├── package.json ├── tsconfig.json └── README.md \`\`\` ## 技术栈 - **TypeScript** - 类型安全的JavaScript - **MCP SDK** - Model Context Protocol SDK - **Node.js** - 运行时环境 ## 开发说明 本项目遵循chart-mcp.json配置文件中的规则,实现了: 1. **模板引入** - 不在MCP包中直接引入@alife/bi-material-center-chart,而是通过模板生成导入代码 2. **智能识别** - 基于关键词匹配算法识别图表类型 3. **最佳实践** - 遵循颜色配置、数据结构等最佳实践 4. **规则验证** - 对图表配置进行验证,确保符合规范 ## 许可证 ISC