@contextstream/mcp-server 0.3.49 → 0.3.50
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/dist/index.js +279 -4
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -7085,6 +7085,85 @@ W:${wsHint}
|
|
|
7085
7085
|
if (params?.limit) urlParams.set("limit", String(params.limit));
|
|
7086
7086
|
return request(this.config, `/integrations/knowledge?${urlParams.toString()}`, { method: "GET" });
|
|
7087
7087
|
}
|
|
7088
|
+
// ============================================
|
|
7089
|
+
// Reminder Methods
|
|
7090
|
+
// ============================================
|
|
7091
|
+
/**
|
|
7092
|
+
* List reminders for the user
|
|
7093
|
+
*/
|
|
7094
|
+
async remindersList(params) {
|
|
7095
|
+
const withDefaults = this.withDefaults(params || {});
|
|
7096
|
+
const query = new URLSearchParams();
|
|
7097
|
+
if (withDefaults.workspace_id) query.set("workspace_id", withDefaults.workspace_id);
|
|
7098
|
+
if (withDefaults.project_id) query.set("project_id", withDefaults.project_id);
|
|
7099
|
+
if (params?.status) query.set("status", params.status);
|
|
7100
|
+
if (params?.priority) query.set("priority", params.priority);
|
|
7101
|
+
if (params?.limit) query.set("limit", String(params.limit));
|
|
7102
|
+
const suffix = query.toString() ? `?${query.toString()}` : "";
|
|
7103
|
+
return request(this.config, `/reminders${suffix}`, { method: "GET" });
|
|
7104
|
+
}
|
|
7105
|
+
/**
|
|
7106
|
+
* Get active reminders (pending, overdue, due soon)
|
|
7107
|
+
*/
|
|
7108
|
+
async remindersActive(params) {
|
|
7109
|
+
const withDefaults = this.withDefaults(params || {});
|
|
7110
|
+
const query = new URLSearchParams();
|
|
7111
|
+
if (withDefaults.workspace_id) query.set("workspace_id", withDefaults.workspace_id);
|
|
7112
|
+
if (withDefaults.project_id) query.set("project_id", withDefaults.project_id);
|
|
7113
|
+
if (params?.context) query.set("context", params.context);
|
|
7114
|
+
if (params?.limit) query.set("limit", String(params.limit));
|
|
7115
|
+
const suffix = query.toString() ? `?${query.toString()}` : "";
|
|
7116
|
+
return request(this.config, `/reminders/active${suffix}`, { method: "GET" });
|
|
7117
|
+
}
|
|
7118
|
+
/**
|
|
7119
|
+
* Create a new reminder
|
|
7120
|
+
*/
|
|
7121
|
+
async remindersCreate(params) {
|
|
7122
|
+
const withDefaults = this.withDefaults(params);
|
|
7123
|
+
return request(this.config, "/reminders", {
|
|
7124
|
+
body: {
|
|
7125
|
+
workspace_id: withDefaults.workspace_id,
|
|
7126
|
+
project_id: withDefaults.project_id,
|
|
7127
|
+
title: params.title,
|
|
7128
|
+
content: params.content,
|
|
7129
|
+
remind_at: params.remind_at,
|
|
7130
|
+
priority: params.priority || "normal",
|
|
7131
|
+
keywords: params.keywords || [],
|
|
7132
|
+
recurrence: params.recurrence,
|
|
7133
|
+
memory_event_id: params.memory_event_id
|
|
7134
|
+
}
|
|
7135
|
+
});
|
|
7136
|
+
}
|
|
7137
|
+
/**
|
|
7138
|
+
* Snooze a reminder
|
|
7139
|
+
*/
|
|
7140
|
+
async remindersSnooze(params) {
|
|
7141
|
+
uuidSchema.parse(params.reminder_id);
|
|
7142
|
+
return request(this.config, `/reminders/${params.reminder_id}/snooze`, {
|
|
7143
|
+
body: { until: params.until }
|
|
7144
|
+
});
|
|
7145
|
+
}
|
|
7146
|
+
/**
|
|
7147
|
+
* Mark a reminder as completed
|
|
7148
|
+
*/
|
|
7149
|
+
async remindersComplete(params) {
|
|
7150
|
+
uuidSchema.parse(params.reminder_id);
|
|
7151
|
+
return request(this.config, `/reminders/${params.reminder_id}/complete`, { method: "POST" });
|
|
7152
|
+
}
|
|
7153
|
+
/**
|
|
7154
|
+
* Dismiss a reminder
|
|
7155
|
+
*/
|
|
7156
|
+
async remindersDismiss(params) {
|
|
7157
|
+
uuidSchema.parse(params.reminder_id);
|
|
7158
|
+
return request(this.config, `/reminders/${params.reminder_id}/dismiss`, { method: "POST" });
|
|
7159
|
+
}
|
|
7160
|
+
/**
|
|
7161
|
+
* Delete a reminder
|
|
7162
|
+
*/
|
|
7163
|
+
async remindersDelete(params) {
|
|
7164
|
+
uuidSchema.parse(params.reminder_id);
|
|
7165
|
+
return request(this.config, `/reminders/${params.reminder_id}`, { method: "DELETE" });
|
|
7166
|
+
}
|
|
7088
7167
|
};
|
|
7089
7168
|
|
|
7090
7169
|
// src/tools.ts
|
|
@@ -7707,12 +7786,16 @@ var LIGHT_TOOLSET = /* @__PURE__ */ new Set([
|
|
|
7707
7786
|
"projects_index",
|
|
7708
7787
|
"projects_index_status",
|
|
7709
7788
|
"projects_files",
|
|
7710
|
-
// Memory basics (
|
|
7789
|
+
// Memory basics (3)
|
|
7711
7790
|
"memory_search",
|
|
7712
7791
|
"memory_decisions",
|
|
7792
|
+
"memory_get_event",
|
|
7713
7793
|
// Graph basics (2)
|
|
7714
7794
|
"graph_related",
|
|
7715
7795
|
"graph_decisions",
|
|
7796
|
+
// Reminders (2)
|
|
7797
|
+
"reminders_list",
|
|
7798
|
+
"reminders_active",
|
|
7716
7799
|
// Utility (2)
|
|
7717
7800
|
"auth_me",
|
|
7718
7801
|
"mcp_server_version"
|
|
@@ -7751,11 +7834,14 @@ var STANDARD_TOOLSET = /* @__PURE__ */ new Set([
|
|
|
7751
7834
|
"projects_index",
|
|
7752
7835
|
"projects_index_status",
|
|
7753
7836
|
"projects_files",
|
|
7754
|
-
// Memory events (
|
|
7837
|
+
// Memory events (9)
|
|
7755
7838
|
"memory_search",
|
|
7756
7839
|
"memory_decisions",
|
|
7757
7840
|
"memory_create_event",
|
|
7758
7841
|
"memory_list_events",
|
|
7842
|
+
"memory_get_event",
|
|
7843
|
+
"memory_update_event",
|
|
7844
|
+
"memory_delete_event",
|
|
7759
7845
|
"memory_timeline",
|
|
7760
7846
|
"memory_summary",
|
|
7761
7847
|
// Memory nodes (2)
|
|
@@ -7774,6 +7860,13 @@ var STANDARD_TOOLSET = /* @__PURE__ */ new Set([
|
|
|
7774
7860
|
"search_semantic",
|
|
7775
7861
|
"search_hybrid",
|
|
7776
7862
|
"search_keyword",
|
|
7863
|
+
// Reminders (6)
|
|
7864
|
+
"reminders_list",
|
|
7865
|
+
"reminders_active",
|
|
7866
|
+
"reminders_create",
|
|
7867
|
+
"reminders_snooze",
|
|
7868
|
+
"reminders_complete",
|
|
7869
|
+
"reminders_dismiss",
|
|
7777
7870
|
// Utility (2)
|
|
7778
7871
|
"auth_me",
|
|
7779
7872
|
"mcp_server_version"
|
|
@@ -8837,8 +8930,8 @@ Automatically detects code files and skips ignored directories like node_modules
|
|
|
8837
8930
|
"memory_get_event",
|
|
8838
8931
|
{
|
|
8839
8932
|
title: "Get memory event",
|
|
8840
|
-
description: "Get a specific memory event by ID",
|
|
8841
|
-
inputSchema: external_exports.object({ event_id: external_exports.string().uuid() })
|
|
8933
|
+
description: "Get a specific memory event by ID with FULL content (not truncated). Use this when you need the complete content of a memory event, not just the preview returned by search/recall.",
|
|
8934
|
+
inputSchema: external_exports.object({ event_id: external_exports.string().uuid().describe("The UUID of the memory event to retrieve") })
|
|
8842
8935
|
},
|
|
8843
8936
|
async (input) => {
|
|
8844
8937
|
const result = await client.getMemoryEvent(input.event_id);
|
|
@@ -10608,6 +10701,188 @@ Use this to verify integrations are healthy and syncing properly.`,
|
|
|
10608
10701
|
return { content: [{ type: "text", text: formatted }], structuredContent: toStructured(result) };
|
|
10609
10702
|
}
|
|
10610
10703
|
);
|
|
10704
|
+
registerTool(
|
|
10705
|
+
"reminders_list",
|
|
10706
|
+
{
|
|
10707
|
+
title: "List reminders",
|
|
10708
|
+
description: `List all reminders for the current user.
|
|
10709
|
+
Returns: reminders with title, content, remind_at, priority, status, and keywords.
|
|
10710
|
+
Can filter by status (pending, completed, dismissed, snoozed) and priority (low, normal, high, urgent).
|
|
10711
|
+
|
|
10712
|
+
Use this to see what reminders you have set.`,
|
|
10713
|
+
inputSchema: external_exports.object({
|
|
10714
|
+
workspace_id: external_exports.string().uuid().optional(),
|
|
10715
|
+
project_id: external_exports.string().uuid().optional(),
|
|
10716
|
+
status: external_exports.enum(["pending", "completed", "dismissed", "snoozed"]).optional().describe("Filter by status"),
|
|
10717
|
+
priority: external_exports.enum(["low", "normal", "high", "urgent"]).optional().describe("Filter by priority"),
|
|
10718
|
+
limit: external_exports.number().optional().describe("Maximum reminders to return (default: 20)")
|
|
10719
|
+
})
|
|
10720
|
+
},
|
|
10721
|
+
async (input) => {
|
|
10722
|
+
const result = await client.remindersList({
|
|
10723
|
+
workspace_id: input.workspace_id,
|
|
10724
|
+
project_id: input.project_id,
|
|
10725
|
+
status: input.status,
|
|
10726
|
+
priority: input.priority,
|
|
10727
|
+
limit: input.limit
|
|
10728
|
+
});
|
|
10729
|
+
if (!result.reminders || result.reminders.length === 0) {
|
|
10730
|
+
return { content: [{ type: "text", text: "No reminders found." }] };
|
|
10731
|
+
}
|
|
10732
|
+
return { content: [{ type: "text", text: formatContent(result) }], structuredContent: toStructured(result) };
|
|
10733
|
+
}
|
|
10734
|
+
);
|
|
10735
|
+
registerTool(
|
|
10736
|
+
"reminders_active",
|
|
10737
|
+
{
|
|
10738
|
+
title: "Get active reminders",
|
|
10739
|
+
description: `Get active reminders that are pending, overdue, or due soon.
|
|
10740
|
+
Returns: reminders with urgency levels (overdue, due_soon, today, upcoming).
|
|
10741
|
+
Optionally provide context (e.g., current task description) to get contextually relevant reminders.
|
|
10742
|
+
|
|
10743
|
+
Use this to see what reminders need attention now.`,
|
|
10744
|
+
inputSchema: external_exports.object({
|
|
10745
|
+
workspace_id: external_exports.string().uuid().optional(),
|
|
10746
|
+
project_id: external_exports.string().uuid().optional(),
|
|
10747
|
+
context: external_exports.string().optional().describe("Optional context to match relevant reminders (e.g., current task)"),
|
|
10748
|
+
limit: external_exports.number().optional().describe("Maximum reminders to return (default: 10)")
|
|
10749
|
+
})
|
|
10750
|
+
},
|
|
10751
|
+
async (input) => {
|
|
10752
|
+
const result = await client.remindersActive({
|
|
10753
|
+
workspace_id: input.workspace_id,
|
|
10754
|
+
project_id: input.project_id,
|
|
10755
|
+
context: input.context,
|
|
10756
|
+
limit: input.limit
|
|
10757
|
+
});
|
|
10758
|
+
if (!result.reminders || result.reminders.length === 0) {
|
|
10759
|
+
return { content: [{ type: "text", text: "No active reminders." }] };
|
|
10760
|
+
}
|
|
10761
|
+
const formatted = result.reminders.map((r) => {
|
|
10762
|
+
const icon = r.urgency === "overdue" ? "\u{1F534}" : r.urgency === "due_soon" ? "\u{1F7E0}" : r.urgency === "today" ? "\u{1F7E1}" : "\u{1F535}";
|
|
10763
|
+
const priority = r.priority !== "normal" ? ` [${r.priority}]` : "";
|
|
10764
|
+
return `${icon} ${r.title}${priority}
|
|
10765
|
+
Due: ${new Date(r.remind_at).toLocaleString()}
|
|
10766
|
+
${r.content_preview}`;
|
|
10767
|
+
}).join("\n\n");
|
|
10768
|
+
const header = result.overdue_count > 0 ? `\u26A0\uFE0F ${result.overdue_count} overdue reminder(s)
|
|
10769
|
+
|
|
10770
|
+
` : "";
|
|
10771
|
+
return { content: [{ type: "text", text: header + formatted }], structuredContent: toStructured(result) };
|
|
10772
|
+
}
|
|
10773
|
+
);
|
|
10774
|
+
registerTool(
|
|
10775
|
+
"reminders_create",
|
|
10776
|
+
{
|
|
10777
|
+
title: "Create a reminder",
|
|
10778
|
+
description: `Create a new reminder for a specific date/time.
|
|
10779
|
+
Set reminders to be notified about tasks, follow-ups, or important dates.
|
|
10780
|
+
|
|
10781
|
+
Priority levels: low, normal, high, urgent
|
|
10782
|
+
Recurrence: daily, weekly, monthly (optional)
|
|
10783
|
+
|
|
10784
|
+
Example: Create a reminder to "Review PR #123" for tomorrow at 10am with high priority.`,
|
|
10785
|
+
inputSchema: external_exports.object({
|
|
10786
|
+
workspace_id: external_exports.string().uuid().optional(),
|
|
10787
|
+
project_id: external_exports.string().uuid().optional(),
|
|
10788
|
+
title: external_exports.string().describe("Reminder title (brief, descriptive)"),
|
|
10789
|
+
content: external_exports.string().describe("Reminder details/description"),
|
|
10790
|
+
remind_at: external_exports.string().describe('When to remind (ISO 8601 datetime, e.g., "2025-01-15T10:00:00Z")'),
|
|
10791
|
+
priority: external_exports.enum(["low", "normal", "high", "urgent"]).optional().describe("Priority level (default: normal)"),
|
|
10792
|
+
keywords: external_exports.array(external_exports.string()).optional().describe("Keywords for contextual surfacing"),
|
|
10793
|
+
recurrence: external_exports.enum(["daily", "weekly", "monthly"]).optional().describe("Recurrence pattern")
|
|
10794
|
+
})
|
|
10795
|
+
},
|
|
10796
|
+
async (input) => {
|
|
10797
|
+
const result = await client.remindersCreate({
|
|
10798
|
+
workspace_id: input.workspace_id,
|
|
10799
|
+
project_id: input.project_id,
|
|
10800
|
+
title: input.title,
|
|
10801
|
+
content: input.content,
|
|
10802
|
+
remind_at: input.remind_at,
|
|
10803
|
+
priority: input.priority,
|
|
10804
|
+
keywords: input.keywords,
|
|
10805
|
+
recurrence: input.recurrence
|
|
10806
|
+
});
|
|
10807
|
+
const due = new Date(result.remind_at).toLocaleString();
|
|
10808
|
+
return {
|
|
10809
|
+
content: [{ type: "text", text: `\u2705 Reminder created: "${result.title}"
|
|
10810
|
+
Due: ${due}
|
|
10811
|
+
Priority: ${result.priority}
|
|
10812
|
+
ID: ${result.id}` }],
|
|
10813
|
+
structuredContent: toStructured(result)
|
|
10814
|
+
};
|
|
10815
|
+
}
|
|
10816
|
+
);
|
|
10817
|
+
registerTool(
|
|
10818
|
+
"reminders_snooze",
|
|
10819
|
+
{
|
|
10820
|
+
title: "Snooze a reminder",
|
|
10821
|
+
description: `Snooze a reminder until a later time.
|
|
10822
|
+
Use this to postpone a reminder without dismissing it.
|
|
10823
|
+
|
|
10824
|
+
Common snooze durations:
|
|
10825
|
+
- 1 hour: add 1 hour to current time
|
|
10826
|
+
- 4 hours: add 4 hours
|
|
10827
|
+
- Tomorrow: next day at 9am
|
|
10828
|
+
- Next week: 7 days from now`,
|
|
10829
|
+
inputSchema: external_exports.object({
|
|
10830
|
+
reminder_id: external_exports.string().uuid().describe("ID of the reminder to snooze"),
|
|
10831
|
+
until: external_exports.string().describe("When to resurface the reminder (ISO 8601 datetime)")
|
|
10832
|
+
})
|
|
10833
|
+
},
|
|
10834
|
+
async (input) => {
|
|
10835
|
+
const result = await client.remindersSnooze({
|
|
10836
|
+
reminder_id: input.reminder_id,
|
|
10837
|
+
until: input.until
|
|
10838
|
+
});
|
|
10839
|
+
const snoozedUntil = new Date(result.snoozed_until).toLocaleString();
|
|
10840
|
+
return {
|
|
10841
|
+
content: [{ type: "text", text: `\u{1F634} Reminder snoozed until ${snoozedUntil}` }],
|
|
10842
|
+
structuredContent: toStructured(result)
|
|
10843
|
+
};
|
|
10844
|
+
}
|
|
10845
|
+
);
|
|
10846
|
+
registerTool(
|
|
10847
|
+
"reminders_complete",
|
|
10848
|
+
{
|
|
10849
|
+
title: "Complete a reminder",
|
|
10850
|
+
description: `Mark a reminder as completed.
|
|
10851
|
+
Use this when the task or action associated with the reminder is done.`,
|
|
10852
|
+
inputSchema: external_exports.object({
|
|
10853
|
+
reminder_id: external_exports.string().uuid().describe("ID of the reminder to complete")
|
|
10854
|
+
})
|
|
10855
|
+
},
|
|
10856
|
+
async (input) => {
|
|
10857
|
+
const result = await client.remindersComplete({
|
|
10858
|
+
reminder_id: input.reminder_id
|
|
10859
|
+
});
|
|
10860
|
+
return {
|
|
10861
|
+
content: [{ type: "text", text: `\u2705 Reminder completed!` }],
|
|
10862
|
+
structuredContent: toStructured(result)
|
|
10863
|
+
};
|
|
10864
|
+
}
|
|
10865
|
+
);
|
|
10866
|
+
registerTool(
|
|
10867
|
+
"reminders_dismiss",
|
|
10868
|
+
{
|
|
10869
|
+
title: "Dismiss a reminder",
|
|
10870
|
+
description: `Dismiss a reminder without completing it.
|
|
10871
|
+
Use this to remove a reminder that is no longer relevant.`,
|
|
10872
|
+
inputSchema: external_exports.object({
|
|
10873
|
+
reminder_id: external_exports.string().uuid().describe("ID of the reminder to dismiss")
|
|
10874
|
+
})
|
|
10875
|
+
},
|
|
10876
|
+
async (input) => {
|
|
10877
|
+
const result = await client.remindersDismiss({
|
|
10878
|
+
reminder_id: input.reminder_id
|
|
10879
|
+
});
|
|
10880
|
+
return {
|
|
10881
|
+
content: [{ type: "text", text: `\u{1F5D1}\uFE0F Reminder dismissed.` }],
|
|
10882
|
+
structuredContent: toStructured(result)
|
|
10883
|
+
};
|
|
10884
|
+
}
|
|
10885
|
+
);
|
|
10611
10886
|
}
|
|
10612
10887
|
|
|
10613
10888
|
// src/resources.ts
|
package/package.json
CHANGED