使用说明
通过mcp公开api
如何设置MCP-消息上下文协议服务器并公开API 这 模型上下文协议(MCP) 是一个开放标准,旨在以标准化、安全和灵活的方式将人工智能助手连接到各种数据源和工具。它使AI模型能够动态发现、检查和调用工具(包括API、数据库查询或文件系统交互),而不需要为每个数据源进行自定义集成。下面,我将解释通过MCP回收和公开API的举措,提供一个示例,并根据可用信息概述自己测试的步骤。
通过MCP回收和公开API的举措
MCP通过提供一个统一的层来抽象和标准化对现有API的访问,使它们更容易被AI系统访问,从而促进API的回收和公开。主要举措和好处包括:
-
标准化AI集成:
- MCP允许开发人员将API作为MCP工具公开,使AI代理能够与它们交互,而无需定制集成。这降低了将AI模型连接到GitHub、Notion或Slack等不同数据源的复杂性。
- 示例:Block和Apollo等公司已经集成了MCP,将内部系统连接到AI工具,而Zed和Replit等开发平台则使用MCP来增强AI驱动的编码任务。
-
重用现有API:
- MCP不会取代REST或GraphQL API,而是将其包装为MCP工具,允许在AI工作流中重用。这保留了现有的基础设施,同时使API AI可访问。
- 示例:FastAPI端点可以以最小的配置作为MCP工具公开,使AI代理能够无缝调用它。
-
开源生态系统:
- MCP是一个开源项目,鼓励社区为各种服务(如Google Drive、GitHub、Postgres)构建和共享MCP服务器。
- 示例:Notion开源了其MCP服务器实现,允许开发人员在几分钟内将Notion与AI应用程序集成。
-
增强的安全性和访问控制:
- MCP的第二次修订引入了基本的身份验证支持,尽管零信任环境仍然需要OAuth 2.1和OIDC集成等企业级功能。该倡议旨在使API在暴露于AI系统时安全且合规。
-
可扩展性和灵活性:
- 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和命令行工具。
第一步:设置您的环境
- 创建项目目录:
mkdir pr_reviewer cd pr_reviewer - 设置虚拟环境:
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate - 再进行:
- 创建一个
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
- 创建一个
- 设置环境变量:
- 创建一个
.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服务器
- 创建
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
- 创建
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服务器
- 启动MCP服务器:
python pr_analyzer.py- 服务器将在本地运行,公开工具(
fetch_pr和save_to_notion)像Claude Desktop这样的MCP客户端。
- 服务器将在本地运行,公开工具(
步骤4:使用Claude Desktop进行测试
- 将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
- 验证输出:
- 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)提供上下文。以下是一些关键举措:
-
标准化集成:
- MCP使AI代理能够将API作为工具进行发现、检查和调用,而无需进行自定义集成,从而使现有API在AI工作流中可重用。
- 示例:Block和Apollo等公司集成了MCP,将内部API连接到AI工具,增强了自动化。
-
API摘要:
- MCP将传统API(如REST、GraphQL)封装到MCP工具中,允许AI系统与它们无缝交互。
- 示例:将FastAPI端点公开为用于AI访问的MCP工具。
-
开源开发:
- MCP的开源性质鼓励社区驱动的API公开,为GitHub和Notion等服务预先构建服务器。
-
增强的安全性:
- 最近的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:设置环境
- 创建目录:
mkdir pr_reviewer && cd pr_reviewer - 设置虚拟环境:
python -m venv venv && source venv/bin/activate - 创建
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 - 创建
.env文件:GITHUB_TOKEN=your_github_token NOTION_API_KEY=your_notion_api_key NOTION_PAGE_ID=your_notion_page_id
步骤2:创建MCP服务器代码
- 创建
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 - 创建
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进行测试
- 打开Claude Desktop并连接到本地MCP服务器(有关连接详细信息,请查看Claude的文档)。
- 运行以下命令:
/fetch_pr repo=owner/repo pr_number=123 - 使用以下方法验证PR详细信息是否已返回并保存到Notion:
/save_to_notion - 检查Notion以获取保存的数据。
步骤5:调试和探索
- 检查服务器日志是否有错误。
- 确保API密钥有效。
- 在GitHub上探索其他MCP服务器(例如。,
punkpeye/awesome-mcp-servers).
局限性
- 认证:MCP的身份验证是基本的;为生产实施强大的安全性。
- 不完全信息:一些MCP设置细节(例如,Claude Desktop连接细节)可能需要查阅官方文档。
如需进一步学习,请查看Anthropic的MCP文档或DataCamp上的课程。