Skip to content

Commit 7df17f1

Browse files
committed
feat(init):完成mcp-excel-server 0.0.1版本
0 parents  commit 7df17f1

File tree

16 files changed

+541
-0
lines changed

16 files changed

+541
-0
lines changed

.gitignore

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
HELP.md
2+
target/
3+
!.mvn/wrapper/maven-wrapper.jar
4+
!**/src/main/**/target/
5+
!**/src/test/**/target/
6+
7+
### STS ###
8+
.apt_generated
9+
.classpath
10+
.factorypath
11+
.project
12+
.settings
13+
.springBeans
14+
.sts4-cache
15+
16+
### IntelliJ IDEA ###
17+
.idea
18+
*.iws
19+
*.iml
20+
*.ipr
21+
22+
### NetBeans ###
23+
/nbproject/private/
24+
/nbbuild/
25+
/dist/
26+
/nbdist/
27+
/.nb-gradle/
28+
build/
29+
!**/src/main/**/build/
30+
!**/src/test/**/build/
31+
32+
### VS Code ###
33+
.vscode/

README.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# mcp-excel-server
2+
## 项目概述
3+
4+
mcp-excel-server 是一个基于 Spring AI MCP 框架开发的项目,其主要功能是借助 MCP 协议,为大语言模型(LLM)提供对本地 Excel 文件进行读取和写入操作的能力。通过本项目,AI 能够像人类一样调用本地工具,突破静态知识库的限制,实现动态交互。
5+
6+
## 功能特性
7+
- Excel 文件读取:能够读取本地 Excel 文件(支持 .xlsx 和 .xls 格式),并将内容以 JSON 格式返回。
8+
9+
- Excel 文件写入:可以把 JSON 数据写入到指定的本地 Excel 文件中。
10+
与 LLM 集成:可与支持 MCP 协议的 LLM 客户端集成,如 Claude、Cursor 和 Cherry Studio 等。
11+
12+
## 环境要求
13+
Java 17 及以上
14+
15+
## 安装与配置
16+
17+
第一步:执行下列命令打包:
18+
```
19+
mvn clean package -Dmaven.test.skip=true
20+
```
21+
22+
第二步:配置MCP Server
23+
```json
24+
{
25+
"mcpServers": {
26+
"AUM5itYnoMcxPiU2vFa3Z": {
27+
"name": "Excel操作",
28+
"type": "stdio",
29+
"description": "",
30+
"isActive": true,
31+
"command": "java",
32+
"args": [
33+
"-Dspring.ai.mcp.server.stdio=true",
34+
"-Dspring.main.web-application-type=none",
35+
"-Dfile.encoding=UTF-8",
36+
"-jar",
37+
"{your_path}/mcp-excel-server-0.0.1-SNAPSHOT.jar"
38+
]
39+
}
40+
}
41+
}
42+
```
43+
## 功能演示
44+
![](./img/2.png)
45+
order.xlsx:
46+
![](./img/1.png)
47+
生成的结果:
48+
![](./img/3.png)

img/1.png

204 KB
Loading

img/2.png

242 KB
Loading

img/3.png

145 KB
Loading

pom.xml

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
<groupId>cn.bigcoder.grpc.demo.mcpexcel</groupId>
7+
<artifactId>mcp-excel-server</artifactId>
8+
<version>0.0.1</version>
9+
<name>mcp-excel-server</name>
10+
<description>mcp-excel-server</description>
11+
<properties>
12+
<java.version>11</java.version>
13+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
14+
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
15+
<spring-boot.version>3.2.5</spring-boot.version>
16+
</properties>
17+
<dependencies>
18+
<dependency>
19+
<groupId>org.springframework.boot</groupId>
20+
<artifactId>spring-boot-starter</artifactId>
21+
</dependency>
22+
23+
<dependency>
24+
<groupId>org.springframework.boot</groupId>
25+
<artifactId>spring-boot-starter-test</artifactId>
26+
<scope>test</scope>
27+
</dependency>
28+
<dependency>
29+
<groupId>org.springframework.ai</groupId>
30+
<artifactId>spring-ai-mcp-server-spring-boot-starter</artifactId>
31+
<version>1.0.0-M6</version>
32+
</dependency>
33+
<dependency>
34+
<groupId>org.projectlombok</groupId>
35+
<artifactId>lombok</artifactId>
36+
<scope>provided</scope>
37+
</dependency>
38+
<!-- Apache POI for Excel processing -->
39+
<dependency>
40+
<groupId>org.apache.poi</groupId>
41+
<artifactId>poi</artifactId>
42+
<version>5.2.3</version>
43+
</dependency>
44+
<dependency>
45+
<groupId>org.apache.poi</groupId>
46+
<artifactId>poi-ooxml</artifactId>
47+
<version>5.2.3</version>
48+
</dependency>
49+
<dependency>
50+
<groupId>com.alibaba.fastjson2</groupId>
51+
<artifactId>fastjson2</artifactId>
52+
<version>2.0.43</version>
53+
</dependency>
54+
<!-- 使用 log4j2 的适配器进行绑定 -->
55+
<dependency>
56+
<groupId>org.apache.logging.log4j</groupId>
57+
<artifactId>log4j-slf4j-impl</artifactId>
58+
<version>2.19.0</version>
59+
</dependency>
60+
61+
<!-- log4j2 日志门面 -->
62+
<dependency>
63+
<groupId>org.apache.logging.log4j</groupId>
64+
<artifactId>log4j-api</artifactId>
65+
<version>2.19.0</version>
66+
</dependency>
67+
68+
<!-- log4j2 日志实面 -->
69+
<dependency>
70+
<groupId>org.apache.logging.log4j</groupId>
71+
<artifactId>log4j-core</artifactId>
72+
<version>2.19.0</version>
73+
</dependency>
74+
75+
</dependencies>
76+
<dependencyManagement>
77+
<dependencies>
78+
<dependency>
79+
<groupId>org.springframework.boot</groupId>
80+
<artifactId>spring-boot-dependencies</artifactId>
81+
<version>${spring-boot.version}</version>
82+
<type>pom</type>
83+
<scope>import</scope>
84+
</dependency>
85+
</dependencies>
86+
</dependencyManagement>
87+
88+
<build>
89+
<plugins>
90+
<plugin>
91+
<groupId>org.springframework.boot</groupId>
92+
<artifactId>spring-boot-maven-plugin</artifactId>
93+
<executions>
94+
<execution>
95+
<goals>
96+
<goal>repackage</goal>
97+
</goals>
98+
</execution>
99+
</executions>
100+
</plugin>
101+
</plugins>
102+
</build>
103+
104+
</project>
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package cn.bigcoder.mcp.excel.mcpexcelserver;
2+
3+
import cn.bigcoder.mcp.excel.mcpexcelserver.servive.ExcelReadService;
4+
import cn.bigcoder.mcp.excel.mcpexcelserver.servive.ExcelWriteService;
5+
import org.springframework.ai.tool.ToolCallbackProvider;
6+
import org.springframework.ai.tool.method.MethodToolCallbackProvider;
7+
import org.springframework.boot.SpringApplication;
8+
import org.springframework.boot.autoconfigure.SpringBootApplication;
9+
import org.springframework.context.annotation.Bean;
10+
11+
@SpringBootApplication
12+
public class McpExcelServerApplication {
13+
14+
public static void main(String[] args) {
15+
SpringApplication.run(McpExcelServerApplication.class, args);
16+
}
17+
18+
@Bean
19+
public ToolCallbackProvider serverTools(ExcelWriteService excelWriteService,
20+
ExcelReadService excelReadService) {
21+
return MethodToolCallbackProvider
22+
.builder()
23+
.toolObjects(excelWriteService, excelReadService)
24+
.build();
25+
}
26+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package cn.bigcoder.mcp.excel.mcpexcelserver.dto;
2+
3+
import lombok.Data;
4+
5+
/**
6+
* @author: bigcoder84
7+
* @date: 2025-04-12
8+
**/
9+
@Data
10+
public class BaseResponse<T> {
11+
12+
private boolean success;
13+
private String message;
14+
private T data;
15+
16+
private BaseResponse(boolean success, String message, T data) {
17+
this.success = success;
18+
this.message = message;
19+
this.data = data;
20+
}
21+
22+
public static <T> BaseResponse<T> success(T data) {
23+
return new BaseResponse<>(true, null, data);
24+
}
25+
26+
public static <T> BaseResponse<T> failed(String message) {
27+
return new BaseResponse<>(false, message, null);
28+
}
29+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package cn.bigcoder.mcp.excel.mcpexcelserver.dto;
2+
3+
import lombok.Data;
4+
import org.springframework.ai.tool.annotation.ToolParam;
5+
6+
/**
7+
* @author: bigcoder84
8+
* @date: 2025-04-12
9+
**/
10+
@Data
11+
public class ExcelReadRequest {
12+
13+
@ToolParam(description = "文件绝对路径")
14+
private String filePath;
15+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package cn.bigcoder.mcp.excel.mcpexcelserver.dto;
2+
3+
import java.util.List;
4+
import java.util.Map;
5+
import lombok.Builder;
6+
import lombok.Data;
7+
8+
/**
9+
* @author: bigcoder84
10+
* @date: 2025-04-12
11+
**/
12+
@Builder
13+
@Data
14+
public class ExcelReadResponse {
15+
16+
private List<Map<String, String>> dataList;
17+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package cn.bigcoder.mcp.excel.mcpexcelserver.dto;
2+
3+
import java.util.List;
4+
import java.util.Map;
5+
import lombok.Data;
6+
import org.springframework.ai.tool.annotation.ToolParam;
7+
8+
/**
9+
* @author: bigcoder84
10+
* @date: 2025-04-12
11+
**/
12+
@Data
13+
public class ExcelWriteRequest {
14+
15+
@ToolParam(description = "文件绝对路径")
16+
private String filePath;
17+
@ToolParam(description = "表头列表,例如[\"列1\", \"列2\", ...]")
18+
private List<String> headers;
19+
@ToolParam(description = "数据列表,每个元素是一个Map,键为列名,值为对应单元格的值。例如:[{\"列1\": \"值1\", \"列2\": \"值2\",...},...]")
20+
private List<Map<String, String>> dataList;
21+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package cn.bigcoder.mcp.excel.mcpexcelserver.dto;
2+
3+
import lombok.Builder;
4+
import lombok.Data;
5+
import org.springframework.ai.tool.annotation.ToolParam;
6+
7+
/**
8+
* @author: bigcoder84
9+
* @date: 2025-04-12
10+
**/
11+
@Builder
12+
@Data
13+
public class ExcelWriteResponse {
14+
15+
@ToolParam(description = "文件绝对路径")
16+
private String filePath;
17+
}

0 commit comments

Comments
 (0)