Skip to main content
Glama
EoinFalconer

Granola MCP Server

by EoinFalconer

get_meeting_details

Retrieve detailed meeting information including notes, transcripts, and organization data from Granola.ai meeting intelligence platform using a meeting ID.

Instructions

Get detailed information about a specific meeting

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
meeting_idYesMeeting ID to retrieve details for

Implementation Reference

  • Complete implementation of get_meeting_details tool including schema registration (name, description, parameters) and execute handler function that retrieves meeting details from cache and formats them
    // Tool: get_meeting_details
    server.addTool({
      name: 'get_meeting_details',
      description: 'Get detailed information about a specific meeting',
      parameters: z.object({
        meeting_id: z.string().describe('Meeting ID to retrieve details for')
      }),
      execute: async ({ meeting_id }) => {
        await ensureDataLoaded();
    
        const doc = documentsCache.get(meeting_id);
        if (!doc) {
          return `Meeting '${meeting_id}' not found`;
        }
    
        const details: string[] = [
          `# Meeting Details: ${getTitle(doc)}\n`,
          `**ID:** ${doc.id}`,
          `**Date:** ${formatDate(doc.created_at)}`,
          `**Updated:** ${formatDate(doc.updated_at)}`
        ];
    
        if (doc.workspace_name) {
          details.push(`**Workspace:** ${doc.workspace_name}`);
        }
    
        if (doc.folders && doc.folders.length > 0) {
          const folderNames = doc.folders.map(f => f.name).join(', ');
          details.push(`**Folders:** ${folderNames}`);
        }
    
        if (doc.people && doc.people.length > 0) {
          const people = doc.people.map(p => p.name).join(', ');
          details.push(`**Participants:** ${people}`);
        }
    
        return details.join('\n');
      }
    });
  • Input parameter schema definition using Zod - requires a meeting_id string parameter
    parameters: z.object({
      meeting_id: z.string().describe('Meeting ID to retrieve details for')
    }),
  • GranolaDocument interface type definition that defines the structure of meeting data retrieved and displayed by get_meeting_details
    export interface GranolaDocument {
      id: string;
      title: string;
      created_at: string;
      updated_at: string;
      workspace_id?: string;
      workspace_name?: string;
      folders?: FolderInfo[];
      last_viewed_panel?: DocumentPanel;
      people?: Array<{ name: string }>;
      [key: string]: any;
    }
  • ensureDataLoaded and loadData helper functions that populate the documentsCache with meeting data before the tool executes
    async function ensureDataLoaded() {
      const now = Date.now();
      if (documentsCache.size === 0 || (now - lastFetchTime) > CACHE_TTL) {
        await loadData();
      }
    }
    
    /**
     * Load data from Granola API
     */
    async function loadData() {
      console.error('Fetching data from Granola API...');
      
      const data = await apiClient.getAllDocumentsWithMetadata();
      
      if (!data) {
        console.error('Failed to fetch data from API');
        return;
      }
    
      // Update caches
      documentsCache.clear();
      for (const doc of data.documents) {
        documentsCache.set(doc.id, doc);
      }
      workspacesCache = data.workspaces;
      foldersCache = data.documentLists;
      lastFetchTime = Date.now();
    
      console.error(`Loaded ${documentsCache.size} documents from API`);
    }
  • Helper functions formatDate and getTitle used by get_meeting_details to format meeting dates and extract titles safely
    /**
     * Format date in local timezone
     */
    function formatDate(dateStr: string | null | undefined): string {
      if (!dateStr) return 'Unknown date';
      try {
        const date = new Date(dateStr);
        return date.toLocaleString('en-US', {
          year: 'numeric',
          month: '2-digit',
          day: '2-digit',
          hour: '2-digit',
          minute: '2-digit',
          hour12: false
        });
      } catch {
        return dateStr;
      }
    }
    
    /**
     * Safe string for searching (handles null/undefined)
     */
    function safeString(str: string | null | undefined): string {
      return str || '';
    }
    
    /**
     * Get document title safely
     */
    function getTitle(doc: GranolaDocument): string {
      return doc.title || 'Untitled Meeting';
    }

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/EoinFalconer/granola-mcp-server'

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