开启左侧

Dify 集成自定义 MCP 插件实战

[复制链接]
作者:青衫客36
随着 Dify 平台 引入对 MCP(Model Context Protocol)插件 的原生支持,开发者可以轻松扩展系统能力,使大语言模型能够直接调用外部服务或自定义函数。本文将带大家从零开始实现一个自定义 MCP 插件、测试连接,并最终在 Dify 工作流(Workflow)中调用它。

一、背景介绍:什么是 MCP?

MCP(Model Context Protocol) 是由 Anthropic 提出的开放协议,用于让模型安全、高效地调用外部能力(tools/resources)。通过 MCP,我们可以:
    让 LLM 调用自定义 Python 函数或 HTTP API使用标准化接口注册工具实现安全的工具访问与调用上下文隔离与多种 LLM 平台(如 Dify、Claude、LangGraph 等)兼容
在 Dify 的最新版本中,已支持通过 MCP 协议集成外部工具服务,这意味着我们可以直接让工作流节点调用本地或远程 MCP 服务,实现高度可扩展的自动化。

二、开发自定义 MCP 插件

我们使用官方的 fastmcp 库来快速创建一个 MCP Server。以下示例定义了两个简单工具:一个是问候函数 say_hello,另一个是加法计算器 add。
  1. from mcp.server.fastmcp import FastMCP
  2. # create an MCP server
  3. mcp = FastMCP("MyServer", host="0.0.0.0", port=8080, stateless_http=True)# mcp = FastMCP("MyServer", host="127.0.0.1", port=8080)# simple tool@mcp.tool()defsay_hello(name:str)->str:"""Say hello to someone
  4.     Args:
  5.         name: The person's name to greet
  6.     """returnf"Hello, {name}! Nice to meet you!"@mcp.tool()defadd(a:int, b:int)->int:"""Add two numbers together
  7.     Args:
  8.         a: The first number
  9.         b: The second number
  10.     """return a + b
  11. if __name__ =="__main__":# Run with SSE transport on port 8080
  12.     mcp.run(transport="streamable-http")
复制代码
启动后,MCP 服务将在 8080 端口监听请求。
此时,我们的自定义工具就可以被任何 MCP 客户端(包括 Dify)调用。

三、测试 MCP 服务是否正常运行

在接入 Dify 前,我们可以使用官方 mcp SDK 编写一个客户端进行测试:
  1. import asyncio
  2. from mcp import ClientSession
  3. from mcp.client.streamable_http import streamablehttp_client
  4. asyncdefmain():# Connect to the server using Streamable HTTPasyncwith streamablehttp_client("http://<your_ip>:<port>/mcp")as(read_stream, write_stream, get_session_id):asyncwith ClientSession(read_stream, write_stream)as session:# Initialize the connectionawait session.initialize()# List available tools
  5.             tools_result =await session.list_tools()print("Available tools:")for tool in tools_result.tools:print(f"- {tool.name}: {tool.description}")# Call our calculator tool
  6.             result =await session.call_tool("add", arguments={"a":1,"b":2})print(f"1 + 2 = {result.content[0].text}")if __name__ =="__main__":
  7.     asyncio.run(main())
复制代码
运行结果示例:
  1. Available tools:
  2. - say_hello: Say hello to someone
  3.     Args:
  4.         name: The person's name to greet
  5.    
  6. - add: Add two numbers together
  7.     Args:
  8.         a: The first number
  9.         b: The second number
  10.    
  11. 1 + 2 = 3
复制代码
说明 MCP 服务已成功启动并能正确响应调用。

四、在 Dify 平台中集成 MCP 服务

1️⃣ 添加 MCP 服务

进入 Dify 管理后台 → 工具(MCP) → 选择 添加 MCP 服务
填写相关信息(注意:确保 Dify 能访问该 IP 和端口),填写完成后保存,Dify 会自动尝试连接 MCP 服务并列出可用工具。
Dify 集成自定义 MCP 插件实战-1.png

Dify 集成自定义 MCP 插件实战-2.png



2️⃣ 在 Workflow 中使用 MCP 工具

进入 工作流编辑器(Workflow)
    添加一个 MCP 工具在节点配置中选择刚才导入的 “my-mcp”选择工具 add 或 say_hello配置参数映射(例如从前一节点输入中读取 a, b, name)
我们可以在工作流中与模型节点、判断节点、变量节点自由组合,实现完整的智能自动化流程。如下图所示:
Dify 集成自定义 MCP 插件实战-3.png


最终执行时,模型可以动态调用 MCP 服务,实现如下交互:
Dify 集成自定义 MCP 插件实战-4.png


    模型节点根据用户请求分析需要调用的工具;Dify 调用 MCP 服务器执行具体逻辑;返回结果回传给模型或下游节点。

五、运行效果展示

在 Dify 工作流中触发节点执行后,我们可以看到控制台输出或日志信息如下:
Dify 集成自定义 MCP 插件实战-5.png

Dify 集成自定义 MCP 插件实战-6.png

同时,Dify 工作流日志面板也会显示节点调用成功,数据被正确传递。

六、总结

通过本文的示例,相信大家已经掌握了:
    ✅ 如何编写一个 FastMCP 自定义服务✅ 如何通过 Python 客户端测试工具调用✅ 如何在 Dify 平台中导入 MCP 插件✅ 如何在 工作流中图形化调用外部工具
今后,读者朋友们可以轻松封装更多实际业务逻辑(如数据库查询、API调用、模型推理、设备控制等)为 MCP 工具,让 Dify 的智能体具备真正的“执行力”。

原文地址:https://blog.csdn.net/weixin_43844521/article/details/153978781
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题
阅读排行更多+

Powered by Discuz! X3.4© 2001-2013 Discuz Team.( 京ICP备17022993号-3 )