Skip to main content
Glama
Angad-2002

Attendee MCP Server

by Angad-2002

get_recording

Retrieve the recording URL for a specific meeting bot to access captured meeting content.

Instructions

Get the recording URL for a bot

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
bot_idYesID of the bot to get recording for

Implementation Reference

  • The handler function `getRecording` that executes the tool logic: validates bot_id, calls the API to fetch recording data, formats file size and duration, and returns a formatted text response with the recording URL and metadata.
    private async getRecording(args: Record<string, unknown>) {
      const bot_id = args.bot_id as string;
      
      if (!bot_id || typeof bot_id !== 'string') {
        throw new Error("Missing or invalid required parameter: bot_id");
      }
      
      const data = await this.makeApiRequest(`/api/v1/bots/${bot_id}/recording`);
    
      const formatFileSize = (bytes?: number) => {
        if (!bytes) return "Unknown size";
        const sizes = ['B', 'KB', 'MB', 'GB'];
        const i = Math.floor(Math.log(bytes) / Math.log(1024));
        return Math.round(bytes / Math.pow(1024, i) * 100) / 100 + ' ' + sizes[i];
      };
    
      const formatDuration = (ms?: number) => {
        if (!ms) return "Unknown duration";
        const seconds = Math.floor(ms / 1000);
        const minutes = Math.floor(seconds / 60);
        const hours = Math.floor(minutes / 60);
        
        if (hours > 0) {
          return `${hours}h ${minutes % 60}m ${seconds % 60}s`;
        } else if (minutes > 0) {
          return `${minutes}m ${seconds % 60}s`;
        } else {
          return `${seconds}s`;
        }
      };
    
      return {
        content: [
          {
            type: "text",
            text: [
              `πŸŽ₯ Recording for bot ${bot_id}:`,
              "",
              `πŸ“ URL: ${data.url}`,
              `πŸ“Š Size: ${formatFileSize(data.file_size)}`,
              `⏱️ Duration: ${formatDuration(data.duration_ms)}`,
              "",
              "πŸ’‘ This is a short-lived URL that expires after a certain time.",
            ].join("\n"),
          },
        ],
      };
    }
  • The tool schema definition including name, description, and inputSchema specifying the required 'bot_id' parameter.
    {
      name: "get_recording",
      description: "Get the recording URL for a bot",
      inputSchema: {
        type: "object",
        properties: {
          bot_id: {
            type: "string",
            description: "ID of the bot to get recording for",
          },
        },
        required: ["bot_id"],
      },
    },
  • src/index.ts:431-432 (registration)
    The registration/dispatch case in the CallToolRequestSchema handler that routes calls to the getRecording method.
    case "get_recording":
      return await this.getRecording(args);
  • src/index.ts:203-400 (registration)
    The ListToolsRequestSchema handler that registers the tool by including it in the list of available tools.
    this.server.setRequestHandler(ListToolsRequestSchema, async () => ({
      tools: [
        {
          name: "create_meeting_bot",
          description: "Create a bot to join a meeting and record/transcribe it",
          inputSchema: {
            type: "object",
            properties: {
              meeting_url: {
                type: "string",
                description: "URL of the meeting (Zoom, Google Meet, or Teams)",
              },
              bot_name: {
                type: "string",
                description: "Name for the bot (optional, defaults to 'Go Bot')",
                default: "Go Bot",
              },
            },
            required: ["meeting_url"],
          },
        },
        {
          name: "get_bot_status",
          description: "Get the current status of a meeting bot",
          inputSchema: {
            type: "object",
            properties: {
              bot_id: {
                type: "string",
                description: "ID of the bot to check",
              },
            },
            required: ["bot_id"],
          },
        },
        {
          name: "get_meeting_transcript",
          description: "Get the transcript from a meeting bot",
          inputSchema: {
            type: "object",
            properties: {
              bot_id: {
                type: "string",
                description: "ID of the bot whose transcript to retrieve",
              },
            },
            required: ["bot_id"],
          },
        },
        {
          name: "list_meeting_bots",
          description: "List all active meeting bots",
          inputSchema: {
            type: "object",
            properties: {},
            required: [],
          },
        },
        {
          name: "remove_meeting_bot",
          description: "Remove a bot from a meeting",
          inputSchema: {
            type: "object",
            properties: {
              bot_id: {
                type: "string",
                description: "ID of the bot to remove",
              },
            },
            required: ["bot_id"],
          },
        },
        {
          name: "make_bot_speak",
          description: "Make a bot speak text during a meeting using text-to-speech",
          inputSchema: {
            type: "object",
            properties: {
              bot_id: {
                type: "string",
                description: "ID of the bot that should speak",
              },
              text: {
                type: "string",
                description: "Text for the bot to speak",
              },
              voice_language_code: {
                type: "string",
                description: "Voice language code (optional, defaults to 'en-US')",
                default: "en-US",
              },
              voice_name: {
                type: "string",
                description: "Voice name (optional, defaults to 'en-US-Casual-K')",
                default: "en-US-Casual-K",
              },
            },
            required: ["bot_id", "text"],
          },
        },
        {
          name: "send_chat_message",
          description: "Send a chat message from the bot to the meeting",
          inputSchema: {
            type: "object",
            properties: {
              bot_id: {
                type: "string",
                description: "ID of the bot that should send the message",
              },
              message: {
                type: "string",
                description: "Message text to send",
              },
            },
            required: ["bot_id", "message"],
          },
        },
        {
          name: "get_chat_messages",
          description: "Get chat messages from the meeting",
          inputSchema: {
            type: "object",
            properties: {
              bot_id: {
                type: "string",
                description: "ID of the bot to get chat messages for",
              },
            },
            required: ["bot_id"],
          },
        },
        {
          name: "get_recording",
          description: "Get the recording URL for a bot",
          inputSchema: {
            type: "object",
            properties: {
              bot_id: {
                type: "string",
                description: "ID of the bot to get recording for",
              },
            },
            required: ["bot_id"],
          },
        },
        {
          name: "send_image_to_meeting",
          description: "Send an image to the meeting through the bot (Google Meet only)",
          inputSchema: {
            type: "object",
            properties: {
              bot_id: {
                type: "string",
                description: "ID of the bot that should display the image",
              },
              image_url: {
                type: "string",
                description: "HTTPS URL of the image to display",
              },
            },
            required: ["bot_id", "image_url"],
          },
        },
        {
          name: "send_video_to_meeting",
          description: "Send a video to the meeting through the bot (Google Meet only)",
          inputSchema: {
            type: "object",
            properties: {
              bot_id: {
                type: "string",
                description: "ID of the bot that should play the video",
              },
              video_url: {
                type: "string",
                description: "HTTPS URL of the MP4 video to play",
              },
            },
            required: ["bot_id", "video_url"],
          },
        },
        {
          name: "delete_bot_data",
          description: "Delete all data associated with a bot (recordings, transcripts, etc.)",
          inputSchema: {
            type: "object",
            properties: {
              bot_id: {
                type: "string",
                description: "ID of the bot to delete data for",
              },
            },
            required: ["bot_id"],
          },
        },
      ] satisfies Tool[],
    }));

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/Angad-2002/attendee-mcp'

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