LumiBaseDocs

Model Context Protocol (MCP) — LumiBase

Nguồn docs tập trung cho năng lực MCP của LumiBase. Tài liệu này mô tả hiện trạng thực tế trong codebase (verify theo apps/cms/src/routes/mcp.ts, apps/cms/src/services/mcp-service.ts, packages/mcp-server/) và là nơi quay lại để phân tích việc ứng dụng MCP cho các tính năng tương lai.

TL;DR

LumiBase phơi bày hai bề mặt MCP, cùng chạy qua một codepath harness duy nhất nên quyết định của một tool gọi qua MCP giống hệt khi gọi trực tiếp Agent API (bất biến "MCP parity", Property 14):

Bề mặtTransportVị tríDùng cho
HTTP endpointStreamable HTTP (JSON-RPC 2.0, POST/response, không SSE)POST /api/v1/mcp (apps/cms/src/routes/mcp.ts)MCP client từ xa; tool động từ tool registry; chịu mọi guard của harness
Standalone serverStdio (stdin/stdout)packages/mcp-server/ (bin: lumibase-mcp)Tích hợp editor cục bộ (Claude Code, Cursor, Windsurf); 15 tool CRUD cố định

1. HTTP MCP endpoint — POST /api/v1/mcp

Nguồn: apps/cms/src/routes/mcp.ts, apps/cms/src/services/mcp-service.ts.

  • Transport: Streamable HTTP — JSON-RPC 2.0 một request/một response. GET /api/v1/mcp trả 405 METHOD_NOT_ALLOWED (không có server-initiated stream/SSE); client fallback plain request/response theo spec MCP.
  • Protocol versions: 2025-06-18 (default) và 2025-03-26. serverInfo = { name: 'lumibase-mcp', version: '1.0.0' }.
  • Auth → capability: Bearer token; roles của token trở thành capability set truyền vào harness. ⇒ một MCP client không bao giờ làm được nhiều hơn cùng token đó qua Agent API. (McpService(port).handle(body, auth.roles ?? [])).
  • Feature gate: cờ per-site contentOs.mcp (mặc định off). Tắt → 404 MCP_DISABLED. (feature-flags.ts).
  • Methods (JSON-RPC):
    • initialize — thương lượng protocol version, trả capabilities: { tools: { listChanged: false } }.
    • ping.
    • tools/list — liệt kê tool đang enabled từ ToolRegistryService; inputSchema rỗng mặc định { type: 'object' }.
    • tools/call — chạy qua AISecureHarness.execute(skillName, args, capabilities, contextMessage). Kết quả bọc { content, structuredContent, isError }.
    • notifications/initialized, notifications/cancelled → trả null ⇒ HTTP 202 Accepted không body.
  • Mapping quyết định → kết quả tool (bất biến quan trọng):
    • executedisError: false, data trong structuredContent.
    • pending_approvalisError: false, approvalId nằm trong structuredContent, KHÔNG phải lỗi protocol.
    • deniedisError: true.
    • Lỗi protocol chỉ dùng cho lỗi JSON-RPC thật: -32700 parse, -32600 invalid request, -32601 method not found, -32602 invalid params.
  • Guards kế thừa từ harness (zero logic MCP riêng): kill switch, capability, autonomy (L0–L4), constitution pin, load guard, veto window. Xem docs/en/features/agent-harness-layer.md.

Tool registry (động)

Nguồn: apps/cms/src/services/tool-registry-service.ts, bảng agentTools (packages/database/src/schema/ai.ts).

  • Registry gộp core skills (từ harness CORE_SKILLS) + override DB (agentTools per-site).
  • Mỗi AgentToolDefinition có: inputSchema, outputSchema, riskPolicy.level (safe | review_required | dangerous | blocked), rateLimit (per-minute, per-run), enabled, owner (core | db | …), extensionId?.
  • coreTool() đặt risk = dangerous nếu skill mutate schema hoặc bắt đầu bằng delete.
  • evaluatePolicy(tool, runId) kiểm tra enabled/blocked + rate limit.
  • Audit: agentToolCalls (input/output/error/status/approvalId/cost/latency); approvals: agentApprovals.

2. Standalone MCP server — @lumibase/mcp-server

Nguồn: packages/mcp-server/ (v0.6.0, @modelcontextprotocol/sdk).

  • Transport: Stdio (StdioServerTransport). Dành cho tích hợp editor cục bộ.
  • Entry: packages/mcp-server/src/index.tsnew McpServer({ name: 'lumibase', ... }), đăng ký collection/field/item tools, connect(StdioServerTransport).
  • Client: LumiBaseClient — HTTP tới /api/v1 với Bearer token + site header.
  • Config: docs/en/agent-setup/mcp-config.json — env LUMIBASE_URL, LUMIBASE_SITE_ID, LUMIBASE_TOKEN.

Tool cố định (CRUD + insights read-only)

NhómTools
Collections (7)list_collections, get_collection, create_collection, update_collection, delete_collection, diff_schema, apply_schema
Fields (3)list_fields, upsert_field, delete_field
Items (5)list_items, get_item, create_item, update_item, delete_item
Insights (5, read-only)list_dashboards, get_dashboard, list_dashboard_panels, run_panel, query_insights
Editorial (4)list_reviews, submit_review, approve_content, reject_content
Releases (6)list_releases, get_release, create_release, update_release, publish_release, delete_release
Deployments (4, read-only)list_deployment_targets, list_deployments, get_deployment, get_deployment_logs
Shares (2)create_share, revoke_share
TM / presets / misclist_tm/lookup_tm/translate_text/upsert_tm/update_tm/delete_tm, get_effective_preset, list_preset_bookmarks, list_transform_presets, get_flow_run, get_site

Insights (Sóng 1 — mcp-application-analysis.md): nhóm read-only cho phép agent "hỏi số liệu" — chạy panel đã lưu hoặc query aggregate ad-hoc (query_insights, tool giá trị nhất). Không mutate, mang quyền đọc của token, không vào HITL; aggregation được whitelist field + cap giới hạn server-side bởi InsightsService. Bảng trên minh hoạ các nhóm chính; nguồn chân lý là packages/mcp-server/src/tools/.

Cố ý KHÔNG đưa lên MCP (loại trừ có chủ đích)

Không phải bỏ sót — mỗi mục có lý do:

Bề mặtVì sao loại trừ
/realtime (SSE/WS)MCP là request/response; không streaming. Agent dùng cdc_events_read để poll.
Signed media delivery URLURL đã ký dựng ở edge bằng server secret; không có REST endpoint trả URL. /files/presigned-url chỉ cho upload.
Binary /files, /uploadsUp/download nhị phân stream ở edge — không hợp text tool.
Trigger deploySide-effect ra host ngoài → dangerous, chỉ ở governed skill triggerDeployment (HITL). Stdio chỉ có phần đọc.
/admin/encryption·/admin/sar·/admin/erasure·/retention·/scim-tokensSecurity/GDPR/enterprise admin nhạy cảm — crypto/SSRF/PII logic ở REST, không passthrough.
/auth, /me/*Auth/session + self-service của con người, không phải content-ops.
/typegen·/domains·/integrations/git·/firebase-sync·/pushDev/infra tooling, giá trị agent thấp.

2b. Content versions qua MCP (Sóng 2 — governed harness skills)

Versioning không nằm ở stdio server. Nó được phơi bày dưới dạng governed skill chảy qua AISecureHarness (POST /api/v1/mcptools/list/tools/call), vì promoteVersion ghi đè main và bắt buộc qua HITL — điều stdio passthrough không làm được.

SkillCapabilityRiskGhi chú
listVersionsitems:readsafeLiệt kê nhánh version của item (kèm cờ mainChanged).
compareVersionitems:readsafeSo sánh nhánh với main (field-level changes).
createVersionitems:writedangerousSnapshot data hiện tại vào nhánh mới.
updateVersionitems:writedangerousSửa draft/tên của nhánh.
deleteVersionitems:writedangerousXoá nhánh (không đụng main); dangerous theo tiền tố delete.
promoteVersionitems:writedangerousÁp nhánh lên main qua ItemService.patch (ghi revision + invalidate cache), rồi xoá nhánh; trả mainDiverged.
  • Nguồn: handler ở apps/cms/src/services/ai-harness.ts (buildCoreSkillsContentVersionService); định nghĩa public ở packages/ai-skills/src/skills.ts. Hai nơi phải cùng key set (test governed-skills.test.ts).
  • Risk: createVersion/updateVersion/promoteVersion đặt cờ dangerous; deleteVersion dangerous nhờ tiền tố tên. ToolRegistryService.coreToolriskPolicy.level = 'dangerous', approvalPolicy = 'before_execute'.
  • promoteVersion không irreversible: nó ghi một revision nên khôi phục được → không bị hard-cap L2 như schema drops; vẫn dangerous (HITL ở ≤L2 mặc định, cho tới khi role earn autonomy cao hơn).

3. Bất biến & ranh giới đã xác lập

  • MCP parity (Property 14): quyết định tools/call khớp byte-for-byte với quyết định harness trực tiếp. Test: apps/cms/src/services/__tests__/mcp-parity.property.test.ts.
  • Không có bảng mcp_servers/mcp_sessions riêng — MCP tái dùng hạ tầng agent (approvals, tool calls, permissions). Đây là quyết định kiến trúc cố ý (zero MCP-specific state).
  • SDK không có MCP client — MCP không phải mối quan tâm client của SDK REST.
  • Permission floor: capability = roles của token. Mọi mở rộng MCP phải tôn trọng sàn này.

4. Trang liên quan

5. Nguồn sự thật (để cập nhật khi code đổi)

Khía cạnhFile
HTTP endpoint + gatingapps/cms/src/routes/mcp.ts
JSON-RPC adapter + protocol versionsapps/cms/src/services/mcp-service.ts
Tool registry + risk/rate policyapps/cms/src/services/tool-registry-service.ts
Bảng agent (tools/calls/approvals)packages/database/src/schema/ai.ts
Standalone server + 15 toolpackages/mcp-server/src/
Feature flag contentOs.mcpapps/cms/src/services/feature-flags.ts
Parity testapps/cms/src/services/__tests__/mcp-parity.property.test.ts
Last modified: 23/07/2026