WuKongIM Docs

Interface Inventory & Trust Boundaries

Private Manager, node transport, MCP, Cloud View, plugin, webhook, and agent contracts.

This page answers “what other entry surfaces exist in source?” It inventories boundaries; it does not promote internal interfaces into public compatibility promises.

Manager: 108 private routes

The authoritative registrations are internal/access/manager/server.go, backups.go, and restore.go.

GroupCountPermission with auth_on=trueWith auth_on=false
Operations MCP endpoint1Dedicated MCP BearerDedicated MCP Bearer
Login1Fixed-user loginNot registered
Permissions1cluster.permission:rUnguarded
MCP read / write2 / 5cluster.mcp:r / cluster.mcp:wFail closed
Node read / write8 / 12cluster.node:r / cluster.node:wUnguarded
Slot read / write3 / 3cluster.slot:r / cluster.slot:wUnguarded
Controller read / write6 / 3cluster.controller:r / cluster.controller:wUnguarded
Diagnostics read / write4 / 2cluster.diagnostics:r / cluster.diagnostics:wUnguarded
Application log read3cluster.log:rUnguarded
Database inspect3cluster.db:rUnguarded
Channel read / write8 / 12cluster.channel:r / cluster.channel:wUnguarded
Migration read2cluster.channel:rUnguarded
Connection read2cluster.connection:rUnguarded
Webhook config read1cluster.webhook:rUnguarded
Plugin read / write3 / 5cluster.plugin:r / cluster.plugin:wUnguarded
User read / write3 / 4cluster.user:r / cluster.user:wUnguarded
Backup read / write2 / 7cluster.backup:r / cluster.backup:wReads unguarded; writes fail closed
Restore write2Exact cluster.restore:wFail closed

Total: 108. POST /manager/slots/leader-transfer-plan is a planning-only route under read permission. The MCP handler behind ANY /mcp accepts only POST and rejects non-empty Origin; all other Manager routes use open CORS. lib/api-surface-contracts.ts retains the complete method/path set and a source test checks it.

Node transport: 56 shared IDs

The audience is cluster-internal. The shared TCP transport has no per-call Bearer or TLS identity. Only join validates the Join Token; other calls trust cluster routing and an isolated network.

IDCatalog names
1–31slot_forward_propose, channel_pull, channel_ack, channel_pull_hint, channel_notify, control_state_sync, control_report_node, control_report_slots, channel_append, channel_append_batch, control_raft, control_task_result, presence_authority, presence_owner, delivery_push, delivery_fanout, channel_pull_batch, channel_pull_hint_batch, channel_last_visible, reserved_conversation, channel_authority_send, manager_connection, manager_logs, manager_controller_raft, manager_slot_raft, manager_channels, manager_db_inspect, manager_app_logs, manager_diagnostics, manager_plugins, plugin_binding_scan
32–33msg_slot_raft, msg_slot_raft_batch
64–86control_write, manager_message_retention, node_lifecycle, slot_status, manager_task_audit, channel_migration_meta, message_event_append, manager_node_config, manager_latest_messages, scheduled_backup_messages, scheduled_backup_slot, scheduled_backup_probe, scheduled_backup_restore, operations_mcp, manager_goroutines, slot_subscriber_metadata, slot_channel_metadata, channel_conversation_heads, channel_committed_reads, slot_user_membership, slot_runtime_metadata, slot_permission_metadata_batch, channel_quorum_exchange

ID 16 is retired-reserved and ID 20 reserves a removed feature; neither may be reused. The default Slot proxy uses promoted IDs 79/80/83/84/85. The generic, non-default Slot Store still declares private IDs 4/47/53; 4 overlaps shared channel_pull_hint, so this is catalog debt, not a stable contract. Keep these protocols in an unstable internal inventory and never generate fake OpenAPI paths for them.

MCP

SurfaceExact toolsBoundary
Operations MCP POST /mcpcluster_health, node_inspect, slot_inspect, channel_runtime_inspect, controller_tasks_query, metrics_query_range, logs_search, logs_context, diagnostics_query, config_read_redacted, backup_inspect, pprof_analyzeDedicated wko_* Bearer; Manager JWT rejected; non-empty Origin rejected; read-only except bounded pprof_analyze
Cloud Analysis MCP POST /mcprun_inspect, cluster_snapshot, workload_inspect, metrics_query_range, logs_search, logs_context, diagnostics_query, task_audits_query, trace_start, trace_query, profile_capture, profile_top, profile_list, config_read_redactedNon-renewable Analysis Bearer scoped to one live Run; trace_start and profile_capture are bounded active diagnostics
Review Check stdio MCPcheck_list, check_result, check_runLocal credential-free stdio; named checks only, never arbitrary commands, arguments, or paths

The Cloud Analysis Gateway also exposes unauthenticated GET /healthz, unauthenticated GET /self-check, and optional GitHub-OIDC POST /analysis/token. All are agent-internal, not product APIs.

Cloud View

Cloud View is an unauthenticated Simulation Viewer reverse proxy. ANY /cloud-view/status returns no-store state, /prometheus[/...] proxies Prometheus, and any WebSocket Upgrade proxies Gateway. Known Product prefixes proxy API; every other path defaults to Manager. It adds per-IP/global limits and WS concurrency bounds, but no identity. X-WuKongIM-Cloud-View-Gate affects benchmark-purity marking only; it does not authorize a request.

Agent and benchmark controls

  • wkissueagent: reconcile-github, recover-task, build-context, capture-candidate, verify-candidate, mint-app-token, publish-candidate.
  • wkreviewagent: normalize-review-result, reconcile-github, recover-review, build-context, verify-baseline, validate-review-result, validate-explanation, append-state, publish-review.
  • wkreviewcheck: go-format, go-mod-tidy, web, demo, docs, docs-integration, three-node.
  • Generic benchmark worker: 14 /healthz and /v1/* control routes; all except Health require a Control Token or explicitly enabled insecure control.
  • Chat-lifecycle worker: 12 /healthz, /v1/info, and /v1/chat-lifecycle/* routes; every endpoint, including Health, requires Bearer authentication.

These are strict JSON/stdin or private HTTP process contracts. Maintain them only in agent and benchmark inventories.

Public integration boundary

SurfaceAudiencePublication decision
Plugin host RPC: 8 Unix-socket routesPlugin authorSeparate Beta Plugin Protocol; protobuf/wkrpc, not OpenAPI
Webhook: msg.notify, msg.offline, user.onlinestatusPublic integrationPublish a callback contract; currently POST JSON, HTTP 200-only success, no signature
Operations HTTPOperatorSeparate operations documentation; never mix with Product HTTP
Manager, Node, Cloud View, Cloud Analysis, Agent, BenchPrivateDocument boundary, stability, and risk only; no public compatibility promise

The exact local plugin paths are /plugin/start, /close, /message/send, /channel/messages, /cluster/config, /cluster/channels/belongNode, /conversation/channels, and /plugin/httpForward. Caller identity comes from the Unix-socket wkrpc UID. Webhook delivery uses best-effort in-memory retry with no crash replay; receivers must add source authentication and idempotency.

On this page