Skip to content

Capability policy

Every built-in tool belongs to a capability. Capabilities are the coarse unit of grant, and exact tool selectors are the fine unit.

Canonical capabilities

CapabilityServerScope
filesystem.readfilesystemRead/list/search/inspect files
filesystem.writefilesystemCreate/edit/write/move files and directories
network.fetchfetchFetch tool and fetch prompt
memory.readmemoryRead/search/open graph data and memory resource
memory.writememoryMutate graph data
process.executeshellExecute local programs
skills.readskillsActivate discovered skills
agents.runagentsSpawn, message, and wait for subagents

Exact built-in selectors

Exact selectors use:

text
server/tool_name

Examples:

text
filesystem/read_text_file
filesystem/write_file
memory/search_nodes
agents/spawn_agent

Policy behavior

With no --allow, a directly launched server exposes all of its own tools:

bash
tuls filesystem .

As soon as at least one --allow is present, the policy becomes an allowlist:

bash
tuls filesystem . \
  --allow filesystem.read

Grant two capabilities:

bash
tuls filesystem . \
  --allow filesystem.read \
  --allow filesystem.write

Grant read/write but remove one exact operation:

bash
tuls filesystem . \
  --allow filesystem.read \
  --allow filesystem.write \
  --deny filesystem/move_file

Grant a single exact tool:

bash
tuls filesystem . \
  --allow filesystem/read_text_file

Strict selectors

Invalid capabilities, misspelled tool IDs, and capabilities that do not belong to the selected server are rejected at startup. Selectors are case-sensitive.

Auxiliary surfaces (prompts & resources)

An auxiliary MCP surface — the fetch prompt, the memory://knowledge-graph resource — is enabled only when:

  1. the controlling capability is itself granted and
  2. the controlling tool is not explicitly denied.
Grantfetch toolfetch prompt / memory resource
none (default)yesyes
exact tool (--allow fetch/fetch)yesno
capability (--allow network.fetch)yesyes
capability + exact deny (--deny fetch/fetch)nono

Concretely:

  • --allow fetch/fetch grants only the tool — the prompt stays disabled.
  • --allow network.fetch grants the capability — tool and prompt are enabled.
  • --deny fetch/fetch or --deny memory/read_graph disables the auxiliary surface even when the capability is granted.

Next steps

MIT licensed · built for MCP 2026-07-28