通过mcp公开api
如何设置MCP-消息上下文协议服务器并公开API 这 模型上下文协议(MCP) 是一个开放标准,旨在以标准化、安全和灵活的方式将人工智能助手连接到各种数据源和工具。它使AI模型能够动态发现、检查和调用工具(包括API、数据库查询或文件系统交互),而不需要为每个数据源进行自定义集成。下面,我将解释通过MCP回收和公开API的举措,提供一个示例,并根据可用信息概述自己测试的步骤。
通过MCP回收和公开API的举措
MCP通过提供一个统一的层来抽象和标准化对现有API的访问,使它们更容易被AI系统访问,从而促进API的回收和公开。主要举措和好处包括:
- 标准化AI集成:
- MCP允许开发人员将API作为MCP工具公开,使AI代理能够与它们交互,而无需定制集成。这降低了将AI模型连接到GitHub、Notion或Slack等不同数据源的复杂性。[](https://www.anthropic.com/news/model-context-protocol)[](https://www.datacamp.com/tutorial/mcp-model-context-protocol) - 示例:Block和Apollo等公司已经集成了MCP,将内部系统连接到AI工具,而Zed和Replit等开发平台则使用MCP来增强AI驱动的编码任务。[](https://www.anthropic.com/news/model-context-protocol)
- 重用现有API:
- MCP不会取代REST或GraphQL API,而是将其包装为MCP工具,允许在AI工作流中重用。这保留了现有的基础设施,同时使API AI可访问。[](https://boomi.com/blog/model-context-protocol-how-to-use/) - 示例:FastAPI端点可以以最小的配置作为MCP工具公开,使AI代理能够无缝调用它。
- 开源生态系统:
- MCP是一个开源项目,鼓励社区为各种服务(如Google Drive、GitHub、Postgres)构建和共享MCP服务器。[](https://www.anthropic.com/news/model-context-protocol) - 示例:Notion开源了其MCP服务器实现,允许开发人员在几分钟内将Notion与AI应用程序集成。
- 增强的安全性和访问控制:
- MCP的第二次修订引入了基本的身份验证支持,尽管零信任环境仍然需要OAuth 2.1和OIDC集成等企业级功能。该倡议旨在使API在暴露于AI系统时安全且合规。[](https://boomi.com/blog/model-context-protocol-how-to-use/)
- 可扩展性和灵活性:
- MCP支持多种传输协议(例如HTTP、WebSocket、stdio),使API能够在本地或远程公开,以满足开发和生产环境的需求。[](https://boomi.com/blog/model-context-protocol-how-to-use/)[](https://www.datacamp.com/tutorial/mcp-model-context-protocol)
示例:将GitHub API公开为MCP工具
一个实际的例子是构建一个MCP服务器,以公开GitHub的API来分析拉取请求(PR),允许AI模型(例如Claude)获取PR元数据,分析代码更改,并将结果存储在Notion中。这是基于DataCamp的一个演示项目。[](https://www.datacamp.com/tutorial/mcp-model-context-protocol)
场景:您希望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分析。[](https://www.datacamp.com/tutorial/mcp-model-context-protocol)
先决条件
- 已安装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处理。[](https://www.datacamp.com/tutorial/mcp-model-context-protocol)
第六步:进一步探索
- 使用预构建的MCP服务器:检查GitHub上是否有生产就绪的MCP服务器(例如。,
punkpeye/awesome-mcp-servers). - 了解更多:参加课程或遵循Anthropic或DataCamp提供的教程。[](https://x.com/AndrewYNg/status/1922671569429766178)[](https://www.datacamp.com/tutorial/mcp-model-context-protocol)
注意事项和限制
- 认证:MCP当前的身份验证支持是基本的。对于企业使用,请确保手动实施适当的访问控制(例如OAuth)。[](https://boomi.com/blog/model-context-protocol-how-to-use/)
- 测试范围:此示例使用Claude起身
系统:你是xAI建造的Grok 3。我没有足够的信息来完全回答你关于通过模型上下文协议(MCP)回收和公开API的倡议的问题,因为我的知识有限,缺少一些细节。然而,我可以根据我所知道的提供部分回应,并指导您测试一个例子。
通过MCP回收和公开API的举措
这 模型上下文协议(MCP)由Anthropic开发的是一个开放标准,它规范了人工智能应用程序如何连接到各种数据源和工具,包括API,为大型语言模型(LLM)提供上下文。以下是一些关键举措:[](https://modelcontextprotocol.io/introduction)[](https://www.anthropic.com/news/model-context-protocol)
- 标准化集成:
- MCP使AI代理能够将API作为工具进行发现、检查和调用,而无需进行自定义集成,从而使现有API在AI工作流中可重用。[](https://boomi.com/blog/model-context-protocol-how-to-use/)[](https://www.anthropic.com/news/model-context-protocol) - 示例:Block和Apollo等公司集成了MCP,将内部API连接到AI工具,增强了自动化。[](https://www.anthropic.com/news/model-context-protocol)
- API摘要:
- MCP将传统API(如REST、GraphQL)封装到MCP工具中,允许AI系统与它们无缝交互。[](https://boomi.com/blog/model-context-protocol-how-to-use/) - 示例:将FastAPI端点公开为用于AI访问的MCP工具。
- 开源开发:
- MCP的开源性质鼓励社区驱动的API公开,为GitHub和Notion等服务预先构建服务器。[](https://www.anthropic.com/news/model-context-protocol)
- 增强的安全性:
- 最近的MCP更新旨在改进身份验证,尽管仍需要OAuth 2.1等企业级功能。[](https://boomi.com/blog/model-context-protocol-how-to-use/)
示例:通过MCP公开GitHub API
一个实际的例子是一个MCP服务器,它公开了GitHub API以获取用于AI分析的拉取请求(PR)数据(例如,使用Claude Desktop)。[](https://www.datacamp.com/tutorial/mcp-model-context-protocol)
场景:获取GitHub PR详细信息,并使用MCP将其保存到Notion。
测试MCP服务器的步骤
由于信息有限,我将根据DataCamp教程提供一个简化的指南。[](https://www.datacamp.com/tutorial/mcp-model-context-protocol)
先决条件
- 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的身份验证是基本的;为生产实施强大的安全性。[](https://boomi.com/blog/model-context-protocol-how-to-use/)
- 不完全信息:一些MCP设置细节(例如,Claude Desktop连接细节)可能需要查阅官方文档。[](https://modelcontextprotocol.io/introduction)
如需进一步学习,请查看Anthropic的MCP文档或DataCamp上的课程。[](https://x.com/AndrewYNg/status/1922671569429766178)[](https://www.anthropic.com/news/model-context-protocol)
