你遇见过这种场景吗?
你在用 Claude Desktop 写代码,想把本地某个配置文件的内容贴进去,结果 Claude 说"我无法访问你的本地文件"。
或者你在 Cursor 里调试,需要实时查看数据库里的数据,但 AI 助手根本不知道你的表结构。
2026年,MCP(Model Context Protocol)协议解决了这个问题。 它是 Anthropic 推出的开放标准,让 AI 工具能通过标准化接口访问你的本地资源——文件、数据库、API,不需要每次重新开发集成。
什么是 MCP?
MCP 由两部分组成:
- MCP Host:AI 应用本身(Claude Desktop、Cursor、Windsurf 等)
- MCP Server:提供具体能力的后台服务(文件系统访问、数据库查询、API 调用等)
Host 和 Server 之间通过 JSON-RPC 2.0 通信,传输工具(tools)、资源(resources)和提示词(prompts)。
一个 MCP Server 可以给你的多个 AI 工具共享能力。 配置一次,全平台可用。
准备工作
你需要准备:
- 一台有 Node.js 18+ 或 Python 3.10+ 的 Linux VPS
- 基本的 npm 或 pip 使用经验
- 一个 AI 工具(Claude Desktop、Cursor 或 Windsurf)
先检查环境:
node --version
# 需要 v18.0.0 或更高
npm --version
# 任意现代版本即可
如果没装 Node.js:
# Ubuntu/Debian
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
# 验证
node --version
npm --version
第一步:用 Docker 快速部署 MCP Server
最快的方式是使用官方的 MCP Docker 镜像,它已经打包好了最常见的工具:
# 创建配置目录
mkdir -p ~/mcp-server
cd ~/mcp-server
创建 docker-compose.yml:
version: "3.8"
services:
mcp-server:
image: ghcr.io/anthropics/mcp-server:latest
container_name: mcp-server
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- MCP_SERVER_HOST=0.0.0.0
- MCP_SERVER_PORT=3000
volumes:
- ./data:/app/data
restart: unless-stopped
command: >
mcp-server --transport stdio
启动服务:
docker compose up -d
# 检查容器状态
docker ps | grep mcp-server
看到 Up 状态就说明容器已启动。
第二步:用原生方式部署(推荐)
如果你需要更灵活的控制,可以用官方 SDK 从零搭建:
2.1 初始化项目
mkdir -p ~/my-mcp-server
cd ~/my-mcp-server
# 用 npm 初始化
npm init -y
# 安装 MCP SDK
npm install @modelcontextprotocol/sdk
2.2 创建 MCP Server 代码
新建 server.js:
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import {
ListToolsRequestSchema,
CallToolRequestSchema,
} from "@modelcontextprotocol/sdk/types.js";
import * as fs from "fs/promises";
import * as path from "path";
const server = new Server(
{
name: "my-local-server",
version: "1.0.0",
},
{
capabilities: {
tools: {},
},
}
);
// 定义可用的工具
server.setRequestHandler(ListToolsRequestSchema, async () => {
return {
tools: [
{
name: "read_file",
description: "读取本地文件的完整内容",
inputSchema: {
type: "object",
properties: {
path: {
type: "string",
description: "文件的绝对路径",
},
},
required: ["path"],
},
},
{
name: "list_directory",
description: "列出目录下的文件和子目录",
inputSchema: {
type: "object",
properties: {
path: {
type: "string",
description: "目录的绝对路径",
},
},
required: ["path"],
},
},
],
};
});
// 处理工具调用
server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params;
if (name === "read_file") {
const content = await fs.readFile(args.path, "utf-8");
return {
content: [{ type: "text", text: content }],
};
}
if (name === "list_directory") {
const entries = await fs.readdir(args.path, { withFileTypes: true });
const result = entries.map((entry) => ({
name: entry.name,
type: entry.isDirectory() ? "directory" : "file",
}));
return {
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
};
}
throw new Error(`未知工具: ${name}`);
});
// 启动服务
async function main() {
const transport = new StdioServerTransport();
await server.connect(transport);
console.error("MCP Server 已启动,等待连接...");
}
main().catch((error) => {
console.error("启动失败:", error);
process.exit(1);
});
2.3 启动 MCP Server
node server.js
你会看到输出:MCP Server 已启动,等待连接...
这说明 MCP Server 已经在监听标准输入输出,随时可以接收 AI 工具的请求。
第三步:配置 AI 工具连接 MCP Server
3.1 Claude Desktop 配置
编辑 ~/.config/claude-desktop/config.json(如果没有就创建):
{
"mcpServers": {
"my-local-server": {
"command": "node",
"args": ["/home/your-username/my-mcp-server/server.js"],
"env": {}
}
}
}
重启 Claude Desktop,工具列表里就会出现 read_file 和 list_directory。
3.2 Cursor 配置
编辑项目根目录的 .cursor/mcp.json:
{
"mcpServers": {
"my-local-server": {
"command": "node",
"args": ["/home/your-username/my-mcp-server/server.js"],
"env": {}
}
}
}
保存后重启 Cursor,配置就会生效。
3.3 Windsurf 配置
Windsurf 的 MCP 配置方式与 Cursor 相同,使用 .cursor/mcp.json 或项目级配置。
验证部署是否成功
4.1 本地测试 MCP Server
在另一个终端运行:
# 用 echo 模拟 JSON-RPC 请求
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | \
node /home/your-username/my-mcp-server/server.js
应该返回:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"tools": [
{
"name": "read_file",
"description": "读取本地文件的完整内容",
"inputSchema": {
"type": "object",
"properties": {
"path": { "type": "string" }
},
"required": ["path"]
}
},
{
"name": "list_directory",
"description": "列出目录下的文件和子目录",
"inputSchema": {
"type": "object",
"properties": {
"path": { "type": "string" }
},
"required": ["path"]
}
}
]
}
}
4.2 测试工具调用
echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"list_directory","arguments":{"path":"/home/your-username"}}}' | \
node /home/your-username/my-mcp-server/server.js
4.3 在 AI 工具中验证
打开 Claude Desktop,输入:
列出我 home 目录下的文件
如果 AI 助手能正确返回文件列表,说明 MCP Server 工作正常。
常见问题
问题1:AI 工具提示 “MCP Server 连接失败”
可能原因:
- MCP Server 路径错误
- Node.js 版本不满足要求(需要 18+)
- 权限问题:确保 AI 工具能读取 MCP Server 目录
解决方法:
# 检查 Node.js 版本
node --version
# 检查文件权限
ls -la ~/my-mcp-server/
# 测试 MCP Server 是否能独立运行
cd ~/my-mcp-server && node server.js
问题2:工具调用返回 “permission denied”
MCP Server 运行时的用户权限和 AI 工具不一致。
解决方法:
# 检查运行用户
whoami
# 确保文件可访问
chmod 644 ~/my-mcp-server/server.js
问题3:Docker 部署后容器反复重启
检查环境变量和挂载路径:
docker logs mcp-server
docker inspect mcp-server | grep -A 5 "Mounts"
问题4:多工具重复配置
每个 AI 工具都需要单独配置 MCP Server 路径。建议在项目根目录统一存放 MCP Server 代码,然后用相对路径配置:
{
"mcpServers": {
"my-server": {
"command": "node",
"args": ["./server.js"]
}
}
}
总结
MCP 协议是 2026 年 AI 工具生态的基础设施。通过部署一个 MCP Server,你可以让 Claude Desktop、Cursor、Windsurf 等工具共享同一套本地资源访问能力。
核心步骤就三步:
- 部署 MCP Server(Docker 或原生方式)
- 在 AI 工具中配置连接
- 验证工具和响应
配置一次,所有工具都能用。下次升级 AI 工具时,不用再重新开发集成。
你的 VPS 上跑了哪些 MCP Server?评论区聊聊。