Skip to main content
Glama

Contentful Delivery MCP Server

by mshaaban0
index.ts3.14 kB
#!/usr/bin/env node import { Server } from "@modelcontextprotocol/sdk/server/index.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { z } from "zod"; import { registerQueryEntriesTool } from "./tools/query_entries.js"; import { registerGetEntryTool } from "./tools/get_entry.js"; import { registerGetAssetsTool } from "./tools/get_assets.js"; import { registerGetEntriesTool } from "./tools/get_entries.js"; import { registerGetAssetTool } from "./tools/get_asset.js"; import { registerGetContentTypeTool } from "./tools/get_content_type.js"; import { registerGetContentTypesTool } from "./tools/get_content_types.js"; /** * Create an MCP server with capabilities for resources (to list/read notes), * tools (to create new notes), and prompts (to summarize notes). */ const server = new Server( { name: "contentful-delivery-mcp", version: "0.2.0", }, { capabilities: { resources: {}, tools: {}, prompts: {}, }, } ); // Store all registered tools const registeredTools: Array<{ name: string; description: string; inputSchema: object; }> = []; // Store tool handlers const toolHandlers: { [key: string]: (request: any) => Promise<any> } = {}; // Helper function to register a tool const registerTool = (tool: { name: string; description: string; inputSchema: object; }) => { registeredTools.push(tool); }; // Helper function to register a tool handler const registerToolHandler = ( name: string, handler: (request: any) => Promise<any> ) => { toolHandlers[name] = handler; }; // Register Tools registerQueryEntriesTool(server, registerTool, registerToolHandler); registerGetEntryTool(server, registerTool, registerToolHandler); registerGetAssetsTool(server, registerTool, registerToolHandler); registerGetEntriesTool(server, registerTool, registerToolHandler); registerGetAssetTool(server, registerTool, registerToolHandler); registerGetContentTypeTool(server, registerTool, registerToolHandler); registerGetContentTypesTool(server, registerTool, registerToolHandler); // Register MCP standard methods server.setRequestHandler( z.object({ method: z.literal("resources/list") }), async () => { return { resources: [] }; } ); server.setRequestHandler( z.object({ method: z.literal("tools/list") }), async () => { return { tools: registeredTools }; } ); // Handle tool execution server.setRequestHandler( z.object({ method: z.literal("tools/call"), params: z .object({ name: z.string(), }) .optional(), }), async (request) => { const toolName = request.params?.name; if (!toolName || !toolHandlers[toolName]) { throw new Error(`Tool not found: ${toolName}`); } return await toolHandlers[toolName](request); } ); /** * Start the server using stdio transport. * This allows the server to communicate via standard input/output streams. */ async function main() { const transport = new StdioServerTransport(); await server.connect(transport); } main().catch((error) => { console.error("Server error:", error); process.exit(1); });

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/mshaaban0/contentful-delivery-mcp'

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