import { z } from 'zod';
import { LimitlessClient } from '../../lib/limitless-client.js';
import { Tool } from '@modelcontextprotocol/sdk/types.js';
export const exportMarkdownSchema = z.object({
lifelogIds: z.array(z.string()).optional().describe('Specific lifelog IDs to export'),
date: z.string().optional().describe('Export all lifelogs from this date (YYYY-MM-DD)'),
dateFrom: z.string().optional().describe('Start date for range export (YYYY-MM-DD)'),
dateTo: z.string().optional().describe('End date for range export (YYYY-MM-DD)'),
includeMetadata: z.boolean().optional().describe('Include metadata in markdown'),
includeTimestamps: z.boolean().optional().describe('Include timestamps in content'),
groupByDate: z.boolean().optional().describe('Group lifelogs by date'),
});
export type ExportMarkdownParams = z.infer<typeof exportMarkdownSchema>;
export interface ExportMarkdownResponse {
markdown: string;
lifelogCount: number;
totalDuration: number;
dateRange: {
from: string;
to: string;
};
}
export const exportMarkdownTool: Tool = {
name: 'limitless_export_markdown',
description: 'Export lifelogs as formatted markdown for use in other applications',
inputSchema: {
type: 'object',
properties: {
lifelogIds: {
type: 'array',
items: { type: 'string' },
description: 'Specific lifelog IDs to export'
},
date: { type: 'string', description: 'Export all lifelogs from this date (YYYY-MM-DD)' },
dateFrom: { type: 'string', description: 'Start date for range export (YYYY-MM-DD)' },
dateTo: { type: 'string', description: 'End date for range export (YYYY-MM-DD)' },
includeMetadata: { type: 'boolean', description: 'Include metadata in markdown' },
includeTimestamps: { type: 'boolean', description: 'Include timestamps in content' },
groupByDate: { type: 'boolean', description: 'Group lifelogs by date' },
},
},
};
export async function exportMarkdown(params: ExportMarkdownParams, client: LimitlessClient): Promise<ExportMarkdownResponse> {
const requestBody: any = {};
if (params.lifelogIds && params.lifelogIds.length > 0) requestBody.lifelogIds = params.lifelogIds;
if (params.date) requestBody.date = params.date;
if (params.dateFrom) requestBody.dateFrom = params.dateFrom;
if (params.dateTo) requestBody.dateTo = params.dateTo;
if (params.includeMetadata !== undefined) requestBody.includeMetadata = params.includeMetadata;
if (params.includeTimestamps !== undefined) requestBody.includeTimestamps = params.includeTimestamps;
if (params.groupByDate !== undefined) requestBody.groupByDate = params.groupByDate;
return await client.post<ExportMarkdownResponse>('/lifelogs/export/markdown', requestBody);
}