modelcontextprotocol/typescript-sdk

Client#listPrompts results in MCP error -32601: Method not found

Opened this issue · 4 comments

Describe the bug

I've created an MCPServer instance connected to a Client via an InMemoryTransport. If the server has not has registerPrompt called on it, the client raises an error when calling listPrompts().

To Reproduce

Steps to reproduce the behavior:

  1. Make sure you're using the latest version of Bun. I don't know if this reproduces in other runtimes—I've only tested it in Bun.

  2. Install @modelcontextprotocol/sdk via bun add @modelcontextprotocol/sdk.

  3. Create a file named example.ts with the following content:

    import { Client } from "@modelcontextprotocol/sdk/client/index.js";
    import { InMemoryTransport } from "@modelcontextprotocol/sdk/inMemory.js";
    import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
    
    const server = new McpServer({
      name: "example",
      version: "0.0.0",
    });
    
    // Don't register any prompts
    
    const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
    
    const client = new Client({
      name: "example",
      version: "0.0.0",
    });
    
    await Promise.all([server.connect(serverTransport), client.connect(clientTransport)]);
    
    console.log(await client.listPrompts());
  4. Run the file using Bun: bun run example.ts.

Expected behavior

The script should output []

Actual behavior

The script produces this error:

1300 |     CallToolResultSchema,
1301 |     ListToolsResultSchema,
1302 | ]);
1303 | export class McpError extends Error {
1304 |     constructor(code, message, data) {
1305 |         super(`MCP error ${code}: ${message}`);
               ^
McpError: MCP error -32601: Method not found
 code: -32601,
 data: undefined,

      at new McpError (/Users/landon/Development/mcp/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js:1305:9)
      at _onresponse (/Users/landon/Development/mcp/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js:223:27)
      at <anonymous> (/Users/landon/Development/mcp/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js:84:22)
      at send (/Users/landon/Development/mcp/node_modules/@modelcontextprotocol/sdk/dist/esm/inMemory.js:42:34)
      at send (/Users/landon/Development/mcp/node_modules/@modelcontextprotocol/sdk/dist/esm/inMemory.js:37:16)
      at _onrequest (/Users/landon/Development/mcp/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js:133:101)
      at <anonymous> (/Users/landon/Development/mcp/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js:87:22)
      at send (/Users/landon/Development/mcp/node_modules/@modelcontextprotocol/sdk/dist/esm/inMemory.js:42:34)
      at send (/Users/landon/Development/mcp/node_modules/@modelcontextprotocol/sdk/dist/esm/inMemory.js:37:16)
      at <anonymous> (/Users/landon/Development/mcp/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js:308:29)

Bun v1.2.21 (macOS arm64)

Also I have seen statuscode for such failures is 200. This is incorrect.

Hi @LandonSchropp thanks for reporting this and providing a comprehensive repro

@LandonSchropp I opened a PR (#986) that fixes this issue, would be great if you could test!

@meiraleal Your change worked for me! Thank you. 🙏