unbridled-41 opened a new issue, #4556:
URL: https://github.com/apache/rocketmq-dashboard/issues/4556

   ### Before Creating the Issue
   
   - [x] I have searched the open issues of this repository and believe this is 
not a duplicate.
   - [x] This is a defect in RocketMQ Studio.
   
   ### Studio Version
   
   branch: `master`, commit `d50ffecc` (the MCP tool framework introduced by 
#4225, reshaped by #4306/#4308)
   
   ### Describe the Bug
   
   Nine of the forty catalog tools are platform-level: they are addressed by a 
physical `clusterName` instead of an `instanceId`, their input schemas reject 
`instanceId` (`additionalProperties: false`), and 
`ToolCatalog.INSTANCE_ID_EXEMPT_TOOLS` exempts them from the mandatory instance 
argument. Every one of them nevertheless declares `requiredCapabilities`. When 
such a call is dispatched, `ToolExecutionService.resolveTargetInstance` 
produces a **null** context instanceId by design, and `ToolCapabilityFilter` 
then calls `CapabilityResolver.resolve(null)`, which throws 
`CAPABILITY_INSTANCE_REQUIRED`.
   
   Affected tools (all with non-empty `requiredCapabilities`): 
`rmq.cluster.list`, `rmq.dashboard.summary`, `rmq.broker.list`, 
`rmq.broker.describe`, `rmq.broker.config`, `rmq.nameserver.list`, 
`rmq.nameserver.config`, `rmq.proxy.list`, `rmq.proxy.config`. Only 
`rmq.audit.list` and `rmq.alert.rule.list` (empty `requiredCapabilities`) work.
   
   The failure is total: passing `instanceId` in the body fails schema 
validation first; omitting it hits `CapabilityResolver.resolve(null)`. 
Discovery advertises these tools for a capable instance (`ToolDiscoveryService` 
filters by that instance's capabilities), `McpToolRegistrar` lists them, and 
the CLI faithfully follows the catalog — so every transport advertises tools 
that can never execute.
   
   ### Steps to Reproduce
   
   1. Start Studio with a default cluster and credentials so capabilities 
resolve.
   2. `POST 
/api/ai/tools/rmq.cluster.list/execute?instanceId=open-source-local` with body 
`{}` (the schema has no `instanceId` property).
   3. The response is 400 `INVALID_ARGUMENT: Capability lookup requires a bound 
Instance`.
   
   The same call through MCP `tools/call` fails identically, and `rmqctl 
cluster list --instance-id open-source-local` reports the same error.
   
   ### What Did You Expect to See?
   
   The platform tool executes (its handler resolves clusters itself via 
`PlatformClusterResolver`, no instance context needed).
   
   ### What Did You See Instead?
   
   HTTP 400 `INVALID_ARGUMENT: Capability lookup requires a bound Instance` for 
all nine platform tools, on every transport.
   
   ### Impact
   
   The whole platform-tool surface of the v10 catalog (#4306) is unreachable: 
cluster, dashboard, broker, nameserver and proxy inspection tools are 
advertised but dead. Any chain test would have caught it — 
`ToolInstanceRoutingTest` only runs `rmq.topic.list`, and `ToolControllerTest` 
mocks the executor.
   
   ### Related work
   
   - #4306 introduced the 40-tool catalog; #4308 moved capability resolution to 
the instance context. The incompatibility between the two (exempt tools × 
non-empty capabilities) landed with them.
   - #4506 (open) is about ambiguous platform cluster names — a different 
platform-tool defect.
   
   ### PR
   
   Fix incoming.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to