构建端到端 MCP 应用程序

构建端到端 MCP 应用程序

从零开始构建一个完整的(MCP)应用程序,使用 Gradio 创建一个服务器,并将其与多个客户端连接。

先决条件

  • 对(MCP)概念有基本了解
  • 熟悉 Python 和 JavaScript/TypeScript 编程语言
  • 对 API 和客户端-服务器架构有基本了解
  • 具备以下开发环境:
    • Python 3.10 或更高版本
    • Node.js 18 或更高版本
    • Hugging Face 账户(用于部署)

端到端项目

将构建一个情感分析应用程序,该应用程序主要由三个部分组成:服务器、客户端和部署。

Host
Client
Server
a tool
python

服务器端

  • 使用 Gradio 通过 gr.Interface 创建一个网页界面和(MCP)服务器
  • 利用 TextBlob 实现情感分析工具
  • 通过 HTTP 和 MCP 协议两种方式暴露该工具

客户端

  • 创建一个 smolagents Python 客户端
  • 演示如何使用客户端实现与服务器进行交互

部署

  • 配置客户端以与已部署的服务器协同工作

构建 Gradio 模型上下文协议(MCP)服务器

使用 Gradio 创建情感分析 MCP 服务。该服务将暴露一个情感分析工具,用户可通过网页界面使用,而人工智能模型则可通过模型上下文协议(MCP)协议使用。

Gradio MCP 集成简介

Gradio 提供了一种简单直接的方法来创建 MCP 服务器,它会自动将你的 Python 函数转换为 MCP 工具。当你在 launch() 方法中设置 mcp_server=True 时,Gradio 会:

  • 自动将你的函数转换为 MCP 工具
  • 将输入组件映射到工具参数架构
  • 根据输出组件确定响应格式
  • 为客户端-服务器通信设置基于 HTTP+SSE 的 JSON-RPC
  • 同时创建一个网页界面和一个 MCP 服务器端点
项目设置

为项目创建一个新目录,并设置所需的依赖项:

mkdir mcp-sentiment
cd mcp-sentiment
conda activate mcp
pip install "gradio[mcp]" textblob
创建服务
#filename app.py
import gradio as gr
from textblob import TextBlob

def sentiment_analysis(text: str) -> dict:
    """
    Analyze the sentiment of the given text.

    Args:
        text (str): The text to analyze

    Returns:
        dict: A dictionary containing polarity, subjectivity, and assessment
    """
    blob = TextBlob(text)
    sentiment = blob.sentiment
    
    return {
        "polarity": round(sentiment.polarity, 2),  # -1 (negative) to 1 (positive)
        "subjectivity": round(sentiment.subjectivity, 2),  # 0 (objective) to 1 (subjective)
        "assessment": "positive" if sentiment.polarity > 0 else "negative" if sentiment.polarity < 0 else "neutral"
    }

# Create the Gradio interface
demo = gr.Interface(
    fn=sentiment_analysis,
    inputs=gr.Textbox(placeholder="Enter text to analyze..."),
    outputs=gr.JSON(),
    title="Text Sentiment Analysis",
    description="Analyze the sentiment of text using TextBlob"
)

# Launch the interface and MCP server
if __name__ == "__main__":
    demo.launch(mcp_server=True,server_name="0.0.0.0", server_port=7860)
代码解释:

函数定义:

  • sentiment_analysis 函数接收一个文本输入并返回一个字典
  • 它使用 TextBlob 来分析情感
  • 文档(docstring)至关重要,因为它帮助 Gradio 生成 MCP 工具
  • 类型提示(strdict)有助于定义输入/输出

Gradio 接口:

  • gr.Interface 同时创建网页用户界面(UI)和 MCP 服务
  • 该函数会自动暴露为一个 MCP 工具
  • 输入和输出组件定义了该工具的架构
  • JSON 输出组件确保了正确的序列化

MCP 服务器:

  • 设置 mcp_server=True 启用 MCP 服务
  • 服务将在 http://localhost:7860/gradio_api/mcp/sse
  • 也可以通过环境变量来启用它export GRADIO_MCP_SERVER=True

启动服务:

python app.py
测试服务

可以通过以下两种方式测试服务:

网页界面:

  • 在浏览器中打开 http://localhost:7860
  • 输入一些文本并点击“提交”后看到情感分析的结果

MCP Schema:

  • 访问 http://localhost:7860/gradio_api/mcp/schema
  • 这一页面会显示客户端将使用的 MCP 工具
故障排除提示

类型提示和文档字符串:

  • 始终为函数参数和返回值提供类型提示
  • 为每个参数包含一个带有“Args:”(参数)块的文档
  • 这有助于 Gradio 生成准确的 MCP 工具

字符串输入:

  • 当存在疑问时,将输入参数接受为字符串类型(str
  • 在函数内部将其转换为所需的类型
  • 这样可以提高与 MCP 客户端的兼容性

SSE (Server-Sent Events) 支持:

  • 某些 MCP 客户端不支持基于SSE的 MCP 服务器

  • 在这些情况下,可以使用 mcp-remote 作为替代方案:

  • {
      "mcpServers": {
        "gradio": {
          "command": "npx",
          "args": [
            "mcp-remote",
            "http://localhost:7860/gradio_api/mcp/sse"
          ]
        }
      }
    }
    

使用 MCP 客户端与应用程序

将 MCP(模型上下文协议)客户端与应用程序结合使用,可以增强应用程序的功能和灵活性。

配置 MCP 客户端

要有效地部署 MCP(模型上下文协议)服务器和客户端,需要进行适当的配置。由于 MCP 规范仍在不断发展,因此配置方法也可能随之变化。

MCP 配置文件:MCP 主机使用配置文件来管理服务器连接。这些文件定义了哪些服务器可用以及如何连接到它们。配置文件非常简单,并且在主要的 MCP 主机中保持一致。MCP 的标准配置文件名为 mcp.json,以下是其基本结构:

{
  "servers": [
    {
      "name": "MCP Server",
      "transport": {
        "type": "sse",
        "url": "http://localhost:7860/gradio_api/mcp/sse"
      }
    }
  ]
}

在这个示例中,配置了一个使用SSE传输方式的服务,连接到运行在端口 7860 上的本地 Gradio 服务器。通过 SSE 传输方式连接到 Gradio 应用,因为我们假设 Gradio 应用是运行在远程服务器上的。然而,如果你想连接到一个本地脚本,那么使用标准输入输出(stdio)传输方式而不是 SSE 传输方式会是一个更好的选择。

HTTP+SSE 传输方式的配置,对于使用 HTTP+SSE 传输方式的远程服务器,配置中需包含服务器 URL:

{
  "servers": [
    {
      "name": "Remote MCP Server",
      "transport": {
        "type": "sse",
        "url": "https://example.com/gradio_api/mcp/sse"
      }
    }
  ]
}

配置 UI MCP 客户端,创建一个名为 config.json 的新文件,并包含以下配置内容:

{
  "mcpServers": {
    "mcp": {
      "url": "http://localhost:7860/gradio_api/mcp/sse"
    }
  }
}

在 Cursor IDE 中配置 MCP 客户端

Cursor 内置了对 MCP(模型上下文协议)的支持,使你能够将已部署的 MCP 服务器直接连接到开发环境中。

配置步骤
  1. 在 Cursor IDE 中,你可以通过快捷键 Ctrl + Shift + J/Cmd + Shift + J)打开设置。

  2. 添加新的全局 MCP 服务器

    {
      "mcpServers": {
        "sentiment-analysis": {
          "command": "npx",     # macOs
          "args": [
            "-y", 
            "mcp-remote", 
            "https://YOURUSENAME-mcp-sentiment.hf.space/gradio_api/mcp/sse", 
            "--transport", 
            "sse-only"
          ]
        }
      }
    }
    
    {
      "mcpServers": {
        "sentiment-analysis": {
          "command": "cmd",   # winOs
          "args": [
            "/c", 
            "npx", 
            "-y", 
            "mcp-remote", 
            "https://YOURUSENAME-mcp-sentiment.hf.space/gradio_api/mcp/sse", 
            "--transport", 
            "sse-only"
          ]
        }
      }
    }
    

目前,大多数 MCP 客户端(包括 Cursor)仅支持通过 stdio(标准输入/输出)传输方式与本地服务器进行通信,并且尚未支持需要 OAuth 认证的远程服务器。mcp-remote 工具作为一种桥梁解决方案。

Gradio 作为 MCP 客户端

Gradio 最适合用于创建用户界面(UI)客户端和 MCP 服务器,但也可以将其用作 MCP 客户端,并将其作为 UI 暴露出来。

首先,要安装 smolagentsGradiomcp-client 这几个库:pip install "smolagents[mcp]" "gradio[mcp]" mcp fastmcp

下面这段代码演示了如何使用 Gradio 和 smolagents 库创建一个简单的聊天界面,用户可以与一个通过 MCP 协议连接到服务器的聊天代理进行交互,代理能够利用服务器提供的工具来回答问题。

  • MCPClient 用于连接到 MCP 服务器。这里通过一个字典参数指定服务器的 URL("http://localhost:7860/gradio_api/mcp/sse")。
  • mcp_client.get_tools() 从 MCP 服务器获取可用的工具,这些工具可以被代理用来处理请求。
  • TransformersModel 创建一个基于 Transformers 的模型实例,指定使用的模型为 "Qwen2.5-7B-Instruct"
  • CodeAgent 创建一个代理,该代理可以使用获取到的工具和指定的模型来处理请求。
  • gr.ChatInterface 创建一个聊天界面,fn 参数指定处理消息的函数。在这里,使用 lambda 函数将消息传递给代理,并返回代理的运行结果。
  • type="messages" 指定聊天界面以消息列表的形式展示。
  • examples 提供一些示例问题,用户可以直接点击这些示例进行提问。
  • titledescription 用于设置聊天界面的标题和描述。
  • finally 块确保在程序结束时断开与 MCP 服务器的连接,以释放资源。
import os
import gradio as gr

from mcp import StdioServerParameters
from smolagents import TransformersModel, CodeAgent, DuckDuckGoSearchTool, MCPClient


try:
    mcp_client = MCPClient(
        {"url": "http://localhost:7860/gradio_api/mcp/sse"} # This is the MCP Server we created in the previous section
    )
    tools = mcp_client.get_tools()

    model = TransformersModel(model_id="~/Qwen2.5-7B-Instruct")
    agent = CodeAgent(tools=[*tools]+[DuckDuckGoSearchTool], model=model)

    demo = gr.ChatInterface(
        fn=lambda message, history: str(agent.run(message)),
        type="messages",
        examples=["Prime factorization of 68"],
        title="Agent with MCP Tools",
        description="This is a simple agent that uses MCP tools to answer questions.",
    )

    demo.launch()
finally:
    mcp_client.disconnect()

使用 MCP 和 Hugging Face Hub 构建微型代理

接下来我们通过构建一个能够与我们的情感分析工具无缝交互的代理,来完成我们的端到端应用程序。从构建一个暴露情感分析工具的 Gradio MCP 服务器,到创建一个能够使用该工具以及其他功能的灵活代理。

安装构建“微型代理”所需的必要软件包:

npm install -g npx
npm i mcp-remote
pip install "huggingface_hub[mcp]>=0.32.0"
sudo npm install -g n
# 升级 node.js
n stable/latest

node.js要求GLIBC_2.28

微型代理(Tiny Agents)MCP 客户端

微型代理可以根据 JSON 配置文件从命令行创建 MCP 客户端。这是一种更灵活的方式配置和运行 MCP 客户端。通过 JSON 配置文件,可以指定 MCP 客户端的各种参数,例如服务器地址、认证信息、使用的工具等。这种方式使得微型代理可以轻松地与不同的 MCP 服务器进行交互,而无需编写大量的代码。

以下是一个简单的 JSON 配置文件示例,用于创建一个基本的微型代理 MCP 客户端:

{
	"model": "Qwen/Qwen2.5-72B-Instruct",
	"provider": "nebius",
	"servers": [
		{
			"type": "stdio",
			"config": {
				"command": "npx",
				"args": [
					"mcp-remote", 
					"http://localhost:7860/gradio_api/mcp/sse"
				]
			}
		}
	]
}

要使用这个配置文件从命令行启动微型代理 MCP 客户端,你可以运行类似以下的命令(具体命令可能因微型代理项目的实现而有所不同):

tiny-agents run agent.json

这里,tiny_agents 是启动微型代理的命令行工具,agent.json 指定了要使用的配置文件。

我们还可以使用在本地运行的开源模型与微型代理(Tiny Agents)进行交互。

{
	"model": "~/Qwen2.5-72B-Instruct-AWQ",
	"endpointUrl": "http://localhost:1234/v1",
	"servers": [
		{
			"type": "stdio",
			"config": {
				"command": "npx",
				"args": [
					"mcp-remote",
					"http://localhost:1234/v1/mcp/sse"
				]
			}
		}
	]
}
自定义微型代理(Tiny Agents)MCP 客户端

MCP 的美妙之处在于,它为代理提供了一种标准化的方式,使其能够与任何兼容 MCP 的服务器进行交互,包括之前构建的基于 Gradio 的情感分析服务器,只需将其添加到服务器列表中即可。

import os

from huggingface_hub import Agent

agent = Agent(
    model="Qwen/Qwen2.5-72B-Instruct",
    provider="nebius",
    servers=[
        {
            "command": "npx",
            "args": [
                "mcp-remote",
                "http://localhost:7860/gradio_api/mcp/sse"  # Your Gradio MCP server
            ]
        }
    ],
)

一个简单的聊天界面,通过 MCP(Model Context Protocol)协议与一个 MCP 服务器进行通信,提供情感分析和搜索两个工具:
在这里插入图片描述

标题SpringBoot构建的人工智能时代个人计算机安全防护科普系统研究AI更换标题第1章引言阐述研究背景、意义,分析国内外在个人计算机安全防护科普方面的现状,并介绍论文研究方法创新点。1.1研究背景与意义说明人工智能时代个人计算机安全防护的重要性。1.2国内外研究现状概述国内外在个人计算机安全防护科普系统的研究进展。1.3研究方法与创新点介绍本文采用的研究方法以及创新之处。第2章相关理论概述SpringBoot框架、人工智能技术及计算机安全防护的理论基础。2.1SpringBoot框架简介介绍SpringBoot框架的特点及其在科普系统中的应用。2.2人工智能技术概述阐述人工智能技术的基本原理及其在安全防护中的应用。2.3计算机安全防护理论分析个人计算机安全防护的基本原理方法。第3章科普系统设计详细介绍基于SpringBoot的人工智能时代个人计算机安全防护科普系统的设计思路实现过程。3.1系统架构设计阐述科普系统的整体架构设计及各模块功能。3.2科普内容策划与设计分析科普内容的选择、编排设计原则。3.3交互功能设计介绍科普系统的交互功能,提升用户体验。第4章系统实现与测试详述科普系统的实现过程,包括前端开发、后端实现系统测试等环节。4.1前端开发实现介绍前端界面的设计、开发实现过程。4.2后端功能实现详述后端功能的实现,包括数据处理、安全防护策略等。4.3系统测试与优化阐述系统测试的方法、过程结果,以及针对测试结果的优化措施。第5章应用效果评估通过实际应用案例,评估科普系统在提升个人计算机安全防护意识方面的效果。5.1应用案例选取选择具有代表性的应用案例进行分析。5.2效果评估方法介绍评估科普系统效果的方法指标。5.3评估结果分析对评估结果进行详细分析,验证科普系统的有效性。第6章结论与展望总结研究成果,指出研究的不足之处,并展望未来的研究方向。6.1研
### Spring与阿里云MCP在AI应用程序中的集成 Spring框架及其生态系统提供了丰富的工具集来构建分布式微服务架构,而阿里云MCP(Microservice Control Plane)则专注于为企业提供全面的服务治理能力。两者结合可以显著提升AI应用开发效率服务质量。 #### 使用Spring Boot简化AI应用开发 通过Spring Boot自动配置特性,开发者能够快速搭建起基于Java的应用程序骨架结构[^1]。对于机器学习模型部署而言,这意味着更少的手动设置工作量以及更高的灵活性: ```java @SpringBootApplication public class AiApplication { public static void main(String[] args) { SpringApplication.run(AiApplication.class, args); } } ``` #### 利用Alibaba Cloud MCP实现高效服务管理 针对大规模生产环境下的复杂需求场景,借助于阿里云MCP所提供的流量控制、熔断降级等功能模块,可有效保障线上业务稳定运行的同时支持弹性伸缩机制[^2]。具体到AI领域,则体现在以下几个方面: - **灰度发布**:允许新版本逐步替换旧版API接口,在不影响现有用户体验的前提下完成迭代升级; - **限流策略**:防止突发请求洪峰冲击导致系统崩溃,特别适用于预测类高并发调用场合; - **链路追踪**:配合Jaeger/Zipkin等开源组件记录每一次跨服务交互过程,便于定位性能瓶颈并优化整体响应时间; #### 实现端到端的安全性可观测性 为了确保整个系统的安全性及透明度,建议采用如下措施加强防护力度: - 集成OAuth2.0认证授权协议保护敏感数据访问权限; - 开启日志审计功能跟踪异常行为模式变化趋势; - 结合Prometheus+Grafana监控平台实时展示各项指标状态图表。 综上所述,利用Spring生态体系搭配阿里云MCP不仅能满足现代企业对智能化转型过程中提出的多样化诉求,而且有助于打造更加健壮可靠的云端基础设施底座。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值