Skip to main content
Glama
handlers.js3.37 kB
import { CallToolRequestSchema, GetPromptRequestSchema, ListPromptsRequestSchema, ListResourcesRequestSchema, ListResourceTemplatesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, } from "@modelcontextprotocol/sdk/types.js"; import { resourceHandlers, resources } from "./resources.js"; import { getResourceTemplate, resourceTemplates } from "./resource-templates.js"; import { promptHandlers, prompts } from "./prompts.js"; import { toolHandlers, tools } from "./tools.js"; export const setupHandlers = (server) => { // Resource handlers server.setRequestHandler(ListResourcesRequestSchema, async () => ({ resources })); server.setRequestHandler(ListResourceTemplatesRequestSchema, async () => ({ resourceTemplates, })); server.setRequestHandler(ReadResourceRequestSchema, async (request) => { const { uri } = request.params; // Using type assertion to tell TypeScript this is a valid key const resourceHandler = resourceHandlers[uri]; if (resourceHandler) return await resourceHandler(); const resourceTemplateHandler = await getResourceTemplate(uri); if (resourceTemplateHandler) return await resourceTemplateHandler(); throw new Error(`Resource not found: ${uri}`); }); // Prompt handlers server.setRequestHandler(ListPromptsRequestSchema, async () => ({ prompts: Object.values(prompts), })); server.setRequestHandler(GetPromptRequestSchema, async (request) => { const { name, arguments: args } = request.params; // Using type assertion to tell TypeScript this is a valid key const promptHandler = promptHandlers[name]; if (promptHandler) { return promptHandler(args); } throw new Error(`Prompt not found: ${name}`); }); // Tool handlers server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: Object.values(tools), })); // This is the key fix - we need to format the response properly server.setRequestHandler(CallToolRequestSchema, async (request) => { try { const { name, arguments: args } = request.params; // Using type assertion to tell TypeScript this is a valid key const handler = toolHandlers[name]; if (!handler) throw new Error(`Tool not found: ${name}`); // Execute the handler but wrap the response in the expected format const result = await handler(args); // Return in the format expected by the SDK return { tools: [{ name, inputSchema: { type: "object", properties: {} // This would ideally be populated with actual schema }, description: `Tool: ${name}`, result }] }; } catch (error) { // Properly handle errors if (error instanceof Error) { return { tools: [], error: error.message }; } return { tools: [], error: "An unknown error occurred" }; } }); };

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ShubhanshuSondhiya/MCP-TMDB'

If you have feedback or need assistance with the MCP directory API, please join our Discord server