Skip to main content

远程MCP服务器

在MCP集成基础文章中,我们了解了MCP(Model Context Protocol)的基本概念和本地STDIO服务器的配置。但MCP的真正威力在于远程服务器——通过HTTP/HTTPS协议连接的云端服务,它们提供了无需本地安装、开箱即用的强大功能。

本文将深入探讨远程MCP服务器的配置、认证机制,以及如何集成Sentry、Linear等第三方服务,让你的Claude Code能够直接访问企业级工具和数据。

什么是远程MCP服务器

本地 vs 远程MCP服务器

本地MCP服务器(STDIO传输)

  • 通过标准输入/输出通信
  • 需要在本地机器上运行
  • 需要安装Node.js、Python等运行时
  • 适合访问本地资源和私有数据
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/files"]
}
}
}

远程MCP服务器(HTTP/SSE传输)

  • 通过HTTP/HTTPS协议通信
  • 托管在云端或远程服务器
  • 只需提供URL即可连接
  • 适合访问SaaS服务和公共服务
{
"mcpServers": {
"sentry": {
"url": "https://mcp.sentry.dev/mcp",
"transport": "http"
}
}
}

远程MCP服务器的优势

传统本地MCP服务器:
用户机器 → 安装Node.js → npx启动服务器 → 占用本地资源 → 配置复杂

远程MCP服务器:
用户机器 → 提供URL → 直接连接 → 即用即走

关键优势:

  1. 零安装体验

    • 无需本地安装依赖
    • 无需配置运行环境
    • 立即可用
  2. 集中管理

    • 服务提供商统一维护
    • 自动更新和升级
    • 统一的版本控制
  3. 安全性增强

    • 凭证由服务提供商管理
    • OAuth 2.1标准认证
    • 无需本地存储敏感信息
  4. 性能优化

    • 专业的服务器基础设施
    • 更快的响应速度
    • 负载均衡和容错
  5. 跨平台兼容

    • 不受本地环境限制
    • Windows、macOS、Linux统一体验

远程MCP传输协议

传输协议演进

MCP远程服务器支持两种主要传输方式:

1. HTTP + SSE(Server-Sent Events)

工作原理:

客户端                                服务器
│ │
├───── HTTP POST ──────────────────→ │
│ (发送JSON-RPC请求) │
│ │
│ ├─ 处理请求
│ │
├───── SSE连接 ─────────────────────→ │
│<──── 数据流 ────────────────────────┤
│<──── 持续更新 ──────────────────────┤
│ │

特点:

  • 单向服务器推送
  • 自动重连机制
  • 浏览器原生支持
  • 适合实时数据流

配置示例:

{
"mcpServers": {
"sentry": {
"url": "https://mcp.sentry.dev/mcp",
"transport": "sse"
}
}
}

2. Streamable HTTP(推荐)

工作原理:

客户端                                服务器
│ │
├───── HTTP POST (streamable) ────→ │
│ (发送请求,期望流式响应) │
│ │
│ ├─ 处理请求
│ │
│<──── HTTP Chunked Response ────────┤
│<──── 数据块流 ──────────────────────┤

特点:

  • 双向通信
  • 更高效的传输
  • 更好的错误处理
  • MCP 2025年推荐的传输方式

配置示例:

{
"mcpServers": {
"linear": {
"url": "https://mcp.linear.app",
"transport": "http"
}
}
}

协议对比表

特性HTTP + SSEStreamable HTTPSTDIO
传输方向服务器推送双向流式双向
连接方式长连接短连接/流式持久进程
适用场景实时通知通用远程服务本地服务
浏览器支持原生需fetch API不支持
推荐度向后兼容⭐推荐本地必需
复杂度中等

配置远程MCP服务器

方法一:使用CLI向导(推荐)

Claude Code提供了交互式向导来添加远程MCP服务器:

# 基本添加命令
claude mcp add sentry \
--url https://mcp.sentry.dev/mcp \
--transport http

# 添加到项目作用域
claude mcp add linear \
--url https://mcp.linear.app \
--transport http \
--scope project

# 添加到用户作用域
claude mcp add github-remote \
--url https://mcp.github.com \
--transport http \
--scope user

交互式流程示例:

$ claude mcp add sentry --url https://mcp.sentry.dev/mcp

✓ Detected remote MCP server
✓ Server supports OAuth 2.1 authentication

? Configure authentication:
❯ OAuth (Recommended)
API Key
Skip

Selected: OAuth

? Scope:
❯ user
project
local

✓ Sentry MCP server added successfully!
✓ Configuration saved to user scope

Next steps:
1. Restart Claude Code
2. First use will trigger OAuth flow
3. Grant permissions to complete setup

Restart Claude Code now? [Y/n]

方法二:手动编辑配置文件

对于复杂配置,可以直接编辑配置文件:

配置文件位置:

# macOS
~/Library/Application Support/Claude/claude_desktop_config.json

# Linux
~/.config/Claude/claude_desktop_config.json

# Windows
%APPDATA%/Claude/claude_desktop_config.json

完整配置示例:

{
"mcpServers": {
"sentry": {
"url": "https://mcp.sentry.dev/mcp",
"transport": "http",
"oauth": {
"authorizationUrl": "https://sentry.io/oauth/authorize",
"tokenUrl": "https://sentry.io/oauth/token",
"clientId": "auto-registered",
"scopes": ["project:read", "event:read", "issue:read"]
},
"headers": {
"User-Agent": "Claude-Code/1.0"
},
"timeout": 30000
},
"linear": {
"url": "https://mcp.linear.app",
"transport": "http"
},
"notion": {
"url": "https://mcp.notion.so",
"transport": "http",
"oauth": {
"authorizationUrl": "https://auth.notion.com/oauth/authorize",
"tokenUrl": "https://api.notion.com/v1/oauth/token",
"scopes": ["read"]
}
},
"github-remote": {
"url": "https://api.githubcopilot.com/mcp/github",
"transport": "http"
}
}
}

配置选项详解

基本选项

{
"mcpServers": {
"server-name": {
// 必需:服务器URL
"url": "https://example.com/mcp",

// 必需:传输方式
// - "http": Streamable HTTP (推荐)
// - "sse": HTTP + SSE
"transport": "http"
}
}
}

OAuth认证选项

{
"mcpServers": {
"server-name": {
"url": "https://example.com/mcp",
"transport": "http",

// OAuth配置
"oauth": {
// OAuth授权端点
"authorizationUrl": "https://example.com/oauth/authorize",

// Token交换端点
"tokenUrl": "https://example.com/oauth/token",

// 客户端ID(自动注册或手动提供)
"clientId": "your-client-id",

// 客户端密钥(可选,PKCE模式下不需要)
"clientSecret": "your-client-secret",

// 请求的权限范围
"scopes": ["read", "write"],

// 回调URL(通常是本地端口)
"redirectUrl": "http://localhost:3000/callback"
}
}
}
}

高级选项

{
"mcpServers": {
"server-name": {
"url": "https://example.com/mcp",
"transport": "http",

// 自定义HTTP头
"headers": {
"User-Agent": "Claude-Code/1.0",
"X-Custom-Header": "value"
},

// 超时设置(毫秒)
"timeout": 30000,

// 环境变量(用于敏感信息)
"env": {
"API_KEY": "${API_KEY}"
},

// 启用/禁用服务器
"enabled": true,

// 优先级(数字越大优先级越高)
"priority": 100
}
}
}

OAuth认证详解

什么是OAuth 2.1

OAuth 2.1是OAuth 2.0的下一代版本,提供了更强的安全保证:

核心安全特性:

  1. 强制PKCE(Proof Key for Code Exchange)

    • 防止授权码拦截攻击
    • 适用于公共客户端
    • 无需client_secret
  2. 隐式流被废弃

    • 不再返回access_token in URL
    • 使用授权码+PKCE替代
  3. 刷新令牌轮换

    • 每次刷新获得新的refresh_token
    • 旧的refresh_token立即失效
    • 减少令牌泄露风险

OAuth认证流程

标准OAuth 2.1流程

┌─────────────┐                  ┌──────────────┐            ┌─────────────┐
│ Claude │ │ OAuth Provider│ │ Server │
│ Code │ │ (Sentry等) │ │ (MCP) │
└──────┬──────┘ └───────┬───────┘ └──────┬──────┘
│ │ │
│ 1. 尝试调用MCP工具 │ │
├─────────────────────────────────→│ │
│ (需要认证) │ │
│ │ │
│ 2. 返回401,提供OAuth信息 │ │
│←─────────────────────────────────┤ │
│ { │ │
│ authorizationUrl: "...", │ │
│ tokenUrl: "...", │ │
│ clientId: "..." │ │
│ } │ │
│ │ │
│ 3. 打开浏览器,用户授权 │ │
│ ┌────────────────────────┐ │ │
│ │ Login to Sentry │ │ │
│ │ [授权界面] │ │ │
│ │ [Allow] [Deny] │ │ │
│ └────────────────────────┘ │ │
├─────────────────────────────────→│ │
│ │ │
│ 4. 获得authorization code │ │
│←─────────────────────────────────┤ │
│ code=xxx&state=yyy │ │
│ │ │
│ 5. 用code换取access_token │ │
├─────────────────────────────────→│ │
│ code + PKCE verifier │ │
│ │ │
│ 6. 返回access_token │ │
│←─────────────────────────────────┤ │
│ { │ │
│ access_token: "xxx", │ │
│ refresh_token: "yyy", │ │
│ expires_in: 3600 │ │
│ } │ │
│ │ │
│ 7. 安全存储token │ │
│ (Keychain/加密存储) │ │
│ │ │
│ 8. 使用access_token调用MCP │ │
├──────────────────────────────────────────────────────────────→│
│ Authorization: Bearer xxx │
│ │
│ 9. 返回数据 │
│←──────────────────────────────────────────────────────────────┤
│ │
│ 10. Token过期时自动刷新 │
├─────────────────────────────────→│ │
│ refresh_token │ │
│←─────────────────────────────────┤ │
│ 新的access_token │ │

在Claude Code中配置OAuth

Sentry OAuth配置

步骤1:添加Sentry MCP服务器

claude mcp add sentry \
--url https://mcp.sentry.dev/mcp \
--transport http \
--scope user

步骤2:首次使用时触发OAuth

$ claude

> 查看Sentry中的错误

🔐 需要OAuth认证

Sentry MCP服务器需要授权。

正在打开浏览器...

[浏览器自动打开 https://sentry.io/oauth/authorize...]

✓ 授权成功!
✓ Access token已安全存储

正在获取Sentry错误...

自动生成的配置:

{
"mcpServers": {
"sentry": {
"url": "https://mcp.sentry.dev/mcp",
"transport": "http",
"oauth": {
"authorizationUrl": "https://sentry.io/oauth/authorize",
"tokenUrl": "https://sentry.io/oauth/token",
"clientId": "mcp-claude-code-prod",
"scopes": [
"project:read",
"event:read",
"event:write",
"issue:read",
"issue:write"
],
"redirectUrl": "http://localhost:3000/callback"
}
}
}
}

Linear OAuth配置

步骤1:添加Linear MCP服务器

claude mcp add linear \
--url https://mcp.linear.app \
--transport http \
--scope user

步骤2:OAuth授权流程

$ claude

> 列出我的Linear任务

🔐 Linear需要OAuth授权

正在打开Linear授权页面...

[Linear授权界面]
Claude Code 想要访问:
✓ 读取你的项目
✓ 读取和更新Issues
✓ 读取你的团队信息

[Allow] [Cancel]

点击"Allow"完成授权...

✓ Linear授权成功!
✓ Token已安全保存

正在获取Linear issues...

配置示例:

{
"mcpServers": {
"linear": {
"url": "https://mcp.linear.app",
"transport": "http",
"oauth": {
"authorizationUrl": "https://linear.app/oauth/authorize",
"tokenUrl": "https://api.linear.app/oauth/token",
"clientId": "auto-registered",
"scopes": ["read", "write", "issues:read", "issues:write", "projects:read"],
"redirectUrl": "http://localhost:3000/callback"
}
}
}
}

OAuth令牌管理

令牌存储位置

# macOS - 使用Keychain
security find-generic-password \
-a "claude-code" \
-s "sentry-mcp-token" \
-w

# Linux - 使用Secret Service
secret-tool lookup claude-code sentry-mcp-token

# Windows - 使用Credential Manager
cmdkey /list | findstr sentry

令牌刷新机制

Claude Code自动处理令牌刷新:

// 内部刷新逻辑(伪代码)
async function callMCPWithAuth(server, tool, args) {
let token = await getStoredToken(server);

// 检查token是否即将过期
if (isTokenExpiringSoon(token)) {
console.log('Token即将过期,自动刷新...');

// 使用refresh_token获取新的access_token
const newToken = await refreshAccessToken(token.refreshToken);

// 存储新token
await storeToken(server, newToken);

// 使旧refresh_token失效
await revokeOldToken(token.refreshToken);

token = newToken;
}

// 使用access_token调用MCP
return await callMCP(server, tool, args, {
headers: {
'Authorization': `Bearer ${token.accessToken}`
}
});
}

手动撤销授权

# 方法1:通过CLI删除服务器
claude mcp remove sentry

# 方法2:手动删除token
# macOS
security delete-generic-password -a claude-code -s sentry-mcp-token

# 方法3:在服务提供商处撤销
# 访问Sentry设置 → Applications → 撤销Claude Code权限

Sentry集成实战

Sentry MCP服务器功能

Sentry MCP服务器提供了丰富的错误监控和调试功能:

核心能力:

  • 列出项目和Issues
  • 获取错误详情和堆栈跟踪
  • 查看事件聚合
  • 触发Seer AI根因分析
  • 添加注释和标签
  • 更新Issue状态

配置Sentry MCP

方法1:官方远程服务器(推荐)

# 添加官方Sentry MCP服务器
claude mcp add sentry \
--url https://mcp.sentry.dev/mcp \
--transport http \
--scope user

方法2:自托管(企业用户)

如果你使用自托管的Sentry实例:

{
"mcpServers": {
"sentry-self-hosted": {
"url": "https://sentry.yourcompany.com/mcp",
"transport": "http",
"oauth": {
"authorizationUrl": "https://sentry.yourcompany.com/oauth/authorize",
"tokenUrl": "https://sentry.yourcompany.com/oauth/token",
"clientId": "your-custom-client-id",
"scopes": ["project:read", "event:read", "event:write"]
},
"headers": {
"X-Sentry-Host": "sentry.yourcompany.com"
}
}
}
}

实际使用示例

示例1:快速诊断高频错误

用户: 查看production项目中最近24小时错误率最高的5个问题

Claude: [通过Sentry MCP查询]

查询结果:

🔴 高频错误报告(最近24小时)

1. TypeError: Cannot read property 'user' of undefined
- 文件: src/middleware/auth.js:45
- 发生次数: 1,234次
- 影响用户: 456人
- 首次出现: 18小时前
- 链接: https://sentry.io/organizations/acme/issues/12345/

2. PaymentGatewayError: Timeout waiting for response
- 文件: src/api/payment.js:89
- 发生次数: 892次
- 影响用户: 312人
- 首次出现: 12小时前

3. ReferenceError: processOrder is not defined
- 文件: src/services/order.js:156
- 发生次数: 567次
- 影响用户: 201人
- 首次出现: 6小时前

需要我分析第一个错误的详细信息吗?

示例2:深入分析单个错误

用户: 分析第一个错误的根因,并使用Seer AI

Claude: [调用Sentry Seer AI工具]

正在触发Seer AI根因分析...

📊 错误分析报告

## 基本信息
- Issue ID: #12345
- 错误类型: TypeError
- 错误消息: Cannot read property 'user' of undefined
- 影响用户: 456人
- 发生次数: 1,234次
- 最近发生: 2分钟前

## 根因分析(Seer AI)

### 问题根源
auth.js中间件在处理session对象时,没有正确处理session为null的情况。

### 触发条件
1. 用户的session已过期
2. 浏览器cookie中仍然保留了过期的session ID
3. 后端尝试用这个过期的session ID获取session,返回null
4. 代码直接访问null.user,抛出TypeError

### 错误堆栈

at authenticate (src/middleware/auth.js:45:15) at Layer.handle [as handle_request] (node_modules/express/lib/router/layer.js:95:5) at next (node_modules/express/lib/router/route.js:144:13) at SessionStore.get (src/services/session.js:23:8)


### 修复建议
添加session有效性检查:
```javascript
// 在访问req.session.user之前
if (!req.session || !req.session.user) {
return res.status(401).json({
error: 'Session expired',
code: 'SESSION_INVALID'
});
}

需要我帮你应用这个修复吗?


#### 示例3:批量更新错误状态

用户: 将所有与支付相关的已解决错误标记为released

Claude: [通过Sentry MCP批量更新]

正在查找支付相关的resolved issues...

找到23个支付相关的resolved issues:

  • PaymentGatewayError (#12345)
  • PaymentValidationFailed (#12346)
  • ...
  • PaymentTimeoutError (#12367)

批量更新中... ✓ 已更新 #12345 → released ✓ 已更新 #12346 → released ✓ 已更新 #12347 → released ... ✓ 已更新 #23个issues

更新摘要:

  • 从 resolved → released: 23个
  • 总耗时: 3.2秒

### Sentry MCP工具参考

**可用工具列表:**

| 工具名 | 功能 | 权限要求 |
|--------|------|----------|
| `list_projects` | 列出所有项目 | project:read |
| `list_issues` | 列出Issues | issue:read |
| `get_issue_details` | 获取Issue详情 | issue:read |
| `get_issue_events` | 获取Issue的事件列表 | event:read |
| `get_event_details` | 获取单个事件详情 | event:read |
| `create_issue_comment` | 添加评论 | issue:write |
| `update_issue_status` | 更新状态 | issue:write |
| `trigger_seer_ai` | 触发AI分析 | event:read |
| `search_issues` | 搜索Issues | issue:read |
| `get_error_tags` | 获取错误标签 | event:read |
| `add_event_tag` | 添加标签 | event:write |
| `get_stack_trace` | 获取堆栈跟踪 | event:read |
| `get_breadcrumbs` | 获取面包屑导航 | event:read |
| `get_user_context` | 获取用户上下文 | event:read |
| `get_request_data` | 获取请求数据 | event:read |

## Linear集成实战

### Linear MCP服务器功能

Linear是现代化的项目管理和Issue追踪工具,其MCP服务器提供了:

**核心能力:**
- 搜索和列出Issues
- 创建、更新Issues
- 管理项目和工作流
- 分配任务和设置优先级
- 添加评论和附件
- 管理标签和状态

### 配置Linear MCP

```bash
# 添加Linear MCP服务器
claude mcp add linear \
--url https://mcp.linear.app \
--transport http \
--scope user

首次授权:

$ claude

> 查看我的Linear任务

🔐 需要Linear授权

正在打开浏览器...

[Linear授权页面]
Claude Code 请求访问:
✓ 读取你的工作区
✓ 读取和创建Issues
✓ 读取和更新项目
✓ 读取你的团队信息

[Connect Workspace]

✓ Linear授权成功!

实际使用示例

示例1:从任务直接生成代码

用户: 显示分配给我的高优先级任务

Claude: [通过Linear MCP查询]

你的高优先级任务:

1. [FE-234] 实现用户头像上传功能
状态: In Progress
优先级: High
分配给: 你
预计工时: 4h

描述:
需要实现用户头像上传功能,包括:
- 支持JPG、PNG格式
- 文件大小限制5MB
- 前端裁剪为正方形
- 自动压缩为200x200
- 上传到S3存储

2. [FE-235] 优化首页加载性能
状态: Todo
优先级: Urgent
分配给: 你
预计工时: 6h

描述:
首页当前加载时间3.5秒,需要优化到1秒内。

────────────────────────────────────────

你想从哪个任务开始?
用户: 开始FE-234

Claude: [获取FE-234的详细信息]

正在读取任务详情...

任务:FE-234 - 实现用户头像上传功能

详细需求:
- 用户可以从个人设置页面上传头像
- 支持拖拽上传和点击选择文件
- 前端使用react-image-crop进行裁剪
- 后端接收上传并存储到S3
- 更新用户profile中的avatar_url字段

技术栈:
- 前端:React + react-image-crop
- 后端:Node.js + AWS SDK
- 存储:S3
- 数据库:PostgreSQL

我建议按以下步骤实现:

1. 创建前端AvatarUpload组件
2. 实现图片选择和裁剪功能
3. 创建后端API端点 /api/user/avatar
4. 实现S3上传逻辑
5. 更新数据库用户记录

开始实现第一步吗?
用户: 是的,开始

Claude: [创建AvatarUpload组件]

✓ 创建 src/components/AvatarUpload.jsx
✓ 添加react-image-crop依赖
✓ 实现文件选择功能
✓ 实现图片预览和裁剪
✓ 添加验证(格式、大小)

组件代码:
```jsx
import React, { useState, useRef } from 'react';
import ReactCrop from 'react-image-crop';
import 'react-image-crop/dist/ReactCrop.css';

export function AvatarUpload({ currentAvatar, onUploadSuccess }) {
const [crop, setCrop] = useState({ unit: '%', width: 100 });
const [src, setSrc] = useState(null);
// ... 完整实现

return (
<div className="avatar-upload">
{/* 上传界面 */}
</div>
);
}

需要继续实现后端API吗?


```text
用户: 继续

Claude: [创建后端API端点]

✓ 创建 src/api/user/avatar.js
✓ 实现multer文件中间件
✓ 配置S3上传
✓ 添加数据库更新逻辑
✓ 错误处理和验证

API端点:
POST /api/user/avatar
Content-Type: multipart/form-data

响应:
{
"success": true,
"avatarUrl": "https://s3.../avatar-123.jpg"
}

下一步:更新Linear任务状态?
用户: 是的,标记为已完成

Claude: [通过Linear MCP更新任务]

✓ FE-234状态已更新为 "Done"
✓ 添加了完成评论:
"实现了完整的头像上传功能:
- 前端React组件 + react-image-crop
- 后端Node.js API + S3存储
- 包含文件验证、裁剪、压缩
- 单元测试覆盖率85%"

任务完成摘要:
- 创建文件:4个
- 修改文件:3个
- 添加测试:2个测试文件
- 代码行数:+350行

是否要创建pull request?

示例2:批量创建任务

用户: 根据这份需求文档创建Linear任务

需求文档:
我们要重构用户认证系统,包括以下功能:
1. 实现OAuth2.0登录(Google、GitHub)
2. 添加双因素认证(2FA)
3. 实现密码重置流程
4. 添加会话管理
5. 实现单点登录(SSO)

Claude: [通过Linear MCP批量创建]

正在分析需求并创建任务...

✓ 创建 AUTH-101: 实现OAuth2.0登录
状态: Backlog
优先级: High
预计工时: 8h
标签: authentication, oauth

✓ 创建 AUTH-102: 添加双因素认证(2FA)
状态: Backlog
优先级: High
预计工时: 12h
标签: authentication, security

✓ 创建 AUTH-103: 实现密码重置流程
状态: Backlog
优先级: Medium
预计工时: 4h
标签: authentication

✓ 创建 AUTH-104: 添加会话管理
状态: Backlog
优先级: Medium
预计工时: 6h
标签: authentication

✓ 创建 AUTH-105: 实现单点登录(SSO)
状态: Backlog
优先级: Low
预计工时: 16h
标签: authentication, sso

创建完成!共5个任务
查看项目:https://linear.app/team/PROJECT/auth-refactor

Linear MCP工具参考

可用工具列表:

工具名功能权限要求
search_issues搜索Issuesread
get_issue获取单个Issue详情read
create_issue创建新Issuewrite
update_issue更新Issuewrite
list_projects列出项目read
get_teams获取团队信息read
add_comment添加评论write
change_status更改状态write
assign_issue分配任务write
set_priority设置优先级write
add_label添加标签write

其他第三方服务集成

GitHub MCP服务器(远程版本)

除了本地的GitHub MCP服务器,GitHub也提供了远程版本:

配置:

{
"mcpServers": {
"github-remote": {
"url": "https://api.githubcopilot.com/mcp/github",
"transport": "http",
"oauth": {
"authorizationUrl": "https://github.com/login/oauth/authorize",
"tokenUrl": "https://github.com/login/oauth/access_token",
"scopes": ["repo", "read:user", "read:org"]
}
}
}
}

使用示例:

用户: 列出react-app仓库最近的Pull Requests

Claude: [通过GitHub远程MCP查询]

react-app的Pull Requests(最近10个):

1. #234 - 添加暗色模式支持
作者: @alice
状态: Open
创建时间: 2小时前
审查: 2/3通过
+文件: 12行, -文件: 5行

2. #233 - 修复登录页面bug
作者: @bob
状态: Open
创建时间: 5小时前
审查: 待审查
+文件: 8行, -文件: 3行

需要查看某个PR的详细信息吗?

Notion MCP服务器

Notion提供了官方MCP服务器用于集成文档和知识库:

配置:

claude mcp add notion \
--url https://mcp.notion.so \
--transport http \
--scope user

使用示例:

用户: 搜索Notion中关于"React性能优化"的页面

Claude: [通过Notion MCP搜索]

找到3个相关页面:

1. React性能优化指南
数据库: Engineering Docs
最后编辑: 2天前
内容摘要:包含useMemo、useCallback最佳实践...

2. 前端性能监控方案
数据库: Architecture
最后编辑: 1周前
内容摘要:性能指标、监控工具配置...

3. React 18新特性
数据库: Learning
最后编辑: 1个月前
内容摘要:并发渲染、Suspense详解...

需要我读取哪个页面的完整内容?

Figma MCP服务器

Figma MCP服务器允许Claude访问设计文件:

配置:

{
"mcpServers": {
"figma": {
"url": "https://mcp.figma.com",
"transport": "http",
"oauth": {
"authorizationUrl": "https://www.figma.com/oauth",
"tokenUrl": "https://www.figma.com/api/oauth/token",
"scopes": ["file_read", "comments_read"]
}
}
}
}

使用示例:

用户: 从Figma获取首页设计的颜色方案

Claude: [通过Figma MCP读取设计]

正在读取Figma文件...

设计文件:Homepage Redesign v2
页面:Desktop - Homepage

提取的颜色方案:

主色调:
- Primary Blue: #3B82F6
- Secondary Purple: #8B5CF6
- Accent Pink: #EC4899

中性色:
- Background: #FFFFFF
- Surface: #F3F4F6
- Border: #E5E7EB

文本色:
- Primary: #111827
- Secondary: #6B7280
- Disabled: #9CA3AF

需要我根据这个颜色方案更新CSS变量吗?

Slack MCP服务器

Slack MCP服务器用于集成团队沟通:

配置:

claude mcp add slack \
--url https://mcp.slack.com \
--transport http \
--scope user

使用示例:

用户: 在#dev-notifications频道发送部署通知

Claude: [通过Slack MCP发送消息]

正在发送消息到#dev-notifications...

✓ 消息已发送

消息内容:
🚀 部署通知

项目: my-app
版本: v2.3.1
环境: production
状态: ✓ 成功

更改:
- 添加用户头像上传功能
- 修复登录页面bug
- 性能优化

部署者: claude-code
时间: 2025-12-25 10:30:00

需要通知其他频道吗?

自定义远程MCP服务器

你也可以创建自己的远程MCP服务器:

使用FastMCP(Python)快速创建:

# my_mcp_server.py
from fastmcp import FastMCP
import httpx

app = FastMCP("my-service")

@app.tool()
async def search_documents(query: str) -> str:
"""搜索内部文档"""
async with httpx.AsyncClient() as client:
response = await client.get(
f"https://api.mycompany.com/docs/search?q={query}"
)
return response.json()

@app.tool()
async def get_user_info(user_id: str) -> dict:
"""获取用户信息"""
async with httpx.AsyncClient() as client:
response = await client.get(
f"https://api.mycompany.com/users/{user_id}"
)
return response.json()

# 启动远程服务器(使用SSE传输)
if __name__ == "__main__":
app.run_sse("0.0.0.0", 8000)

部署到云服务(如Railway):

# 安装FastMCP
pip install fastmcp

# 部署到Railway
railway up

# 获取URL
railway domain

# 配置到Claude Code
claude mcp add my-service \
--url https://my-service.railway.app/mcp \
--transport http

实用技巧和最佳实践

技巧1:选择性启用服务器

在不同场景下启用不同的MCP服务器:

{
"mcpServers": {
"sentry": {
"url": "https://mcp.sentry.dev/mcp",
"transport": "http",
"enabled": true,
"environments": ["production", "staging"]
},
"github": {
"url": "https://api.githubcopilot.com/mcp/github",
"transport": "http",
"enabled": true,
"environments": ["development", "production"]
},
"figma": {
"url": "https://mcp.figma.com",
"transport": "http",
"enabled": false,
"comment": "仅在需要设计时手动启用"
}
}
}

技巧2:环境隔离

为不同环境配置不同的MCP服务器:

# 开发环境
export MCP_ENV="development"
claude mcp add sentry-dev \
--url https://sentry-dev.example.com/mcp \
--transport http \
--scope local

# 生产环境
export MCP_ENV="production"
claude mcp add sentry-prod \
--url https://sentry.example.com/mcp \
--transport http \
--scope local

技巧3:缓存优化

对于频繁调用的远程MCP服务器,启用缓存:

{
"mcpServers": {
"github": {
"url": "https://api.githubcopilot.com/mcp/github",
"transport": "http",
"cache": {
"enabled": true,
"ttl": 300,
"strategy": "lru"
}
}
}
}

技巧4:请求重试

配置自动重试机制:

{
"mcpServers": {
"sentry": {
"url": "https://mcp.sentry.dev/mcp",
"transport": "http",
"retry": {
"maxAttempts": 3,
"backoff": "exponential",
"initialDelay": 1000
}
}
}
}

技巧5:监控和日志

启用详细的日志记录:

# 启动Claude Code时启用调试日志
DEBUG=mcp:* claude --verbose

# 设置日志级别
export MCP_LOG_LEVEL=debug
export MCP_LOG_FILE=/tmp/mcp.log

# 监控MCP调用
tail -f /tmp/mcp.log | grep "sentry"

最佳实践1:安全凭证管理

# ❌ 不好:硬编码凭证
{
"mcpServers": {
"custom-server": {
"url": "https://api.example.com/mcp",
"headers": {
"Authorization": "Bearer hardcoded-token"
}
}
}
}

# ✅ 好:使用环境变量
{
"mcpServers": {
"custom-server": {
"url": "https://api.example.com/mcp",
"env": {
"API_TOKEN": "${CUSTOM_API_TOKEN}"
}
}
}
}

# 在.zshrc中设置
export CUSTOM_API_TOKEN="your-actual-token"

最佳实践2:团队协作

项目级配置示例:

{
"mcpServers": {
// 团队共享的服务器
"sentry": {
"url": "https://mcp.sentry.dev/mcp",
"transport": "http",
"comment": "团队统一的Sentry监控"
},
"linear": {
"url": "https://mcp.linear.app",
"transport": "http",
"comment": "团队项目管理"
}
}
}
# 提交到项目仓库
git add mcp.json
git commit -m "docs: add team MCP servers"
git push

最佳实践3:文档化配置

在项目的README中记录MCP配置:

## MCP服务器配置

本项目使用以下远程MCP服务器:

### Sentry(错误监控)
```bash
claude mcp add sentry \
--url https://mcp.sentry.dev/mcp \
--transport http

Linear(项目管理)

claude mcp add linear \
--url https://mcp.linear.app \
--transport http

首次设置

  1. 克隆仓库后,运行上述命令添加服务器
  2. 重启Claude Code
  3. 首次使用时会触发OAuth授权流程
  4. 在浏览器中完成授权

故障排除

如果遇到认证问题:

  1. 运行 claude mcp remove <server-name>
  2. 重新添加服务器
  3. 清除浏览器缓存后重新授权

### 最佳实践4:定期审计

定期审查和清理MCP服务器:

```bash
# 列出所有服务器
claude mcp list

# 查看未使用的服务器
claude mcp audit --days 30

# 删除不用的服务器
claude mcp remove unused-server

# 测试服务器连接
claude mcp test sentry
claude mcp test linear

最佳实践5:性能监控

监控MCP服务器的性能:

# 查看MCP调用统计
claude mcp stats

# 输出示例:
# MCP Server Statistics (Last 7 days)
#
# Server Calls Avg Time Errors
# ────────────────────────────────────────
# sentry 234 850ms 2
# linear 156 420ms 0
# github 89 1.2s 1
#
# Total: 479 calls, 786ms avg, 3 errors

# 找出慢速服务器
claude mcp stats --sort=time

常见问题排查

问题1:OAuth授权失败

症状:

Error: OAuth authorization failed
Invalid client credentials

解决方案:

  1. 检查OAuth配置:
# 查看服务器配置
claude mcp show sentry

# 验证OAuth端点是否正确
curl https://sentry.io/oauth/.well-known/oauth-authorization-server
  1. 清除旧token并重新授权:
# 删除服务器
claude mcp remove sentry

# 清除本地token
# macOS
security delete-generic-password -a claude-code -s sentry-mcp-token

# 重新添加
claude mcp add sentry --url https://mcp.sentry.dev/mcp --transport http
  1. 检查网络代理:
# 如果使用代理
export HTTP_PROXY=http://proxy.example.com:8080
export HTTPS_PROXY=http://proxy.example.com:8080

# 重试授权

问题2:远程服务器连接超时

症状:

Error: Connection timeout to https://mcp.example.com/mcp
Timeout after 30s

解决方案:

  1. 测试网络连接:
# 测试URL可访问性
curl -v https://mcp.example.com/mcp

# 检查DNS解析
nslookup mcp.example.com

# 测试端口连通性
telnet mcp.example.com 443
  1. 增加超时时间:
{
"mcpServers": {
"slow-server": {
"url": "https://mcp.example.com/mcp",
"transport": "http",
"timeout": 60000
}
}
}
  1. 使用代理:
{
"mcpServers": {
"server": {
"url": "https://mcp.example.com/mcp",
"transport": "http",
"proxy": "http://proxy.example.com:8080"
}
}
}

问题3:服务器响应格式错误

症状:

Error: Invalid MCP response format
Expected JSON-RPC, got text/html

解决方案:

  1. 验证服务器端点:
# 检查服务器是否返回正确的MCP响应
curl -X POST https://mcp.example.com/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize"}'
  1. 检查传输协议:
# 确认服务器支持的传输协议
# 某些服务器只支持SSE,某些只支持HTTP

# 尝试切换传输方式
claude mcp remove server
claude mcp add server --url https://mcp.example.com/mcp --transport sse
  1. 联系服务提供商:

如果确认服务器配置正确但仍有问题,可能是服务提供商的bug,可以:

  • 查看服务的状态页面
  • 搜索GitHub issues
  • 联系技术支持

问题4:权限不足

症状:

Error: Insufficient permissions
Required scopes: ['project:read', 'event:write']
Current scopes: ['project:read']

解决方案:

  1. 检查OAuth scopes:
# 查看当前授权的scopes
claude mcp show sentry --verbose

# 重新授权以获取更多权限
claude mcp remove sentry
claude mcp add sentry --url https://mcp.sentry.dev/mcp --scopes "project:read,event:read,event:write"
  1. 手动更新配置:
{
"mcpServers": {
"sentry": {
"url": "https://mcp.sentry.dev/mcp",
"transport": "http",
"oauth": {
"scopes": [
"project:read",
"event:read",
"event:write",
"issue:read",
"issue:write"
]
}
}
}
}
  1. 在服务提供商处检查权限:

登录Sentry/Linear等服务,检查:

  • OAuth应用权限设置
  • 用户个人权限
  • 组织级别权限限制

问题5:并发调用导致限流

症状:

Error: Rate limit exceeded
Too many requests, please try again later

解决方案:

  1. 启用速率限制:
{
"mcpServers": {
"api-with-rate-limit": {
"url": "https://api.example.com/mcp",
"transport": "http",
"rateLimit": {
"maxRequests": 10,
"perSeconds": 60,
"strategy": "token-bucket"
}
}
}
}
  1. 批量请求而非多次单独请求:
❌ 不好:
用户: 列出前10个issue
用户: 列出第11-20个issue
用户: 列出第21-30个issue

✅ 好:
用户: 列出前30个issue
  1. 使用缓存:
{
"mcpServers": {
"server": {
"cache": {
"enabled": true,
"ttl": 300
}
}
}
}

高级场景和技巧

场景1:多环境配置管理

为开发、测试、生产环境配置不同的MCP服务器:

目录结构:

project/
├── .claude/
│ ├── mcp.dev.json
│ ├── mcp.staging.json
│ └── mcp.prod.json
└── mcp.json (默认)

配置示例:

// .claude/mcp.dev.json
{
"mcpServers": {
"sentry": {
"url": "https://sentry-dev.example.com/mcp",
"transport": "http"
},
"local-api": {
"url": "http://localhost:3000/mcp",
"transport": "http"
}
}
}

// .claude/mcp.prod.json
{
"mcpServers": {
"sentry": {
"url": "https://sentry.example.com/mcp",
"transport": "http"
},
"datadog": {
"url": "https://mcp.datadoghq.com",
"transport": "http"
}
}
}

切换环境:

# 开发环境
export MCP_ENV=dev
claude

# 生产环境
export MCP_ENV=prod
claude

场景2:链式调用多个MCP服务器

结合多个MCP服务器完成复杂任务:

用户: 从Figma设计创建React组件,并在GitHub创建PR

Claude: [协调多个MCP服务器]

这个任务需要:
✓ Figma MCP - 获取设计
✓ GitHub MCP - 创建PR
✓ Filesystem MCP - 保存文件

步骤1: 从Figma获取设计
[通过Figma MCP读取设计规范]
✓ 获取到布局、颜色、字体

步骤2: 生成React组件代码
[根据设计生成代码]
✓ 创建 src/components/NewFeature.jsx

步骤3: 提交到GitHub
[通过GitHub MCP创建分支和提交]
✓ 创建分支 feature/new-design
✓ 提交代码

步骤4: 创建Pull Request
✓ PR #123已创建
✓ 包含Figma设计截图
✓ 自动添加审查者

完成!查看PR: https://github.com/repo/pull/123

场景3:自动化工作流

创建自动化工作流,定期检查和处理问题:

# 创建定时任务(使用cron)
# 每天早上9点检查Sentry错误

cat > check-sentry.sh << 'EOF'
#!/bin/bash
# MCP自动化脚本:检查Sentry错误

export PATH="/usr/local/bin:$PATH"

echo "开始检查Sentry错误..."

# 使用Claude Code的API模式
claude --non-interactive << 'CLAUDE'
使用Sentry MCP检查最近24小时的错误:
1. 列出影响用户最多的前5个错误
2. 对于每个错误,使用Seer AI分析根因
3. 创建简明的报告
4. 如果有紧急错误(影响>100用户),发送Slack通知
CLAUDE

echo "检查完成"
EOF

# 添加到crontab
chmod +x check-sentry.sh
crontab -e

# 添加行:
0 9 * * * /path/to/check-sentry.sh >> /var/log/sentry-check.log 2>&1

场景4:自定义远程MCP代理

创建一个自定义的MCP代理服务器,聚合多个服务:

# mcp-proxy-server.py
from fastmcp import FastMCP
import httpx

app = FastMCP("aggregator")

@app.tool()
async def get_project_health() -> dict:
"""获取项目健康状态(聚合多个来源)"""
results = {}

# 从Sentry获取错误信息
async with httpx.AsyncClient() as client:
sentry_response = await client.get(
"https://sentry.io/api/0/projects/",
headers={"Authorization": "Bearer YOUR_TOKEN"}
)
results["sentry"] = sentry_response.json()

# 从GitHub获取PR状态
async with httpx.AsyncClient() as client:
github_response = await client.get(
"https://api.github.com/repos/user/repo/pulls",
headers={"Authorization": "Bearer YOUR_TOKEN"}
)
results["github"] = github_response.json()

# 从CI/CD获取构建状态
async with httpx.AsyncClient() as client:
ci_response = await client.get(
"https://api.circleci.com/v2/project/gh/user/repo",
headers={"Authorization": "Bearer YOUR_TOKEN"}
)
results["ci"] = ci_response.json()

return results

@app.tool()
async def create_incident_report(summary: str) -> str:
"""创建事故报告(同步到多个系统)"""
# 在Linear创建issue
# 在Slack发送通知
# 在Confluence记录文档
pass

# 启动服务器
if __name__ == "__main__":
app.run_sse("0.0.0.0", 8000)

部署和使用:

# 部署代理服务器
python mcp-proxy-server.py

# 在Claude Code中配置
claude mcp add aggregator \
--url https://aggregator.example.com/mcp \
--transport http

# 使用
claude

> 查看项目整体健康状态
[调用aggregator MCP]
> 聚合Sentry错误、GitHub PR、CI/CD状态...

性能优化和监控

性能优化技巧

1. 连接池管理

{
"mcpServers": {
"high-traffic-server": {
"url": "https://mcp.example.com",
"transport": "http",
"connection": {
"keepAlive": true,
"maxSockets": 100,
"maxFreeSockets": 10,
"timeout": 60000,
"freeSocketTimeout": 30000
}
}
}
}

2. 响应压缩

{
"mcpServers": {
"server": {
"url": "https://mcp.example.com",
"transport": "http",
"compression": {
"enabled": true,
"algorithms": ["gzip", "br"]
}
}
}
}

3. 智能预加载

{
"mcpServers": {
"frequently-used": {
"url": "https://mcp.example.com",
"transport": "http",
"preload": {
"enabled": true,
"tools": ["list_resources", "get_status"]
}
}
}
}

监控和调试

启用详细日志

# 设置环境变量
export DEBUG=mcp:*
export MCP_LOG_LEVEL=debug
export MCP_TRACE=http

# 启动Claude Code
claude --verbose

性能分析

# 查看MCP调用统计
claude mcp analytics

# 输出示例:
# MCP Performance Report (Last 24h)
#
# Server Calls Avg P50 P95 P99 Errors
# ─────────────────────────────────────────────────────────────
# sentry 456 890ms 720ms 1.5s 3.2s 5
# linear 234 450ms 380ms 780ms 1.1s 0
# github 123 2.1s 1.8s 4.2s 6.5s 2
#
# Recommendations:
# ⚠️ GitHub API calls are slow, consider enabling caching
# ✓ Linear performance is optimal
# ⚠️ Sentry has 5 errors, investigate

# 查看慢速调用
claude mcp analytics --slow --threshold=2000

安全最佳实践

1. OAuth安全

使用PKCE(推荐):

{
"mcpServers": {
"secure-server": {
"url": "https://mcp.example.com",
"transport": "http",
"oauth": {
"usePkce": true,
"codeChallengeMethod": "S256"
}
}
}
}

2. Token存储

使用系统密钥链:

# macOS - Keychain
security add-generic-password \
-a "claude-code" \
-s "mcp-token" \
-w "your-access-token" \
-T "/Applications/Claude Code.app"

# Linux - Secret Service
secret-tool store --label="MCP Token" \
claude-code mcp-token \
<<EOF
your-access-token
EOF

# Windows - Credential Manager
cmdkey /generic:claude-code-mcp /user:token /pass:your-access-token

3. 网络安全

验证SSL证书:

{
"mcpServers": {
"secure-server": {
"url": "https://mcp.example.com",
"transport": "http",
"tls": {
"rejectUnauthorized": true,
"minVersion": "TLSv1.2"
}
}
}
}

4. 最小权限原则

只请求必要的scopes:

{
"mcpServers": {
"readonly-server": {
"url": "https://mcp.example.com",
"transport": "http",
"oauth": {
"scopes": ["read"]
// ❌ 不要请求 "write" 如果不需要
}
}
}
}

总结

远程MCP服务器是Claude Code生态系统的强大扩展,它让AI助手能够无缝访问企业级SaaS服务和云端工具。

核心要点回顾

  1. 传输协议选择

    • Streamable HTTP:推荐用于新项目
    • HTTP + SSE:向后兼容,实时通知
    • STDIO:仅用于本地服务
  2. OAuth 2.1认证

    • 强制PKCE增强安全性
    • 自动token刷新
    • 系统密钥链安全存储
  3. 主要集成

    • Sentry:错误监控和调试
    • Linear:项目和任务管理
    • GitHub:代码仓库管理
    • Notion/Figma/Slack:文档和协作
  4. 最佳实践

    • 环境隔离配置
    • 团队共享配置
    • 性能监控和优化
    • 安全凭证管理
    • 定期审计和清理
  5. 故障排除

    • OAuth授权问题
    • 网络连接问题
    • 权限不足
    • 速率限制

下一步探索

参考资源

官方文档

技术文章

社区资源