每个环境一把独立 Token,一把只开一扇门,禁止跨环境混用:
| 环境 | 端点 URL | Token 环境变量 | 服务端期望哈希存储位置 |
|---|---|---|---|
| 本机开发 | http://127.0.0.1:4000/mcp | XRAY_MCP_TOKEN | apps/api/.secrets.local.cue (McpAuthTokenHash) |
| 130 预发 | http://192.168.100.130/api/mcp | XRAY_MCP_TOKEN_130 | 130 宿主机 ~/deploy/.env (MCP_AUTH_TOKEN_HASH) |
| 生产环境 | https://www.kzgai.cloud/api/mcp | XRAY_MCP_TOKEN_PROD | 生产宿主机 ~/deploy/.env (MCP_AUTH_TOKEN_HASH) |
生产 URL 规范注意: 生产环境 URL 必须写规范主机名 www.kzgai.cloud 或确保不触发 301 重定向。因为部分 MCP 客户端在 POST 请求遇到 HTTP 301/302 重定向时不会自动跟随且丢弃请求体,会导致客户端误报 token expired 或 ConnectionRefused。
在项目根目录的 .mcp.json 中已注册三套服务:
直接通过 HTTP 客户端(如 PowerShell / curl)调试 /api/mcp 时,必须带齐现代无状态协议的逐请求契约:
请求体 params._meta 必须包含带 io.modelcontextprotocol/ 前缀的完整命名空间,不得写成裸键名,否则服务端将静默回退至 2025-11-25 遗留分支(导致 server/discover 回 -32601 Method not found):
管理面工具在 apps/api/mcp/tools.ts 中集中注册。当前版本共计 51 个工具,按业务领域分为 8 大类:
| 领域分类 | 工具数量 | 工具名称清单 |
|---|---|---|
| 1. Notes 研习库 | 13 | notes_categories_list, notes_category_upsert, notes_category_delete, notes_series_list, notes_series_upsert, notes_series_delete, notes_chapters_list, notes_chapter_get, notes_chapter_upsert, notes_chapter_delete, notes_assets_list, notes_asset_put, notes_asset_delete |
| 2. About 关于页 | 2 | about_get, about_set |
| 3. Traffic 统计 | 3 | traffic_overview, traffic_paths, traffic_agents |
| 4. Provider 配置 | 12 | llm_providers_list, llm_provider_upsert, llm_set_default, llm_provider_delete, websearch_providers_list, websearch_provider_upsert, websearch_set_default, websearch_provider_delete, imagegen_providers_list, imagegen_provider_upsert, imagegen_set_default, imagegen_provider_delete |
| 5. 站点与开关控制 | 4 | tool_config_list, tool_config_set, site_tabs_list, site_tab_set |
| 6. Skills 技能库 | 8 | skills_categories_list, skills_category_upsert, skills_category_delete, skills_list, skills_get, skills_file_get, skills_upsert, skills_delete |
| 7. Agent 沙箱执行 | 4 | skills_agent_set, skills_agent_status, sandbox_config_get, sandbox_config_set |
| 8. Source 源码快照 | 5 | source_snapshot_begin, source_files_put, source_snapshot_commit, source_snapshots_list, source_snapshot_delete |
设计准则:入参即标准 Markdown,服务端不改写正文,只自动派生 word_count 与 content_hash。
口径提示:数据源自 /t 匿名打点,访客标识按天轮换。visitorDays 为各日 UV 之和(非全局去重人数)。
安全准则:Key 加密入库,所有列表/读取接口只输出掩码;更新为部分更新语义。
设计准则:用于管理展示自研与精选的 Skill 目录包。只收 UTF-8 文本,纯文本渲染,不收二进制文件,不接受可执行代码直接在宿主服务运行。
设计准则:控制 Agent 是否被允许通过 skill_load 注入上下文以及通过 skill_run 在独立容器中运行 Python 脚本。
设计准则:站点自身源码的快照按 40 位 git SHA 三段式发布(begin → put → commit),只保留一份 current;读面 /api/source* 与 agent 的 source_* 工具只看 current。 正常情况下由 tools/source-publish/publish.mjs 随 dev.ps1 ship 自动调用(首次发版在 compose up 之后手动 dev.ps1 source-publish <host> <sha>),不是人手工具;这里的契约是给排障时看的。 只收文本(UTF-8、无 NUL);kind 由扩展名 / 文件名派生且是闭集(markdown / typescript / javascript / python / shell / powershell / sql / json / yaml / toml / css / dockerfile / text);path 相对、无 ..、无反斜杠、每段 [A-Za-z0-9._()[]-]、≤ 12 段、≤ 300 字符;单文件 ≤ 256 KB、一批 ≤ 512 KB / ≤ 200 个、一个快照 ≤ 2000 个文件(apps/api/shared/source-pack.ts)。快照只来自 git 树由脚本保证(docs/security.md §4 R-SOURCE 补记)。
审计:四个写工具(begin / put / commit / delete)每次调用一行 mcp_audit(summary 只有 sha 前 7 位与文件数,不记正文);put 对每个文件核 sha256 / bytes / lines 三个事实,commit 从实际文件行重算 totalBytes。
为防止 Agent 意外执行未授权脚本,skill_run 与沙箱运行采用了“代码白名单 + 环境变量 + MCP 开关”的三重锁闭体系:
只有以上环节全部就绪,Agent 才能在沙箱容器中执行脚本;任何环节缺失均会以安全守卫阻断(Fail-Safe)。