RAG ,MCP项目开发日志day1
关于RAG知识库:
文本知识库可以是非常多种的类型,不非得限定到文字,也可以是sql或者java代码。那么这里我们就可以解析一类是上传的文件,一类是Git代码库的项目。也可以是来自于网页的内容之后爬虫。这些内容都可以被解析处理。

关于linux 的各个文件划分原则:

记录一次云服务器的故障:
云服务器的bash文件是不能够在windows下进行直接使用,会自动带有换行符,解决办法就是
1是利用相应的工具进行转换。
2是在linux系统中直接用vim指令进行修改。
关于MCP本身的一些作用

关于MCP的client

3.关于MCP的架构图

3、MCP 客户端
MCP Client 是 MCP 架构中的关键组件,主要负责和 MCP 服务器建立连接并进行通信。它能自动匹配服务器的协议版本、确认可用功能、负责数据传输和 JSON-RPC 交互。此外,它还能发现和使用各种工具、管理资源、和提示词系统进行交互。
除了这些核心功能,MCP 客户端还支持一些额外特性,比如根管理、采样控制,以及同步或异步操作。为了适应不同场景,它提供了多种数据传输方式,包括:
Stdio 标准输入 / 输出:适用于本地调用
基于 Java HttpClient 和 WebFlux 的 SSE 传输:适用于远程调用
客户端可以通过不同传输方式调用不同的 MCP 服务,可以是本地的、也可以是远程的。如图:

思考tools的使用是关键
如何在程序中使用MCP服务
一段调用MCphee服务的具体实例
@Test
void doChatWithMcp() {
String chatId = UUID.randomUUID().toString();
// 测试地图 MCP
String message = "我的另一半居住在上海静安区,请帮我找到 5 公里内合适的约会地点";
String answer = loveApp.doChatWithMcp(message, chatId);
}
Spring AI MCP 客户端与服务器连接方式
以下是客户端的配置文件,用于配置与服务器的两种传输方式:
```yaml
spring:
ai:
mcp:
client:
enabled: true
name: my-mcp-client
version: 1.0.0
request-timeout: 30s
type: SYNC
sse:
connections:
server1:
url: http://localhost:8080
stdio:
connections:
server1:
command: /path/to/server
args:
- --port=8080
env:
API_KEY: your-api-key
MCP 客户端自定义配置
以下是一个自定义 McpSyncClientCustomizer 的示例:
```java
@Component
public class CustomMcpSyncClientCustomizer implements McpSyncClientCustomizer {
@Override
public void customize(String serverConfigurationName, McpClient.SyncSpec spec) {
// 自定义请求超时配置
spec.requestTimeout(Duration.ofSeconds(30));
// 设置此客户端可访问的根目录 URI
spec.roots(roots);
// 设置处理消息创建请求的自定义采样处理器
spec.sampling((CreateMessageRequest messageRequest) -> {
// 处理采样
CreateMessageResult result = ...
return result;
});
// 添加在可用工具变更时通知的消费者
spec.toolsChangeConsumer((List<McpSchema.Tool> tools) -> {
// 处理工具变更
});
// 添加在可用资源变更时通知的消费者
spec.resourcesChangeConsumer((List<McpSchema.Resource> resources) -> {
// 处理资源变更
});
// 添加在可用提示词变更时通知的消费者
spec.promptsChangeConsumer((List<McpSchema.Prompt> prompts) -> {
// 处理提示词变更
});
// 添加接收服务器日志消息时通知的消费者
spec.loggingConsumer((McpSchema.LoggingMessageNotification log) -> {
// 处理日志消息
});
}
}
配置说明
- 连接方式配置 :通过
type属性指定连接类型为SYNC,然后在对应的sse或stdio配置块中设置服务器的连接信息,如 URL、命令、参数和环境变量等。 - 自定义配置 :通过实现
McpSyncClientCustomizer接口,在customize方法中可以对客户端的请求超时、根目录 URI、消息采样处理器以及各种变更通知消费者等进行自定义设置。
MCP的几个java版本的SDK
spring-ai-starter-mcp-server:提供 stdio 传输支持,不需要额外的 web 依赖
spring-ai-starter-mcp-server-webmvc:提供基于 Spring MVC 的 SSE 传输和可选的 stdio 传输(一般建议引入这个)
spring-ai-starter-mcp-server-webflux:提供基于 Spring WebFlux 的响应式 SSE 传输和可选的 stdio 传输
关于这个tool的注解开发
3、开发服务
无论采用哪种传输方式,开发 MCP 服务的过程都是类似的,跟开发工具调用一样,直接使用 @Tool 注解标记服务类中的方法。
▼
java
复制代码
@Service
public class WeatherService {
@Tool(description = "获取指定城市的天气信息")
public String getWeather(
@ToolParameter(description = "城市名称,如北京、上海") String cityName) {
// 实现天气查询逻辑
return "城市" + cityName + "的天气是晴天,温度22°C";
}
}
然后在 Spring Boot 项目启动时注册一个 ToolCallbackProvider Bean 即可:
▼
java
复制代码
@SpringBootApplication
public class McpServerApplication {
@Bean
public ToolCallbackProvider weatherTools(WeatherService weatherService) {
return MethodToolCallbackProvider.builder()
.toolObjects(weatherService)
.build();
}
}

浙公网安备 33010602011771号