跳到主要内容

MCP企业级应用案例

本文用真实存在的官方 MCP Server(filesystem / postgres / github / slack 等)讲企业落地,并给出多租户 MCP 网关、工具调用审计、与 SIEM 集成的工程方案。所有代码均基于唯一官方 SDK @modelcontextprotocol/sdk,不使用任何虚构包,可直接作为面试回答。

目录

⚠️ 关于本文的修订说明

旧版本曾给出 @mcp/core@mcp/resources@mcp/medical-resources@mcp/ecommerce-resourcesHL7AuthenticationProvider虚构包,以及「准确率提升 15%、QPS 1 万」这类无出处指标。这些都已删除。企业落地应基于真实官方 Server 与可核实的工程实践,下文据此重写。

🧱 真实可用的官方 MCP Server

Anthropic 维护的参考实现 + 大量第三方官方实现可直接复用,常见包括:

Server能力典型用途
filesystem受限目录的读/写/列目录文档、代码库只读检索
postgres / sqlite只读 SQL 查询、Schema 自省结构化数据问答
github仓库、Issue、PR、代码搜索研发协作、代码审查
slack频道消息读写团队通知、ChatOps
git本地仓库操作代码历史分析
puppeteer / playwright浏览器自动化网页抓取、E2E
memory知识图谱式记忆跨会话记忆

宿主只需在配置中声明拉起命令即可,例如 Claude Desktop / Cursor 的 mcpServers 配置(stdio):

{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/data/knowledge-base"]
},
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://readonly@db:5432/app"]
}
}
}

关键:postgres Server 用只读账号,filesystem Server 用 Roots/路径白名单限制可访问目录——这就是「最小权限」的落地。

🏢 案例1:内部知识库 + 数据库问答(filesystem + postgres)

目标:让内部助手既能检索文档(Markdown/PDF 导出文本),又能基于业务库回答数据问题。

架构:宿主同时连接两个官方 Server,模型按问题类型选择工具/资源。

自研补充 Server(当官方 Server 不满足时,用官方 SDK 自己写原子工具,例如全文检索):

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";

const server = new McpServer({ name: "kb-search", version: "1.0.0" });

server.tool(
"search_docs",
"在企业知识库中做全文检索,返回最相关片段",
{ query: z.string(), topK: z.number().int().min(1).max(20).default(5) },
async ({ query, topK }) => {
const hits = await fullTextSearch(query, topK); // 你的检索实现(如 Elasticsearch)
return {
content: hits.map((h) => ({ type: "text", text: `# ${h.title}\n${h.snippet}` })),
};
}
);

await server.connect(new StdioServerTransport());
console.error("kb-search ready");

工程要点:检索 Server 保持原子(只负责「查」),是否要「先查文档再查库再汇总」这种多步流程,交由 Agent 层编排。

🛠️ 案例2:研发协作助手(github + slack)

目标:助手能读 PR、查 Issue、在评审后向 Slack 频道播报;写操作(评论 PR、发消息)需人工确认。

  • server-github:读 PR/Issue、代码搜索;写操作(评论、合并)标记为高危
  • server-slack:向频道发消息(高危,需 HITL)。
// 宿主侧:对高危工具强制人工确认(HITL)
const HIGH_RISK = new Set(["create_pull_request_review", "merge_pull_request", "slack_post_message"]);

async function callToolWithGuard(client, name, args) {
if (HIGH_RISK.has(name)) {
const ok = await askHumanApproval(`即将执行高危操作:${name}\n参数:${JSON.stringify(args)}`);
if (!ok) return { content: [{ type: "text", text: "已被用户取消" }], isError: true };
}
return client.callTool({ name, arguments: args });
}

🚪 企业落地核心:多租户 MCP 网关

企业里不会让每个用户各自连一堆 Server,而是引入 MCP 网关:统一鉴权、按租户/角色路由到不同 Server、限流、审计。网关对宿主暴露单一 Streamable HTTP 端点,对内连接后端各 Server。

网关关键职责:

  • 鉴权:校验 OAuth 2.1 访问令牌,解析租户/角色/scope。
  • 授权路由:按租户隔离可见的 Server 与工具子集(多租户最小权限)。
  • 限流与配额:按租户限制 QPS 与 token 预算。
  • 审计:对每次 tools/call 记录主体、工具、参数摘要、结果状态。
// 网关:在转发 tools/call 前做鉴权 + 审计(示意,基于 Streamable HTTP)
app.post("/mcp", authenticateOAuth, async (req, res) => {
const { tenant, roles } = req.auth;
const body = req.body;

if (body.method === "tools/call") {
const tool = body.params?.name;
if (!isToolAllowed(tenant, roles, tool)) {
return res.status(403).json({
jsonrpc: "2.0", id: body.id,
error: { code: -32001, message: "tool not permitted for tenant" },
});
}
await audit.emit({
type: "mcp.tool.call",
tenant, subject: req.auth.sub, tool,
argsDigest: digest(body.params?.arguments),
ts: new Date().toISOString(),
});
}
return forwardToBackendServer(tenant, body, res); // 转发到对应后端 Server
});

🧾 工具调用审计与 SIEM 集成

合规场景(金融、医疗等)要求完整审计追踪。建议对每次工具调用产生结构化审计事件,并以标准格式投递到 SIEM(Splunk、Elastic SIEM、Microsoft Sentinel 等)。

审计事件字段建议:

字段说明
subject / tenant调用主体与租户
tool工具名
argsDigest参数哈希/脱敏摘要(避免落地敏感原文)
decisionallow / denied / require_approval
resultsuccess / error,及错误码
latencyMs耗时
traceId关联端到端链路
// 将审计事件以 CEF/JSON 投递到 SIEM(示意)
async function emitToSiem(event) {
await fetch(process.env.SIEM_HEC_URL, {
method: "POST",
headers: { Authorization: `Splunk ${process.env.SIEM_TOKEN}`, "Content-Type": "application/json" },
body: JSON.stringify({ event, sourcetype: "mcp:audit" }),
});
}

配合 MCP高级特性与最佳实践 中的 OpenTelemetry span,即可同时满足「可观测性」与「合规审计」两类需求。

📝 落地最佳实践清单

  1. 优先复用官方 Server,确需定制再用 @modelcontextprotocol/sdk 写原子工具。
  2. 最小权限:数据库只读账号、文件路径白名单(Roots)、按租户裁剪工具集。
  3. 高危工具 HITL:写操作、删除、发消息一律人工确认。
  4. 远程统一走网关 + OAuth 2.1 + Streamable HTTP,不暴露后端 Server。
  5. 全量审计 + SIEM 集成,参数脱敏、关联 traceId。
  6. 供应链审查:第三方 Server 锁版本、审依赖,纳入发布清单。
  7. 编排上移到 Agent 层(LangGraph / OpenAI Agents SDK),MCP 保持原子、无状态、可复用。