Skip to content

mcp: product decision — should tools/list reveal ability metadata to non-admin app passwords? #219

Description

@pluginslab

From the v0.12.0 MCP endpoint security review (PR #216, finding [Info #7]).

The MCP wire endpoint requires `is_user_logged_in()` only (per-ability `permission_callback` gates actual execution). This means:

  • A subscriber-level app password CAN call `tools/list` and see the names + descriptions of every exposed read-only ability.
  • They CANNOT call `tools/call` on any ability whose `permission_callback` requires higher caps — that returns `-32001 Permission denied`.

Question: is exposing the ability catalog to subscriber-level users acceptable? Pros: matches MCP convention (clients discover, server enforces). Cons: reconnaissance signal — a low-privilege user learns the shape of the admin surface.

Options:

  1. Keep current behavior (recommended; matches MCP conventions, no real exploit path).
  2. Filter `tools/list` per-user via each ability's `permission_callback` (more conservative, costs an extra `check_permissions` call per tool per list request).
  3. Add a `manage_options` gate at the MCP route level — simplest, but blocks legitimate read-only use cases for editor / author roles.

Product call — not a bug.

No activity

Activity on this issue will appear here.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions