在# Model Context Protocol (MCP)是什么?带你深入MCP核心内容! 文章介绍了 MCP 协议的核心概念,有些内容可能还是有点晦涩难懂,后续文章将通过实现一些实际的案例,深入理解并清楚其使用的场景和效果。
MCP Client 理解为可以支持 MCP 协议的客户端,本文重点在于如何使用 SDK 开发一个 MCP Client。我们直入主题,直接看 Java SDK 源码以及如何开发一个 MCP Client。
MCP 官方支持四种语言的 SDK, Python、TypeScript、Java、Kotlin,并有其对应实现的SDK;
根据自己的语言选型,选择不同的语言的 SDK进行开发,通过查看 SDK 文档,Python SDK 和 TypeScript SDK 文档比较详细,示例比较多,其次是 Kotlin SDK,最差的就是关于 Java SDK 的示例代码。基本上都是硬蹭 Spring AI MCP 相关内容。
本文对 Java SDK 源码进行分析,并直接使用Java SDK 以及 Spring AI MCP client Staters 分别实现示例代码。
截止 2025-03-07 最新版本的 SDK 版本为 0.7.0,具体版本大家可以在 - modelcontextprotocol/java-sdk 找到。我们基于 0.7.0 版本进行分析。
io.modelcontextprotocol.sdk
mcp
io.modelcontextprotocol.sdk
mcp-bom
0.7.0
pom
import
MCP Client 支持的能力;
源码:
public interface McpClient {
// 通过 ClientMcpTransport 创建一个同步client。
static SyncSpec sync(ClientMcpTransport transport) {
return new SyncSpec(transport);
}
// 创建一异步client
static AsyncSpec async(ClientMcpTransport transport) {
return new AsyncSpec(transport);
}
/**
* 同步客户端规范,使用建造者模式,提供流式 API 设置自定义配置,主要配置如下;
* 1. 客户端与服务器之间的传输层
* 2. 请求超时时间
* 3. 客户端功能协商
* 4. 客户端版本实现跟踪
* 5. 资源访问限制
* 6. 工具、资源、提示词变更处理
*/
class SyncSpec {
// 里面细节不在分析,主要完成以上 6个方面内容
public McpSyncClient build() {
McpClientFeatures.Sync syncFeatures = new McpClientFeatures.Sync(this.clientInfo, this.capabilities,
this.roots, this.toolsChangeConsumers, this.resourcesChangeConsumers, this.promptsChangeConsumers,
this.loggingConsumers, this.samplingHandler);
McpClientFeatures.Async asyncFeatures = McpClientFeatures.Async.fromSync(syncFeatures);
return new McpSyncClient(new McpAsyncClient(transport, this.requestTimeout, asyncFeatures));
}
}
/**
* 异步客户端规范,同 同步客户端
*/
class AsyncSpec {
}
}
McpSyncClient( 同步 Mcp Client )
其底层本质上使用的还是 McpAsyncClient。我们重点分析一下 McpAsyncClient。
McpAsyncClient( 异步 Mcp Client )
McpAsyncClient 核心依赖于 DefaultMcpSession 类,该类主要负责管理客户端和服务器之间双向JSON-RPC通信。
package com.ivy.mcp;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.modelcontextprotocol.client.McpClient;
import io.modelcontextprotocol.client.McpSyncClient;
import io.modelcontextprotocol.client.transport.ServerParameters;
import io.modelcontextprotocol.client.transport.StdioClientTransport;
import io.modelcontextprotocol.spec.McpSchema;
import java.time.Duration;
import java.util.Map;
public class McpClientJavaSdkExamples {
public static void main(String[] args) {
StdioClientTransport transport = new StdioClientTransport(
ServerParameters.builder("npx")
.args("-y",
"@modelcontextprotocol/server-filesystem",
"/Users/fangjie33/ai/claude-mcp-examples")
.build(),
new ObjectMapper()
);
try (McpSyncClient client = McpClient.sync(transport)
.clientInfo(
new McpSchema.Implementation("my-client", "1.0.0")
)
.capabilities(
McpSchema.ClientCapabilities.builder().roots(true).sampling().build()
)
.requestTimeout(Duration.ofSeconds(60))
.build()) {
McpSchema.InitializeResult initialize = client.initialize();
System.out.println("client initialized: " + initialize);
tools(client); // 打印 MCP 工具列表
createDirectory(client); // 创建目录
createFile(client); // 创建文件
}
}
public static void tools (McpSyncClient client) {
McpSchema.ListToolsResult listToolsResult = client.listTools();
listToolsResult.tools().forEach(System.out::println);
}
public static void createDirectory(McpSyncClient client) {
McpSchema.CallToolRequest callToolRequest = new McpSchema.CallToolRequest(
"create_directory",
Map.of("path", "mcp")
);
McpSchema.CallToolResult callToolResult = client.callTool(callToolRequest);
System.out.println(callToolResult.content());
}
public static void createFile(McpSyncClient client) {
McpSchema.CallToolRequest callToolRequest = new McpSchema.CallToolRequest(
"write_file",
Map.of("path", "mcp/test.txt", "content", "hello world")
);
McpSchema.CallToolResult callToolResult = client.callTool(callToolRequest);
System.out.println(callToolResult.content());
}
}
源码:github.com/Fj-ivy/clau…
通过与大模型集成,通过自然语言完成本地文件管理能力
参考:Spring AI 支持 Mcp协议了,通过Mcp集成本地文件管理
源码:github.com/Fj-ivy/clau…
MCP 已经存在大量客户端或者编辑器,比如 Claude Desktop App,AI 代码开发工具 Cursor 等,大家可以直接下载使用,后续也会选择一些比较热门的编辑器进行演示使用。
客户端 | Resources | Prompts | Tools | Sampling | Roots | 说明 |
---|---|---|---|---|---|---|
Claude Desktop App | ✅ | ✅ | ✅ | ❌ | ❌ | 完全支持 MCP 所有特性 |
5ire | ❌ | ❌ | ✅ | ❌ | ❌ | 支持工具。 |
BeeAI Framework | ❌ | ❌ | ✅ | ❌ | ❌ | 支持代理工作流中的工具。 |
Cline | ✅ | ❌ | ✅ | ❌ | ❌ | 支持工具和资源。 |
Continue | ✅ | ✅ | ✅ | ❌ | ❌ | 完全支持 MCP 所有特性 |
Cursor | ❌ | ❌ | ✅ | ❌ | ❌ | 支持工具。 |
Emacs Mcp | ❌ | ❌ | ✅ | ❌ | ❌ | 支持 Emacs 中的工具。 |
Firebase Genkit | ⚠️ | ✅ | ✅ | ❌ | ❌ | 支持通过工具进行资源列表和查找。 |
GenAIScript | ❌ | ❌ | ✅ | ❌ | ❌ | 支持工具。 |
Goose | ❌ | ❌ | ✅ | ❌ | ❌ | 支持工具。 |
LibreChat | ❌ | ❌ | ✅ | ❌ | ❌ | Supports tools for Agents |
mcp-agent | ❌ | ❌ | ✅ | ⚠️ | ❌ | 支持工具、服务器连接管理和代理工作流程。 |
Roo Code | ✅ | ❌ | ✅ | ❌ | ❌ | 支持工具和资源。 |
Sourcegraph Cody | ✅ | ❌ | ❌ | ❌ | ❌ | 通过 OpenCTX 支持资源 |
Superinterface | ❌ | ❌ | ✅ | ❌ | ❌ | 支持工具 |
TheiaAI/TheiaIDE | ❌ | ❌ | ✅ | ❌ | ❌ | 支持 Theia AI 和 AI 驱动的 Theia IDE 中的 Agent 工具 |
Windsurf Editor | ❌ | ❌ | ✅ | ❌ | ❌ | 支持带有 AI Flow 的工具以进行协作开发。 |
Zed | ❌ | ✅ | ❌ | ❌ | ❌ | Prompts appear as slash commands 提示符显示为斜杠命令 |
OpenSumi | ❌ | ❌ | ✅ | ❌ | ❌ | 支持 OpenSumi 中的工具 |
AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。
学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。
这里给大家精心整理了一份
全面的AI大模型学习资源
,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享
!
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。
书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)
对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。
行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。
面试不仅是技术的较量,更需要充分的准备。
在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。
全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以
微信扫描下方CSDN官方认证二维码
,免费领取【保证100%免费
】