连接远程 MCP 服务器

连接远程 MCP 服务器

远程 MCP 服务器将 AI 能力扩展到本地环境之外,提供对基于互联网的工具、服务和数据源的访问。

理解远程服务器

远程 MCP 服务器托管在互联网上,而不是你的本地机器上。它们提供几个优势:

特性本地服务器远程服务器
可访问性单个设备任何有互联网的设备
设置每台设备安装一次性连接
维护手动更新服务器端更新
使用场景本地资源云服务、API

连接方法

方法一:Claude 网页版(自定义连接器)

Claude 网页界面通过自定义连接器提供对远程 MCP 服务器的内置支持。

连接步骤

  1. 导航到设置

    • 访问 claude.ai
    • 点击你的头像 → 设置 → 连接器
  2. 添加自定义连接器

    • 滚动到"添加自定义连接器"
    • 输入远程服务器 URL
    • 点击"添加"
  3. 完成身份验证

    • 按照服务器的身份验证流程操作
    • 可能涉及 OAuth、API 密钥或用户名/密码
  4. 配置权限

    • 查看可用工具
    • 仅启用你需要的工具
    • 设置适当的使用限制

方法二: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 服务器之前:

  1. 检查来源:仅连接来自可信开发者的服务器
  2. 审查代码:对于开源服务器,审查实现
  3. 检查权限:了解服务器暴露哪些工具
  4. 安全环境测试:首先尝试非敏感操作

身份验证最佳实践

身份验证类型使用场景安全级别
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"
      }
    }
  }
}

远程连接故障排除

连接失败

症状:服务器无法连接或超时

解决方案:

  1. 验证服务器 URL 正确且可访问
  2. 检查网络连接和防火墙设置
  3. 确保服务器当前正在运行
  4. 查看身份验证凭据

身份验证错误

症状:401 未授权或无效令牌错误

解决方案:

  1. 验证 API 密钥或令牌是最新的
  2. 检查令牌权限和范围
  3. 确保 OAuth 流程成功完成
  4. 如需要,重新生成凭据

工具执行失败

症状:工具失败或返回意外错误

解决方案:

  1. 检查服务器日志中的详细错误消息
  2. 验证提供了必需的参数
  3. 确保适当的身份验证范围
  4. 独立测试工具

构建远程服务器

要托管你自己的远程 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)
扩展使用负载均衡器实现水平扩展
监控跟踪指标:延迟、错误率、使用情况
安全实施速率限制和身份验证
日志集中式日志记录以便调试

最佳实践

  1. 本地开发,远程部署:在远程部署之前本地开发和测试
  2. 优雅降级:优雅地处理网络故障
  3. 缓存:实施缓存以减少 API 调用
  4. 速率限制:尊重 API 配额并实施客户端限制
  5. 文档:清楚地记录可用工具和参数
  6. 版本管理:对服务器更新使用语义版本控制

后续步骤