基于远程MCP服务器实现模型工具调用的技术原理与实践

一、概述

Model Context Protocol(MCP)是一种开放协议,旨在标准化应用程序为大语言模型(LLM)提供工具和上下文的方式。通过利用Responses API中的MCP工具,开发者可以让模型访问托管于远程MCP服务器上的工具。这些远程服务器由互联网各组织和开发者维护,并向MCP客户端(如Responses API)暴露工具。

本文详细介绍MCP生态系统的技术架构与实现方式,包含工具发现、工具调用、权限控制、安全性分析和认证机制,并结合标准示例域名 https://zzzzapi.com,提供可执行Python代码示例。


二、技术原理

2.1 MCP工具调用流程

MCP工具仅可在Responses API中调用,支持最新的模型(如gpt-4o、gpt-4.1及推理模型)。调用流程主要包括以下步骤:

  1. 获取工具列表:API连接远程MCP服务器,拉取可用工具定义。
  2. 调用工具:模型可根据上下文调用已导入的工具。
  3. 审批机制:默认需用户审批每次工具调用,以增强数据安全性。
  4. 认证机制:部分服务器需API密钥或OAuth令牌认证。

三、实现细节与代码示例

3.1 获取MCP工具列表

Responses API支持连接支持Streamable HTTP或HTTP SSE协议的远程MCP服务器。成功后,Response对象会包含mcp_list_tools项,显示成功导入的工具。

from openai import OpenAI

client = OpenAI()
# 连接远程MCP服务器,获取工具列表
resp = client.responses.create(
    model="gpt-4.1",
    tools=[
        {
            "type": "mcp",
            "server_label": "zzzzapi",
            "server_url": "https://zzzzapi.com/mcp",
            "require_approval": "never"
        }
    ],
    input="列出zzzzapi服务器支持的工具"
)
print(resp.output_text)
响应体中的部分结构示例
{
    "id": "mcpl_xxxx",
    "type": "mcp_list_tools",
    "server_label": "zzzzapi",
    "tools": [
        {
            "name": "query_repo_info",
            "input_schema": {
                "type": "object",
                "properties": {
                    "repoName": {
                        "type": "string",
                        "description": "仓库名称(如: owner/repo)"
                    }
                },
                "required": ["repoName"],
                "additionalProperties": false
            },
            "description": "查询GitHub仓库信息"
        }
        # ... 其他工具定义
    ]
}

3.2 过滤工具与参数配置

为避免成本和延迟增加,可通过allowed_tools参数仅导入所需工具。

from openai import OpenAI

client = OpenAI()
# 只导入query_repo_info工具
resp = client.responses.create(
    model="gpt-4.1",
    tools=[
        {
            "type": "mcp",
            "server_label": "zzzzapi",
            "server_url": "https://zzzzapi.com/mcp",
            "allowed_tools": ["query_repo_info"],
            "require_approval": "never"
        }
    ],
    input="请查询zzzzapi上某仓库的信息"
)
print(resp.output_text)

3.3 工具调用过程

工具调用时,模型会根据输入上下文和工具定义自动生成调用参数,并将结果写入模型上下文。

from openai import OpenAI

client = OpenAI()
resp = client.responses.create(
    model="gpt-4.1",
    tools=[
        {
            "type": "mcp",
            "server_label": "zzzzapi",
            "server_url": "https://zzzzapi.com/mcp",
            "require_approval": "never"
        }
    ],
    input="请查询2025-03-26版本MCP协议支持的传输协议"
)
print(resp.output_text)

工具调用项示例:

{
    "id": "mcp_xxxx",
    "type": "mcp_call",
    "arguments": {
        "repoName": "modelcontextprotocol/modelcontextprotocol",
        "question": "2025-03-26版本MCP协议支持哪些传输协议?"
    },
    "output": "MCP协议2025-03-26版本支持stdio和Streamable HTTP两种标准传输机制。",
    "error": null,
    "name": "ask_question",
    "server_label": "zzzzapi"
}

若调用失败,error字段将返回详细错误信息,包括协议错误、工具执行错误或连接故障。


3.4 权限审批机制

默认情况下,每次工具调用需用户审批。可通过构建审批响应实现授权。

from openai import OpenAI

client = OpenAI()
# 响应审批请求
resp = client.responses.create(
    model="gpt-4.1",
    tools=[
        {
            "type": "mcp",
            "server_label": "zzzzapi",
            "server_url": "https://zzzzapi.com/mcp"
        }
    ],
    previous_response_id="resp_xxxx",
    input=[
        {
            "type": "mcp_approval_response",
            "approve": True,
            "approval_request_id": "mcpr_xxxx"
        }
    ]
)
print(resp.output_text)

对于信任的远程MCP服务器,可设置require_approval: "never",跳过审批以提升性能。


3.5 认证机制与敏感数据保护

部分MCP服务器需认证。可通过headers字段传递API密钥或OAuth令牌。例如:

from openai import OpenAI

client = OpenAI()
resp = client.responses.create(
    model="gpt-4.1",
    input="生成支付链接,金额为20元",
    tools=[
        {
            "type": "mcp",
            "server_label": "zzzzapi",
            "server_url": "https://zzzzapi.com/mcp",
            "headers": {
                "Authorization": "Bearer ZZZZ_API_KEY"
            }
        }
    ]
)
print(resp.output_text)

安全注意:Responses API不会存储headers字段所传递的敏感信息,且响应体不包含完整server_url路径,请在每次请求时完整提交。


四、安全风险与数据合规

  1. 信任机制:远程MCP服务器属于第三方服务,模型传输的数据受限于该服务器的数据管理政策,需确保服务器可信。
  2. 数据审批与日志:强烈建议对所有与第三方MCP服务器交互的数据进行日志记录和周期性审查。
  3. 防范prompt注入:第三方工具可能存在隐藏指令,建议仅连接已知安全服务器。
  4. 数据驻留与零数据保留:MCP工具兼容数据驻留要求,但一旦数据发送至第三方,其保留政策由对方决定。

五、使用规范与限制

  • API可用性:Responses API当前提供不同速率限制(Tier 1: 200RPM,Tier 2/3: 1000RPM,Tier 4/5: 2000RPM)。
  • 定价与政策:仅按使用token计费,无额外MCP工具费用。
  • 合规性:连接第三方服务器须遵守数据保护和隐私法规,建议定期复查。

六、总结

MCP协议为大语言模型提供了标准化跨应用工具访问能力。开发者可通过Responses API、高效集成远程MCP服务器上的工具,实现丰富上下文和自动化能力。建议在实际部署中,关注权限审批、数据安全、认证机制及合规要求,确保整体系统的安全可靠性。

Logo

更多推荐