Explore the capability database
Before you can govern an agent, you need to know what’s on the menu: which capabilities exist, which intents they express, and which concrete tools (on which MCP servers) actually fulfil them. tappass capability list prints that whole map as a tree.
This is the vocabulary behind everything else — the capabilities a prompt maps to, and the ones your rules constrain.
The whole catalog
Section titled “The whole catalog”tappass capability listcapability map (catalog)├── code_integration 3 servers · 14 tools│ ├── github│ │ ├── create_pull_request → code.write│ │ ├── merge_pull_request → code.write│ │ └── get_file_contents → code.read│ └── gitlab│ └── create_merge_request → code.write├── messaging 2 servers · 6 tools│ ├── slack│ │ ├── send_message → message.send│ │ └── list_channels → message.read│ └── gmail│ ├── send → message.send│ └── list_messages → message.read└── payments 1 server · 4 tools └── stripe ├── create_charge → payment.write └── list_charges → payment.readRead it top-down: a capability (code_integration) unfolds into the servers that provide it (github, gitlab), which unfold into the tools (create_pull_request), each tagged with its intent (→ code.write). The spine is capability → intent → tool → server — intent is the tag that tells you what kind of action a tool performs, regardless of which server exposes it.
That tagging is what makes policy portable: a ConstrainCapabilityArgs rule on the messaging capability applies to slack.send_message and gmail.send at once, because both carry the message.send intent.
Narrow the view
Section titled “Narrow the view”tappass capability list --connected # only MCPs you've actually connectedtappass capability list -c code_integration # drill into one capabilitytappass capability list -o json # the raw tree, for scripts and diffs--connectedshows your ledger — the servers and tools live in your org right now — instead of the full catalog of what could be connected.-c / --capability NAMEfilters to a single capability’s subtree.-o jsonemits{ "scope": …, "capabilities": [ … ] }— handy for asserting in CI that a newly connected server didn’t add tools you never reviewed.
How this feeds policy
Section titled “How this feeds policy”Once you can see the tree, the other flows click into place:
- Author from a sentence.
policy create --from-promptpicks capabilities off this exact tree to build the envelope —capability listis how you sanity-check what it chose. - Constrain across tools.
DenyCapabilityandConstrainCapabilityArgstarget a capability, so one rule covers every tool that carries the matching intent. - Review new tools. When a server is connected, its tools appear here; the tool integrity flow gates anything unrecognized.
Next steps
Section titled “Next steps”- Govern an agent from a sentence — turn capabilities into a policy
- Rule reference —
DenyCapability,ConstrainCapabilityArgs, and the operator set - Data providers — connecting the servers that populate this tree