INITIALIZE · DECLARE · GATE
MCP capabilities belong to different endpoints
Compare directional feature declarations and inspect the actual fixture messages.
Endpoint declarations
Initialization and operation trace
Directional capability evidence
Read the two declarations separately
This bounded fixture follows the MCP 2025-11-25 initialization shape. The client advertises roots and sampling; the server advertises tools and resources. These are different roles, not identical lists whose intersection becomes the session. Version agreement and readiness precede ordinary operations. The local gate demonstrates whether a selected operation is eligible to be dispatched; it does not establish authorization, user approval or successful remote execution.
Choose exactly what the example endpoints support
Server version selects either the requested 2025-11-25 revision or a server that only offers 2025-06-18. Accept older response controls whether the example client also supports that older revision. The client always requests 2025-11-25. Turn off Accept older response and select the older server to make the client disconnect at the version stage. Switching the server back to the requested revision allows agreement even while the older-response checkbox remains off. These are explicitly chosen support sets, not a claim that every implementation supports both revisions.
Toggle the feature owned by the correct endpoint
Server tools determines whether the response contains a tools object. Tool list-change notifications adds the listChanged flag inside that object. Server resources similarly determines the resources object, while Resource subscriptions sets its subscribe flag. Turning a parent feature off omits its whole object regardless of the saved child checkbox. Client sampling and Client roots independently change the initialize request. Watch the displayed request at ten seconds and response at twenty seconds to see the exact JSON consequences of each checkbox.
Select an operation and inspect its direction
Operation selects tools/list, resources/subscribe, roots/list, sampling/createMessage or notifications/tools/list_changed. The evidence names both message direction and capability owner. In this example, roots/list goes from server to client and depends on Client roots. tools/list goes from client to server and depends on Server tools. The tool-list notification travels toward the client but uses a flag declared by the server. This last comparison separates who sends a message from who advertises the relevant capability.
Test independence rather than guessing from similar names
Restore defaults, disable Client roots and Client sampling, leave Server tools enabled and choose tools/list. Finish at sixty seconds: the fixture still dispatches the request and returns the fictional add-tool schema. Change Operation to roots/list without restoring the client checkboxes. Finish again: no request is dispatched. Enable Client roots and repeat to reveal a fixed fictional workspace URI. That URI is illustrative data; the page never inspects your actual filesystem. Each scenario edit returns the inspection clock to zero so old results cannot masquerade as new results.
Separate parent features from optional flags
Select resources/subscribe, keep Server resources enabled and disable Resource subscriptions. Finish the replay and read the gate explanation. Re-enable subscriptions and repeat; eligibility changes. Now disable Server resources while leaving subscriptions selected: the parent object disappears and the operation is blocked again. Repeat the same three comparisons with the tool-list notification and its two tools checkboxes. A permitted notification has no request ID, and this fixture produces no reply for it. Inspect the JSON panel at fifty seconds to distinguish it from a request.
Use the clock to inspect a protocol trace
Play reveals the seven stages over sixty inspection seconds. Pause freezes the displayed stage and time. Speed selects half, normal or double playback rate without changing any protocol data or result. Next stage stops playback and advances to the next ten-second boundary. Finish jumps to sixty seconds; Timeline selects any intermediate point and pauses. Restart returns to zero with the current scenario preserved. Restore defaults also resets all scenario controls and normal speed. A hidden page pauses rather than silently advancing; press Play when you return. This clock is a teaching pace, not measured network latency.
Keep readiness and limitations explicit
Send initialized notification controls the ready stage. When disabled, this fixture blocks its ordinary operations even if version and feature checks pass. It deliberately models a strict local gate, not every protocol exception or remote error response. Blocked operations stay unsent; the page does not invent a JSON-RPC error code from a server it never contacted. The two deterministic response fixtures only return a tool schema or fictional roots. Sampling and subscription cases stop at eligibility, without generating model output or creating a resource watcher. Authentication, transports, consent, pagination, elicitation, tasks, experimental extensions and full schema validation require separate implementations and tests.
Versioned reference: MCP initialization and lifecycle.