Skip to content

Capability policy

Provisional — ADR-0003 open

Capability names, semantics, and deny-by-default evaluation are not finalized. The vocabulary below is illustrative from the proposed system. ADR-0003 is the single authority when accepted; until then, treat examples as non-binding.

Design intent

  • Deny by default — operations not explicitly granted for the active profile are rejected locally before any IBM MQ I/O.
  • Profile as trust boundary — each named profile carries its own endpoint, credentials, capabilities, rate limits, and audit context.
  • Operation-oriented grants — avoid ambiguous global modes like “read-only” without defining whether message payloads are included (design questions 5–7).

Illustrative capability vocabulary (TBD)

Capability Intended meaning (hypothesis)
inspect Queue managers, objects, status, depth, diagnostics
browse Non-destructive message metadata and optionally payloads
consume Destructive get/consume — separately gated from browse
produce Put messages with validation
administer Typed define/alter/delete for MQ objects
execute_mqsc Exceptional raw MQSC — disabled by default (ADR-0008 Accepted)

Mixed read/write across environments is expressed by different profiles, not by toggling modes at runtime. See Examples.

Object-level constraints (TBD)

Whether queue/object name allowlists are required in the first release is an open design question 9, tracked in POL-002.

Enforcement point

Policy evaluation sits in the application layer before the mqweb adapter. Denied calls increment ibm_mq_mcp_policy_denials_total (profile label only) when metrics are enabled — see Observability.

ADR Topic
ADR-0003 Capability model — blocks POL-001
ADR-0007 MKurator ownership vs direct mutation — Accepted; INT-001 hook before ADM mutations
ADR-0008 Raw MQSC policy — Accepted