构建 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 直接暴露到公网。
print 写日志:stdio 模式下 stdout 是协议通道,普通打印会破坏消息;日志写 stderr 或用日志库。run_sql/run_shell 万能工具权限过大;按业务动作拆成窄接口。resources 可能被用来读任意文件;限制根目录、大小和类型。合上页面,先回答,再展开对照。
print 打日志?
小程序版
微信扫码,随时查命令