5.7b MCP 进阶
💡 一句话总结:掌握 MCP 高级配置,创建自定义 MCP 服务器。
学完你能做什么
- 能创建自定义 MCP 服务器
- 能配置高级安全策略
- 能进行性能优化
- 能调试 MCP 连接
🎒 开始前的准备
确保你已经完成以下事项:
- [ ] 完成了 5.7a MCP 基础
- [ ] 有 Node.js 开发经验
核心思路
MCP 服务器架构
MCP Server
├── 工具定义 (Tools)
├── 资源定义 (Resources)
├── 提示模板 (Prompts)
└── 处理器 (Handlers)自定义服务器
基本结构
typescript
// mcp-server.ts
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import {
CallToolRequestSchema,
ListToolsRequestSchema,
} from "@modelcontextprotocol/sdk/types.js";
const server = new Server(
{ name: "my-custom-server", version: "1.0.0" },
{ capabilities: { tools: {} } }
);
// 定义工具
server.setRequestHandler(ListToolsRequestSchema, async () => {
return {
tools: [
{
name: "my_tool",
description: "我的自定义工具",
inputSchema: {
type: "object",
properties: {
input: {
type: "string",
description: "输入参数",
},
},
required: ["input"],
},
},
],
};
});
// 处理工具调用
server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params;
if (name === "my_tool") {
// 处理逻辑
return {
content: [
{
type: "text",
text: JSON.stringify(result),
},
],
};
}
});
// 启动服务器
const transport = new StdioServerTransport();
server.connect(transport);高级工具
typescript
// 带进度通知
server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params;
if (name === "long_running_task") {
// 发送进度
await server.notification({
method: "notifications/progress",
params: {
progress: 0.3,
total: 1,
},
});
// 继续处理
const result = await process(args);
return {
content: [{ type: "text", text: result }],
};
}
});安全配置
权限控制
yaml
mcp:
servers:
custom:
command: "./mcp-server"
security:
allowed_tools:
- "read_file"
- "write_file"
blocked_tools:
- "execute_command"
- "delete_file"
resource_limits:
max_file_size: "10MB"
max_requests_per_minute: 60认证配置
yaml
mcp:
servers:
secure:
command: "./mcp-server"
auth:
type: "bearer"
token: "${MCP_TOKEN}"
encryption:
enabled: true
algorithm: "aes-256-gcm"性能优化
yaml
mcp:
servers:
optimized:
command: "./mcp-server"
performance:
connection_pool: 10
request_timeout: 30000
caching:
enabled: true
ttl: 300
batch:
enabled: true
max_batch_size: 10跟我做
实战:创建天气查询 MCP 服务器
typescript
// weather-server.ts
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
const server = new Server(
{ name: "weather-server", version: "1.0.0" },
{ capabilities: { tools: {} } }
);
server.setRequestHandler(ListToolsRequestSchema, async () => {
return {
tools: [
{
name: "get_weather",
description: "获取指定城市的天气信息",
inputSchema: {
type: "object",
properties: {
city: {
type: "string",
description: "城市名称",
},
},
required: ["city"],
},
},
{
name: "get_forecast",
description: "获取天气预报",
inputSchema: {
type: "object",
properties: {
city: { type: "string" },
days: {
type: "number",
default: 7,
maximum: 14,
},
},
required: ["city"],
},
},
],
};
});
server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params;
if (name === "get_weather") {
const weather = await fetchWeather(args.city);
return {
content: [{ type: "text", text: JSON.stringify(weather) }],
};
}
if (name === "get_forecast") {
const forecast = await fetchForecast(args.city, args.days);
return {
content: [{ type: "text", text: JSON.stringify(forecast) }],
};
}
});
const transport = new StdioServerTransport();
server.connect(transport);检查点 ✅
全部通过才能继续
- [ ] 能创建自定义服务器
- [ ] 能配置安全策略
- [ ] 能进行性能优化
- [ ] 能调试连接
本课小结
你学会了:
- MCP 服务器架构
- 创建自定义服务器
- 安全配置
- 性能优化
- 实战案例
下一课预告
下一课我们将学习 IDE 集成,连接 VS Code。
📚 更多完整模板:Prompt 模板库

