Chapter 2: MCP服务器分类
🌟 从上一章到本章
在第一章:Model Context Protocol (MCP)中,我们学习了如何通过MCP让LLM安全访问文件系统。现在,让我们想象一个更复杂的需求:假设你需要让LLM同时处理文件、查询数据库、分析代码仓库,甚至连接云端服务。这时候问题来了——如何快速找到适合这些任务的服务器?
本章将介绍MCP服务器的三类分类体系(官方示例、官方集成、社区开发),帮助你像“超市购物”一样,根据需求快速选择或构建服务器!
🎯 中心用例:选择适合任务的服务器
假设你正在开发一个AI助手,需要以下功能:
- 对于文件操作,你可以直接使用官方提供的Reference服务器(如Filesystem)
- 对于数据库访问,可能需要集成Third-Party服务器(如AWS或PostgreSQL)
- 对于GitHub分析,社区可能已开发了现成的Community服务器
🔍 三类服务器的核心区别
MCP将服务器分为三类,用不同“信任等级”和“使用场景”帮助开发者快速决策:
1. Reference(官方示例)
- 信任度:最高(由MCP团队维护)
- 用途:学习MCP标准、快速验证功能
- 示例:# 启动官方文件系统服务器(安全目录白名单)
npx -y @modelcontextprotocol/server-filesystem /my/safe/directory
2. Third-Party(官方集成)
- 信任度:高(由知名公司维护)
- 用途:连接主流工具(如AWS、GitHub、Docker)
- 示例:// 配置AWS服务器(需提供API密钥)
{
"aws": {
"command": "npx",
"args": ["@vendor/server-aws"],
"env": {
"AWS_ACCESS_KEY": "your_key"
}
}
}
3. Community(社区开发)
- 信任度:中/低(需自行验证)
- 用途:探索创新场景(如小众工具、实验性功能)
- 示例:# 安装社区开发的Nginx服务器
git clone https://github.com/user/nginx-mcp-server
cd nginx-mcp-server && npm start
🛠️ 如何根据需求选择?
步骤1:确定需求类型
核心功能(文件/数据库) | Reference | Filesystem, PostgreSQL |
企业级工具集成 | Third-Party | AWS, GitHub, Docker |
小众需求(如游戏引擎) | Community | Unity编辑器控制、3D模型渲染 |
步骤2:配置服务器
在客户端配置文件中注册服务器,例如:
{
"mcpServers": {
"文件系统": { // Reference服务器
"command": "npx",
"args": ["@modelcontextprotocol/server-filesystem", "/data"]
},
"数据库": { // Third-Party服务器
"command": "npx",
"args": ["@aws/server-postgres", "localhost:5432"]
},
"代码分析": { // Community服务器
"command": "python",
"args": ["./custom-git-server.py"]
}
}
}
🕵️ 内部实现:分类如何影响调用流程?
以下时序图展示LLM调用不同分类服务器的过程:
#mermaid-svg-qPxMNGErRGySIuk5 {font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-qPxMNGErRGySIuk5 .error-icon{fill:#552222;}#mermaid-svg-qPxMNGErRGySIuk5 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-qPxMNGErRGySIuk5 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-qPxMNGErRGySIuk5 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-qPxMNGErRGySIuk5 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-qPxMNGErRGySIuk5 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-qPxMNGErRGySIuk5 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-qPxMNGErRGySIuk5 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-qPxMNGErRGySIuk5 .marker.cross{stroke:#333333;}#mermaid-svg-qPxMNGErRGySIuk5 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-qPxMNGErRGySIuk5 .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-qPxMNGErRGySIuk5 text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-qPxMNGErRGySIuk5 .actor-line{stroke:grey;}#mermaid-svg-qPxMNGErRGySIuk5 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-qPxMNGErRGySIuk5 .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-qPxMNGErRGySIuk5 #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-qPxMNGErRGySIuk5 .sequenceNumber{fill:white;}#mermaid-svg-qPxMNGErRGySIuk5 #sequencenumber{fill:#333;}#mermaid-svg-qPxMNGErRGySIuk5 #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-qPxMNGErRGySIuk5 .messageText{fill:#333;stroke:#333;}#mermaid-svg-qPxMNGErRGySIuk5 .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-qPxMNGErRGySIuk5 .labelText,#mermaid-svg-qPxMNGErRGySIuk5 .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-qPxMNGErRGySIuk5 .loopText,#mermaid-svg-qPxMNGErRGySIuk5 .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-qPxMNGErRGySIuk5 .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-qPxMNGErRGySIuk5 .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-qPxMNGErRGySIuk5 .noteText,#mermaid-svg-qPxMNGErRGySIuk5 .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-qPxMNGErRGySIuk5 .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-qPxMNGErRGySIuk5 .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-qPxMNGErRGySIuk5 .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-qPxMNGErRGySIuk5 .actorPopupMenu{position:absolute;}#mermaid-svg-qPxMNGErRGySIuk5 .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-qPxMNGErRGySIuk5 .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-qPxMNGErRGySIuk5 .actor-man circle,#mermaid-svg-qPxMNGErRGySIuk5 line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-qPxMNGErRGySIuk5 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
LLM
MCP客户端
Third-Party服务器
GitHub API
Reference服务器
本地文件系统
请求"分析代码仓库"
转发请求给GitHub服务器
获取仓库数据
返回代码变更记录
格式化结果
请求"读取合同文件"
转发请求给文件系统
读取合同.pdf
返回文件内容
返回文本内容
LLM
MCP客户端
Third-Party服务器
GitHub API
Reference服务器
本地文件系统
💡 总结与展望
本章我们学到:
接下来,我们将深入MCP传输机制,探索服务器与LLM如何通过不同协议(如STDIO、HTTP)高效通信——这将解答“为什么某些服务器启动更快”等问题!
🚀 下一步:尝试在你的项目中混合使用不同类别的服务器,比如同时配置文件系统和GitHub分析工具!
评论前必须登录!
注册