UNPKG

mcp-limitless

Version:

A Model Context Protocol server for accessing Limitless AI lifelog data

104 lines (103 loc) 2.81 kB
import { z } from "zod"; /** * Configuration for the Limitless API client */ export const LimitlessConfigSchema = z .object({ apiKey: z .string() .optional() .describe("Limitless API token. If not provided, will use LIMITLESS_API_KEY environment variable."), baseUrl: z .string() .url() .optional() .default("https://api.limitless.ai") .describe("Base URL for Limitless API. Defaults to https://api.limitless.ai"), }) .default({}); /** * Content item within a lifelog entry */ export const LifelogContentItemSchema = z.object({ content: z.string(), type: z.enum(["heading1", "heading2", "blockquote", "text"]), startTime: z.string().optional(), endTime: z.string().optional(), startOffsetMs: z.number().optional(), endOffsetMs: z.number().optional(), speakerName: z.string().optional(), }); /** * Lifelog entry data structure */ export const LifelogEntrySchema = z.object({ id: z.string(), title: z.string(), startTime: z.string(), endTime: z.string(), contents: z.array(LifelogContentItemSchema), markdown: z.string().optional(), isStarred: z.boolean().default(false), updatedAt: z.string().optional(), }); /** * Parameters for listing lifelogs */ export const ListLifelogsParamsSchema = z.object({ date: z.string().optional(), timezone: z.string().optional(), start_time: z.string().optional(), end_time: z.string().optional(), cursor: z.string().optional(), sort_direction: z.enum(["asc", "desc"]).optional(), limit: z.number().min(1).max(10).default(10), }); /** * Response for listing lifelogs */ export const ListLifelogsResponseSchema = z.object({ data: z.object({ lifelogs: z.array(LifelogEntrySchema), }), meta: z .object({ lifelogs: z.object({ count: z.number(), }), }) .optional(), }); /** * Response for getting a single lifelog */ export const GetLifelogResponseSchema = z.object({ data: z.object({ lifelog: LifelogEntrySchema, }), }); /** * Parameters for getting a specific lifelog entry */ export const GetLifelogParamsSchema = z.object({ lifelog_id: z.string().min(1, "Lifelog ID is required"), }); /** * Limitless API error response */ export const LimitlessErrorSchema = z.object({ error: z.string(), message: z.string(), status_code: z.number(), }); /** * Search parameters for lifelog entries */ export const SearchLifelogsParamsSchema = z.object({ query: z.string().min(1, "Search query is required"), date_from: z.string().optional(), date_to: z.string().optional(), timezone: z.string().optional(), cursor: z.string().optional(), limit: z.number().min(1).max(10).default(10), });