Skip to main content
Glama
199-mcp

Limitless MCP Server

by 199-mcp

limitless_get_daily_summary

Generate a daily summary of meetings, action items, participants, and topics from Limitless Pendant recordings with automatic truncation for token limits.

Instructions

Generate daily summary with auto-truncation for token limits. INCLUDES: meetings, action items, participants, topics. CONSTRAINTS: Large responses auto-truncated, use smaller date ranges if needed. ARGS: date (YYYY-MM-DD format, defaults today), timezone (optional). EXAMPLE: date='2025-07-14'.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
dateNoDate in YYYY-MM-DD format (defaults to today).
timezoneNoIANA timezone for date calculations.

Implementation Reference

  • src/server.ts:797-821 (registration)
    Registration of the 'limitless_get_daily_summary' tool, including description, schema, and wrapper handler that calls the core DailySummaryGenerator.
    server.tool("limitless_get_daily_summary", "Generate daily summary with auto-truncation for token limits. INCLUDES: meetings, action items, participants, topics. CONSTRAINTS: Large responses auto-truncated, use smaller date ranges if needed. ARGS: date (YYYY-MM-DD format, defaults today), timezone (optional). EXAMPLE: date='2025-07-14'.", DailySummaryArgsSchema, async (args, _extra) => { try { // Validate constraints const validation = validateApiConstraints(args); if (!validation.valid) { return { content: [{ type: "text", text: validation.error! }], isError: true }; } const date = args.date || new Date().toISOString().split('T')[0]; const summary = await DailySummaryGenerator.generateDailySummary( limitlessApiKey, date, args.timezone ); return createSafeResponse(summary, `Daily summary for ${date}`); } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); return { content: [{ type: "text", text: `Error generating daily summary: ${errorMessage}` }], isError: true }; } } );
  • Input schema validation using Zod for tool arguments: date (optional YYYY-MM-DD) and timezone.
    const DailySummaryArgsSchema = { date: z.string().optional().describe("Date in YYYY-MM-DD format (defaults to today)."), timezone: z.string().optional().describe("IANA timezone for date calculations."), };
  • Primary handler implementation in DailySummaryGenerator.generateDailySummary: fetches lifelogs for the date, detects meetings and action items using helpers, computes metrics (recording/speaking time, top participants, topics), generates insights, returns structured DailySummary.
    /** * Generate comprehensive daily summary with insights and analytics */ static async generateDailySummary( apiKey: string, date: string, timezone?: string ): Promise<DailySummary> { // Get the full day range for the specified date const parser = new NaturalTimeParser({ timezone }); const targetDate = new Date(date + 'T00:00:00'); const timeRange = { start: date + ' 00:00:00', end: date + ' 23:59:59', timezone: timezone || parser['timezone'] }; // Fetch all lifelogs for the day const lifelogs = await getLifelogs(apiKey, { date, timezone, limit: 1000, includeMarkdown: true, includeHeadings: true, direction: 'asc' }); if (lifelogs.length === 0) { return this.createEmptyDailySummary(date, timezone || 'UTC'); } // Detect meetings const meetings = MeetingDetector.detectMeetings(lifelogs); // Extract all action items const allActionItems: ActionItem[] = []; for (const lifelog of lifelogs) { if (lifelog.contents) { const items = ActionItemExtractor.extractFromNodes(lifelog.contents, lifelog.id); allActionItems.push(...items); } } // Calculate metrics const totalRecordingTime = this.calculateTotalRecordingTime(lifelogs); const totalSpeakingTime = this.calculateTotalSpeakingTime(lifelogs); const topParticipants = this.getTopParticipants(meetings); const keyTopics = this.extractKeyTopics(lifelogs); // Generate insights const insights = this.generateInsights(lifelogs, meetings); return { date, timezone: timezone || 'UTC', meetings, totalRecordingTime, totalSpeakingTime, topParticipants, keyTopics, actionItems: allActionItems, insights }; }
  • TypeScript interface defining the structure of the daily summary output returned by the tool.
    export interface DailySummary { date: string; timezone: string; meetings: Meeting[]; totalRecordingTime: number; totalSpeakingTime: number; topParticipants: MeetingParticipant[]; keyTopics: string[]; actionItems: ActionItem[]; insights: { mostProductiveHours: string[]; longestMeeting: Meeting | null; mostFrequentParticipant: string | null; topicsDiscussed: number; }; }
  • MeetingDetector.detectMeetings: helper used in daily summary to identify meetings from lifelogs based on time proximity, multiple speakers, and duration.
    static detectMeetings(lifelogs: Lifelog[]): Meeting[] { if (!lifelogs.length) return []; // Group lifelogs by continuous time periods const timeGroups = this.groupByTimeProximity(lifelogs); // Analyze each group for meeting characteristics const meetings: Meeting[] = []; for (const group of timeGroups) { const meeting = this.analyzePotentialMeeting(group); if (meeting) { meetings.push(meeting); } } return meetings.sort((a, b) => new Date(a.startTime).getTime() - new Date(b.startTime).getTime()); }

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/199-mcp/mcp-limitless'

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