@starascendin/lifeos-mcp 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.6.0";
2
- export declare const BUILD_TIME = "2026-02-10T00:13:52.601Z";
1
+ export declare const VERSION = "0.7.0";
2
+ export declare const BUILD_TIME = "2026-02-12T17:27:58.965Z";
@@ -1,3 +1,3 @@
1
1
  // AUTO-GENERATED — do not edit. Regenerated on every build.
2
- export const VERSION = "0.6.0";
3
- export const BUILD_TIME = "2026-02-10T00:13:52.601Z";
2
+ export const VERSION = "0.7.0";
3
+ export const BUILD_TIME = "2026-02-12T17:27:58.965Z";
package/dist/index.js CHANGED
@@ -110,6 +110,10 @@ const TOOLS = [
110
110
  enum: ["urgent", "high", "medium", "low", "none"],
111
111
  description: "Priority level (optional, default: none)",
112
112
  },
113
+ initiativeId: {
114
+ type: "string",
115
+ description: "Link to a yearly initiative ID (optional)",
116
+ },
113
117
  },
114
118
  required: ["name", "key"],
115
119
  },
@@ -155,6 +159,10 @@ const TOOLS = [
155
159
  type: "string",
156
160
  description: "Associate with a client ID, or empty to unlink (optional)",
157
161
  },
162
+ initiativeId: {
163
+ type: "string",
164
+ description: "Link to a yearly initiative ID, or empty to unlink (optional)",
165
+ },
158
166
  },
159
167
  required: ["projectIdOrKey"],
160
168
  },
@@ -267,6 +275,10 @@ const TOOLS = [
267
275
  type: "string",
268
276
  description: "Assign to a specific phase within the project (optional)",
269
277
  },
278
+ initiativeId: {
279
+ type: "string",
280
+ description: "Link directly to a yearly initiative ID (optional)",
281
+ },
270
282
  },
271
283
  required: ["title"],
272
284
  },
@@ -354,6 +366,10 @@ const TOOLS = [
354
366
  type: "boolean",
355
367
  description: "Mark as top priority (optional)",
356
368
  },
369
+ initiativeId: {
370
+ type: "string",
371
+ description: "Link to a yearly initiative ID, or empty to unlink (optional)",
372
+ },
357
373
  },
358
374
  required: ["issueIdOrIdentifier"],
359
375
  },
@@ -941,6 +957,10 @@ const TOOLS = [
941
957
  type: "string",
942
958
  description: "The topic/context of the conversation that led to this summary (optional)",
943
959
  },
960
+ rawConversation: {
961
+ type: "string",
962
+ description: "Raw conversation transcript as a JSON string (optional)",
963
+ },
944
964
  },
945
965
  required: ["title", "summary"],
946
966
  },
@@ -1998,6 +2018,297 @@ const TOOLS = [
1998
2018
  required: ["threadConvexId", "meetingSource", "meetingId"],
1999
2019
  },
2000
2020
  },
2021
+ // ==================== INITIATIVE MANAGEMENT ====================
2022
+ {
2023
+ name: "get_initiatives",
2024
+ description: "Get yearly initiatives with optional filters. Initiatives are the highest-order goals (e.g., 'Career Growth', 'Health Improvement') that cascade down to projects, tasks, and habits.",
2025
+ inputSchema: {
2026
+ type: "object",
2027
+ properties: {
2028
+ userId: {
2029
+ type: "string",
2030
+ description: "Override the default user ID (optional)",
2031
+ },
2032
+ year: {
2033
+ type: "number",
2034
+ description: "Filter by year, e.g. 2026 (optional)",
2035
+ },
2036
+ status: {
2037
+ type: "string",
2038
+ enum: ["active", "completed", "paused", "cancelled"],
2039
+ description: "Filter by initiative status (optional)",
2040
+ },
2041
+ category: {
2042
+ type: "string",
2043
+ enum: [
2044
+ "career",
2045
+ "health",
2046
+ "learning",
2047
+ "relationships",
2048
+ "finance",
2049
+ "personal",
2050
+ ],
2051
+ description: "Filter by category (optional)",
2052
+ },
2053
+ includeArchived: {
2054
+ type: "boolean",
2055
+ description: "Include archived initiatives (default: false)",
2056
+ },
2057
+ },
2058
+ },
2059
+ },
2060
+ {
2061
+ name: "get_initiative",
2062
+ description: "Get a single initiative's details by ID.",
2063
+ inputSchema: {
2064
+ type: "object",
2065
+ properties: {
2066
+ userId: {
2067
+ type: "string",
2068
+ description: "Override the default user ID (optional)",
2069
+ },
2070
+ initiativeId: {
2071
+ type: "string",
2072
+ description: "The initiative ID (required)",
2073
+ },
2074
+ },
2075
+ required: ["initiativeId"],
2076
+ },
2077
+ },
2078
+ {
2079
+ name: "get_initiative_with_stats",
2080
+ description: "Get an initiative with full stats: linked projects, habits, directly linked issues, task completion counts, and calculated progress.",
2081
+ inputSchema: {
2082
+ type: "object",
2083
+ properties: {
2084
+ userId: {
2085
+ type: "string",
2086
+ description: "Override the default user ID (optional)",
2087
+ },
2088
+ initiativeId: {
2089
+ type: "string",
2090
+ description: "The initiative ID (required)",
2091
+ },
2092
+ },
2093
+ required: ["initiativeId"],
2094
+ },
2095
+ },
2096
+ {
2097
+ name: "create_initiative",
2098
+ description: "Create a new yearly initiative. Initiatives are the highest-order goals that organize projects, tasks, and habits.",
2099
+ inputSchema: {
2100
+ type: "object",
2101
+ properties: {
2102
+ userId: {
2103
+ type: "string",
2104
+ description: "Override the default user ID (optional)",
2105
+ },
2106
+ year: {
2107
+ type: "number",
2108
+ description: "The year for this initiative, e.g. 2026 (required)",
2109
+ },
2110
+ title: {
2111
+ type: "string",
2112
+ description: "Initiative title (required)",
2113
+ },
2114
+ category: {
2115
+ type: "string",
2116
+ enum: [
2117
+ "career",
2118
+ "health",
2119
+ "learning",
2120
+ "relationships",
2121
+ "finance",
2122
+ "personal",
2123
+ ],
2124
+ description: "Category for grouping (required)",
2125
+ },
2126
+ description: {
2127
+ type: "string",
2128
+ description: "Detailed description (optional)",
2129
+ },
2130
+ status: {
2131
+ type: "string",
2132
+ enum: ["active", "completed", "paused", "cancelled"],
2133
+ description: "Status (optional, default: active)",
2134
+ },
2135
+ targetMetric: {
2136
+ type: "string",
2137
+ description: "Target metric description, e.g. 'Complete 3 projects' or 'Run 500 miles' (optional)",
2138
+ },
2139
+ manualProgress: {
2140
+ type: "number",
2141
+ description: "Manual progress override 0-100 (optional)",
2142
+ },
2143
+ color: {
2144
+ type: "string",
2145
+ description: "Hex color for visual display (optional)",
2146
+ },
2147
+ icon: {
2148
+ type: "string",
2149
+ description: "Emoji icon (optional)",
2150
+ },
2151
+ },
2152
+ required: ["year", "title", "category"],
2153
+ },
2154
+ },
2155
+ {
2156
+ name: "update_initiative",
2157
+ description: "Update an initiative's details.",
2158
+ inputSchema: {
2159
+ type: "object",
2160
+ properties: {
2161
+ userId: {
2162
+ type: "string",
2163
+ description: "Override the default user ID (optional)",
2164
+ },
2165
+ initiativeId: {
2166
+ type: "string",
2167
+ description: "The initiative ID (required)",
2168
+ },
2169
+ title: {
2170
+ type: "string",
2171
+ description: "Updated title (optional)",
2172
+ },
2173
+ description: {
2174
+ type: "string",
2175
+ description: "Updated description (optional)",
2176
+ },
2177
+ category: {
2178
+ type: "string",
2179
+ enum: [
2180
+ "career",
2181
+ "health",
2182
+ "learning",
2183
+ "relationships",
2184
+ "finance",
2185
+ "personal",
2186
+ ],
2187
+ description: "Updated category (optional)",
2188
+ },
2189
+ status: {
2190
+ type: "string",
2191
+ enum: ["active", "completed", "paused", "cancelled"],
2192
+ description: "Updated status (optional)",
2193
+ },
2194
+ targetMetric: {
2195
+ type: "string",
2196
+ description: "Updated target metric (optional)",
2197
+ },
2198
+ manualProgress: {
2199
+ type: "number",
2200
+ description: "Updated manual progress 0-100 (optional)",
2201
+ },
2202
+ color: {
2203
+ type: "string",
2204
+ description: "Updated hex color (optional)",
2205
+ },
2206
+ icon: {
2207
+ type: "string",
2208
+ description: "Updated emoji icon (optional)",
2209
+ },
2210
+ },
2211
+ required: ["initiativeId"],
2212
+ },
2213
+ },
2214
+ {
2215
+ name: "archive_initiative",
2216
+ description: "Archive an initiative (soft delete). Can be unarchived later.",
2217
+ inputSchema: {
2218
+ type: "object",
2219
+ properties: {
2220
+ userId: {
2221
+ type: "string",
2222
+ description: "Override the default user ID (optional)",
2223
+ },
2224
+ initiativeId: {
2225
+ type: "string",
2226
+ description: "The initiative ID (required)",
2227
+ },
2228
+ },
2229
+ required: ["initiativeId"],
2230
+ },
2231
+ },
2232
+ {
2233
+ name: "delete_initiative",
2234
+ description: "Permanently delete an initiative. Linked projects, habits, and issues are unlinked (not deleted).",
2235
+ inputSchema: {
2236
+ type: "object",
2237
+ properties: {
2238
+ userId: {
2239
+ type: "string",
2240
+ description: "Override the default user ID (optional)",
2241
+ },
2242
+ initiativeId: {
2243
+ type: "string",
2244
+ description: "The initiative ID (required)",
2245
+ },
2246
+ },
2247
+ required: ["initiativeId"],
2248
+ },
2249
+ },
2250
+ {
2251
+ name: "link_project_to_initiative",
2252
+ description: "Link a project to an initiative, or unlink by omitting initiativeId.",
2253
+ inputSchema: {
2254
+ type: "object",
2255
+ properties: {
2256
+ userId: {
2257
+ type: "string",
2258
+ description: "Override the default user ID (optional)",
2259
+ },
2260
+ projectIdOrKey: {
2261
+ type: "string",
2262
+ description: "Project ID or key like 'ACME' (required)",
2263
+ },
2264
+ initiativeId: {
2265
+ type: "string",
2266
+ description: "Initiative ID to link to (optional — omit to unlink)",
2267
+ },
2268
+ },
2269
+ required: ["projectIdOrKey"],
2270
+ },
2271
+ },
2272
+ {
2273
+ name: "link_issue_to_initiative",
2274
+ description: "Link an issue/task directly to an initiative, or unlink by omitting initiativeId.",
2275
+ inputSchema: {
2276
+ type: "object",
2277
+ properties: {
2278
+ userId: {
2279
+ type: "string",
2280
+ description: "Override the default user ID (optional)",
2281
+ },
2282
+ issueIdOrIdentifier: {
2283
+ type: "string",
2284
+ description: "Issue ID or identifier like 'PROJ-123' (required)",
2285
+ },
2286
+ initiativeId: {
2287
+ type: "string",
2288
+ description: "Initiative ID to link to (optional — omit to unlink)",
2289
+ },
2290
+ },
2291
+ required: ["issueIdOrIdentifier"],
2292
+ },
2293
+ },
2294
+ {
2295
+ name: "get_initiative_yearly_rollup",
2296
+ description: "Get yearly rollup of all initiatives with aggregated stats: task counts, project counts, habit counts, and progress per initiative.",
2297
+ inputSchema: {
2298
+ type: "object",
2299
+ properties: {
2300
+ userId: {
2301
+ type: "string",
2302
+ description: "Override the default user ID (optional)",
2303
+ },
2304
+ year: {
2305
+ type: "number",
2306
+ description: "The year to get rollup for, e.g. 2026 (required)",
2307
+ },
2308
+ },
2309
+ required: ["year"],
2310
+ },
2311
+ },
2001
2312
  // MCP Server Info
2002
2313
  {
2003
2314
  name: "get_version",
@@ -2109,6 +2420,127 @@ const PROMPTS = [
2109
2420
  },
2110
2421
  ],
2111
2422
  },
2423
+ {
2424
+ name: "initiative-review",
2425
+ description: "Review yearly initiative progress: get all initiatives for a year, show stats per category, highlight stalled or off-track initiatives.",
2426
+ arguments: [
2427
+ {
2428
+ name: "year",
2429
+ description: "Year to review (optional, defaults to current year)",
2430
+ required: false,
2431
+ },
2432
+ ],
2433
+ },
2434
+ {
2435
+ name: "client-health",
2436
+ description: "Show health dashboard across all clients with risk indicators, project health, and communication recency.",
2437
+ arguments: [
2438
+ {
2439
+ name: "filter",
2440
+ description: "Optional filter: 'critical' to only show at-risk and critical clients",
2441
+ required: false,
2442
+ },
2443
+ ],
2444
+ },
2445
+ {
2446
+ name: "context-switch",
2447
+ description: "Quickly load context for a client or project for fast mental context switching.",
2448
+ arguments: [
2449
+ {
2450
+ name: "name",
2451
+ description: "Client name or project key/name to load context for (required)",
2452
+ required: true,
2453
+ },
2454
+ ],
2455
+ },
2456
+ {
2457
+ name: "end-of-day",
2458
+ description: "Run end-of-day wrap-up with completion summary, carry-over items, and tomorrow planning.",
2459
+ arguments: [
2460
+ {
2461
+ name: "date",
2462
+ description: "Specific date in ISO format (optional, defaults to today)",
2463
+ required: false,
2464
+ },
2465
+ ],
2466
+ },
2467
+ {
2468
+ name: "follow-ups",
2469
+ description: "Track follow-ups needed with people and clients based on interaction recency.",
2470
+ arguments: [
2471
+ {
2472
+ name: "name",
2473
+ description: "Optional: specific person or client name to focus on",
2474
+ required: false,
2475
+ },
2476
+ ],
2477
+ },
2478
+ {
2479
+ name: "inbox-triage",
2480
+ description: "Process captured notes and triage into actionable tasks, tags, and links.",
2481
+ arguments: [
2482
+ {
2483
+ name: "mode",
2484
+ description: "Optional: 'auto' to process automatically with best-guess actions instead of asking",
2485
+ required: false,
2486
+ },
2487
+ ],
2488
+ },
2489
+ {
2490
+ name: "monthly-review",
2491
+ description: "Run monthly review with accomplishments, project progress, client health, and next month planning.",
2492
+ arguments: [
2493
+ {
2494
+ name: "month",
2495
+ description: "Month to review in ISO format like '2025-01' (optional, defaults to current month)",
2496
+ required: false,
2497
+ },
2498
+ ],
2499
+ },
2500
+ {
2501
+ name: "overdue",
2502
+ description: "Show what's overdue or slipping — tasks past due, off-track projects, stale in-progress items.",
2503
+ arguments: [
2504
+ {
2505
+ name: "filter",
2506
+ description: "Optional: 'critical' or 'urgent' to only show critical items",
2507
+ required: false,
2508
+ },
2509
+ ],
2510
+ },
2511
+ {
2512
+ name: "relationship-pulse",
2513
+ description: "Check on neglected relationships and suggest reconnection actions based on interaction history.",
2514
+ arguments: [
2515
+ {
2516
+ name: "type",
2517
+ description: "Optional: relationship type to filter (e.g., 'family', 'friends', 'colleagues')",
2518
+ required: false,
2519
+ },
2520
+ ],
2521
+ },
2522
+ {
2523
+ name: "voice-notes",
2524
+ description: "Interactive voice memo exploration — review, analyze, and discuss your recorded thoughts.",
2525
+ arguments: [
2526
+ {
2527
+ name: "topic",
2528
+ description: "Optional: topic or date range to start exploring",
2529
+ required: false,
2530
+ },
2531
+ ],
2532
+ },
2533
+ {
2534
+ name: "voice-notes-crystallize",
2535
+ description: "Save a crystallized summary of AI conversation — preserve insights, plans, and ideas from voice note discussions.",
2536
+ arguments: [
2537
+ {
2538
+ name: "title",
2539
+ description: "Optional: title or topic for the crystallization summary",
2540
+ required: false,
2541
+ },
2542
+ ],
2543
+ },
2112
2544
  ];
2113
2545
  // Prompt message templates keyed by prompt name
2114
2546
  const PROMPT_MESSAGES = {
@@ -2328,7 +2760,7 @@ Present the cycle review:
2328
2760
  - **Progress**: Completion %, issues done vs total
2329
2761
  - **Incomplete Items**: List all non-done/non-cancelled issues with status and priority
2330
2762
  - **Next Cycle**: Show the next upcoming cycle (if any)
2331
- - **Recommendations**:
2763
+ - **Recommendations**:
2332
2764
  - If cycle is ending soon, suggest closing with rollover
2333
2765
  - If many items are incomplete, suggest re-prioritizing
2334
2766
  - If cycle is already past end date, strongly recommend closing it
@@ -2340,6 +2772,370 @@ ${!args.action ? "Ask the user if they want to close the cycle, and whether to r
2340
2772
  },
2341
2773
  ];
2342
2774
  },
2775
+ "initiative-review": (args) => {
2776
+ const year = args.year || new Date().getFullYear().toString();
2777
+ return [
2778
+ {
2779
+ role: "user",
2780
+ content: {
2781
+ type: "text",
2782
+ text: `Review my yearly initiative progress. Use the LifeOS MCP tools:
2783
+
2784
+ 1. Call get_initiative_yearly_rollup with year ${year} — this gives all initiatives with aggregated stats
2785
+ 2. For any initiative with low progress or stalled status, call get_initiative_with_stats for deeper details
2786
+
2787
+ Present the review:
2788
+ - **Year ${year} Overview**: Total initiatives, active vs completed, average progress
2789
+ - **By Category**: Group initiatives by category (career, health, learning, etc.) and show progress
2790
+ - **Each Initiative**: Title, status, progress %, tasks completed/total, linked projects, habits
2791
+ - **Highlights**: Call out any initiatives at 80%+ progress (near completion)
2792
+ - **Concerns**: Flag initiatives with 0% progress, no linked projects, or "paused" status
2793
+ - **Recommendations**: Suggest next actions — which initiatives to focus on, which need attention
2794
+
2795
+ Be concise but thorough. Use emoji for categories. Suggest linking unlinked projects/tasks if appropriate.`,
2796
+ },
2797
+ },
2798
+ ];
2799
+ },
2800
+ "client-health": (args) => {
2801
+ const filterClause = args.filter === "critical"
2802
+ ? "\n\nOnly show at-risk and critical clients."
2803
+ : "";
2804
+ return [
2805
+ {
2806
+ role: "user",
2807
+ content: {
2808
+ type: "text",
2809
+ text: `Show health dashboard across all clients. Use the LifeOS MCP tools:
2810
+
2811
+ 1. Call get_clients to get all active clients
2812
+ 2. For each client, call get_projects_for_client to get project stats
2813
+ 3. Call get_tasks to analyze overdue/at-risk tasks per client
2814
+ 4. Call get_beeper_threads to check communication recency
2815
+
2816
+ Calculate health score for each client based on:
2817
+ - **Project health**: Are projects on_track, at_risk, or off_track?
2818
+ - **Task completion**: % of tasks done vs total
2819
+ - **Overdue items**: Number of overdue tasks
2820
+ - **Communication**: Days since last message/meeting
2821
+ - **Revenue risk**: Active projects nearing completion without follow-on
2822
+
2823
+ Present as a dashboard:
2824
+ | Client | Health | Projects | Overdue | Last Contact | Action |
2825
+ |--------|--------|----------|---------|--------------|--------|
2826
+
2827
+ Then detail:
2828
+ - **Healthy clients**: All good, maintain relationship
2829
+ - **At-risk clients**: Need attention soon (explain why)
2830
+ - **Critical clients**: Immediate action needed
2831
+
2832
+ For at-risk and critical, provide specific recommended actions.${filterClause}`,
2833
+ },
2834
+ },
2835
+ ];
2836
+ },
2837
+ "context-switch": (args) => [
2838
+ {
2839
+ role: "user",
2840
+ content: {
2841
+ type: "text",
2842
+ text: `Quickly load context for "${args.name}". Use the LifeOS MCP tools:
2843
+
2844
+ **If it's a client name:**
2845
+ 1. Call get_clients and find the matching client
2846
+ 2. Call get_client with the client ID for details
2847
+ 3. Call get_projects_for_client to see their projects
2848
+ 4. Call get_beeper_threads_for_client for recent communications
2849
+
2850
+ **If it's a project name/key:**
2851
+ 1. Call get_project with the project key/name
2852
+ 2. Call get_phases for the project phases
2853
+ 3. Call get_tasks filtered by the project to see active work
2854
+ 4. If project has a client, load client context too
2855
+
2856
+ Present a quick context brief:
2857
+ - **Overview**: What this client/project is about
2858
+ - **Current Status**: Active phase, health, completion %
2859
+ - **Open Items**: Tasks in progress or todo (top 5)
2860
+ - **Recent Activity**: Last meeting, last message (if available)
2861
+ - **Blockers**: Anything stuck or overdue
2862
+ - **Quick Actions**: Suggested next steps
2863
+
2864
+ Keep it scannable — this is for fast context loading, not deep analysis.`,
2865
+ },
2866
+ },
2867
+ ],
2868
+ "end-of-day": (args) => {
2869
+ const dateClause = args.date
2870
+ ? `Use date: ${args.date}`
2871
+ : "Use today's date.";
2872
+ return [
2873
+ {
2874
+ role: "user",
2875
+ content: {
2876
+ type: "text",
2877
+ text: `Run my end-of-day wrap-up. Use the LifeOS MCP tools:
2878
+
2879
+ 1. Call get_daily_agenda for today's agenda
2880
+ 2. Call get_tasks with status "done" to see what was completed today
2881
+ 3. Call get_tasks with status "in_progress" to see what's still in flight
2882
+ 4. Call get_todays_tasks to see what was planned vs actual
2883
+ 5. Call get_recent_notes with limit 5 for any thoughts captured today
2884
+
2885
+ ${dateClause}
2886
+
2887
+ Present an end-of-day summary:
2888
+ - **Completed today**: What got done (celebrate wins!)
2889
+ - **Still in progress**: What's carrying over
2890
+ - **Moved to tomorrow**: Tasks that got bumped
2891
+ - **Unplanned work**: Things that came up unexpectedly
2892
+ - **Notes captured**: Any thoughts/ideas from today
2893
+
2894
+ Then prompt for reflection:
2895
+ - What went well today?
2896
+ - What was challenging?
2897
+ - What's the #1 priority for tomorrow morning?
2898
+
2899
+ Offer to:
2900
+ - Update any task statuses
2901
+ - Create tasks for tomorrow based on reflection
2902
+ - Capture any final thoughts as a note`,
2903
+ },
2904
+ },
2905
+ ];
2906
+ },
2907
+ "follow-ups": (args) => {
2908
+ const nameClause = args.name
2909
+ ? `\n\nFocus specifically on: "${args.name}"`
2910
+ : "";
2911
+ return [
2912
+ {
2913
+ role: "user",
2914
+ content: {
2915
+ type: "text",
2916
+ text: `Track follow-ups needed with people and clients. Use the LifeOS MCP tools:
2917
+
2918
+ 1. Call get_people to get all contacts
2919
+ 2. Call get_clients to get all clients
2920
+ 3. Call get_beeper_threads to see recent message activity
2921
+ 4. Call get_granola_meetings to see recent meetings
2922
+
2923
+ Analyze and identify:
2924
+ - **People needing follow-up**: Contacts with no interaction in 7+ days who have open items or recent meetings
2925
+ - **Client follow-ups**: Clients with stale threads or meetings that had action items
2926
+ - **Promised callbacks**: Any meetings/messages where you said "I'll get back to you"
2927
+
2928
+ Present as:
2929
+ - **Urgent** (14+ days): People/clients you really need to reach out to
2930
+ - **Soon** (7-14 days): Worth a quick check-in
2931
+ - **Suggested actions**: Specific follow-up actions for each${nameClause}`,
2932
+ },
2933
+ },
2934
+ ];
2935
+ },
2936
+ "inbox-triage": (args) => {
2937
+ const autoMode = args.mode === "auto"
2938
+ ? "\n\nProcess automatically with best-guess actions instead of asking for confirmation."
2939
+ : "\n\nAsk for confirmation before making changes.";
2940
+ return [
2941
+ {
2942
+ role: "user",
2943
+ content: {
2944
+ type: "text",
2945
+ text: `Process captured notes and triage into actionable items. Use the LifeOS MCP tools:
2946
+
2947
+ 1. Call get_recent_notes with limit 20 to get recent unprocessed captures
2948
+ 2. Call get_projects to know available projects for assignment
2949
+ 3. Call get_people to know contacts for linking
2950
+
2951
+ For each note, analyze and suggest:
2952
+ - **Convert to task?** If it contains an action item, offer to create an issue
2953
+ - **Link to person?** If it mentions someone, offer to link the note
2954
+ - **Link to project?** If it relates to a project, suggest assignment
2955
+ - **Add tags?** Suggest relevant tags based on content
2956
+
2957
+ Present as an interactive triage list:
2958
+ - Show each note with its content summary
2959
+ - Provide recommended action (task, tag, link, or archive)
2960
+
2961
+ After triage, use the appropriate tools:
2962
+ - Call create_issue to convert notes to tasks
2963
+ - Call add_tags_to_note to categorize
2964
+ - Call link_memo_to_person to connect to people${autoMode}`,
2965
+ },
2966
+ },
2967
+ ];
2968
+ },
2969
+ "monthly-review": (args) => {
2970
+ const monthClause = args.month
2971
+ ? `Use month start date: ${args.month}-01`
2972
+ : "Use the current month.";
2973
+ return [
2974
+ {
2975
+ role: "user",
2976
+ content: {
2977
+ type: "text",
2978
+ text: `Run my monthly review. Use the LifeOS MCP tools:
2979
+
2980
+ 1. Call get_monthly_agenda for this month's overview and AI summary
2981
+ 2. Call get_cycles to see all sprints this month and their completion rates
2982
+ 3. Call get_tasks with status "done" to see everything completed this month
2983
+ 4. Call get_projects to see project progress and health
2984
+ 5. Call get_clients to review client status
2985
+ 6. Call get_recent_notes with limit 20 to review captured thoughts
2986
+
2987
+ ${monthClause}
2988
+
2989
+ Present a monthly review:
2990
+ - **Accomplishments**: Major wins and completed work this month
2991
+ - **Projects Progress**: Status of each active project
2992
+ - **Sprint Performance**: Average completion rate across cycles
2993
+ - **Client Health**: How each client relationship is doing
2994
+ - **Themes**: Patterns from notes and completed work
2995
+ - **Carried Forward**: What's rolling into next month
2996
+ - **Reflections**: What worked, what didn't
2997
+ - **Next Month Focus**: Top 3 priorities for the coming month`,
2998
+ },
2999
+ },
3000
+ ];
3001
+ },
3002
+ overdue: (args) => {
3003
+ const filterClause = args.filter === "critical" || args.filter === "urgent"
3004
+ ? "\n\nOnly show critical items (7+ days overdue)."
3005
+ : "";
3006
+ return [
3007
+ {
3008
+ role: "user",
3009
+ content: {
3010
+ type: "text",
3011
+ text: `Show what's overdue or slipping. Use the LifeOS MCP tools:
3012
+
3013
+ 1. Call get_tasks to get all tasks
3014
+ 2. Call get_projects to get all projects with health status
3015
+ 3. Call get_current_cycle to see sprint status
3016
+
3017
+ Analyze and identify:
3018
+ - **Overdue tasks**: Tasks past their due date (compare dueDate to today)
3019
+ - **Off-track projects**: Projects with health "off_track" or "at_risk"
3020
+ - **Stale in-progress**: Tasks marked "in_progress" for more than 7 days
3021
+ - **Sprint slippage**: If cycle completion % is behind expected pace
3022
+
3023
+ Present as:
3024
+ - **Critical** (7+ days overdue): Needs immediate attention
3025
+ - **Overdue** (1-7 days): Should address soon
3026
+ - **At Risk**: In-progress items that might slip
3027
+ - **Projects Off Track**: Projects needing intervention
3028
+
3029
+ For each item, suggest: reschedule, delegate, or drop.${filterClause}`,
3030
+ },
3031
+ },
3032
+ ];
3033
+ },
3034
+ "relationship-pulse": (args) => {
3035
+ const typeClause = args.type
3036
+ ? `\n\nFilter to relationship type: "${args.type}"`
3037
+ : "";
3038
+ return [
3039
+ {
3040
+ role: "user",
3041
+ content: {
3042
+ type: "text",
3043
+ text: `Check on neglected relationships. Use the LifeOS MCP tools:
3044
+
3045
+ 1. Call get_people to get all contacts
3046
+ 2. Call get_beeper_threads to check message activity
3047
+ 3. Call get_granola_meetings to see meeting history
3048
+
3049
+ Analyze each contact for:
3050
+ - **Last interaction**: When did you last talk/meet?
3051
+ - **Interaction frequency**: How often do you typically connect?
3052
+ - **Relationship type**: Family, friend, colleague, mentor, etc.
3053
+
3054
+ Identify neglected relationships:
3055
+ - **Family/Close friends**: No contact in 14+ days
3056
+ - **Friends**: No contact in 30+ days
3057
+ - **Colleagues/Mentors**: No contact in 60+ days
3058
+ - **Acquaintances**: No contact in 90+ days
3059
+
3060
+ Present as:
3061
+ - **Reach out soon**: People you should contact (prioritized by relationship closeness)
3062
+ - **Consider reconnecting**: People you might want to re-engage
3063
+ - **Suggested touchpoints**: Quick ways to reconnect (reply to old thread, schedule catch-up, etc.)${typeClause}`,
3064
+ },
3065
+ },
3066
+ ];
3067
+ },
3068
+ "voice-notes": (args) => {
3069
+ const topicClause = args.topic
3070
+ ? `\n\nStart by exploring: "${args.topic}"`
3071
+ : "\n\nShow recent activity and ask what I want to explore.";
3072
+ return [
3073
+ {
3074
+ role: "user",
3075
+ content: {
3076
+ type: "text",
3077
+ text: `Explore and work with my voice notes interactively. Use the LifeOS MCP tools.
3078
+
3079
+ This is an interactive session to help me think through my voice notes, formulate plans, refine ideas, and review journal entries.
3080
+
3081
+ **Getting Started:**
3082
+ 1. Call get_voice_memo_labels to see all topics/labels
3083
+ 2. Call get_recent_notes with limit 10 to see recent entries
3084
+
3085
+ **Based on what I want to explore:**
3086
+ - To review recent notes: Call get_recent_notes or get_voice_memos_by_date
3087
+ - To explore a topic: Call get_voice_memos_by_labels or search_notes
3088
+ - To review a time period: Call get_voice_memos_by_date with date range
3089
+ - For deeper analysis: Call get_voice_memo for full details
3090
+
3091
+ **During the conversation:**
3092
+ - Help me think through my notes
3093
+ - Identify patterns and connections across memos
3094
+ - Surface action items I may have forgotten
3095
+ - Help formulate new plans or refine existing ideas
3096
+ - Offer reflections on journal entries
3097
+
3098
+ **At the end:** Offer to crystallize insights using the voice-notes-crystallize prompt.${topicClause}`,
3099
+ },
3100
+ },
3101
+ ];
3102
+ },
3103
+ "voice-notes-crystallize": (args) => {
3104
+ const titleClause = args.title
3105
+ ? `Use title: "${args.title}"`
3106
+ : "Generate a title based on the conversation.";
3107
+ return [
3108
+ {
3109
+ role: "user",
3110
+ content: {
3111
+ type: "text",
3112
+ text: `Save a crystallized summary of our conversation about voice notes. Use the LifeOS MCP tools.
3113
+
3114
+ ${titleClause}
3115
+
3116
+ **Analyze the conversation and extract:**
3117
+
3118
+ 1. **Title**: A descriptive title for this crystallization
3119
+ 2. **Summary**: The main insights, conclusions, or outcomes (2-4 paragraphs)
3120
+ 3. **Key Insights**: 3-7 bullet points of the most important realizations
3121
+ 4. **Action Items**: Any tasks or actions that emerged
3122
+ 5. **Ideas**: New ideas, plans, or directions formulated
3123
+ 6. **Tags**: 3-5 relevant tags for categorization
3124
+
3125
+ **Determine the summary type:**
3126
+ - reflection — Processing past experiences or feelings
3127
+ - planning — Creating plans or strategies
3128
+ - brainstorm — Generating new ideas
3129
+ - journal_review — Reviewing journal/diary entries
3130
+ - idea_refinement — Developing and refining existing ideas
3131
+
3132
+ **Save using:** Call create_ai_convo_summary with the extracted data.
3133
+
3134
+ **After saving:** Confirm success and show the summary ID.`,
3135
+ },
3136
+ },
3137
+ ];
3138
+ },
2343
3139
  };
2344
3140
  // Configuration: CLI flags take precedence over env vars
2345
3141
  // NOTE: HTTP routes are served from .convex.site, NOT .convex.cloud
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@starascendin/lifeos-mcp",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "MCP server for LifeOS Project Management - manage projects, tasks, notes, and contacts via AI assistants",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",