stickyrice-mcp 0.1.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.
- package/LICENSE +21 -0
- package/README.md +156 -0
- package/dist/auth.d.ts +4 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +112 -0
- package/dist/auth.js.map +1 -0
- package/dist/config.d.ts +11 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +40 -0
- package/dist/config.js.map +1 -0
- package/dist/convex-client.d.ts +18 -0
- package/dist/convex-client.d.ts.map +1 -0
- package/dist/convex-client.js +73 -0
- package/dist/convex-client.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/dist/resources/index.d.ts +11 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +73 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/server.d.ts +5 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +46 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/boards.d.ts +5 -0
- package/dist/tools/boards.d.ts.map +1 -0
- package/dist/tools/boards.js +156 -0
- package/dist/tools/boards.js.map +1 -0
- package/dist/tools/columns.d.ts +5 -0
- package/dist/tools/columns.d.ts.map +1 -0
- package/dist/tools/columns.js +101 -0
- package/dist/tools/columns.js.map +1 -0
- package/dist/tools/index.d.ts +10 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +55 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/note-items.d.ts +5 -0
- package/dist/tools/note-items.d.ts.map +1 -0
- package/dist/tools/note-items.js +99 -0
- package/dist/tools/note-items.js.map +1 -0
- package/dist/tools/notes.d.ts +5 -0
- package/dist/tools/notes.d.ts.map +1 -0
- package/dist/tools/notes.js +227 -0
- package/dist/tools/notes.js.map +1 -0
- package/dist/tools/tags.d.ts +5 -0
- package/dist/tools/tags.d.ts.map +1 -0
- package/dist/tools/tags.js +99 -0
- package/dist/tools/tags.js.map +1 -0
- package/dist/tools/workspaces.d.ts +5 -0
- package/dist/tools/workspaces.d.ts.map +1 -0
- package/dist/tools/workspaces.js +96 -0
- package/dist/tools/workspaces.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
export const noteTools = [
|
|
2
|
+
{
|
|
3
|
+
name: "create_note",
|
|
4
|
+
description: "Create a new note in a column",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: "object",
|
|
7
|
+
properties: {
|
|
8
|
+
columnId: {
|
|
9
|
+
type: "string",
|
|
10
|
+
description: "The Convex ID of the column to add the note to",
|
|
11
|
+
},
|
|
12
|
+
title: {
|
|
13
|
+
type: "string",
|
|
14
|
+
description: "The note title/content",
|
|
15
|
+
},
|
|
16
|
+
color: {
|
|
17
|
+
type: "string",
|
|
18
|
+
enum: ["yellow", "blue", "green", "pink", "purple", "orange", "gray"],
|
|
19
|
+
description: "Note background color",
|
|
20
|
+
},
|
|
21
|
+
type: {
|
|
22
|
+
type: "string",
|
|
23
|
+
enum: ["standard", "big_text"],
|
|
24
|
+
description: "Note type (default: standard)",
|
|
25
|
+
},
|
|
26
|
+
titleSize: {
|
|
27
|
+
type: "string",
|
|
28
|
+
enum: ["normal", "biggest"],
|
|
29
|
+
description: "Title size for standard notes (default: normal)",
|
|
30
|
+
},
|
|
31
|
+
link: {
|
|
32
|
+
type: "string",
|
|
33
|
+
description: "URL to attach to the note",
|
|
34
|
+
},
|
|
35
|
+
linkLabel: {
|
|
36
|
+
type: "string",
|
|
37
|
+
description: "Display label for the link",
|
|
38
|
+
},
|
|
39
|
+
bigtext_config: {
|
|
40
|
+
type: "object",
|
|
41
|
+
description: "Configuration for big_text notes",
|
|
42
|
+
properties: {
|
|
43
|
+
textAlign: {
|
|
44
|
+
type: "string",
|
|
45
|
+
enum: ["left", "center", "right"],
|
|
46
|
+
description: "Text alignment",
|
|
47
|
+
},
|
|
48
|
+
bold: {
|
|
49
|
+
type: "boolean",
|
|
50
|
+
description: "Bold text",
|
|
51
|
+
},
|
|
52
|
+
italic: {
|
|
53
|
+
type: "boolean",
|
|
54
|
+
description: "Italic text",
|
|
55
|
+
},
|
|
56
|
+
underline: {
|
|
57
|
+
type: "boolean",
|
|
58
|
+
description: "Underlined text",
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
required: ["columnId", "title", "color"],
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: "update_note",
|
|
68
|
+
description: "Update an existing note",
|
|
69
|
+
inputSchema: {
|
|
70
|
+
type: "object",
|
|
71
|
+
properties: {
|
|
72
|
+
noteId: {
|
|
73
|
+
type: "string",
|
|
74
|
+
description: "The Convex ID of the note to update",
|
|
75
|
+
},
|
|
76
|
+
title: {
|
|
77
|
+
type: "string",
|
|
78
|
+
description: "New title/content",
|
|
79
|
+
},
|
|
80
|
+
color: {
|
|
81
|
+
type: "string",
|
|
82
|
+
enum: ["yellow", "blue", "green", "pink", "purple", "orange", "gray"],
|
|
83
|
+
},
|
|
84
|
+
columnId: {
|
|
85
|
+
type: "string",
|
|
86
|
+
description: "Move note to a different column",
|
|
87
|
+
},
|
|
88
|
+
type: {
|
|
89
|
+
type: "string",
|
|
90
|
+
enum: ["standard", "big_text"],
|
|
91
|
+
description: "Note type",
|
|
92
|
+
},
|
|
93
|
+
titleSize: {
|
|
94
|
+
type: "string",
|
|
95
|
+
enum: ["normal", "biggest"],
|
|
96
|
+
description: "Title size for standard notes",
|
|
97
|
+
},
|
|
98
|
+
link: {
|
|
99
|
+
type: "string",
|
|
100
|
+
description: "URL to attach to the note",
|
|
101
|
+
},
|
|
102
|
+
linkLabel: {
|
|
103
|
+
type: "string",
|
|
104
|
+
description: "Display label for the link",
|
|
105
|
+
},
|
|
106
|
+
bigtext_config: {
|
|
107
|
+
type: "object",
|
|
108
|
+
description: "Configuration for big_text notes",
|
|
109
|
+
properties: {
|
|
110
|
+
textAlign: {
|
|
111
|
+
type: "string",
|
|
112
|
+
enum: ["left", "center", "right"],
|
|
113
|
+
description: "Text alignment",
|
|
114
|
+
},
|
|
115
|
+
bold: {
|
|
116
|
+
type: "boolean",
|
|
117
|
+
description: "Bold text",
|
|
118
|
+
},
|
|
119
|
+
italic: {
|
|
120
|
+
type: "boolean",
|
|
121
|
+
description: "Italic text",
|
|
122
|
+
},
|
|
123
|
+
underline: {
|
|
124
|
+
type: "boolean",
|
|
125
|
+
description: "Underlined text",
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
required: ["noteId"],
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
name: "delete_note",
|
|
135
|
+
description: "Delete a note and all its items",
|
|
136
|
+
inputSchema: {
|
|
137
|
+
type: "object",
|
|
138
|
+
properties: {
|
|
139
|
+
noteId: {
|
|
140
|
+
type: "string",
|
|
141
|
+
description: "The Convex ID of the note to delete",
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
required: ["noteId"],
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
name: "get_note",
|
|
149
|
+
description: "Get a single note with all its items and tags",
|
|
150
|
+
inputSchema: {
|
|
151
|
+
type: "object",
|
|
152
|
+
properties: {
|
|
153
|
+
noteId: {
|
|
154
|
+
type: "string",
|
|
155
|
+
description: "The Convex ID of the note",
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
required: ["noteId"],
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
];
|
|
162
|
+
export async function handleNoteTool(client, name, args) {
|
|
163
|
+
switch (name) {
|
|
164
|
+
case "create_note": {
|
|
165
|
+
const columnId = args.columnId;
|
|
166
|
+
const title = args.title;
|
|
167
|
+
const color = args.color;
|
|
168
|
+
const type = args.type ?? "standard";
|
|
169
|
+
if (!columnId || !title || !color) {
|
|
170
|
+
throw new Error("columnId, title, and color are required");
|
|
171
|
+
}
|
|
172
|
+
const createArgs = {
|
|
173
|
+
columnId,
|
|
174
|
+
title,
|
|
175
|
+
color,
|
|
176
|
+
type,
|
|
177
|
+
};
|
|
178
|
+
if (args.titleSize !== undefined)
|
|
179
|
+
createArgs.titleSize = args.titleSize;
|
|
180
|
+
if (args.link !== undefined)
|
|
181
|
+
createArgs.link = args.link;
|
|
182
|
+
if (args.linkLabel !== undefined)
|
|
183
|
+
createArgs.linkLabel = args.linkLabel;
|
|
184
|
+
if (args.bigtext_config !== undefined)
|
|
185
|
+
createArgs.bigtext_config = args.bigtext_config;
|
|
186
|
+
return client.mutation("mcp:createNote", createArgs);
|
|
187
|
+
}
|
|
188
|
+
case "update_note": {
|
|
189
|
+
const noteId = args.noteId;
|
|
190
|
+
if (!noteId)
|
|
191
|
+
throw new Error("noteId is required");
|
|
192
|
+
const updates = { noteId };
|
|
193
|
+
if (args.title !== undefined)
|
|
194
|
+
updates.title = args.title;
|
|
195
|
+
if (args.color !== undefined)
|
|
196
|
+
updates.color = args.color;
|
|
197
|
+
if (args.columnId !== undefined)
|
|
198
|
+
updates.columnId = args.columnId;
|
|
199
|
+
if (args.type !== undefined)
|
|
200
|
+
updates.type = args.type;
|
|
201
|
+
if (args.titleSize !== undefined)
|
|
202
|
+
updates.titleSize = args.titleSize;
|
|
203
|
+
if (args.link !== undefined)
|
|
204
|
+
updates.link = args.link;
|
|
205
|
+
if (args.linkLabel !== undefined)
|
|
206
|
+
updates.linkLabel = args.linkLabel;
|
|
207
|
+
if (args.bigtext_config !== undefined)
|
|
208
|
+
updates.bigtext_config = args.bigtext_config;
|
|
209
|
+
return client.mutation("mcp:updateNote", updates);
|
|
210
|
+
}
|
|
211
|
+
case "delete_note": {
|
|
212
|
+
const noteId = args.noteId;
|
|
213
|
+
if (!noteId)
|
|
214
|
+
throw new Error("noteId is required");
|
|
215
|
+
return client.mutation("mcp:deleteNote", { noteId });
|
|
216
|
+
}
|
|
217
|
+
case "get_note": {
|
|
218
|
+
const noteId = args.noteId;
|
|
219
|
+
if (!noteId)
|
|
220
|
+
throw new Error("noteId is required");
|
|
221
|
+
return client.query("mcp:getNote", { noteId });
|
|
222
|
+
}
|
|
223
|
+
default:
|
|
224
|
+
throw new Error(`Unknown note tool: ${name}`);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=notes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notes.js","sourceRoot":"","sources":["../../src/tools/notes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
import type { StickyRiceClient } from "../convex-client.js";
|
|
3
|
+
export declare const tagTools: Tool[];
|
|
4
|
+
export declare function handleTagTool(client: StickyRiceClient, name: string, args: Record<string, unknown>): Promise<unknown>;
|
|
5
|
+
//# sourceMappingURL=tags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../src/tools/tags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,eAAO,MAAM,QAAQ,EAAE,IAAI,EAgE1B,CAAC;AAEF,wBAAsB,aAAa,CACjC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,CA0ClB"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
export const tagTools = [
|
|
2
|
+
{
|
|
3
|
+
name: "list_tags",
|
|
4
|
+
description: "List all tags for the authenticated user",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: "object",
|
|
7
|
+
properties: {},
|
|
8
|
+
required: [],
|
|
9
|
+
},
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
name: "create_tag",
|
|
13
|
+
description: "Create a new tag",
|
|
14
|
+
inputSchema: {
|
|
15
|
+
type: "object",
|
|
16
|
+
properties: {
|
|
17
|
+
name: {
|
|
18
|
+
type: "string",
|
|
19
|
+
description: "Tag name",
|
|
20
|
+
},
|
|
21
|
+
color: {
|
|
22
|
+
type: "string",
|
|
23
|
+
description: "Tag color (hex code or color name)",
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
required: ["name", "color"],
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: "tag_note",
|
|
31
|
+
description: "Apply a tag to a note",
|
|
32
|
+
inputSchema: {
|
|
33
|
+
type: "object",
|
|
34
|
+
properties: {
|
|
35
|
+
noteId: {
|
|
36
|
+
type: "string",
|
|
37
|
+
description: "The Convex ID of the note",
|
|
38
|
+
},
|
|
39
|
+
tagId: {
|
|
40
|
+
type: "string",
|
|
41
|
+
description: "The Convex ID of the tag to apply",
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
required: ["noteId", "tagId"],
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: "untag_note",
|
|
49
|
+
description: "Remove a tag from a note",
|
|
50
|
+
inputSchema: {
|
|
51
|
+
type: "object",
|
|
52
|
+
properties: {
|
|
53
|
+
noteId: {
|
|
54
|
+
type: "string",
|
|
55
|
+
description: "The Convex ID of the note",
|
|
56
|
+
},
|
|
57
|
+
tagId: {
|
|
58
|
+
type: "string",
|
|
59
|
+
description: "The Convex ID of the tag to remove",
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
required: ["noteId", "tagId"],
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
];
|
|
66
|
+
export async function handleTagTool(client, name, args) {
|
|
67
|
+
switch (name) {
|
|
68
|
+
case "list_tags": {
|
|
69
|
+
return client.query("mcp:listTags", {});
|
|
70
|
+
}
|
|
71
|
+
case "create_tag": {
|
|
72
|
+
const tagName = args.name;
|
|
73
|
+
const color = args.color;
|
|
74
|
+
if (!tagName || !color) {
|
|
75
|
+
throw new Error("name and color are required");
|
|
76
|
+
}
|
|
77
|
+
return client.mutation("mcp:createTag", { name: tagName, color });
|
|
78
|
+
}
|
|
79
|
+
case "tag_note": {
|
|
80
|
+
const noteId = args.noteId;
|
|
81
|
+
const tagId = args.tagId;
|
|
82
|
+
if (!noteId || !tagId) {
|
|
83
|
+
throw new Error("noteId and tagId are required");
|
|
84
|
+
}
|
|
85
|
+
return client.mutation("mcp:tagNote", { noteId, tagId });
|
|
86
|
+
}
|
|
87
|
+
case "untag_note": {
|
|
88
|
+
const noteId = args.noteId;
|
|
89
|
+
const tagId = args.tagId;
|
|
90
|
+
if (!noteId || !tagId) {
|
|
91
|
+
throw new Error("noteId and tagId are required");
|
|
92
|
+
}
|
|
93
|
+
return client.mutation("mcp:untagNote", { noteId, tagId });
|
|
94
|
+
}
|
|
95
|
+
default:
|
|
96
|
+
throw new Error(`Unknown tag tool: ${name}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=tags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/tools/tags.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
import type { StickyRiceClient } from "../convex-client.js";
|
|
3
|
+
export declare const workspaceTools: Tool[];
|
|
4
|
+
export declare function handleWorkspaceTool(client: StickyRiceClient, name: string, args: Record<string, unknown>): Promise<unknown>;
|
|
5
|
+
//# sourceMappingURL=workspaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["../../src/tools/workspaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,eAAO,MAAM,cAAc,EAAE,IAAI,EAiEhC,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,CA8BlB"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
export const workspaceTools = [
|
|
2
|
+
{
|
|
3
|
+
name: "list_workspaces",
|
|
4
|
+
description: "List all workspaces for the authenticated user",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: "object",
|
|
7
|
+
properties: {},
|
|
8
|
+
required: [],
|
|
9
|
+
},
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
name: "create_workspace",
|
|
13
|
+
description: "Create a new workspace",
|
|
14
|
+
inputSchema: {
|
|
15
|
+
type: "object",
|
|
16
|
+
properties: {
|
|
17
|
+
name: {
|
|
18
|
+
type: "string",
|
|
19
|
+
description: "The workspace name",
|
|
20
|
+
},
|
|
21
|
+
order: {
|
|
22
|
+
type: "number",
|
|
23
|
+
description: "Display order (optional, defaults to end of list)",
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
required: ["name"],
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: "update_workspace",
|
|
31
|
+
description: "Update an existing workspace",
|
|
32
|
+
inputSchema: {
|
|
33
|
+
type: "object",
|
|
34
|
+
properties: {
|
|
35
|
+
workspaceId: {
|
|
36
|
+
type: "string",
|
|
37
|
+
description: "The Convex ID of the workspace to update",
|
|
38
|
+
},
|
|
39
|
+
name: {
|
|
40
|
+
type: "string",
|
|
41
|
+
description: "New name for the workspace",
|
|
42
|
+
},
|
|
43
|
+
order: {
|
|
44
|
+
type: "number",
|
|
45
|
+
description: "New display order",
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
required: ["workspaceId"],
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: "delete_workspace",
|
|
53
|
+
description: "Delete a workspace. All boards in the workspace will be moved to Personal.",
|
|
54
|
+
inputSchema: {
|
|
55
|
+
type: "object",
|
|
56
|
+
properties: {
|
|
57
|
+
workspaceId: {
|
|
58
|
+
type: "string",
|
|
59
|
+
description: "The Convex ID of the workspace to delete",
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
required: ["workspaceId"],
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
];
|
|
66
|
+
export async function handleWorkspaceTool(client, name, args) {
|
|
67
|
+
switch (name) {
|
|
68
|
+
case "list_workspaces": {
|
|
69
|
+
return client.query("mcp:listWorkspaces", {});
|
|
70
|
+
}
|
|
71
|
+
case "create_workspace": {
|
|
72
|
+
const workspaceName = args.name;
|
|
73
|
+
if (!workspaceName)
|
|
74
|
+
throw new Error("name is required");
|
|
75
|
+
const order = args.order;
|
|
76
|
+
return client.mutation("mcp:createWorkspace", { name: workspaceName, order });
|
|
77
|
+
}
|
|
78
|
+
case "update_workspace": {
|
|
79
|
+
const workspaceId = args.workspaceId;
|
|
80
|
+
if (!workspaceId)
|
|
81
|
+
throw new Error("workspaceId is required");
|
|
82
|
+
const name = args.name;
|
|
83
|
+
const order = args.order;
|
|
84
|
+
return client.mutation("mcp:updateWorkspace", { workspaceId, name, order });
|
|
85
|
+
}
|
|
86
|
+
case "delete_workspace": {
|
|
87
|
+
const workspaceId = args.workspaceId;
|
|
88
|
+
if (!workspaceId)
|
|
89
|
+
throw new Error("workspaceId is required");
|
|
90
|
+
return client.mutation("mcp:deleteWorkspace", { workspaceId });
|
|
91
|
+
}
|
|
92
|
+
default:
|
|
93
|
+
throw new Error(`Unknown workspace tool: ${name}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=workspaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../src/tools/workspaces.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "stickyrice-mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MCP server for Sticky Rice - interact with your notes from Claude",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"stickyrice-mcp": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"README.md",
|
|
13
|
+
"LICENSE"
|
|
14
|
+
],
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsc",
|
|
17
|
+
"dev": "tsx src/index.ts",
|
|
18
|
+
"start": "node dist/index.js",
|
|
19
|
+
"prepublishOnly": "npm run build"
|
|
20
|
+
},
|
|
21
|
+
"keywords": [
|
|
22
|
+
"mcp",
|
|
23
|
+
"claude",
|
|
24
|
+
"anthropic",
|
|
25
|
+
"sticky-notes",
|
|
26
|
+
"productivity",
|
|
27
|
+
"ai"
|
|
28
|
+
],
|
|
29
|
+
"author": "Sticky Rice",
|
|
30
|
+
"license": "MIT",
|
|
31
|
+
"repository": {
|
|
32
|
+
"type": "git",
|
|
33
|
+
"url": "https://github.com/azamuddin/stickyrice-mcp"
|
|
34
|
+
},
|
|
35
|
+
"homepage": "https://stickyrice.app",
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
38
|
+
"convex": "^1.31.2",
|
|
39
|
+
"zod": "^3.25.0"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@types/node": "^20.0.0",
|
|
43
|
+
"tsx": "^4.0.0",
|
|
44
|
+
"typescript": "^5.8.0"
|
|
45
|
+
},
|
|
46
|
+
"engines": {
|
|
47
|
+
"node": ">=18"
|
|
48
|
+
}
|
|
49
|
+
}
|