# Claude Desktop 如何发现和调用 MCP 服务器
## 问题
如果你只配置了 `http://localhost:8000`,Claude 怎么知道调用哪个接口?
## 答案:MCP 协议的标准发现流程
### 1. 配置要求
**重要:** 你需要明确指定完整的端点路径!
```json
{
"mcpServers": {
"hello-world": {
"url": "http://localhost:8000/mcp" // ✅ 必须包含 /mcp
}
}
}
```
**不是:**
```json
{
"mcpServers": {
"hello-world": {
"url": "http://localhost:8000" // ❌ 缺少端点路径
}
}
}
```
### 2. Claude Desktop 的发现流程
当你配置了 `http://localhost:8000/mcp` 后,Claude Desktop 会按以下步骤操作:
#### 步骤 1: 初始化连接
Claude Desktop 启动时,会向配置的 URL 发送 `initialize` 请求:
```http
POST http://localhost:8000/mcp
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": {
"name": "Claude Desktop",
"version": "x.x.x"
}
}
}
```
**服务器响应:**
```json
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"protocolVersion": "2024-11-05",
"capabilities": {
"tools": {}
},
"serverInfo": {
"name": "hello-world-mcp",
"version": "1.0.0"
}
}
}
```
#### 步骤 2: 获取工具列表
初始化成功后,Claude Desktop 会请求可用工具列表:
```http
POST http://localhost:8000/mcp
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/list",
"params": {}
}
```
**服务器响应:**
```json
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"tools": [
{
"name": "hello_world",
"description": "一个简单的Hello World工具,支持多语言问候",
"inputSchema": {
"type": "object",
"properties": {
"name": {...},
"language": {...},
"count": {...}
}
}
}
]
}
}
```
#### 步骤 3: 用户使用工具时
当用户在 Claude 中使用工具时,Claude Desktop 会发送工具调用请求:
```http
POST http://localhost:8000/mcp
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "hello_world",
"arguments": {
"name": "张三",
"language": "zh",
"count": 2
}
}
}
```
## 为什么需要明确指定 `/mcp`?
### MCP 协议标准
MCP 协议**没有**规定默认的端点路径。不同的服务器实现可能使用不同的路径:
- 你的服务器:`/mcp`
- 其他服务器可能使用:`/api/mcp`、`/v1/mcp`、`/mcp/v1` 等
因此,**必须明确指定完整的端点路径**。
### 如果只配置了基础 URL
如果你只配置了 `http://localhost:8000`:
1. **Claude Desktop 可能尝试常见的路径**(但这不是标准行为)
- 可能尝试 `/mcp`
- 可能尝试 `/api/mcp`
- 但**不保证**会成功
2. **更可能的情况**:
- Claude Desktop 不知道端点路径
- 连接失败
- 工具不可用
## 正确的配置方式
### ✅ 推荐配置(明确指定端点)
```json
{
"mcpServers": {
"hello-world": {
"url": "http://localhost:8000/mcp"
}
}
}
```
### ✅ 如果使用 HTTPS
```json
{
"mcpServers": {
"hello-world": {
"url": "https://your-server.com/mcp"
}
}
}
```
### ✅ 如果需要认证
```json
{
"mcpServers": {
"hello-world": {
"url": "http://localhost:8000/mcp",
"headers": {
"Authorization": "Bearer your-token"
}
}
}
}
```
## 验证配置
### 1. 检查服务器是否响应
```powershell
# 测试端点是否可访问
curl http://localhost:8000/mcp
```
### 2. 测试初始化请求
```powershell
$body = @{
jsonrpc = "2.0"
id = 1
method = "initialize"
params = @{
protocolVersion = "2024-11-05"
capabilities = @{}
clientInfo = @{
name = "test-client"
version = "1.0.0"
}
}
} | ConvertTo-Json -Depth 10
Invoke-RestMethod -Uri "http://localhost:8000/mcp" `
-Method Post `
-ContentType "application/json" `
-Body $body
```
### 3. 查看 Claude Desktop 日志
如果连接失败,查看 Claude Desktop 的日志文件:
**Windows:**
```
%APPDATA%\Claude\logs\
```
日志中会显示:
- 连接尝试
- 错误信息
- 请求和响应
## 总结
1. **必须明确指定端点路径**:`http://localhost:8000/mcp`
2. **Claude Desktop 使用标准 MCP 协议**:
- `initialize` - 初始化连接
- `tools/list` - 获取工具列表
- `tools/call` - 调用工具
3. **所有调用都通过同一个端点**:`/mcp`
4. **协议是 JSON-RPC 2.0**:通过 `method` 字段区分操作
## 常见错误
### ❌ 错误配置
```json
{
"mcpServers": {
"hello-world": {
"url": "http://localhost:8000" // 缺少 /mcp
}
}
}
```
**结果:** Claude Desktop 不知道端点路径,连接失败
### ✅ 正确配置
```json
{
"mcpServers": {
"hello-world": {
"url": "http://localhost:8000/mcp" // 包含完整路径
}
}
}
```
**结果:** Claude Desktop 可以正常连接和使用工具