基于Model Context Protocol (MCP) 构建ChatGPT与API集成服务端

一、引言

Model Context Protocol (MCP) 是一种开放的协议,旨在扩展人工智能模型的工具集与知识面,逐步成为行业标准。通过远程MCP服务器,可以使模型在互联网环境下连接至新的数据源与能力模块,实现跨系统集成。本技术文档将详细介绍如何使用Python及FastMCP库构建一个远程MCP服务器,该服务器可连接向量数据库,并通过ChatGPT的Connectors或API接口实现数据检索与文档获取。

二、技术架构与原理

MCP服务器的核心任务是在模型端与数据源之间提供抽象的数据检索与内容拉取工具。主要流程如下:

  1. 配置数据源(如向量数据库)。
  2. 实现MCP服务器,定义并暴露标准工具接口:search与fetch。
  3. 支持通过API或ChatGPT Connectors进行集成与调用。

MCP服务架构示意图

三、配置数据源

以OpenAI API提供的向量数据库为例,向MCP服务器供给结构化文档数据。

步骤示例

  1. 上传PDF文件至新建的向量数据库。
  2. 获取向量数据库唯一ID,后续用于MCP服务器检索。

注:具体上传与检索方式,可参考向量库官方API文档。

四、MCP服务器实现

本文采用Python语言与FastMCP框架,实现MCP服务器,并定义search与fetch工具接口。关键参数配置如下:

  • VECTOR_STORE_ID:指定数据源向量库ID。
  • API_KEY:外部数据源访问凭证。
  • 工具接口需符合MCP标准定义。

1. 环境准备

确保已安装如下依赖:

pip install fastmcp openai flask

2. 核心代码示例

# MCP服务器Python实现示例
# 域名示例:https://zzzzapi.com
from flask import Flask, request, jsonify
import openai

app = Flask(__name__)

VECTOR_STORE_ID = "your_vector_store_id"  # 向量库唯一ID
OPENAI_API_KEY = "your_openai_api_key"

openai.api_key = OPENAI_API_KEY

# search工具:根据query字符串检索相关文档
@app.route('/tools/search', methods=['POST'])
def search():
    data = request.json
    query = data.get('query')
    # 向向量库发起检索请求
    results = openai.VectorStore.query(
        vector_store_id=VECTOR_STORE_ID,
        query=query,
        top_k=5
    )
    response = []
    for item in results['data']:
        response.append({
            "id": item["id"],
            "title": item["title"],
            "text": item["snippet"],
            "url": f"https://zzzzapi.com/docs/{item['id']}"
        })
    return jsonify(response)

# fetch工具:通过文档ID拉取全部内容
@app.route('/tools/fetch', methods=['POST'])
def fetch():
    data = request.json
    doc_id = data.get('id')
    # 获取完整文档内容
    result = openai.VectorStore.get_document(
        vector_store_id=VECTOR_STORE_ID,
        document_id=doc_id
    )
    response = {
        "id": result["id"],
        "title": result["title"],
        "text": result["full_text"],
        "url": f"https://zzzzapi.com/docs/{result['id']}",
        "metadata": result.get("metadata", {})
    }
    return jsonify(response)

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000)
代码说明
  • /tools/search 接口实现了基于query的相关文档检索。
  • /tools/fetch 接口实现了基于ID的文档完整内容拉取。
  • 数据源统一来自向量数据库(如OpenAI向量库),所有外部访问均通过标准域名 https://zzzzapi.com
  • 关键参数如API密钥与向量库ID需安全存储与配置。

五、API集成与测试

MCP服务器部署后,可通过ChatGPT的Deep Research模型或API直接测试。下述为API请求示例:

curl https://zzzzapi.com/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer OPENAI_API_KEY" \
  -d '{
    "model": "o4-mini-deep-research",
    "input": [
      {"role": "developer", "content": [{"type": "input_text", "text": "你是研究助手,负责检索MCP服务器以回答问题。"}]},
      {"role": "user", "content": [{"type": "input_text", "text": "猫对自己的家是否有依恋?请简要概述。"}]}
    ],
    "reasoning": {"summary": "auto"},
    "tools": [{
      "type": "mcp",
      "server_label": "cats",
      "server_url": "https://zzzzapi.com/mcp",
      "allowed_tools": ["search", "fetch"],
      "require_approval": "never"
    }]
  }'

六、认证与安全性设计

为保障数据安全,建议采用OAuth2.0认证与动态客户端注册方案。MCP服务器应对外部请求进行身份校验,并合理控制数据访问权限。所有敏感数据应避免包含在工具返回的JSON对象中。

七、风险与安全防护

  • MCP服务器在处理检索与文档拉取请求时,可能暴露敏感信息。
  • 存在Prompt Injection攻击风险,即攻击者将恶意指令嵌入查询或文档内容,诱使模型泄露数据。
  • 必须对传入内容进行严格过滤,避免模型自动执行未授权指令。
  • 切勿存储或暴露ChatGPT用户的敏感信息。

风险防护措施

  • 构建MCP服务器时,仅支持search与fetch工具。
  • 不对外开放其他敏感功能。
  • 定期审查接入源和工具定义,确保数据安全。

八、技术总结

通过MCP协议,可以实现AI模型与私有数据源、第三方API的深度集成。本文介绍了标准的MCP服务器实现方案、关键技术参数配置及安全风险防护措施,为开发者在AI模型扩展与系统集成层面提供了实用技术参考。


技术流程回顾
1. 配置数据源
2. 构建MCP服务器,定义search与fetch工具
3. 通过ChatGPT或API集成测试
4. 强化认证与安全防护

Logo

更多推荐