Skip to content

No customization hook for resources/list (unlike resources/read's resources_read_handler) #507

Description

@seunghan91

Problem

Server#resources_read_handler lets an application take over resources/read, but there is no equivalent for resources/list — the dispatch table binds it to the internal list_resources which paginates the constructor-provided @resources array (lib/mcp/server.rb:205-206, :1091-1095 at ref f0c9665).

This matters when the resource list depends on request context. In our production server the visible resources differ per request:

  • authenticated vs anonymous sessions see different sets (real resources vs demo resources)
  • OAuth-scoped connector sessions must see a scope-filtered list

Since the constructor array is fixed per Server instance, the workarounds are (a) construct a new Server per request (what we do — works, but makes servers non-reusable), or (b) subclass and override the private list_resources while temporarily swapping @tools-style state, which reaches into internals and is fragile across upgrades.

Proposal

A resources_list_handler(&block) symmetric to resources_read_handler, receiving server_context: (like the read handler does via handler_declares_server_context?), returning the resource array to paginate. Default behavior unchanged.

Context

We run the gem behind a Rails controller serving a production MCP surface (migrated from a hand-rolled implementation; the gem path is now live). Happy to contribute a PR if the direction is acceptable — related prior contribution: #493.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions