Skip to main content
Glama

Zoom MCP Server

index.ts5.37 kB
#!/usr/bin/env node import { Server } from "@modelcontextprotocol/sdk/server/index.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { VERSION } from "./common/version.js"; import { CallToolRequestSchema, GetPromptRequestSchema, ListPromptsRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js"; import { zodToJsonSchema } from "zod-to-json-schema"; import { createMeeting, CreateMeetingOptionsSchema, deleteMeeting, DeleteMeetingOptionsSchema, getAMeetingDetails, GetMeetingOptionsSchema, ListMeetingOptionsSchema, listMeetings, } from "./operations/meeting.js"; import { z } from "zod"; const server = new Server( { name: "zoom-mcp-server", version: VERSION, }, { capabilities: { tools: {}, prompts: {}, logging: {}, }, }, ); enum PromptName { LIST_MEETINGS = "list_meetings", CREATE_A_MEETING = "create_meeting", DELETE_A_MEETING = "delete_a_meeting", GET_A_MEETING_DETAILS = "get_a_meeting_details", } server.setRequestHandler(ListPromptsRequestSchema, async () => { return { prompts: [ { name: PromptName.LIST_MEETINGS, description: "A prompt to list meetings", }, { name: PromptName.CREATE_A_MEETING, description: "A prompt to create a meeting", }, { name: PromptName.DELETE_A_MEETING, description: "A prompt to delete a meeting", }, { name: PromptName.GET_A_MEETING_DETAILS, description: "A prompt to get a meeting's details", }, ], }; }); server.setRequestHandler(GetPromptRequestSchema, async (request) => { const { name, arguments: args } = request.params; if (name === PromptName.LIST_MEETINGS) { return { messages: [ { role: "user", content: { type: "text", text: "List my zoom meetings", }, }, ], }; } else if (name === PromptName.CREATE_A_MEETING) { return { messages: [ { role: "user", content: { type: "text", text: "Create a zoom meeting", }, }, ], }; } else if (name === PromptName.DELETE_A_MEETING) { return { messages: [ { role: "user", content: { type: "text", text: "Delete a zoom meeting", }, }, ], }; } else if (name === PromptName.GET_A_MEETING_DETAILS) { return { messages: [ { role: "user", content: { type: "text", text: "Get a zoom meeting's details", }, }, ], }; } throw new Error(`Unknown prompt: ${name}`); }); server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: [ { name: "create_meeting", description: "Create a meeting", inputSchema: zodToJsonSchema(CreateMeetingOptionsSchema), }, { name: "list_meetings", description: "List scheduled meetings", inputSchema: zodToJsonSchema(ListMeetingOptionsSchema), }, { name: "delete_a_meeting", description: "Delete a meeting with a given ID", inputSchema: zodToJsonSchema(DeleteMeetingOptionsSchema), }, { name: "get_a_meeting_details", description: "Retrieve the meeting's details with a given ID", inputSchema: zodToJsonSchema(GetMeetingOptionsSchema), }, ], }; }); server.setRequestHandler(CallToolRequestSchema, async (request) => { try { if (!request.params.arguments) { throw new Error("No arguments provided"); } switch (request.params.name) { case "create_meeting": { const args = CreateMeetingOptionsSchema.parse(request.params.arguments); const result = await createMeeting(args); return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }], }; } case "list_meetings": { const args = ListMeetingOptionsSchema.parse(request.params.arguments); const result = await listMeetings(args); return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }], }; } case "delete_a_meeting": { const args = DeleteMeetingOptionsSchema.parse(request.params.arguments); const result = await deleteMeeting(args); return { content: [{ type: "text", text: result }], }; } case "get_a_meeting_details": { const args = GetMeetingOptionsSchema.parse(request.params.arguments); const result = await getAMeetingDetails(args); return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }], }; } } } catch (error) { if (error instanceof z.ZodError) { throw new Error(`Invalid input: ${JSON.stringify(error.errors)}`); } throw error; } return {}; }); async function runServer() { const transport = new StdioServerTransport(); await server.connect(transport); server.sendLoggingMessage({ level: "info", data: "Server started successfully", }); } runServer().catch((error) => { console.error("Fatal error in main()", 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/JavaProgrammerLB/zoom-mcp-server'

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