# bi-mcp-server
**Repository Path**: yulang_admin_1/bi-mcp-server
## Basic Information
- **Project Name**: bi-mcp-server
- **Description**: No description available
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2026-04-18
- **Last Updated**: 2026-04-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# BI-MCP-Server | BI图表MCP服务
---
## 目录
- [项目简介](#项目简介)
- [功能特性](#功能特性)
- [支持的图表类型](#支持的图表类型)
- [系统要求](#系统要求)
- [快速开始](#快速开始)
- [配置说明](#配置说明)
- [中文字体配置](#中文字体配置)
- [API参考](#api参考)
- [使用示例](#使用示例)
- [项目结构](#项目结构)
- [开发指南](#开发指南)
- [测试数据](#测试数据)
- [开源协议](#开源协议)
## 项目简介
**BI-MCP-Server** 是一款基于 Spring Boot + Spring AI 实现的标准 MCP 服务端,专注后端原生图表生成,让 AI 具备开箱即用的数据可视化能力。
### 项目概述
BI-MCP-Server 是面向 AI 应用的 Model Context Protocol (MCP) 标准服务,基于 Spring Boot 与 Spring AI 构建。项目核心特色是纯 Java 后端渲染图表,不依赖 ECharts 等前端渲染引擎、无需浏览器环境,即可直接生成折线图、柱状图、饼图、雷达图等 22+ 种专业数据可视化图表,输出标准图片格式供业务直接使用。
通过标准化 MCP 协议,大模型可以自动发现工具、自动组装参数、自动调用图表能力,快速实现对话式 BI、自动报表生成、数据洞察可视化等场景。
### 核心特性
- **标准 MCP 协议兼容**:遵循 Model Context Protocol 规范,AI 模型零改造接入,自动感知可用工具与入参
- **纯后端图表生成**:基于 Java 原生绘图引擎,服务端直接出图,无前端依赖、无浏览器环境、无 JS 运行时
- **22+ 种图表类型覆盖**:折线图、柱状图、饼图、散点图、面积图、直方图、环形图、雷达图、误差图等常用统计图表
- **开箱即用、轻量部署**:基于 Spring Boot 构建,配置简单,可独立部署、接入微服务或嵌入现有数据平台
- **输出标准图片**:支持生成 PNG 图片流 / 文件,可直接用于:自动报表、邮件推送、PDF/Excel 导出、监控大屏、消息通知等
- **AI 友好型设计**:入参结构化、接口统一、返回格式稳定,大模型可自动完成数据查询 → 图表生成 → 结果返回全流程
### 适用场景
- 🤖 **AI 对话式数据分析与可视化**
- 📊 **后端自动化报表、日报 / 周报图表生成**
- 📈 **监控指标趋势图、统计分布图服务**
- 🌐 **无前端环境下的数据可视化需求**
- 📄 **PDF/Excel/ 邮件内嵌图表生成**
- 🏢 **企业内部 BI 平台、数据大屏图表服务**
## 功能特性
- **22+种图表类型**: 支持折线图、柱状图、饼图、雷达图、漏斗图、思维导图等
- **Spring AI集成**: 基于 Spring Boot 4.0.5 和 Spring AI 1.1.4 构建
- **MCP协议**: 标准化的 MCP 服务器实现,支持 Streamable HTTP 传输
- **易于集成**: 可轻松集成到任何兼容 MCP 的 AI 应用中
- **灵活输出**: 支持 PNG、JPEG 和 SVG 图片格式
- **可定制**: 可配置尺寸、标题和输出格式
- **生产就绪**: 为企业级 BI 应用而设计
## 支持的图表类型
| 序号 | 图表类型 | 方法名 | 描述 |
|------|----------|--------|------|
| 1 | 折线图 | `generateLineChart` | 展示数据随时间或顺序变化的趋势 |
| 2 | 柱状图 | `generateBarChart` | 比较不同分类之间的数值大小 |
| 3 | 饼图 | `generatePieChart` | 展示各部分占总体的比例关系 |
| 4 | 面积图 | `generateAreaChart` | 展示数据随时间变化的累积趋势 |
| 5 | 散点图 | `generateScatterChart` | 展示两个变量之间的相关性 |
| 6 | 直方图 | `generateHistogramChart` | 展示数据的频率分布情况 |
| 7 | 箱线图 | `generateBoxPlotChart` | 展示数据的分布特征和异常值 |
| 8 | 双轴图 | `generateDualAxesChart` | 在同一图表中展示两个不同量级的数据系列 |
| 9 | 小提琴图 | `generateViolinChart` | 展示数据分布的密度和形状 |
| 10 | 雷达图 | `generateRadarChart` | 展示多维度数据的综合能力 |
| 11 | 漏斗图 | `generateFunnelChart` | 展示流程转化率的递减情况 |
| 12 | 水球图 | `generateLiquidChart` | 展示百分比完成度 |
| 13 | 桑基图 | `generateSankeyChart` | 展示能量、材料或成本的流向 |
| 14 | 韦恩图 | `generateVennChart` | 展示集合之间的交集关系 |
| 15 | 矩形树图 | `generateTreemapChart` | 展示层次结构数据的比例关系 |
| 16 | 词云图 | `generateWordCloudChart` | 展示文本中词语的频率分布 |
| 17 | 鱼骨图 | `generateFishboneDiagram` | 分析问题产生的原因 |
| 18 | 流程图 | `generateFlowDiagram` | 展示业务流程或操作步骤 |
| 19 | 思维导图 | `generateMindMap` | 整理和展示思路结构 |
| 20 | 网络图 | `generateNetworkGraph` | 可视化实体之间的关系和连接 |
| 21 | 组织结构图 | `generateOrganizationChart` | 展示组织的层次结构 |
| 22 | 电子表格 | `generateSpreadsheet` | 展示表格数据 |
## 系统要求
| 组件 | 版本 |
|------|------|
| Java | 21+ |
| Spring Boot | 4.0.5 |
| Spring AI | 1.1.4 |
| MCP SDK | 0.17.0 |
| Maven | 3.8+ |
## 快速开始
### 1. 克隆仓库
```bash
git clone https://github.com/your-username/bi-mcp-server.git
cd bi-mcp-server
```
### 2. 构建项目
```bash
mvn clean package -DskipTests
```
### 3. 启动服务
```bash
cd bi-mcp-server-api
mvn spring-boot:run
```
服务默认启动在 `http://localhost:8080/mcp/stream/chart`。
### 4. 连接MCP客户端
使用兼容的 MCP 客户端连接到:
```
http://localhost:8080/mcp/stream/chart
```
## 配置说明
### 应用配置 (application.yml)
```yaml
server:
port: ${SERVER_PORT:8080}
spring:
ai:
mcp:
server:
enabled: true
name: bi-chart-mcp-server
version: 1.0.0
type: SYNC
protocol: STREAMABLE
streamable-http:
endpoint: /mcp/stream/chart
chart:
storage-dir: ${CHART_STORAGE_DIR:./charts}
image-format: ${CHART_IMAGE_FORMAT:png}
width: ${CHART_WIDTH:800}
height: ${CHART_HEIGHT:600}
```
### 配置属性
| 属性 | 环境变量 | 默认值 | 说明 |
|------|----------|--------|------|
| server.port | SERVER_PORT | 8080 | 服务端口 |
| chart.storage-dir | CHART_STORAGE_DIR | ./charts | 图表存储目录 |
| chart.image-format | CHART_IMAGE_FORMAT | png | 默认图片格式(png/jpeg/svg) |
| chart.width | CHART_WIDTH | 800 | 默认图表宽度 |
| chart.height | CHART_HEIGHT | 600 | 默认图表高度 |
## 中文字体配置
### 问题说明
在 Linux 服务器上部署时,如果生成的图表中中文显示为方框或乱码,是因为服务器缺少中文字体。
### 解决方案
#### 方案一:安装系统中文字体(推荐)
**Ubuntu/Debian:**
```bash
sudo apt-get install -y fonts-wqy-zenhei fonts-wqy-microhei fonts-noto-cjk
sudo fc-cache -fv
```
**CentOS/RHEL:**
```bash
sudo yum install -y wqy-zenhei-fonts wqy-microhei-fonts google-noto-cjk-fonts
sudo fc-cache -fv
```
#### 方案二:使用自定义字体文件
1. 将字体文件(.ttf/.otf)放入项目根目录的 `fonts` 文件夹 chmod 644 /fonts/*
2. 启动应用时指定字体目录:
```bash
java -Dchart.font.dir=./fonts -jar bi-mcp-server-api-1.0.0.jar
```
#### 方案三:Docker 部署
在 Dockerfile 中添加字体安装:
```dockerfile
RUN apt-get update && \
apt-get install -y --no-install-recommends \
fonts-wqy-zenhei fonts-wqy-microhei fonts-noto-cjk && \
fc-cache -fv
```
### 详细文档
更多详细信息请参考 [字体安装指南](docs/FONT-INSTALLATION.md)。
## API参考
### MCP端点
- **地址**: `http://localhost:8080/mcp/stream/chart`
- **协议**: Streamable HTTP
- **传输**: MCP协议
### 工具参数
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|--------|------|------|--------|------|
| data | String | 是 | - | 数据数组,JSON格式字符串 |
| title | String | 否 | "" | 图表标题 |
| width | Integer | 否 | 800 | 图片宽度(像素) |
| height | Integer | 否 | 600 | 图片高度(像素) |
| format | String | 否 | png | 图片格式(png/jpeg/svg) |
| filename | String | 否 | 自动生成 | 输出文件名 |
## 使用示例
### 生成折线图
**输入数据:**
```json
[
{"x": "1月", "y": 120},
{"x": "2月", "y": 150},
{"x": "3月", "y": 180},
{"x": "4月", "y": 210}
]
```
**工具调用:**
```json
{
"tool": "generateLineChart",
"arguments": {
"data": "[{\"x\":\"1月\",\"y\":120},{\"x\":\"2月\",\"y\":150},{\"x\":\"3月\",\"y\":180},{\"x\":\"4月\",\"y\":210}]",
"title": "月度销售趋势",
"width": 800,
"height": 600,
"format": "png"
}
}
```
**响应:**
```json
{
"success": true,
"imageUrl": "http://localhost:8080/charts/line_chart_xxx.png",
"message": "图表生成成功"
}
```
### 生成饼图
**输入数据:**
```json
[
{"name": "产品A", "value": 35},
{"name": "产品B", "value": 25},
{"name": "产品C", "value": 20},
{"name": "产品D", "value": 20}
]
```
**工具调用:**
```json
{
"tool": "generatePieChart",
"arguments": {
"data": "[{\"name\":\"产品A\",\"value\":35},{\"name\":\"产品B\",\"value\":25},{\"name\":\"产品C\",\"value\":20},{\"name\":\"产品D\",\"value\":20}]",
"title": "产品销售占比",
"width": 800,
"height": 600
}
}
```
### 生成漏斗图
**输入数据:**
```json
[
{"name": "网站访问", "value": 10000},
{"name": "浏览商品", "value": 6500},
{"name": "加入购物车", "value": 3200},
{"name": "提交订单", "value": 1800},
{"name": "完成支付", "value": 1200}
]
```
**工具调用:**
```json
{
"tool": "generateFunnelChart",
"arguments": {
"data": "[{\"name\":\"网站访问\",\"value\":10000},{\"name\":\"浏览商品\",\"value\":6500},{\"name\":\"加入购物车\",\"value\":3200},{\"name\":\"提交订单\",\"value\":1800},{\"name\":\"完成支付\",\"value\":1200}]",
"title": "电商转化漏斗",
"width": 800,
"height": 600
}
}
```
## 项目结构
```
bi-mcp-server/
├── pom.xml # 父POM文件
├── README.md # 主 README(语言选择)
├── README-EN.md # 英文文档
├── README-ZH.md # 中文文档
├── test-data.md # 测试数据示例
├── bi-mcp-server-chart/ # 图表引擎模块
│ ├── pom.xml
│ └── src/main/java/com/bi/mcp/chart/
│ ├── config/
│ │ ├── ChartConfig.java # 图表配置
│ │ └── ChartProperties.java # 图表属性
│ ├── engine/
│ │ ├── ChartEngine.java # 图表渲染引擎
│ │ └── ChartValidator.java # 数据验证
│ ├── model/
│ │ └── ChartType.java # 图表类型枚举
│ ├── parser/
│ │ └── ChartDataParser.java # 数据解析工具
│ ├── service/
│ │ └── ChartMcpService.java # 包含22个工具的MCP服务
│ └── storage/
│ └── ChartStorageManager.java # 图表存储管理
└── bi-mcp-server-api/ # API模块
├── pom.xml
└── src/main/java/com/bi/mcp/api/
├── BiMcpServerApplication.java # 应用入口
└── config/
└── ApiMcpServerConfig.java # MCP服务器配置
```
## 开发指南
### 添加新的图表类型
1. 在 `ChartType.java` 中添加新图表类型:
```java
MY_NEW_CHART("我的新图表")
```
2. 在 `ChartMcpService.java` 中添加新方法:
```java
@Tool(description = "生成新类型的图表...")
public String generateMyNewChart(
@ToolParam(description = "数据数组") String data,
@ToolParam(description = "图表标题", required = false) String title,
...
) {
return generateChart(ChartType.MY_NEW_CHART, data, title, ...);
}
```
3. 更新图表引擎以处理新类型。
### 运行测试
```bash
mvn test
```
### 生产环境构建
```bash
mvn clean package -DskipTests
java -jar bi-mcp-server-api/target/bi-mcp-server-api-1.0.0.jar
```
## 测试数据
所有 22 种图表类型的详细测试数据和使用示例,请参考 [test-data.md](test-data.md)。
## 开源协议
本项目采用 MIT 开源协议 - 详见 [LICENSE](LICENSE) 文件。
## 作者
**yulang**