Dify 集成自定义 MCP 插件实战
摘要:Dify平台新增对MCP协议的原生支持,开发者可通过该协议扩展大语言模型能力,实现调用外部服务或自定义函数。本文详细介绍了如何从零开发MCP插件:使用fastmcp库创建包含问候和加法功能的MCP服务,测试服务连通性,最终在Dify工作流中集成调用。通过图文展示了在Dify平台添加MCP服务、配置工作流节点的完整流程,验证了模型成功调用MCP工具并返回计算结果。该方案为开发者提供了标准化接口
随着 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。
from mcp.server.fastmcp import FastMCP
# create an MCP server
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()
def say_hello(name: str) -> str:
"""Say hello to someone
Args:
name: The person's name to greet
"""
return f"Hello, {name}! Nice to meet you!"
@mcp.tool()
def add(a: int, b: int) -> int:
"""Add two numbers together
Args:
a: The first number
b: The second number
"""
return a + b
if __name__ == "__main__":
# Run with SSE transport on port 8080
mcp.run(transport="streamable-http")
启动后,MCP 服务将在 8080 端口监听请求。
此时,我们的自定义工具就可以被任何 MCP 客户端(包括 Dify)调用。
三、测试 MCP 服务是否正常运行
在接入 Dify 前,我们可以使用官方 mcp SDK 编写一个客户端进行测试:
import asyncio
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async def main():
# Connect to the server using Streamable HTTP
async with streamablehttp_client("http://<your_ip>:<port>/mcp") as (read_stream, write_stream, get_session_id):
async with ClientSession(read_stream, write_stream) as session:
# Initialize the connection
await session.initialize()
# List available tools
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
result = await session.call_tool("add", arguments={"a": 1, "b": 2})
print(f"1 + 2 = {result.content[0].text}")
if __name__ == "__main__":
asyncio.run(main())
运行结果示例:
Available tools:
- say_hello: Say hello to someone
Args:
name: The person's name to greet
- add: Add two numbers together
Args:
a: The first number
b: The second number
1 + 2 = 3
说明 MCP 服务已成功启动并能正确响应调用。
四、在 Dify 平台中集成 MCP 服务
1️⃣ 添加 MCP 服务
进入 Dify 管理后台 → 工具(MCP) → 选择 添加 MCP 服务
填写相关信息(注意:确保 Dify 能访问该 IP 和端口),填写完成后保存,Dify 会自动尝试连接 MCP 服务并列出可用工具。


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

最终执行时,模型可以动态调用 MCP 服务,实现如下交互:

- 模型节点根据用户请求分析需要调用的工具;
- Dify 调用 MCP 服务器执行具体逻辑;
- 返回结果回传给模型或下游节点。
五、运行效果展示
在 Dify 工作流中触发节点执行后,我们可以看到控制台输出或日志信息如下:


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



所有评论(0)