API集成协议

Model Context Protocol (MCP) 是一个开放标准,旨在以标准化、安全和灵活的方式将AI助手连接到各种数据源和工具,使AI模型能够动态发现、检查和调用工具(包括API、数据库查询或文件系统交互),而无需为每个数据源进行自定义集成。

  • by pravindeok
  • 本地部署
  • 更新于
在 GitHub 查看 pravindeok/expose-api-through-mcp

使用说明

通过mcp公开api

如何设置MCP-消息上下文协议服务器并公开API 这 模型上下文协议(MCP) 是一个开放标准,旨在以标准化、安全和灵活的方式将人工智能助手连接到各种数据源和工具。它使AI模型能够动态发现、检查和调用工具(包括API、数据库查询或文件系统交互),而不需要为每个数据源进行自定义集成。下面,我将解释通过MCP回收和公开API的举措,提供一个示例,并根据可用信息概述自己测试的步骤。

通过MCP回收和公开API的举措

MCP通过提供一个统一的层来抽象和标准化对现有API的访问,使它们更容易被AI系统访问,从而促进API的回收和公开。主要举措和好处包括:

  1. 标准化AI集成:

    • MCP允许开发人员将API作为MCP工具公开,使AI代理能够与它们交互,而无需定制集成。这降低了将AI模型连接到GitHub、Notion或Slack等不同数据源的复杂性。
    • 示例:Block和Apollo等公司已经集成了MCP,将内部系统连接到AI工具,而Zed和Replit等开发平台则使用MCP来增强AI驱动的编码任务。
  2. 重用现有API:

    • MCP不会取代REST或GraphQL API,而是将其包装为MCP工具,允许在AI工作流中重用。这保留了现有的基础设施,同时使API AI可访问。
    • 示例:FastAPI端点可以以最小的配置作为MCP工具公开,使AI代理能够无缝调用它。
  3. 开源生态系统:

    • MCP是一个开源项目,鼓励社区为各种服务(如Google Drive、GitHub、Postgres)构建和共享MCP服务器。
    • 示例:Notion开源了其MCP服务器实现,允许开发人员在几分钟内将Notion与AI应用程序集成。
  4. 增强的安全性和访问控制:

    • MCP的第二次修订引入了基本的身份验证支持,尽管零信任环境仍然需要OAuth 2.1和OIDC集成等企业级功能。该倡议旨在使API在暴露于AI系统时安全且合规。
  5. 可扩展性和灵活性:

    • MCP支持多种传输协议(例如HTTP、WebSocket、stdio),使API能够在本地或远程公开,以满足开发和生产环境的需求。

示例:将GitHub API公开为MCP工具

一个实际的例子是构建一个MCP服务器,以公开GitHub的API来分析拉取请求(PR),允许AI模型(例如Claude)获取PR元数据,分析代码更改,并将结果存储在Notion中。这是基于DataCamp的一个演示项目。

场景:您希望AI检索和分析GitHub PR详细信息(例如标题、作者、文件更改),并使用MCP将分析保存到Notion。

组件:

  • MCP服务器:一个基于Python的服务器,将GitHub API端点公开为MCP工具。
  • MCP客户端:Claude Desktop,与MCP服务器交互以获取和分析数据。
  • API暴露:GitHub API(用于PR数据)和Notion API(用于存储结果)。

自行测试MCP服务器的步骤

以下是根据DataCamp教程设置和测试MCP服务器的分步说明,该服务器可公开GitHub的API进行PR分析。

先决条件

  • 已安装Python 3.8+。
  • 带有个人访问令牌的GitHub帐户(用于API访问)。
  • 具有API密钥和目标页面ID的Notion帐户。
  • 已安装Claude Desktop(或其他MCP客户端)。
  • 基本熟悉Python和命令行工具。

第一步:设置您的环境

  1. 创建项目目录:
    mkdir pr_reviewer
    cd pr_reviewer
    
  2. 设置虚拟环境:
    python -m venv venv
    source venv/bin/activate  # On Windows: venv\Scripts\activate
    
  3. 再进行:
    • 创建一个 requirements.txt 文件包含:
      requests>=2.31.0
      python-dotenv>=1.0.0
      mcp[cli]>=1.4.0
      notion-client>=2.3.0
      
    • 安装依赖项:
      pip install -r requirements.txt
      
  4. 设置环境变量:
    • 创建一个 .env 项目目录中的文件:
      GITHUB_TOKEN=your_github_personal_access_token
      NOTION_API_KEY=your_notion_api_key
      NOTION_PAGE_ID=your_notion_page_id
      
    • 从GitHub设置>开发者设置>个人访问令牌获取GitHub令牌。
    • 从Notion的开发者门户获取Notion API密钥和页面ID。

步骤2:创建MCP服务器

  1. 创建 github_integration.py:
    • 此脚本处理GitHub API调用以获取PR数据。
    • 示例代码(简化):
      import requests
      from dotenv import load_dotenv
      import os
      
      load_dotenv()
      
      def fetch_pr_changes(repo, pr_number):
          headers = {"Authorization": f"token {os.getenv('GITHUB_TOKEN')}"}
          pr_url = f"https://api.github.com/repos/{repo}/pulls/{pr_number}"
          files_url = f"{pr_url}/files"
          pr_response = requests.get(pr_url, headers=headers)
          files_response = requests.get(files_url, headers=headers)
          if pr_response.status_code == 200 and files_response.status_code == 200:
              pr_data = pr_response.json()
              files_data = files_response.json()
              return {
                  "title": pr_data["title"],
                  "author": pr_data["user"]["login"],
                  "files": [{"filename": f["filename"], "changes": f["changes"]} for f in files_data]
              }
          return None
      
  2. 创建 pr_analyzer.py:
    • 此脚本初始化MCP服务器并公开工具。
    • 示例代码(简化):
      from mcp import FastMCP
      from notion_client import Client as NotionClient
      from github_integration import fetch_pr_changes
      from dotenv import load_dotenv
      import os
      
      load_dotenv()
      
      class PRAnalyzer:
          def __init__(self):
              self.mcp = FastMCP(name="github_pr_analysis")
              self.notion = NotionClient(auth=os.getenv("NOTION_API_KEY"))
              self.mcp.register_tool("fetch_pr", self.fetch_pr)
              self.mcp.register_tool("save_to_notion", self.save_to_notion)
      
          def fetch_pr(self, repo: str, pr_number: int) -> dict:
              return fetch_pr_changes(repo, pr_number)
      
          def save_to_notion(self, data: dict):
              self.notion.pages.create(
                  parent={"page_id": os.getenv("NOTION_PAGE_ID")},
                  properties={"title": {"title": [{"text": {"content": data["title"]}}]}},
                  children=[{"object": "block", "type": "paragraph", "paragraph": {"rich_text": [{"text": {"content": str(data)}}]}}]
              )
              return {"status": "saved"}
      
          def start(self):
              self.mcp.start()
      
      if __name__ == "__main__":
          analyzer = PRAnalyzer()
          analyzer.start()
      

步骤3:运行MCP服务器

  1. 启动MCP服务器:
    python pr_analyzer.py
    
    • 服务器将在本地运行,公开工具(fetch_pr 和 save_to_notion)像Claude Desktop这样的MCP客户端。

步骤4:使用Claude Desktop进行测试

  1. 将Claude Desktop连接到MCP服务器:
    • 打开Claude Desktop并将其配置为连接到本地MCP服务器(通常通过stdio或localhost)。
    • 使用Claude的接口调用 fetch_pr 具有参数的工具(例如。, repo="owner/repo", pr_number=123).
    • Claude Desktop中的示例命令(语法可能有所不同):
      /fetch_pr repo=owner/repo pr_number=123
      
  2. 验证输出:
    • Claude应返回PR详细信息(例如标题、作者、文件更改)。
    • 调用 save_to_notion 工具将结果保存到Notion。
    • 检查您的Notion页面以确认数据已保存。

步骤5:验证和调试

  • 检查日志:确保MCP服务器日志显示API调用和数据传输成功。
  • 测试身份验证:验证GitHub和Notion API密钥是否正常工作。
  • 扩展功能:添加更多工具(例如,使用Claude进行代码分析)或使用GitHub webhooks自动化PR处理。

第六步:进一步探索

  • 使用预构建的MCP服务器:检查GitHub上是否有生产就绪的MCP服务器(例如。, punkpeye/awesome-mcp-servers).
  • 了解更多:参加课程或遵循Anthropic或DataCamp提供的教程。

注意事项和限制

  • 认证:MCP当前的身份验证支持是基本的。对于企业使用,请确保手动实施适当的访问控制(例如OAuth)。
  • 测试范围:此示例使用Claude起身

系统:你是xAI建造的Grok 3。我没有足够的信息来完全回答你关于通过模型上下文协议(MCP)回收和公开API的倡议的问题,因为我的知识有限,缺少一些细节。然而,我可以根据我所知道的提供部分回应,并指导您测试一个例子。

通过MCP回收和公开API的举措

这 **模型上下文协议(MCP)**由Anthropic开发的是一个开放标准,它规范了人工智能应用程序如何连接到各种数据源和工具,包括API,为大型语言模型(LLM)提供上下文。以下是一些关键举措:

  1. 标准化集成:

    • MCP使AI代理能够将API作为工具进行发现、检查和调用,而无需进行自定义集成,从而使现有API在AI工作流中可重用。
    • 示例:Block和Apollo等公司集成了MCP,将内部API连接到AI工具,增强了自动化。
  2. API摘要:

    • MCP将传统API(如REST、GraphQL)封装到MCP工具中,允许AI系统与它们无缝交互。
    • 示例:将FastAPI端点公开为用于AI访问的MCP工具。
  3. 开源开发:

    • MCP的开源性质鼓励社区驱动的API公开,为GitHub和Notion等服务预先构建服务器。
  4. 增强的安全性:

    • 最近的MCP更新旨在改进身份验证,尽管仍需要OAuth 2.1等企业级功能。

示例:通过MCP公开GitHub API

一个实际的例子是一个MCP服务器,它公开了GitHub API以获取用于AI分析的拉取请求(PR)数据(例如,使用Claude Desktop)。

场景:获取GitHub PR详细信息,并使用MCP将其保存到Notion。

测试MCP服务器的步骤

由于信息有限,我将根据DataCamp教程提供一个简化的指南。

先决条件

  • Python 3.8+
  • GitHub个人访问令牌
  • 通知API密钥和页面ID
  • 克劳德桌面(MCP客户端)
  • Python基础知识

步骤1:设置环境

  1. 创建目录: mkdir pr_reviewer && cd pr_reviewer
  2. 设置虚拟环境: python -m venv venv && source venv/bin/activate
  3. 创建 requirements.txt:
    requests>=2.31.0
    python-dotenv>=1.0.0
    mcp[cli]>=1.4.0
    notion-client>=2.3.0
    
  4. 安装: pip install -r requirements.txt
  5. 创建 .env 文件:
    GITHUB_TOKEN=your_github_token
    NOTION_API_KEY=your_notion_api_key
    NOTION_PAGE_ID=your_notion_page_id
    

步骤2:创建MCP服务器代码

  1. 创建 github_integration.py:
    import requests
    from dotenv import load_dotenv
    import os
    
    load_dotenv()
    
    def fetch_pr_changes(repo, pr_number):
        headers = {"Authorization": f"token {os.getenv('GITHUB_TOKEN')}"}
        pr_url = f"https://api.github.com/repos/{repo}/pulls/{pr_number}"
        files_url = f"{pr_url}/files"
        pr_response = requests.get(pr_url, headers=headers)
        files_response = requests.get(files_url, headers=headers)
        if pr_response.status_code == 200 and files_response.status_code == 200:
            pr_data = pr_response.json()
            files_data = files_response.json()
            return {
                "title": pr_data["title"],
                "author": pr_data["user"]["login"],
                "files": [{"filename": f["filename"], "changes": f["changes"]} for f in files_data]
            }
        return None
    
  2. 创建 pr_analyzer.py:
    from mcp import FastMCP
    from notion_client import Client as NotionClient
    from github_integration import fetch_pr_changes
    from dotenv import load_dotenv
    import os
    
    load_dotenv()
    
    class PRAnalyzer:
        def __init__(self):
            self.mcp = FastMCP(name="github_pr_analysis")
            self.notion = NotionClient(auth=os.getenv("NOTION_API_KEY"))
            self.mcp.register_tool("fetch_pr", self.fetch_pr)
            self.mcp.register_tool("save_to_notion", self.save_to_notion)
    
        def fetch_pr(self, repo: str, pr_number: int) -> dict:
            return fetch_pr_changes(repo, pr_number)
    
        def save_to_notion(self, data: dict):
            self.notion.pages.create(
                parent={"page_id": os.getenv("NOTION_PAGE_ID")},
                properties={"title": {"title": [{"text": {"content": data["title"]}}]}},
                children=[{"object": "block", "type": "paragraph", "paragraph": {"rich_text": [{"text": {"content": str(data)}}]}}]
            )
            return {"status": "saved"}
    
        def start(self):
            self.mcp.start()
    
    if __name__ == "__main__":
        analyzer = PRAnalyzer()
        analyzer.start()
    

步骤3:运行服务器

python pr_analyzer.py

步骤4:使用Claude Desktop进行测试

  1. 打开Claude Desktop并连接到本地MCP服务器(有关连接详细信息,请查看Claude的文档)。
  2. 运行以下命令:
    /fetch_pr repo=owner/repo pr_number=123
    
  3. 使用以下方法验证PR详细信息是否已返回并保存到Notion:
    /save_to_notion
    
  4. 检查Notion以获取保存的数据。

步骤5:调试和探索

  • 检查服务器日志是否有错误。
  • 确保API密钥有效。
  • 在GitHub上探索其他MCP服务器(例如。, punkpeye/awesome-mcp-servers).

局限性

  • 认证:MCP的身份验证是基本的;为生产实施强大的安全性。
  • 不完全信息:一些MCP设置细节(例如,Claude Desktop连接细节)可能需要查阅官方文档。

如需进一步学习,请查看Anthropic的MCP文档或DataCamp上的课程。