连接远程 MCP 服务器
连接远程 MCP 服务器
远程 MCP 服务器将 AI 能力扩展到本地环境之外,提供对基于互联网的工具、服务和数据源的访问。
理解远程服务器
远程 MCP 服务器托管在互联网上,而不是你的本地机器上。它们提供几个优势:
| 特性 | 本地服务器 | 远程服务器 |
|---|---|---|
| 可访问性 | 单个设备 | 任何有互联网的设备 |
| 设置 | 每台设备安装 | 一次性连接 |
| 维护 | 手动更新 | 服务器端更新 |
| 使用场景 | 本地资源 | 云服务、API |
连接方法
方法一:Claude 网页版(自定义连接器)
Claude 网页界面通过自定义连接器提供对远程 MCP 服务器的内置支持。
连接步骤
导航到设置
- 访问 claude.ai
- 点击你的头像 → 设置 → 连接器
添加自定义连接器
- 滚动到"添加自定义连接器"
- 输入远程服务器 URL
- 点击"添加"
完成身份验证
- 按照服务器的身份验证流程操作
- 可能涉及 OAuth、API 密钥或用户名/密码
配置权限
- 查看可用工具
- 仅启用你需要的工具
- 设置适当的使用限制
方法二:Claude Desktop(SSE 传输)
对于桌面应用程序,使用服务器发送事件传输配置远程服务器:
{
"mcpServers": {
"remote-server": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/inspector",
"https://your-server.example.com/sse"
]
}
}
}方法三:自定义客户端实现
构建连接到远程服务器的自定义 MCP 客户端:
from mcp.client.sse import SseClientTransport
from mcp import ClientSession
async def connect_to_remote(server_url: str):
# Create SSE transport for remote connection
transport = SseClientTransport(server_url)
# Initialize session
async with ClientSession(transport) as session:
await session.initialize()
# List available tools
tools = await session.list_tools()
return tools安全注意事项
验证服务器真实性
在连接任何远程 MCP 服务器之前:
- 检查来源:仅连接来自可信开发者的服务器
- 审查代码:对于开源服务器,审查实现
- 检查权限:了解服务器暴露哪些工具
- 安全环境测试:首先尝试非敏感操作
身份验证最佳实践
| 身份验证类型 | 使用场景 | 安全级别 |
|---|---|---|
| API 密钥 | 简单集成 | 中等 |
| OAuth 2.0 | 第三方服务 | 高 |
| JWT 令牌 | 企业应用 | 高 |
| mTLS | 高安全环境 | 很高 |
数据隐私
- 审查数据处理:了解服务器处理什么数据
- 检查加密:确保使用 HTTPS/TLS
- 审计日志:监控服务器活动
- 设置使用限制:防止过多的 API 调用
常见远程服务器用例
项目管理集成
连接到 Jira、Asana 或 Linear 等服务:
{
"mcpServers": {
"jira": {
"command": "node",
"args": ["./jira-server/build/index.js"],
"env": {
"JIRA_URL": "https://your-domain.atlassian.net",
"JIRA_EMAIL": "[email protected]",
"JIRA_API_TOKEN": "your-api-token"
}
}
}
}文档访问
连接到 Confluence、Notion 或 GitBook:
# Example: Notion MCP server connection
config = {
"server_url": "https://notion-mcp.example.com",
"auth": {
"type": "bearer_token",
"token": os.getenv("NOTION_INTEGRATION_TOKEN")
}
}代码仓库集成
连接到 GitHub、GitLab 或 Bitbucket:
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_TOKEN": "your-github-token",
"GITHUB_REPOSITORY": "owner/repo"
}
}
}
}远程连接故障排除
连接失败
症状:服务器无法连接或超时
解决方案:
- 验证服务器 URL 正确且可访问
- 检查网络连接和防火墙设置
- 确保服务器当前正在运行
- 查看身份验证凭据
身份验证错误
症状:401 未授权或无效令牌错误
解决方案:
- 验证 API 密钥或令牌是最新的
- 检查令牌权限和范围
- 确保 OAuth 流程成功完成
- 如需要,重新生成凭据
工具执行失败
症状:工具失败或返回意外错误
解决方案:
- 检查服务器日志中的详细错误消息
- 验证提供了必需的参数
- 确保适当的身份验证范围
- 独立测试工具
构建远程服务器
要托管你自己的远程 MCP 服务器:
基本服务器结构
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
import express from "express";
const app = express();
const server = new Server({
name: "my-remote-server",
version: "1.0.0"
});
// Register tools
server.registerTool(
"my_tool",
{
description: "Description of my tool",
inputSchema: {
type: "object",
properties: {
param: { type: "string" }
}
}
},
async ({ param }) => {
// Tool implementation
return { content: [{ type: "text", text: "Result" }] };
}
);
// SSE endpoint
app.get("/sse", async (req, res) => {
const transport = new SSEServerTransport("/message", res);
await server.connect(transport);
});
app.listen(3000, () => {
console.log("Remote MCP server running on port 3000");
});部署注意事项
| 方面 | 建议 |
|---|---|
| 托管 | 使用可靠的云提供商(AWS、GCP、Azure) |
| 扩展 | 使用负载均衡器实现水平扩展 |
| 监控 | 跟踪指标:延迟、错误率、使用情况 |
| 安全 | 实施速率限制和身份验证 |
| 日志 | 集中式日志记录以便调试 |
最佳实践
- 本地开发,远程部署:在远程部署之前本地开发和测试
- 优雅降级:优雅地处理网络故障
- 缓存:实施缓存以减少 API 调用
- 速率限制:尊重 API 配额并实施客户端限制
- 文档:清楚地记录可用工具和参数
- 版本管理:对服务器更新使用语义版本控制