先理解:MCP 后台实战的核心是把内部能力安全暴露给 AI
MCP Server 不是普通 API 的重复包装。它的价值是把后台能力以 Tools、Resources、Prompts 的形式暴露给 AI 客户端,并让客户端能发现和调用这些能力。
本篇先封装订单查询和报表工具。它们都是低风险读操作,适合作为第一个后台 MCP Server 的起点。
为什么先做读操作
读操作风险低,方便验证 MCP 链路:工具描述是否清楚、参数是否正确、返回是否适合 AI 使用。写操作要等权限、审计、二次确认补齐后再开放。
Tool 的描述要写给 AI 看
Tool 名称、描述、参数说明会直接影响模型是否会正确调用。不要只写给人类开发者看,要让 AI 能判断什么时候该用这个 Tool。
本系列会完成一个内部运营后台 MCP Server:Tools、Resources、权限校验、审计日志和高风险二次确认。
本篇成品
text
admin-mcp/
src/index.ts
src/mock-admin-api.ts
package.json初始化
bash
mkdir -p admin-mcp/src
cd admin-mcp
npm init -y
npm install @modelcontextprotocol/sdk zod
npm install -D typescript tsx @types/nodepackage.json 增加:
json
{
"type": "module",
"scripts": {
"dev": "tsx src/index.ts"
}
}模拟后台 API
src/mock-admin-api.ts:
ts
export async function getOrder(orderId: string) {
return {
orderId,
userId: "u_1001",
status: "paid",
shipped: false,
amount: 299,
}
}
export async function exportDailyReport(date: string) {
return {
date,
orders: 128,
paidAmount: 58233,
refunds: 6,
}
}创建 MCP Server
src/index.ts:
ts
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
import { z } from "zod"
import { getOrder, exportDailyReport } from "./mock-admin-api.js"
const server = new McpServer({
name: "admin-mcp",
version: "0.1.0",
})
server.tool(
"get_order",
"查询订单基础信息,只读操作",
{ orderId: z.string() },
async ({ orderId }) => {
const order = await getOrder(orderId)
return {
content: [{ type: "text", text: JSON.stringify(order, null, 2) }],
}
},
)
server.tool(
"export_daily_report",
"导出指定日期的运营日报,只读操作",
{ date: z.string().describe("YYYY-MM-DD") },
async ({ date }) => {
const report = await exportDailyReport(date)
return {
content: [{ type: "text", text: JSON.stringify(report, null, 2) }],
}
},
)
const transport = new StdioServerTransport()
await server.connect(transport)运行
bash
npm run dev这个 server 会通过 stdio 等待 MCP Client 调用。下一篇会加入 Resources 和权限模型。

