随着 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)

  1. 添加一个 MCP 工具
  2. 在节点配置中选择刚才导入的 “my-mcp”
  3. 选择工具 addsay_hello
  4. 配置参数映射(例如从前一节点输入中读取 a, b, name

我们可以在工作流中与模型节点、判断节点、变量节点自由组合,实现完整的智能自动化流程。如下图所示:

在这里插入图片描述

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

在这里插入图片描述

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

五、运行效果展示

在 Dify 工作流中触发节点执行后,我们可以看到控制台输出或日志信息如下:

在这里插入图片描述
在这里插入图片描述
同时,Dify 工作流日志面板也会显示节点调用成功,数据被正确传递。


六、总结

通过本文的示例,相信大家已经掌握了:

  • ✅ 如何编写一个 FastMCP 自定义服务
  • ✅ 如何通过 Python 客户端测试工具调用
  • ✅ 如何在 Dify 平台中导入 MCP 插件
  • ✅ 如何在 工作流中图形化调用外部工具

今后,读者朋友们可以轻松封装更多实际业务逻辑(如数据库查询、API调用、模型推理、设备控制等)为 MCP 工具,让 Dify 的智能体具备真正的“执行力”。

Logo

更多推荐