Expand description
Pure tool-visibility policy for the MCP tools/list response.
Extracted from the (async, server-bound) list_tools handler so the policy
is unit-testable in isolation. The handler resolves the candidate set
(lazy-core vs profile-authoritative vs full registry) and the per-call gates
(role, workflow), then defers to these helpers for the stable rules:
- Internal/meta tools are never advertised.
- The active profile,
disabled_tools, and the per-clientClientQuirks(Zedctx_edit, native-editorctx_patch) filter the candidates. - The universal invoker (
ctx_call) is force-advertised in non-full mode so tools hidden by lazy/profile filtering stay reachable.
Structs§
- Client
Quirks - Client-specific advertising quirks, resolved once per
tools/listfrom the MCPclientInfoname and the candidate set.
Enums§
- Candidate
Set - Which candidate pool
tools/liststarts from, before per-tool gates run.
Constants§
- INVOKER
- The universal invoker tool name. A static-list MCP client can call any registered tool through it, even when that tool isn’t advertised.
Functions§
- advertised_
tool_ defs_ default - Computes the tool set this install advertises to a default client
(no client quirks, no role restriction, no workflow gate, static tool list),
including the live description compression. Offline counterpart of the
tools/listhandler fordoctor overhead/ContextOverhead::measure— kept next to the pure gates so measurement cannot drift from policy. “No quirks” is the worst case: a client without a native editor seesctx_patchtoo, so the reported overhead never understates. - candidate_
set - Decides the candidate pool. Single source of truth for the
tools/listhandler AND offline measurement (doctor overhead), so the advertised surface and the reported overhead can never drift apart. - category_
gate_ applies - Whether the lazy per-category gate should filter the advertised tool set.
- explicit_
profile - Whether the user explicitly pinned a tool profile (config key, custom tool
list, or env var) — the trigger for
CandidateSet::ProfileAuthoritative. - is_
tool_ visible - Decides whether a tool name should appear in
tools/list. - needs_
invoker - Whether
INVOKERmust be force-added to the advertised set.