news 2026/8/5 7:18:01

上下文协议(MCP)Java SDK 指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
上下文协议(MCP)Java SDK 指南

当我们把各种内部系统、数据源、工具接入大语言模型时,往往会遇到一个尴尬的问题:每个团队、每套系统都有自己的一套“接入规范”。有的用 HTTP API,有的用消息队列,有的直接连数据库,最后一圈串下来,既难以统一治理,又很难在不同应用之间复用。这时,你可能会问:有没有一种通用的协议,既能让 AI 模型方便地调用外部工具、访问数据,又能让后端服务方用标准方式暴露能力?

Model Context Protocol(MCP)就是为此而生的标准之一,而本文要介绍的 Java SDK,则为 Java 开发者提供了一条直接接入 MCP 生态的通路。通过它,你可以用统一的模型,在 Java 应用里暴露工具、资源、提示模版,也可以轻松作为客户端去调用这些能力。本文将从整体架构讲起,一步步带你用一个可运行的示例,搭建起自己的 MCP 服务端与客户端。

1. 概览

随着近年来 AI 的快速发展,越来越多的工具和系统开始与 AI 模型集成。但随之而来的一个挑战是:每种集成都可能采用完全不同的标准和方式,将外部工具、资源和系统接入到 AI 模型中。

Model Context Protocol(MCP)是一个开源标准,它定义了 AI 应用(如大语言模型、图像生成模型等)与工具、数据源以及其他资源之间的集成方式。借助 MCP,AI 应用可以按外部系统约定的方式访问数据、调用工具并执行工作流。

MCP 的 Java SDK 为开发者提供了一组库,支持多种协议和通信机制,用于把 Java 应用与 AI 应用连接起来。

在本教程中,我们将一起了解这个 SDK,并通过一个简单示例来体验 MCP 的使用方式。

2. 架构

MCP 架构的核心组件主要包括:

  • MCP Host:负责管理多个 MCP Client
  • MCP Client:从 MCP Server 获取上下文,供 MCP Host 使用
  • MCP Server:向 MCP Client 提供上下文信息和可调用能力

MCP 将通信划分为两个概念层次:数据层(Data Layer),用于定义客户端与服务端的通信协议和生命周期管理;以及传输层(Transport Layer),用于定义客户端和服务端之间的具体传输通道和机制

Java 版的 MCP SDK 将这些概念映射为如下几个层次:

  • Client/Server 层:通过McpClient/McpServer实现并管理客户端/服务端的具体操作
  • Session 层:通过McpSession管理通信模式和会话状态
  • Transport 层:通过McpTransport处理消息的序列化与反序列化

客户端会调用 MCP 服务端暴露的一到多个工具(tool),而底层的通信则由传输层负责。

在 MCP 中,Primitive(原语)是最基础的构建单元,用来定义可用的上下文信息类型以及可执行的操作范围。服务端和客户端都提供了一些原语。

服务端侧的原语包括工具(tools)、资源(resources)和提示模版(prompts)。工具是 AI 应用可以调用的可执行函数,例如查询数据库、文件操作等。资源是提供给客户端的上下文数据源,例如数据库结构、文件内容等。提示模版是可复用的模版,用于与语言模型进行交互

客户端侧的原语则帮助McpServer的实现者构建更丰富的交互能力,包括采样(sampling)、信息补充(elicitation)和日志(logging)。采样允许服务端在不集成模型 SDK 的情况下,向客户端请求语言模型补全结果。信息补充让服务端能够向用户请求额外信息或确认操作。日志则允许服务端向客户端发送日志消息,用于调试和监控。

3. 环境准备

要使用 MCP Java SDK,我们需要在项目中加入mcp依赖:

<dependency><groupId>io.modelcontextprotocol.sdk</groupId><artifactId>mcp</artifactId><version>0.15.0</version></dependency>

3.1 定义一个 MCP 工具

我们先通过LoggingTool这个类,定义一个非常简单的 MCP 工具,用来打印收到的提示词(prompt),该方法返回一个SyncToolSpecification

publicclassLoggingTool{publicstaticMcpServerFeatures.SyncToolSpecificationlogPromptTool(){McpSchema.JsonSchemainputSchema=newMcpSchema.JsonSchema("object",Map.of("prompt",String.class),List.of("prompt"),false,null,null);returnnewMcpServerFeatures.SyncToolSpecification(newMcpSchema.Tool("logPrompt","Log Prompt","Logs a provided prompt",inputSchema,null,null,null),(exchange,args)->{Stringprompt=(String)args.get
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/5 6:29:11

AI语音合成进入情感时代:EmotiVoice带来全新听觉体验

AI语音合成进入情感时代&#xff1a;EmotiVoice带来全新听觉体验 在智能音箱里听到一句冷冰冰的“已为您打开灯光”&#xff0c;和听见一个带着轻快语调、仿佛真人在微笑地说“房间亮啦&#xff0c;心情也变好了呢~”&#xff0c;哪一种更让你愿意再次交互&#xff1f;这正是当…

作者头像 李华
网站建设 2026/8/5 8:25:47

EmotiVoice支持WebAssembly吗?浏览器端运行可能性分析

EmotiVoice 能在浏览器里跑吗&#xff1f;WebAssembly 实现路径深度拆解 想象一下&#xff1a;你打开一个网页&#xff0c;上传几秒自己的声音片段&#xff0c;输入一段文字&#xff0c;点击“生成”&#xff0c;不到两秒&#xff0c;页面就播放出带有你音色和情绪的自然语音—…

作者头像 李华
网站建设 2026/8/4 20:06:11

StaMPS雷达数据处理:从零搭建专业位移监测系统

StaMPS雷达数据处理&#xff1a;从零搭建专业位移监测系统 【免费下载链接】StaMPS Stanford Method for Persistent Scatterers 项目地址: https://gitcode.com/gh_mirrors/st/StaMPS 想要掌握专业的合成孔径雷达数据处理技术&#xff1f;StaMPS&#xff08;Stanford M…

作者头像 李华
网站建设 2026/8/4 18:44:17

yt-dlp-gui终极指南:轻松掌握Windows视频下载利器

你是否曾经想要下载在线视频却苦于命令行操作的复杂性&#xff1f;今天&#xff0c;让我们一起来探索yt-dlp-gui这款强大的Windows图形界面工具&#xff0c;它将让你轻松实现视频下载的梦想&#xff01; 【免费下载链接】yt-dlp-gui Windows GUI for yt-dlp 项目地址: https:…

作者头像 李华
网站建设 2026/8/4 17:15:12

EmotiVoice是否支持语音情感随机扰动?增强自然感功能

EmotiVoice 是否支持语音情感随机扰动&#xff1f;增强自然感功能 在虚拟助手越来越频繁地进入我们生活的今天&#xff0c;一个关键问题浮出水面&#xff1a;为什么有些AI语音听起来依然像“复读机”&#xff0c;而另一些却仿佛真人在说话&#xff1f;答案往往不在于发音是否清…

作者头像 李华
网站建设 2026/8/4 18:27:40

QRemeshify终极指南:快速创建高质量四边形网格的完整教程

想要将杂乱的三角网格转换成规整的四边形拓扑吗&#xff1f;QRemeshify正是你需要的Blender插件神器。这个基于QuadWild Bi-MDF算法的强大工具&#xff0c;能够输出高质量的四边形网格&#xff0c;让你的3D建模工作更加高效顺畅。无论你是游戏开发者、动画师还是3D艺术家&#…

作者头像 李华