系统学习 AI 学习路径:从 GPU 运行时到推理、微调与 RAG 评估

mcp-server

构建 MCP Server:把工具、资源和提示词以标准协议暴露给模型客户端

补充说明

MCP(Model Context Protocol)让模型客户端通过标准协议访问外部能力。Server 可以暴露三类能力:tools(可调用函数)、resources(可读取的数据)和 prompts(可复用提示模板)。传输方式常见 stdio(本地进程)和 HTTP/SSE(远程服务)。MCP 解决的是“工具接入标准化”,不负责模型推理和 Agent 编排。

写 Server 时先想清楚权限边界:每个 tool 能做什么、参数如何校验、失败如何返回、是否需要审批。不要把所有内部 API 都包成一个万能工具;工具越少、语义越清晰,模型越不容易误用。

常用示例

# 使用 MCP Python SDK 的最小 Server(stdio)
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("docs")

@mcp.tool()
def search_docs(query: str, top_k: int = 5) -> list[dict]:
    """搜索内部文档,返回标题、摘要和链接。"""
    results = docs_index.search(query, top_k)
    return [{"title": r.title, "snippet": r.snippet, "url": r.url} for r in results]

@mcp.resource("docs://handbook")
def handbook() -> str:
    """返回员工手册的只读内容。"""
    return open("/srv/docs/handbook.md").read()

if __name__ == "__main__":
    mcp.run()
// 客户端配置(stdio)
{
  "mcpServers": {
    "docs": {
      "command": "python",
      "args": ["/srv/mcp/docs_server.py"],
      "env": {"DOCS_TOKEN": "${DOCS_TOKEN}"}
    }
  }
}
# 用 MCP Inspector 调试工具列表和调用
npx @modelcontextprotocol/inspector python /srv/mcp/docs_server.py

远程部署时用 HTTP/SSE,并在网关层做认证、限流和审计;不要把内部 Server 直接暴露到公网。

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. MCP Server 的 tools、resources、prompts 分别是什么?
  2. stdio 模式下为什么不能用 print 打日志?
  3. 为什么不应该把内部 API 包成一个万能工具?
答案
  1. tools 是可调用函数;resources 是可读取的数据;prompts 是可复用的提示模板。
  2. stdio 的 stdout 是协议消息通道,普通打印会混入协议数据,导致客户端解析失败;日志应写 stderr。
  3. 万能工具权限过大、语义模糊,模型容易误用,难以审计和限制;应拆成窄接口并做参数校验。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令