mcp-timeout.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import { Server } from "@modelcontextprotocol/sdk/server/index.js"
  2. import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
  3. import {
  4. CallToolRequestSchema,
  5. GetPromptRequestSchema,
  6. ListPromptsRequestSchema,
  7. ListResourcesRequestSchema,
  8. ListResourceTemplatesRequestSchema,
  9. ListToolsRequestSchema,
  10. ReadResourceRequestSchema,
  11. } from "@modelcontextprotocol/sdk/types.js"
  12. const server = new Server(
  13. { name: "timeout", version: "1.0.0" },
  14. { capabilities: { prompts: {}, resources: {}, tools: {} } },
  15. )
  16. server.setRequestHandler(ListToolsRequestSchema, async () => {
  17. if (process.env.MCP_TIMEOUT_TARGET === "catalog") await Bun.sleep(100)
  18. return { tools: [{ name: "slow", inputSchema: { type: "object" } }] }
  19. })
  20. server.setRequestHandler(ListPromptsRequestSchema, () => Promise.resolve({ prompts: [{ name: "slow" }] }))
  21. server.setRequestHandler(ListResourcesRequestSchema, async () => {
  22. if (process.env.MCP_TIMEOUT_TARGET === "resource-catalog") await Bun.sleep(100)
  23. return { resources: [{ name: "slow", uri: "test://slow" }] }
  24. })
  25. server.setRequestHandler(ListResourceTemplatesRequestSchema, () => Promise.resolve({ resourceTemplates: [] }))
  26. server.setRequestHandler(CallToolRequestSchema, async () => {
  27. await Bun.sleep(100)
  28. return { content: [] }
  29. })
  30. server.setRequestHandler(GetPromptRequestSchema, async () => {
  31. await Bun.sleep(100)
  32. return { messages: [] }
  33. })
  34. server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
  35. await Bun.sleep(100)
  36. return { contents: [{ uri: request.params.uri, text: "slow" }] }
  37. })
  38. await server.connect(new StdioServerTransport())