myceliumail-mcp 1.0.7 → 1.0.9
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/lib/storage.js +64 -22
- package/dist/lib/storage.js.map +1 -1
- package/package.json +6 -5
- package/src/lib/storage.ts +74 -27
package/dist/lib/storage.js
CHANGED
|
@@ -142,23 +142,48 @@ export async function getInbox(agentId, options) {
|
|
|
142
142
|
export async function getMessage(id) {
|
|
143
143
|
if (hasSupabase()) {
|
|
144
144
|
try {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
145
|
+
// For partial IDs, fetch recent and filter client-side
|
|
146
|
+
// (PostgreSQL UUID doesn't support LIKE operator)
|
|
147
|
+
if (id.length < 36) {
|
|
148
|
+
const results = await supabaseRequest(`/agent_messages?order=created_at.desc&limit=100`);
|
|
149
|
+
const r = results.find(row => row.id.startsWith(id));
|
|
150
|
+
if (r) {
|
|
151
|
+
return {
|
|
152
|
+
id: r.id,
|
|
153
|
+
sender: r.from_agent,
|
|
154
|
+
recipient: r.to_agent,
|
|
155
|
+
subject: r.subject || '',
|
|
156
|
+
body: r.message || '',
|
|
157
|
+
encrypted: r.encrypted,
|
|
158
|
+
ciphertext: r.ciphertext,
|
|
159
|
+
nonce: r.nonce,
|
|
160
|
+
senderPublicKey: r.sender_public_key,
|
|
161
|
+
read: r.read,
|
|
162
|
+
archived: false,
|
|
163
|
+
createdAt: new Date(r.created_at),
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
// Full UUID - exact match
|
|
169
|
+
const results = await supabaseRequest(`/agent_messages?id=eq.${id}`);
|
|
170
|
+
if (results.length > 0) {
|
|
171
|
+
const r = results[0];
|
|
172
|
+
return {
|
|
173
|
+
id: r.id,
|
|
174
|
+
sender: r.from_agent,
|
|
175
|
+
recipient: r.to_agent,
|
|
176
|
+
subject: r.subject || '',
|
|
177
|
+
body: r.message || '',
|
|
178
|
+
encrypted: r.encrypted,
|
|
179
|
+
ciphertext: r.ciphertext,
|
|
180
|
+
nonce: r.nonce,
|
|
181
|
+
senderPublicKey: r.sender_public_key,
|
|
182
|
+
read: r.read,
|
|
183
|
+
archived: false,
|
|
184
|
+
createdAt: new Date(r.created_at),
|
|
185
|
+
};
|
|
186
|
+
}
|
|
162
187
|
}
|
|
163
188
|
}
|
|
164
189
|
catch (err) {
|
|
@@ -166,14 +191,23 @@ export async function getMessage(id) {
|
|
|
166
191
|
// Fall through
|
|
167
192
|
}
|
|
168
193
|
}
|
|
194
|
+
// Local storage - also supports partial ID
|
|
169
195
|
const messages = loadLocalMessages();
|
|
170
|
-
const found = messages.find(m => m.id === id);
|
|
196
|
+
const found = messages.find(m => m.id === id || m.id.startsWith(id));
|
|
171
197
|
return found ? toMessage(found) : null;
|
|
172
198
|
}
|
|
173
199
|
export async function markAsRead(id) {
|
|
200
|
+
// For partial IDs, resolve full UUID first
|
|
201
|
+
let fullId = id;
|
|
202
|
+
if (id.length < 36) {
|
|
203
|
+
const msg = await getMessage(id);
|
|
204
|
+
if (!msg)
|
|
205
|
+
return false;
|
|
206
|
+
fullId = msg.id;
|
|
207
|
+
}
|
|
174
208
|
if (hasSupabase()) {
|
|
175
209
|
try {
|
|
176
|
-
await supabaseRequest(`/agent_messages?id=eq.${
|
|
210
|
+
await supabaseRequest(`/agent_messages?id=eq.${fullId}`, {
|
|
177
211
|
method: 'PATCH',
|
|
178
212
|
body: JSON.stringify({ read: true }),
|
|
179
213
|
});
|
|
@@ -184,7 +218,7 @@ export async function markAsRead(id) {
|
|
|
184
218
|
}
|
|
185
219
|
}
|
|
186
220
|
const messages = loadLocalMessages();
|
|
187
|
-
const idx = messages.findIndex(m => m.id ===
|
|
221
|
+
const idx = messages.findIndex(m => m.id === fullId);
|
|
188
222
|
if (idx === -1)
|
|
189
223
|
return false;
|
|
190
224
|
messages[idx].read = true;
|
|
@@ -192,9 +226,17 @@ export async function markAsRead(id) {
|
|
|
192
226
|
return true;
|
|
193
227
|
}
|
|
194
228
|
export async function archiveMessage(id) {
|
|
229
|
+
// For partial IDs, resolve full UUID first
|
|
230
|
+
let fullId = id;
|
|
231
|
+
if (id.length < 36) {
|
|
232
|
+
const msg = await getMessage(id);
|
|
233
|
+
if (!msg)
|
|
234
|
+
return false;
|
|
235
|
+
fullId = msg.id;
|
|
236
|
+
}
|
|
195
237
|
if (hasSupabase()) {
|
|
196
238
|
try {
|
|
197
|
-
await supabaseRequest(`/agent_messages?id=eq.${
|
|
239
|
+
await supabaseRequest(`/agent_messages?id=eq.${fullId}`, {
|
|
198
240
|
method: 'PATCH',
|
|
199
241
|
body: JSON.stringify({ archived: true }),
|
|
200
242
|
});
|
|
@@ -205,7 +247,7 @@ export async function archiveMessage(id) {
|
|
|
205
247
|
}
|
|
206
248
|
}
|
|
207
249
|
const messages = loadLocalMessages();
|
|
208
|
-
const idx = messages.findIndex(m => m.id ===
|
|
250
|
+
const idx = messages.findIndex(m => m.id === fullId);
|
|
209
251
|
if (idx === -1)
|
|
210
252
|
return false;
|
|
211
253
|
messages[idx].archived = true;
|
package/dist/lib/storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/lib/storage.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/lib/storage.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "myceliumail-mcp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.9",
|
|
4
4
|
"description": "MCP server for Myceliumail - End-to-End Encrypted Messaging for AI Agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/server.js",
|
|
@@ -23,16 +23,17 @@
|
|
|
23
23
|
"e2e",
|
|
24
24
|
"myceliumail"
|
|
25
25
|
],
|
|
26
|
-
"author": "Treebird",
|
|
26
|
+
"author": "Treebird <treebird@treebird.dev>",
|
|
27
27
|
"license": "MIT",
|
|
28
28
|
"repository": {
|
|
29
29
|
"type": "git",
|
|
30
|
-
"url": "https://github.com/
|
|
30
|
+
"url": "https://github.com/treebird7/myceliumail"
|
|
31
31
|
},
|
|
32
|
-
"homepage": "https://github.com/
|
|
32
|
+
"homepage": "https://github.com/treebird7/myceliumail#readme",
|
|
33
33
|
"bugs": {
|
|
34
|
-
"url": "https://github.com/
|
|
34
|
+
"url": "https://github.com/treebird7/myceliumail/issues"
|
|
35
35
|
},
|
|
36
|
+
"readme": "README.md",
|
|
36
37
|
"dependencies": {
|
|
37
38
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
38
39
|
"tweetnacl": "^1.0.3",
|
package/src/lib/storage.ts
CHANGED
|
@@ -189,29 +189,59 @@ export async function getInbox(
|
|
|
189
189
|
export async function getMessage(id: string): Promise<Message | null> {
|
|
190
190
|
if (hasSupabase()) {
|
|
191
191
|
try {
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
192
|
+
// For partial IDs, fetch recent and filter client-side
|
|
193
|
+
// (PostgreSQL UUID doesn't support LIKE operator)
|
|
194
|
+
if (id.length < 36) {
|
|
195
|
+
const results = await supabaseRequest<Array<{
|
|
196
|
+
id: string; from_agent: string; to_agent: string;
|
|
197
|
+
subject: string; message: string; encrypted: boolean;
|
|
198
|
+
ciphertext: string; nonce: string; sender_public_key: string;
|
|
199
|
+
read: boolean; created_at: string;
|
|
200
|
+
}>>(`/agent_messages?order=created_at.desc&limit=100`);
|
|
198
201
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
202
|
+
const r = results.find(row => row.id.startsWith(id));
|
|
203
|
+
if (r) {
|
|
204
|
+
return {
|
|
205
|
+
id: r.id,
|
|
206
|
+
sender: r.from_agent,
|
|
207
|
+
recipient: r.to_agent,
|
|
208
|
+
subject: r.subject || '',
|
|
209
|
+
body: r.message || '',
|
|
210
|
+
encrypted: r.encrypted,
|
|
211
|
+
ciphertext: r.ciphertext,
|
|
212
|
+
nonce: r.nonce,
|
|
213
|
+
senderPublicKey: r.sender_public_key,
|
|
214
|
+
read: r.read,
|
|
215
|
+
archived: false,
|
|
216
|
+
createdAt: new Date(r.created_at),
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
} else {
|
|
220
|
+
// Full UUID - exact match
|
|
221
|
+
const results = await supabaseRequest<Array<{
|
|
222
|
+
id: string; from_agent: string; to_agent: string;
|
|
223
|
+
subject: string; message: string; encrypted: boolean;
|
|
224
|
+
ciphertext: string; nonce: string; sender_public_key: string;
|
|
225
|
+
read: boolean; created_at: string;
|
|
226
|
+
}>>(`/agent_messages?id=eq.${id}`);
|
|
227
|
+
|
|
228
|
+
if (results.length > 0) {
|
|
229
|
+
const r = results[0];
|
|
230
|
+
return {
|
|
231
|
+
id: r.id,
|
|
232
|
+
sender: r.from_agent,
|
|
233
|
+
recipient: r.to_agent,
|
|
234
|
+
subject: r.subject || '',
|
|
235
|
+
body: r.message || '',
|
|
236
|
+
encrypted: r.encrypted,
|
|
237
|
+
ciphertext: r.ciphertext,
|
|
238
|
+
nonce: r.nonce,
|
|
239
|
+
senderPublicKey: r.sender_public_key,
|
|
240
|
+
read: r.read,
|
|
241
|
+
archived: false,
|
|
242
|
+
createdAt: new Date(r.created_at),
|
|
243
|
+
};
|
|
244
|
+
}
|
|
215
245
|
}
|
|
216
246
|
} catch (err) {
|
|
217
247
|
console.error('getMessage failed, falling back to local:', err);
|
|
@@ -219,15 +249,24 @@ export async function getMessage(id: string): Promise<Message | null> {
|
|
|
219
249
|
}
|
|
220
250
|
}
|
|
221
251
|
|
|
252
|
+
// Local storage - also supports partial ID
|
|
222
253
|
const messages = loadLocalMessages();
|
|
223
|
-
const found = messages.find(m => m.id === id);
|
|
254
|
+
const found = messages.find(m => m.id === id || m.id.startsWith(id));
|
|
224
255
|
return found ? toMessage(found) : null;
|
|
225
256
|
}
|
|
226
257
|
|
|
227
258
|
export async function markAsRead(id: string): Promise<boolean> {
|
|
259
|
+
// For partial IDs, resolve full UUID first
|
|
260
|
+
let fullId = id;
|
|
261
|
+
if (id.length < 36) {
|
|
262
|
+
const msg = await getMessage(id);
|
|
263
|
+
if (!msg) return false;
|
|
264
|
+
fullId = msg.id;
|
|
265
|
+
}
|
|
266
|
+
|
|
228
267
|
if (hasSupabase()) {
|
|
229
268
|
try {
|
|
230
|
-
await supabaseRequest(`/agent_messages?id=eq.${
|
|
269
|
+
await supabaseRequest(`/agent_messages?id=eq.${fullId}`, {
|
|
231
270
|
method: 'PATCH',
|
|
232
271
|
body: JSON.stringify({ read: true }),
|
|
233
272
|
});
|
|
@@ -238,7 +277,7 @@ export async function markAsRead(id: string): Promise<boolean> {
|
|
|
238
277
|
}
|
|
239
278
|
|
|
240
279
|
const messages = loadLocalMessages();
|
|
241
|
-
const idx = messages.findIndex(m => m.id ===
|
|
280
|
+
const idx = messages.findIndex(m => m.id === fullId);
|
|
242
281
|
if (idx === -1) return false;
|
|
243
282
|
messages[idx].read = true;
|
|
244
283
|
saveLocalMessages(messages);
|
|
@@ -246,9 +285,17 @@ export async function markAsRead(id: string): Promise<boolean> {
|
|
|
246
285
|
}
|
|
247
286
|
|
|
248
287
|
export async function archiveMessage(id: string): Promise<boolean> {
|
|
288
|
+
// For partial IDs, resolve full UUID first
|
|
289
|
+
let fullId = id;
|
|
290
|
+
if (id.length < 36) {
|
|
291
|
+
const msg = await getMessage(id);
|
|
292
|
+
if (!msg) return false;
|
|
293
|
+
fullId = msg.id;
|
|
294
|
+
}
|
|
295
|
+
|
|
249
296
|
if (hasSupabase()) {
|
|
250
297
|
try {
|
|
251
|
-
await supabaseRequest(`/agent_messages?id=eq.${
|
|
298
|
+
await supabaseRequest(`/agent_messages?id=eq.${fullId}`, {
|
|
252
299
|
method: 'PATCH',
|
|
253
300
|
body: JSON.stringify({ archived: true }),
|
|
254
301
|
});
|
|
@@ -259,7 +306,7 @@ export async function archiveMessage(id: string): Promise<boolean> {
|
|
|
259
306
|
}
|
|
260
307
|
|
|
261
308
|
const messages = loadLocalMessages();
|
|
262
|
-
const idx = messages.findIndex(m => m.id ===
|
|
309
|
+
const idx = messages.findIndex(m => m.id === fullId);
|
|
263
310
|
if (idx === -1) return false;
|
|
264
311
|
messages[idx].archived = true;
|
|
265
312
|
saveLocalMessages(messages);
|