Issue Summary
Copilot Studio successfully connects to my MCP server and completes the OAuth flow and initialize handshake, but never calls `tools/list` to discover available tools. The Tools section in Copilot Studio shows "No tools available."
Steps to Reproduce
1. Create an MCP server that supports OAuth 2.0 with Dynamic Client Registration
2. Add MCP connector in Copilot Studio using "Dynamic discovery" authentication
3. Complete Google OAuth flow successfully
4. Observe that Tools section shows empty
Expected Behaviour
After `notifications/initialized`, Copilot Studio should call `tools/list` to discover available tools.
Actual Behaviour
Copilot Studio sends:
1. `initialize` (id: "1") → Server responds correctly
2. `notifications/initialized` → Server acknowledges
3. **Never sends `tools/list`**
Server Response Evidence
The initialize response looks correct:
{
"jsonrpc": "2.0",
"result": {
"protocolVersion": "2024-11-05",
"capabilities": {"tools": {"listChanged": true}},
"serverInfo": {"name": "expert-mcp", "version": "1.0.0"}
},
"id": "1"
}
Verification
- Direct curl to tools/list returns the tools successfully
- OAuth flow completes without errors
- Connection shows green checkmark in Copilot Studio
- Same issue with listChanged: true and listChanged: false
Browser Network Tab
When clicking refresh in Copilot Studio, it calls Microsoft's internal API:
/powervirtualagents/bots/.../modelcontextprotocol/listtools which returns {"tools": [], "resources": [], "errors": []}
This suggests Copilot Studio caches tool discovery but never populates it from the MCP server.
Any ideas on what is happening?