TECH NOTES

技术档案

给架构师与运维的四份速览,附一条真实的 MCP 调用。

部署架构

  • 单机:Docker Compose 拉起 serverpostgres:18 + 媒体卷。
  • 横向扩展:server 无状态,加实例即扩容;后台循环多副本安全。
  • 授权:离线 license,不依赖外网校验。
  • 媒体:本地卷或对象存储,签名 URL 按 15 分钟对齐桶。

MCP 接入

  • 端点 POST /api/v1/mcp,标准 JSON-RPC:initializetools/listtools/call
  • 工具按 scene 分域(ui / data / automation / integration / delivery 等),权限随登录身份收窄。
  • 调用约定:路径参数置于顶层,写操作体放 arguments.body
  • 列表类工具模型友好:裸排序自动归一化为数组。

脚本运行时

  • 出站 ctx.http 四道闸全在宿主侧:白名单、协议、内网、重定向。
  • Webhook 入站先验签后限频,published 快照口径。
  • 异步任务至少一次投递:5 秒轮询+指数退避;幂等键防重。
  • 批处理逐行一进程,单行失败不拖垮整批。

安全模型

  • 授权过滤随角色生效:看不见的集合,接口层同样不可见。
  • 全通道审计:谁在何时用哪个工具改了什么,逐条留痕。
  • 支付回调异步落库+失败补偿,密钥只写不回显。
  • 高危智能体操作确认前置,AI 起草授权须人工拍板。
# 用 MCP 让 AI 建一个集合(节选)
POST /api/v1/mcp
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call",
  "params": { "name": "data_collection_create",
    "arguments": { "name": "stock_ins",
      "body": { "title": "入库单",
        "fields": [
          { "code": "stock_in_no",  "type": "TEXT",   "required": true },
          { "code": "amount_total", "type": "AMOUNT" },
          { "code": "status",       "type": "ENUM",   "options": ["DRAFT", "POSTED"] } ] } } } }