实战后台 MCP 01:封装订单查询和报表工具

先理解: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/node

package.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 和权限模型。

实战后台 MCP 02:增加 Resources 和权限控制
实战工单 Agent 04:提供 API、评测并灰度上线