Dify智能体调用本地MCP服务

系列文章目录

1.Dify智能体调用本地MCP服务: link



1 MCP概念

当前人工智能领域最受关注的技术进展之一当属模型上下文协议(Model Context Protocol,简称MCP)。作为Anthropic公司推出的开放标准协议,MCP正在重塑大型语言模型(LLMs)与外部环境的交互方式。

MCP的核心价值在于其标准化设计理念。该协议为AI系统构建了一个通用接口框架,使得各类数据源和工具能够实现即插即用。类比而言,MCP在AI领域的作用堪比USB-C在电子设备领域的革命性意义——它消除了不同系统间的兼容性障碍。

根据官方技术文档(https://modelcontextprotocol.io/introduction)的定义,MCP主要实现以下功能:

建立统一的上下文提供标准
实现异构系统的互操作性
简化AI模型的集成复杂度
从技术架构来看,MCP的创新性体现在三个方面:

接口标准化:采用通用规范对接各类数据源
协议轻量化:确保交互过程的高效性
扩展灵活性:支持新型服务的快速接入
实际应用中,MCP显著提升了AI系统的功能扩展性。以天气预报服务为例,通过MCP接口,语言模型可以实时获取气象数据,而无需针对特定API进行定制开发。这种标准化接入方式大幅降低了AI应用的开发门槛。

值得注意的是,MCP的兼容性设计使其能够适配多种应用场景。无论是数据库查询、实时数据流还是专业计算服务,都可以通过统一的协议规范实现无缝对接。这种设计哲学与现代模块化软件开发理念高度契合,为AI技术的产业化应用提供了重要基础设施。

2 使用Spring MCP Server搭建本地MCP服务

在Java生态系统中,Spring框架与AI技术的融合正展现出强大的协同效应。Spring AI项目推出的MCP Server Boot Starter组件(详见官方文档:https://docs.spring.io/spring-ai/reference/api/mcp/mcp-server-boot-starter-docs.html)为开发者提供了开箱即用的解决方案。

Spring AI针对不同应用场景设计了三种通信模式:

标准I/O模式(STDIO)
采用进程内通信机制
通过系统标准输入输出流传输数据
典型应用:本地开发环境调试
MVC服务模式
基于Servlet容器实现
支持服务器推送事件(SSE)协议
优势:与传统Spring MVC项目完美兼容
WebFlux响应式模式
采用非阻塞式I/O模型
支持高并发流式处理
特点:适合云原生微服务架构
技术选型建议:
• 快速原型开发推荐STDIO模式
• 企业级Web应用建议采用MVC方案
• 需要处理万级并发的场景适用WebFlux

实践指南:
开发者可以直接使用Spring官方示例代码库(https://github.com/spring-projects/spring-ai-examples)中的starter-webmvc-server(https://github.com/spring-projects/spring-ai-examples/tree/main/model-context-protocol/weather/starter-webmvc-server)项目作为基础模板。该模板已实现核心功能,只需根据业务需求进行适当定制即可快速构建MCP服务。
在这里插入图片描述

特别说明:
WebMVC实现方案在保持良好性能的同时,提供了完善的RESTful接口支持,是大多数传统Java项目的优选方案。其标准化的SSE端点设计使得前端集成变得异常简便。
本次演示的项目需要JDK17,apache-maven-3.9.9,Dify1.4.0(已支持MPC插件)

java -version
java version "17.0.7" 2023-04-18 LTS
Java(TM) SE Runtime Environment (build 17.0.7+8-LTS-224)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.7+8-LTS-224, mixed mode, sharing)
mvn -v
Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937)
Maven home: C:\zk\package\apache-maven-3.9.9
Java version: 17.0.7, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk-17
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

2.1 试行官方案例

运行 McpServerApplication.java
在这里插入图片描述

2.2 运行测试文件

运行测试文件 ClientSse.java ,可以看到返回了信息。
在这里插入图片描述

2.3 添加简单的自测MCP服务

我们新增一个BIService类,在类上标注@Service注解,然后新增getProjectInfoByCustomerName和getProjectInfoByContractNum方法,模拟从数据库中查询项目信息。
在这里插入图片描述

2.3.1关键注解使用指南:@Tool 配置详解

@Tool注解的关键信息如下:
• name:工具的名称。如果未提供,则使用方法名称。AI 模型使用此名称来识别调用该工具的工具。因此,同一个类中不允许有两个同名的工具。对于特定的聊天请求,该名称在模型可用的所有工具中必须是唯一的。
• description:工具的描述,模型可以通过该描述了解何时以及如何调用该工具。如果未提供,则方法名称将用作工具描述。但是,强烈建议提供详细的描述,因为这对于模型理解工具的用途及其使用方法至关重要。如果描述不充分,可能会导致模型在应该使用工具时不使用它,或者错误地使用它。
• returnDirect:工具结果应直接返回给客户端还是传递回模型。有关更多详细信息,请参阅直接返回。
• resultConverter:ToolCallResultConverter用于将工具调用的结果转换为可String object发送回 AI 模型的实现。更多详情,请参阅结果转换。
强烈建议仔细填写description内容。

2.4 在McpServerApplication类中,提供一个ToolCallbackProvider

package org.springframework.ai.mcp.sample.server;

import org.springframework.ai.tool.ToolCallback;
import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.ai.tool.function.FunctionToolCallback;
import org.springframework.ai.tool.method.MethodToolCallbackProvider;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
@EnableFeignClients(basePackages = "org.springframework.ai.mcp.sample.rest")
public class McpServerApplication {
   
   

	public static void main(String[] args) {
   
   
		SpringApplication.run(McpServerApplication.class, args);
	}

	@Bean
	public ToolCallbackProvider weatherTools(WeatherService weatherService) {
   
   
		return MethodToolCallbackProvider.builder().toolObjects(weatherService).build();
	}

	public record TextInput(String input) {
   
   
	}

	@Bean
	public ToolCallback toUpperCase() {
   
   
		return FunctionToolCallback.builder("toUpperCase", (TextInput input) -> input.input().toUpperCase())
			.inputType(TextInput.class)
			.description("Put the text to upper case")
			.build();
	}

    //提供一个ToolCallbackProvider
	@Bean
	public ToolCallbackProvider biTools(BIService biService) {
   
   
		return MethodToolCallbackProvider.builder().toolObjects(biService).build();
	}
}

后端MCP服务完成。
现在贴上完整的BIService的代码,还有一些调用第三方的Feign。
pom.xml 中加入了Feign的依赖现完整贴出来:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
<!--     
<think>好的,我现在需要帮助用户了解如何配置DifyMCP。首先,用户的问题是关于Dify配置MCP的方法教程或指南,可能涉及微服务或网络架构。我需要参考用户提供的引用内容来构建回答,同时确保回答结构清晰,步骤明确。 首先,查看用户提供的引用内容。引用[1]提到了MCP Server的配置示例,其中涉及到多个MCP Server的URL配置。引用[2]则详细说明了如何创建配置文件,包括Dify的API基本URL和工作流密钥,以及构建项目和配置MCP Server的具体步骤。此外,注意事项部分提到了响应模式和输出字段的调整,这也是需要涵盖的内容。 接下来,我需要将这些信息整理成一个逻辑清晰的配置指南。可能需要分为几个步骤:环境准备、配置文件设置、构建部署、服务配置和注意事项。每个步骤需要详细说明,并给出具体的代码示例或配置片段,方便用户跟随操作。 同时,用户可能需要了解多个MCP Server的配置方法,如引用[1]中的JSON结构所示。需要解释如何在配置文件中添加多个服务器实例,并替换相应的地址和端口。 在注意事项部分,要强调响应模式和输出字段的调整,避免用户在实际应用中出现问题。此外,启发式探索的内容可以作为进阶配置或未来扩展的提示,但当前回答应聚焦于基本配置流程。 最后,生成相关问题,帮助用户深入理解配置过程中的其他方面,比如多环境配置、密钥管理、调试方法以及与其他系统的集成。这些问题需要与配置指南紧密相关,能够引导用户进一步探索。 确保整个回答使用中文,行内公式正确使用$...$,独立公式使用$$...$$,但根据用户的问题内容,可能数学公式较少,重点在配置步骤和代码示例。需要检查LaTeX语法是否正确,但用户的问题更多涉及配置而非数学内容,所以可能不需要太多公式。不过如果有涉及变量或路径的地方,应正确使用格式。 总结下来,回答的结构应该是: 1. 环境准备:安装Node.js、获取Dify密钥、项目准备。 2. 配置文件设置:YAML文件的结构,替换密钥和URL。 3. 构建部署:使用npm构建项目。 4. 服务配置:如何通过命令行或进程管理工具启动服务。 5. 多服务器配置:如何配置多个MCP实例。 6. 注意事项和常见问题:响应模式、输出字段调整、日志查看等。 每个步骤提供具体的代码块或配置示例,如config.yaml的内容和启动命令。同时引用用户提供的引用[1]和[2]中的相关内容,确保信息的准确性。 最后,生成的相关问题要围绕配置过程中可能遇到的深入问题,比如多环境、密钥管理、调试和集成等,帮助用户进一步解决问题。</think>### Dify MCP 配置方法指南 DifyMCP(Microservice Control Platform)配置主要涉及服务端参数设置、密钥管理和工作流集成。以下是详细配置步骤: --- #### **一、环境准备** 1. **安装 Node.js 环境** MCP Server 基于 TypeScript 开发,需确保 Node.js(建议 v16+)和 npm 已安装。 2. **获取 Dify 密钥** 登录 Dify 控制台,在「工作流」模块中获取 `dify_app_sks`,格式为:`your-dify-app-sk-1`[^2]。 3. **项目准备** 从代码仓库克隆 MCP Server 项目,例如: ```bash git clone https://github.com/dify-workflow-mcp.git ``` --- #### **二、配置文件设置** 1. **创建 `config.yaml`** 在项目根目录新建配置文件,内容如下: ```yaml dify_base_url: 'https://api.dify.ai/v1' dify_app_sks: - 'your-dify-app-sk-1' # 替换为实际密钥 - 'your-dify-app-sk-2' # 多密钥支持 ``` - `dify_base_url`: Dify API 地址(默认无需修改) - `dify_app_sks`: 工作流密钥列表[^2] 2. **自定义配置路径(可选)** 通过环境变量指定配置文件路径: ```bash export CONFIG_PATH=/path/to/custom-config.yaml ``` --- #### **三、构建与部署** 1. **安装依赖并构建** ```bash npm install npm run build # 生成 dist 目录 ``` 2. **启动 MCP Server** ```bash node ./build/index.js ``` 3. **进程管理配置(示例)** 使用 PM2 或 1Panel 管理服务: ```json { "name": "dify-workflow-mcp", "script": "node", "args": ["path/to/build/index.js"], "env": { "CONFIG_PATH": "path/to/config.yaml" } } ``` --- #### **四、多 MCP Server 配置** 在微服务架构中,可为不同实例配置独立参数: ```json { "mcp-instance-1": { "url": "http://192.168.1.100:3000/sse" // 实例1地址 }, "mcp-instance-2": { "url": "http://192.168.1.101:3000/sse" // 实例2地址 } } ``` 需确保端口和路径 `/sse` 可访问[^1]。 --- #### **五、注意事项** 1. **响应模式** 默认使用 `response_mode: 'blocking'`,即等待工作流执行完成。若需流式传输,可尝试 `'streaming'` 模式[^2]。 2. **输出字段适配** 工作流输出需包含 `code` 和 `checkResult` 字段,否则需修改代码: ```javascript const { code, checkResult } = responseData.data.outputs; ``` 3. **日志调试** 通过 `console.log` 或日志文件检查服务状态,路径通常为 `/var/log/mcp-server.log`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值