@starascendin/lifeos-mcp 0.7.56 → 0.7.58

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.
package/README.md CHANGED
@@ -82,6 +82,7 @@ Add to your `.mcp.json` (project root or `~/.claude/mcp.json`):
82
82
  - **get_projects** - List all projects with stats
83
83
  - **get_tasks** - Get tasks with filters (project, status, priority)
84
84
  - **get_todays_tasks** - Get today's tasks and top priorities
85
+ - **get_overdue_tasks** - Get open tasks that are already overdue
85
86
  - **create_issue** - Create a new task/issue
86
87
  - **update_issue** - Update an existing task, including estimate/story points
87
88
  - **mark_issue_complete** - Mark a task as done
@@ -102,6 +103,18 @@ Add to your `.mcp.json` (project root or `~/.claude/mcp.json`):
102
103
  - **get_daily_agenda** - Today's tasks, events, priorities
103
104
  - **get_weekly_agenda** - Week's tasks and events
104
105
 
106
+ ### Habits
107
+ - **get_habits** - List active habits with streaks and completion stats
108
+ - **get_habits_for_date** - Get scheduled habits and their state for one day
109
+ - **get_habit** - Get one habit with extended stats
110
+ - **create_habit** - Create a new habit
111
+ - **update_habit** - Update a habit's details or active state
112
+ - **archive_habit** - Archive a habit while preserving history
113
+ - **check_in_habit** - Mark a habit complete, incomplete, or skipped for a date
114
+ - **get_habit_check_ins** - Get one habit's check-in history
115
+ - **get_habit_categories** - List habit categories
116
+ - **create_habit_category** - Create a habit category
117
+
105
118
  ### Notes
106
119
  - **search_notes** - Search voice memos/notes
107
120
  - **get_recent_notes** - Get recent notes
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.7.56";
2
- export declare const BUILD_TIME = "2026-03-22T17:15:09.107Z";
1
+ export declare const VERSION = "0.7.58";
2
+ export declare const BUILD_TIME = "2026-04-01T15:25:50.379Z";
@@ -1,3 +1,3 @@
1
1
  // AUTO-GENERATED — do not edit. Regenerated on every build.
2
- export const VERSION = "0.7.56";
3
- export const BUILD_TIME = "2026-03-22T17:15:09.107Z";
2
+ export const VERSION = "0.7.58";
3
+ export const BUILD_TIME = "2026-04-01T15:25:50.379Z";
package/dist/index.js CHANGED
@@ -236,6 +236,23 @@ const TOOLS = [
236
236
  },
237
237
  },
238
238
  },
239
+ {
240
+ name: "get_overdue_tasks",
241
+ description: "Get overdue tasks that are past due and still open. Best for surfacing slipped work explicitly.",
242
+ inputSchema: {
243
+ type: "object",
244
+ properties: {
245
+ userId: {
246
+ type: "string",
247
+ description: "Override the default user ID (optional)",
248
+ },
249
+ date: {
250
+ type: "string",
251
+ description: "Specific date in ISO format used as the overdue cutoff (optional, default: today)",
252
+ },
253
+ },
254
+ },
255
+ },
239
256
  {
240
257
  name: "create_issue",
241
258
  description: "Create a new task/issue. Assign to a project (by key like 'KORT') and optionally a phase (by name like 'Building Foundation' or by ID). Set priority, due date, cycle, and initiative.",
@@ -378,6 +395,11 @@ const TOOLS = [
378
395
  type: "number",
379
396
  description: "Story points / sprint points (optional)",
380
397
  },
398
+ labelIds: {
399
+ type: "array",
400
+ items: { type: "string" },
401
+ description: "Array of label IDs to set on the issue (replaces existing labels) (optional)",
402
+ },
381
403
  },
382
404
  required: ["issueIdOrIdentifier"],
383
405
  },
@@ -400,6 +422,106 @@ const TOOLS = [
400
422
  required: ["issueIdOrIdentifier"],
401
423
  },
402
424
  },
425
+ // Label Management Tools
426
+ {
427
+ name: "get_labels",
428
+ description: "Get all labels for the user. Can filter by project or get workspace-wide labels.",
429
+ inputSchema: {
430
+ type: "object",
431
+ properties: {
432
+ userId: {
433
+ type: "string",
434
+ description: "Override the default user ID (optional)",
435
+ },
436
+ projectId: {
437
+ type: "string",
438
+ description: "Filter by project ID (optional)",
439
+ },
440
+ includeWorkspaceLabels: {
441
+ type: "boolean",
442
+ description: "Include workspace-wide labels when filtering by project (default: false)",
443
+ },
444
+ },
445
+ },
446
+ },
447
+ {
448
+ name: "create_label",
449
+ description: "Create a new label with a name and color.",
450
+ inputSchema: {
451
+ type: "object",
452
+ properties: {
453
+ userId: {
454
+ type: "string",
455
+ description: "Override the default user ID (optional)",
456
+ },
457
+ name: {
458
+ type: "string",
459
+ description: "Label name (required)",
460
+ },
461
+ color: {
462
+ type: "string",
463
+ description: "Hex color code, e.g., #ef4444 (required)",
464
+ },
465
+ description: {
466
+ type: "string",
467
+ description: "Label description (optional)",
468
+ },
469
+ projectId: {
470
+ type: "string",
471
+ description: "Project ID to scope label to (optional - omit for workspace-wide)",
472
+ },
473
+ },
474
+ required: ["name", "color"],
475
+ },
476
+ },
477
+ {
478
+ name: "update_label",
479
+ description: "Update an existing label's name, color, or description.",
480
+ inputSchema: {
481
+ type: "object",
482
+ properties: {
483
+ userId: {
484
+ type: "string",
485
+ description: "Override the default user ID (optional)",
486
+ },
487
+ labelId: {
488
+ type: "string",
489
+ description: "Label ID (required)",
490
+ },
491
+ name: {
492
+ type: "string",
493
+ description: "Updated name (optional)",
494
+ },
495
+ color: {
496
+ type: "string",
497
+ description: "Updated hex color (optional)",
498
+ },
499
+ description: {
500
+ type: "string",
501
+ description: "Updated description (optional)",
502
+ },
503
+ },
504
+ required: ["labelId"],
505
+ },
506
+ },
507
+ {
508
+ name: "delete_label",
509
+ description: "Delete a label and remove it from all issues.",
510
+ inputSchema: {
511
+ type: "object",
512
+ properties: {
513
+ userId: {
514
+ type: "string",
515
+ description: "Override the default user ID (optional)",
516
+ },
517
+ labelId: {
518
+ type: "string",
519
+ description: "Label ID to delete (required)",
520
+ },
521
+ },
522
+ required: ["labelId"],
523
+ },
524
+ },
403
525
  // Cycle/Sprint Tools
404
526
  {
405
527
  name: "get_current_cycle",
@@ -4204,9 +4326,18 @@ const TOOLS = [
4204
4326
  environment: { type: "string", description: "Updated environment" },
4205
4327
  interactions: { type: "string", description: "Updated interactions" },
4206
4328
  objects: { type: "string", description: "Updated objects" },
4207
- usersInvolved: { type: "string", description: "Updated users involved" },
4208
- energyRating: { type: "number", description: "Updated energy rating 1-5" },
4209
- engagementRating: { type: "number", description: "Updated engagement rating 1-5" },
4329
+ usersInvolved: {
4330
+ type: "string",
4331
+ description: "Updated users involved",
4332
+ },
4333
+ energyRating: {
4334
+ type: "number",
4335
+ description: "Updated energy rating 1-5",
4336
+ },
4337
+ engagementRating: {
4338
+ type: "number",
4339
+ description: "Updated engagement rating 1-5",
4340
+ },
4210
4341
  flowRating: { type: "number", description: "Updated flow rating 1-5" },
4211
4342
  isWork: { type: "boolean", description: "Updated work flag" },
4212
4343
  isPlay: { type: "boolean", description: "Updated play flag" },
@@ -4366,10 +4497,22 @@ const TOOLS = [
4366
4497
  inputSchema: {
4367
4498
  type: "object",
4368
4499
  properties: {
4369
- work: { type: "number", description: "Work satisfaction 1-10 (required)" },
4370
- play: { type: "number", description: "Play satisfaction 1-10 (required)" },
4371
- love: { type: "number", description: "Love satisfaction 1-10 (required)" },
4372
- health: { type: "number", description: "Health satisfaction 1-10 (required)" },
4500
+ work: {
4501
+ type: "number",
4502
+ description: "Work satisfaction 1-10 (required)",
4503
+ },
4504
+ play: {
4505
+ type: "number",
4506
+ description: "Play satisfaction 1-10 (required)",
4507
+ },
4508
+ love: {
4509
+ type: "number",
4510
+ description: "Love satisfaction 1-10 (required)",
4511
+ },
4512
+ health: {
4513
+ type: "number",
4514
+ description: "Health satisfaction 1-10 (required)",
4515
+ },
4373
4516
  notes: { type: "string", description: "Optional reflection notes" },
4374
4517
  },
4375
4518
  required: ["work", "play", "love", "health"],
@@ -4397,13 +4540,19 @@ const TOOLS = [
4397
4540
  type: "object",
4398
4541
  properties: {
4399
4542
  title: { type: "string", description: "Experiment title (required)" },
4400
- hypothesis: { type: "string", description: "What you want to test/learn (required)" },
4543
+ hypothesis: {
4544
+ type: "string",
4545
+ description: "What you want to test/learn (required)",
4546
+ },
4401
4547
  type: {
4402
4548
  type: "string",
4403
4549
  enum: ["conversation", "experience", "side_project"],
4404
4550
  description: "Experiment type (required)",
4405
4551
  },
4406
- odysseyPlanId: { type: "string", description: "Link to an Odyssey Plan" },
4552
+ odysseyPlanId: {
4553
+ type: "string",
4554
+ description: "Link to an Odyssey Plan",
4555
+ },
4407
4556
  status: {
4408
4557
  type: "string",
4409
4558
  enum: ["planned", "in_progress", "completed"],
@@ -4426,8 +4575,16 @@ const TOOLS = [
4426
4575
  prototypeId: { type: "string", description: "Prototype ID (required)" },
4427
4576
  title: { type: "string", description: "Updated title" },
4428
4577
  hypothesis: { type: "string", description: "Updated hypothesis" },
4429
- type: { type: "string", enum: ["conversation", "experience", "side_project"], description: "Updated type" },
4430
- status: { type: "string", enum: ["planned", "in_progress", "completed"], description: "Updated status" },
4578
+ type: {
4579
+ type: "string",
4580
+ enum: ["conversation", "experience", "side_project"],
4581
+ description: "Updated type",
4582
+ },
4583
+ status: {
4584
+ type: "string",
4585
+ enum: ["planned", "in_progress", "completed"],
4586
+ description: "Updated status",
4587
+ },
4431
4588
  odysseyPlanId: { type: "string", description: "Link to Odyssey Plan" },
4432
4589
  whatYouDid: { type: "string", description: "What you did" },
4433
4590
  whatYouLearned: { type: "string", description: "What you learned" },
@@ -4444,7 +4601,10 @@ const TOOLS = [
4444
4601
  inputSchema: {
4445
4602
  type: "object",
4446
4603
  properties: {
4447
- prototypeId: { type: "string", description: "Prototype ID to delete (required)" },
4604
+ prototypeId: {
4605
+ type: "string",
4606
+ description: "Prototype ID to delete (required)",
4607
+ },
4448
4608
  },
4449
4609
  required: ["prototypeId"],
4450
4610
  },
@@ -4464,7 +4624,10 @@ const TOOLS = [
4464
4624
  inputSchema: {
4465
4625
  type: "object",
4466
4626
  properties: {
4467
- personName: { type: "string", description: "Person interviewed (required)" },
4627
+ personName: {
4628
+ type: "string",
4629
+ description: "Person interviewed (required)",
4630
+ },
4468
4631
  role: { type: "string", description: "Their role/title (required)" },
4469
4632
  company: { type: "string", description: "Their company" },
4470
4633
  odysseyPlanId: { type: "string", description: "Link to Odyssey Plan" },
@@ -4479,9 +4642,18 @@ const TOOLS = [
4479
4642
  description: "Key takeaways (required)",
4480
4643
  },
4481
4644
  followUp: { type: "string", description: "Follow-up actions" },
4482
- interviewDate: { type: "string", description: "Interview date ISO string (required)" },
4645
+ interviewDate: {
4646
+ type: "string",
4647
+ description: "Interview date ISO string (required)",
4648
+ },
4483
4649
  },
4484
- required: ["personName", "role", "questions", "keyTakeaways", "interviewDate"],
4650
+ required: [
4651
+ "personName",
4652
+ "role",
4653
+ "questions",
4654
+ "keyTakeaways",
4655
+ "interviewDate",
4656
+ ],
4485
4657
  },
4486
4658
  },
4487
4659
  {
@@ -4495,10 +4667,21 @@ const TOOLS = [
4495
4667
  role: { type: "string", description: "Updated role" },
4496
4668
  company: { type: "string", description: "Updated company" },
4497
4669
  odysseyPlanId: { type: "string", description: "Link to Odyssey Plan" },
4498
- questions: { type: "array", items: { type: "string" }, description: "Updated questions" },
4499
- keyTakeaways: { type: "array", items: { type: "string" }, description: "Updated takeaways" },
4670
+ questions: {
4671
+ type: "array",
4672
+ items: { type: "string" },
4673
+ description: "Updated questions",
4674
+ },
4675
+ keyTakeaways: {
4676
+ type: "array",
4677
+ items: { type: "string" },
4678
+ description: "Updated takeaways",
4679
+ },
4500
4680
  followUp: { type: "string", description: "Updated follow-up" },
4501
- interviewDate: { type: "string", description: "Updated date ISO string" },
4681
+ interviewDate: {
4682
+ type: "string",
4683
+ description: "Updated date ISO string",
4684
+ },
4502
4685
  },
4503
4686
  required: ["interviewId"],
4504
4687
  },
@@ -4509,7 +4692,10 @@ const TOOLS = [
4509
4692
  inputSchema: {
4510
4693
  type: "object",
4511
4694
  properties: {
4512
- interviewId: { type: "string", description: "Interview ID to delete (required)" },
4695
+ interviewId: {
4696
+ type: "string",
4697
+ description: "Interview ID to delete (required)",
4698
+ },
4513
4699
  },
4514
4700
  required: ["interviewId"],
4515
4701
  },
@@ -4529,14 +4715,23 @@ const TOOLS = [
4529
4715
  inputSchema: {
4530
4716
  type: "object",
4531
4717
  properties: {
4532
- belief: { type: "string", description: "The dysfunctional belief (required)" },
4533
- reframe: { type: "string", description: "The reframed, healthier perspective (required)" },
4718
+ belief: {
4719
+ type: "string",
4720
+ description: "The dysfunctional belief (required)",
4721
+ },
4722
+ reframe: {
4723
+ type: "string",
4724
+ description: "The reframed, healthier perspective (required)",
4725
+ },
4534
4726
  category: {
4535
4727
  type: "string",
4536
4728
  enum: ["career", "identity", "relationship", "capability"],
4537
4729
  description: "Belief category",
4538
4730
  },
4539
- isResolved: { type: "boolean", description: "Whether this belief has been resolved" },
4731
+ isResolved: {
4732
+ type: "boolean",
4733
+ description: "Whether this belief has been resolved",
4734
+ },
4540
4735
  },
4541
4736
  required: ["belief", "reframe"],
4542
4737
  },
@@ -4547,7 +4742,10 @@ const TOOLS = [
4547
4742
  inputSchema: {
4548
4743
  type: "object",
4549
4744
  properties: {
4550
- beliefId: { type: "string", description: "Belief reframe ID (required)" },
4745
+ beliefId: {
4746
+ type: "string",
4747
+ description: "Belief reframe ID (required)",
4748
+ },
4551
4749
  belief: { type: "string", description: "Updated belief" },
4552
4750
  reframe: { type: "string", description: "Updated reframe" },
4553
4751
  category: {
@@ -4581,14 +4779,23 @@ const TOOLS = [
4581
4779
  inputSchema: {
4582
4780
  type: "object",
4583
4781
  properties: {
4584
- event: { type: "string", description: "Brief description of the failure event (required)" },
4782
+ event: {
4783
+ type: "string",
4784
+ description: "Brief description of the failure event (required)",
4785
+ },
4585
4786
  category: {
4586
4787
  type: "string",
4587
4788
  enum: ["screw_up", "weakness", "growth_opportunity"],
4588
4789
  description: "Failure category (required)",
4589
4790
  },
4590
- whatHappened: { type: "string", description: "Detailed account of what happened (required)" },
4591
- insight: { type: "string", description: "Insight or lesson learned (required)" },
4791
+ whatHappened: {
4792
+ type: "string",
4793
+ description: "Detailed account of what happened (required)",
4794
+ },
4795
+ insight: {
4796
+ type: "string",
4797
+ description: "Insight or lesson learned (required)",
4798
+ },
4592
4799
  actionTaken: { type: "string", description: "Action taken or planned" },
4593
4800
  },
4594
4801
  required: ["event", "category", "whatHappened", "insight"],
@@ -4600,7 +4807,10 @@ const TOOLS = [
4600
4807
  inputSchema: {
4601
4808
  type: "object",
4602
4809
  properties: {
4603
- failureId: { type: "string", description: "Failure reframe ID (required)" },
4810
+ failureId: {
4811
+ type: "string",
4812
+ description: "Failure reframe ID (required)",
4813
+ },
4604
4814
  event: { type: "string", description: "Updated event" },
4605
4815
  category: {
4606
4816
  type: "string",
@@ -4955,13 +5165,15 @@ const PROMPT_MESSAGES = {
4955
5165
 
4956
5166
  1. Call get_daily_agenda for today's agenda (tasks due today, calendar events, top priorities)
4957
5167
  2. Call get_todays_tasks for today's task list
4958
- 3. Call get_current_cycle for current sprint progress and stats
5168
+ 3. Call get_overdue_tasks to surface anything already slipping
5169
+ 4. Call get_current_cycle for current sprint progress and stats
4959
5170
 
4960
5171
  ${dateClause}
4961
5172
 
4962
5173
  Summarize in a concise standup format:
4963
5174
  - **Today's Focus**: Top 3 things to focus on
4964
5175
  - **Tasks Due**: List tasks due today with priority
5176
+ - **Overdue**: Anything already late that needs immediate triage
4965
5177
  - **Sprint Progress**: Cycle completion % and key stats
4966
5178
  - **Calendar**: Any meetings or events today
4967
5179
 
@@ -5069,9 +5281,7 @@ Present as a client brief:
5069
5281
  },
5070
5282
  ],
5071
5283
  "customer-success-triage": (args) => {
5072
- const focusClause = args.focus
5073
- ? `\n\nFocus area: ${args.focus}`
5074
- : "";
5284
+ const focusClause = args.focus ? `\n\nFocus area: ${args.focus}` : "";
5075
5285
  return [
5076
5286
  {
5077
5287
  role: "user",
@@ -5449,12 +5659,13 @@ Present a monthly review:
5449
5659
  type: "text",
5450
5660
  text: `Show what's overdue or slipping. Use the LifeOS MCP tools:
5451
5661
 
5452
- 1. Call get_tasks to get all tasks
5453
- 2. Call get_projects to get all projects with health status
5454
- 3. Call get_current_cycle to see sprint status
5662
+ 1. Call get_overdue_tasks to get overdue open tasks
5663
+ 2. Call get_tasks with status "in_progress" to find stale active work
5664
+ 3. Call get_projects to get all projects with health status
5665
+ 4. Call get_current_cycle to see sprint status
5455
5666
 
5456
5667
  Analyze and identify:
5457
- - **Overdue tasks**: Tasks past their due date (compare dueDate to today)
5668
+ - **Overdue tasks**: Tasks returned by get_overdue_tasks
5458
5669
  - **Off-track projects**: Projects with health "off_track" or "at_risk"
5459
5670
  - **Stale in-progress**: Tasks marked "in_progress" for more than 7 days
5460
5671
  - **Sprint slippage**: If cycle completion % is behind expected pace
@@ -5953,7 +6164,9 @@ function formatListSection(heading, items, options) {
5953
6164
  }
5954
6165
  const rendered = items.slice(0, limit).map((item) => {
5955
6166
  const label = getItemLabel(item);
5956
- const meta = options?.metaKeys ? getItemMeta(item, options.metaKeys) : undefined;
6167
+ const meta = options?.metaKeys
6168
+ ? getItemMeta(item, options.metaKeys)
6169
+ : undefined;
5957
6170
  return meta ? `- ${label} (${meta})` : `- ${label}`;
5958
6171
  });
5959
6172
  if (items.length > limit) {
@@ -6122,13 +6335,7 @@ function formatNotesResource(client, notesResponse) {
6122
6335
  const content = getString(note.content) || "";
6123
6336
  const updatedAt = getString(note.updatedAt) || getString(note.createdAt);
6124
6337
  const meta = updatedAt ? `Updated: ${updatedAt}` : undefined;
6125
- return [
6126
- `## ${title}`,
6127
- meta ?? "",
6128
- content,
6129
- ]
6130
- .filter(Boolean)
6131
- .join("\n");
6338
+ return [`## ${title}`, meta ?? "", content].filter(Boolean).join("\n");
6132
6339
  });
6133
6340
  return [
6134
6341
  `# ${client.name} Client Notes`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@starascendin/lifeos-mcp",
3
- "version": "0.7.56",
3
+ "version": "0.7.58",
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",