@filepad/mcp-server 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 +117 -0
- package/SECURITY.md +24 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +109 -0
- package/dist/cli.js.map +1 -0
- package/dist/handlers.d.ts +65 -0
- package/dist/handlers.d.ts.map +1 -0
- package/dist/handlers.js +502 -0
- package/dist/handlers.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +17 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +88 -0
- package/dist/server.js.map +1 -0
- package/dist/tool-registry.d.ts +63 -0
- package/dist/tool-registry.d.ts.map +1 -0
- package/dist/tool-registry.js +289 -0
- package/dist/tool-registry.js.map +1 -0
- package/dist/transport.d.ts +12 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +54 -0
- package/dist/transport.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/package.json +64 -0
package/dist/handlers.js
ADDED
|
@@ -0,0 +1,502 @@
|
|
|
1
|
+
// FILE MEMO: MCP protocol handlers. Zero business logic — delegates to FilepadAgentClient.
|
|
2
|
+
// All tool arguments are parsed through typed schemas before SDK calls.
|
|
3
|
+
import { listToolsForScopes, findTool } from './tool-registry.js';
|
|
4
|
+
import { FILEPAD_MCP_SERVER_VERSION } from './version.js';
|
|
5
|
+
// ── Typed argument validators (lightweight, no Zod dependency in this layer) ──
|
|
6
|
+
function assertString(value, field) {
|
|
7
|
+
if (typeof value !== 'string' || value.length === 0) {
|
|
8
|
+
throw new Error(`Missing or invalid required field: ${field}`);
|
|
9
|
+
}
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
function assertOptionalString(value) {
|
|
13
|
+
if (value === undefined || value === null)
|
|
14
|
+
return undefined;
|
|
15
|
+
if (typeof value !== 'string')
|
|
16
|
+
return undefined;
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
function assertOptionalNumber(value) {
|
|
20
|
+
if (value === undefined || value === null)
|
|
21
|
+
return undefined;
|
|
22
|
+
const n = Number(value);
|
|
23
|
+
if (!Number.isFinite(n))
|
|
24
|
+
return undefined;
|
|
25
|
+
return n;
|
|
26
|
+
}
|
|
27
|
+
function assertOptionalRecord(value) {
|
|
28
|
+
if (value === undefined || value === null)
|
|
29
|
+
return undefined;
|
|
30
|
+
if (typeof value !== 'object' || Array.isArray(value))
|
|
31
|
+
return undefined;
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
function assertStringArray(value, field) {
|
|
35
|
+
if (!Array.isArray(value)) {
|
|
36
|
+
throw new Error(`Missing or invalid required field: ${field}`);
|
|
37
|
+
}
|
|
38
|
+
const strings = value.filter((item) => typeof item === 'string' && item.length > 0);
|
|
39
|
+
if (strings.length !== value.length || strings.length === 0) {
|
|
40
|
+
throw new Error(`Missing or invalid required field: ${field}`);
|
|
41
|
+
}
|
|
42
|
+
return strings;
|
|
43
|
+
}
|
|
44
|
+
function parseSearchArgs(args) {
|
|
45
|
+
if (!args || typeof args !== 'object') {
|
|
46
|
+
throw new Error('Missing arguments for filepad_search');
|
|
47
|
+
}
|
|
48
|
+
const a = args;
|
|
49
|
+
const type = assertOptionalString(a['type']);
|
|
50
|
+
const typeSet = new Set(['hybrid', 'semantic', 'keyword']);
|
|
51
|
+
return {
|
|
52
|
+
query: assertString(a['query'], 'query'),
|
|
53
|
+
type: type && typeSet.has(type) ? type : undefined,
|
|
54
|
+
limit: assertOptionalNumber(a['limit']),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function parseReadFileArgs(args) {
|
|
58
|
+
if (!args || typeof args !== 'object') {
|
|
59
|
+
throw new Error('Missing arguments for filepad_read_file');
|
|
60
|
+
}
|
|
61
|
+
const a = args;
|
|
62
|
+
return {
|
|
63
|
+
fileNodeId: assertString(a['fileNodeId'], 'fileNodeId'),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function parseCreateArtifactArgs(args) {
|
|
67
|
+
if (!args || typeof args !== 'object') {
|
|
68
|
+
throw new Error('Missing arguments for filepad_create_artifact');
|
|
69
|
+
}
|
|
70
|
+
const a = args;
|
|
71
|
+
return {
|
|
72
|
+
title: assertString(a['title'], 'title'),
|
|
73
|
+
text: assertOptionalString(a['text']),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function parseProposeEditArgs(args) {
|
|
77
|
+
if (!args || typeof args !== 'object') {
|
|
78
|
+
throw new Error('Missing arguments for filepad_propose_edit');
|
|
79
|
+
}
|
|
80
|
+
const a = args;
|
|
81
|
+
return {
|
|
82
|
+
fileNodeId: assertString(a['fileNodeId'], 'fileNodeId'),
|
|
83
|
+
baseVersionId: assertString(a['baseVersionId'], 'baseVersionId'),
|
|
84
|
+
summary: assertString(a['summary'], 'summary'),
|
|
85
|
+
newText: assertString(a['newText'], 'newText'),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
function parseEmitEventArgs(args) {
|
|
89
|
+
if (!args || typeof args !== 'object') {
|
|
90
|
+
throw new Error('Missing arguments for filepad_emit_event');
|
|
91
|
+
}
|
|
92
|
+
const a = args;
|
|
93
|
+
return {
|
|
94
|
+
eventType: assertString(a['eventType'], 'eventType'),
|
|
95
|
+
payload: assertOptionalRecord(a['payload']),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
function parseCreateSignalArgs(args) {
|
|
99
|
+
if (!args || typeof args !== 'object') {
|
|
100
|
+
throw new Error('Missing arguments for filepad_create_signal');
|
|
101
|
+
}
|
|
102
|
+
const a = args;
|
|
103
|
+
const severity = assertOptionalString(a['severity']);
|
|
104
|
+
const severitySet = new Set(['info', 'warn', 'high_alert']);
|
|
105
|
+
return {
|
|
106
|
+
findingTypeKey: assertString(a['findingTypeKey'], 'findingTypeKey'),
|
|
107
|
+
summary: assertString(a['summary'], 'summary'),
|
|
108
|
+
severity: severity && severitySet.has(severity)
|
|
109
|
+
? severity
|
|
110
|
+
: undefined,
|
|
111
|
+
value: assertOptionalRecord(a['value']),
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function parseListSignalsArgs(args) {
|
|
115
|
+
if (args === undefined || args === null)
|
|
116
|
+
return {};
|
|
117
|
+
if (typeof args !== 'object') {
|
|
118
|
+
throw new Error('Invalid arguments for filepad_list_signals');
|
|
119
|
+
}
|
|
120
|
+
const a = args;
|
|
121
|
+
const severity = assertOptionalString(a['severity']);
|
|
122
|
+
const severitySet = new Set(['info', 'warn', 'high_alert']);
|
|
123
|
+
const status = assertOptionalString(a['status']);
|
|
124
|
+
const statusSet = new Set(['suggested', 'accepted', 'rejected']);
|
|
125
|
+
return {
|
|
126
|
+
findingTypeKey: assertOptionalString(a['findingTypeKey']),
|
|
127
|
+
severity: severity && severitySet.has(severity)
|
|
128
|
+
? severity
|
|
129
|
+
: undefined,
|
|
130
|
+
status: status && statusSet.has(status)
|
|
131
|
+
? status
|
|
132
|
+
: undefined,
|
|
133
|
+
limit: assertOptionalNumber(a['limit']),
|
|
134
|
+
cursor: assertOptionalString(a['cursor']),
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
function parseGetSignalArgs(args) {
|
|
138
|
+
if (!args || typeof args !== 'object') {
|
|
139
|
+
throw new Error('Missing arguments for filepad_get_signal');
|
|
140
|
+
}
|
|
141
|
+
const a = args;
|
|
142
|
+
return {
|
|
143
|
+
signalId: assertString(a['signalId'], 'signalId'),
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
function parseAckNotificationArgs(args) {
|
|
147
|
+
if (!args || typeof args !== 'object') {
|
|
148
|
+
throw new Error('Missing arguments for filepad_ack_notification');
|
|
149
|
+
}
|
|
150
|
+
const a = args;
|
|
151
|
+
return {
|
|
152
|
+
ids: assertStringArray(a['ids'], 'ids'),
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
const agentProfileFieldSet = new Set([
|
|
156
|
+
'identity',
|
|
157
|
+
'learnings',
|
|
158
|
+
'goals',
|
|
159
|
+
'timeline',
|
|
160
|
+
]);
|
|
161
|
+
function isAgentProfileField(value) {
|
|
162
|
+
return agentProfileFieldSet.has(value);
|
|
163
|
+
}
|
|
164
|
+
function parseAgentProfileField(value, fieldName) {
|
|
165
|
+
const parsed = assertString(value, fieldName);
|
|
166
|
+
if (!isAgentProfileField(parsed)) {
|
|
167
|
+
throw new Error(`Invalid ${fieldName}: ${parsed}`);
|
|
168
|
+
}
|
|
169
|
+
return parsed;
|
|
170
|
+
}
|
|
171
|
+
function parseGetProfileArgs(args) {
|
|
172
|
+
if (args === undefined || args === null)
|
|
173
|
+
return {};
|
|
174
|
+
if (typeof args !== 'object') {
|
|
175
|
+
throw new Error('Invalid arguments for filepad_get_profile');
|
|
176
|
+
}
|
|
177
|
+
const a = args;
|
|
178
|
+
const fieldsValue = a['fields'];
|
|
179
|
+
if (fieldsValue === undefined || fieldsValue === null)
|
|
180
|
+
return {};
|
|
181
|
+
if (!Array.isArray(fieldsValue)) {
|
|
182
|
+
throw new Error('Invalid fields for filepad_get_profile');
|
|
183
|
+
}
|
|
184
|
+
return {
|
|
185
|
+
fields: fieldsValue.map((value) => parseAgentProfileField(value, 'fields')),
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
function parseUpdateProfileArgs(args) {
|
|
189
|
+
if (!args || typeof args !== 'object') {
|
|
190
|
+
throw new Error('Missing arguments for filepad_update_profile');
|
|
191
|
+
}
|
|
192
|
+
const a = args;
|
|
193
|
+
const mode = assertOptionalString(a['mode']);
|
|
194
|
+
const parsedMode = mode === 'append' || mode === 'replace' ? mode : undefined;
|
|
195
|
+
return {
|
|
196
|
+
field: parseAgentProfileField(a['field'], 'field'),
|
|
197
|
+
content: assertString(a['content'], 'content'),
|
|
198
|
+
mode: parsedMode,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
export async function handleInitialize() {
|
|
202
|
+
return {
|
|
203
|
+
protocolVersion: '2024-11-05',
|
|
204
|
+
capabilities: {
|
|
205
|
+
tools: {},
|
|
206
|
+
resources: {},
|
|
207
|
+
prompts: {},
|
|
208
|
+
},
|
|
209
|
+
serverInfo: {
|
|
210
|
+
name: 'filepad',
|
|
211
|
+
version: FILEPAD_MCP_SERVER_VERSION,
|
|
212
|
+
},
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
export async function handleListTools(_request, ctx) {
|
|
216
|
+
const tools = listToolsForScopes(ctx.scopes);
|
|
217
|
+
return {
|
|
218
|
+
tools: tools.map((t) => ({
|
|
219
|
+
name: t.name,
|
|
220
|
+
description: t.description,
|
|
221
|
+
inputSchema: t.inputSchema,
|
|
222
|
+
})),
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
export async function handleCallTool(request, ctx) {
|
|
226
|
+
const req = request;
|
|
227
|
+
const { name, arguments: args } = req.params;
|
|
228
|
+
const tool = findTool(name);
|
|
229
|
+
if (!tool) {
|
|
230
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
231
|
+
}
|
|
232
|
+
const scopeSet = new Set(ctx.scopes);
|
|
233
|
+
const missing = tool.requiredScopes.filter((s) => !scopeSet.has(s));
|
|
234
|
+
if (missing.length > 0) {
|
|
235
|
+
throw new Error(`Missing required scopes: ${missing.join(', ')}`);
|
|
236
|
+
}
|
|
237
|
+
// Delegate to Agent Access SDK — zero business logic here
|
|
238
|
+
switch (name) {
|
|
239
|
+
case 'filepad_health': {
|
|
240
|
+
const result = await ctx.client.verifyCredentials();
|
|
241
|
+
return {
|
|
242
|
+
content: [
|
|
243
|
+
{
|
|
244
|
+
type: 'text',
|
|
245
|
+
text: JSON.stringify({
|
|
246
|
+
status: 'ok',
|
|
247
|
+
workspaceId: ctx.workspaceId,
|
|
248
|
+
scopes: result.scopes,
|
|
249
|
+
version: FILEPAD_MCP_SERVER_VERSION,
|
|
250
|
+
}, null, 2),
|
|
251
|
+
},
|
|
252
|
+
],
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
case 'filepad_search': {
|
|
256
|
+
const parsed = parseSearchArgs(args);
|
|
257
|
+
const result = await ctx.client.search(parsed.query, {
|
|
258
|
+
...(parsed.type ? { type: parsed.type } : {}),
|
|
259
|
+
...(parsed.limit ? { limit: parsed.limit } : {}),
|
|
260
|
+
});
|
|
261
|
+
return {
|
|
262
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
case 'filepad_read_file': {
|
|
266
|
+
const parsed = parseReadFileArgs(args);
|
|
267
|
+
const result = await ctx.client.getFile(parsed.fileNodeId);
|
|
268
|
+
return {
|
|
269
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
case 'filepad_list_tree': {
|
|
273
|
+
const result = await ctx.client.getFileTree();
|
|
274
|
+
return {
|
|
275
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
case 'filepad_create_artifact': {
|
|
279
|
+
const parsed = parseCreateArtifactArgs(args);
|
|
280
|
+
const result = await ctx.client.createArtifact({
|
|
281
|
+
title: parsed.title,
|
|
282
|
+
text: parsed.text ?? '',
|
|
283
|
+
});
|
|
284
|
+
return {
|
|
285
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
case 'filepad_propose_edit': {
|
|
289
|
+
const parsed = parseProposeEditArgs(args);
|
|
290
|
+
const result = await ctx.client.proposeEdit({
|
|
291
|
+
fileNodeId: parsed.fileNodeId,
|
|
292
|
+
baseVersionId: parsed.baseVersionId,
|
|
293
|
+
summary: parsed.summary,
|
|
294
|
+
newText: parsed.newText,
|
|
295
|
+
});
|
|
296
|
+
return {
|
|
297
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
case 'filepad_emit_event': {
|
|
301
|
+
const parsed = parseEmitEventArgs(args);
|
|
302
|
+
const result = await ctx.client.createEvent({
|
|
303
|
+
eventType: parsed.eventType,
|
|
304
|
+
...(parsed.payload ? { payload: parsed.payload } : {}),
|
|
305
|
+
});
|
|
306
|
+
return {
|
|
307
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
case 'filepad_create_signal': {
|
|
311
|
+
const parsed = parseCreateSignalArgs(args);
|
|
312
|
+
const result = await ctx.client.createSignal({
|
|
313
|
+
findingTypeKey: parsed.findingTypeKey,
|
|
314
|
+
summary: parsed.summary,
|
|
315
|
+
...(parsed.severity ? { severity: parsed.severity } : {}),
|
|
316
|
+
...(parsed.value ? { value: parsed.value } : {}),
|
|
317
|
+
});
|
|
318
|
+
return {
|
|
319
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
case 'filepad_list_signals': {
|
|
323
|
+
const parsed = parseListSignalsArgs(args);
|
|
324
|
+
const result = await ctx.client.getSignals(parsed);
|
|
325
|
+
return {
|
|
326
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
case 'filepad_get_signal': {
|
|
330
|
+
const parsed = parseGetSignalArgs(args);
|
|
331
|
+
const result = await ctx.client.getSignal(parsed.signalId);
|
|
332
|
+
return {
|
|
333
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
case 'filepad_ack_notification': {
|
|
337
|
+
const parsed = parseAckNotificationArgs(args);
|
|
338
|
+
const result = await ctx.client.ackMailbox(parsed.ids);
|
|
339
|
+
return {
|
|
340
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
case 'filepad_get_profile': {
|
|
344
|
+
const parsed = parseGetProfileArgs(args);
|
|
345
|
+
const result = await ctx.client.getAgentProfile(parsed);
|
|
346
|
+
return {
|
|
347
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
case 'filepad_update_profile': {
|
|
351
|
+
const parsed = parseUpdateProfileArgs(args);
|
|
352
|
+
const result = await ctx.client.updateAgentProfile(parsed);
|
|
353
|
+
return {
|
|
354
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
default:
|
|
358
|
+
throw new Error(`Unhandled tool: ${name}`);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
export async function handleListResources(_request, ctx) {
|
|
362
|
+
const canReadEnvironment = ctx.scopes.includes('env:read');
|
|
363
|
+
const canReadMailbox = ctx.scopes.includes('notifications:read');
|
|
364
|
+
const tree = canReadEnvironment
|
|
365
|
+
? await ctx.client.getFileTree()
|
|
366
|
+
: { nodes: [] };
|
|
367
|
+
const resources = [
|
|
368
|
+
...(canReadMailbox
|
|
369
|
+
? [
|
|
370
|
+
{
|
|
371
|
+
uri: `filepad://workspace/${ctx.workspaceId}/mailbox`,
|
|
372
|
+
name: 'mailbox',
|
|
373
|
+
mimeType: 'application/json',
|
|
374
|
+
description: 'Unread and recent notifications for this external agent',
|
|
375
|
+
},
|
|
376
|
+
]
|
|
377
|
+
: []),
|
|
378
|
+
...(canReadEnvironment
|
|
379
|
+
? [
|
|
380
|
+
{
|
|
381
|
+
uri: `filepad://workspace/${ctx.workspaceId}/environment`,
|
|
382
|
+
name: 'environment',
|
|
383
|
+
mimeType: 'application/json',
|
|
384
|
+
description: 'Workspace environment summary',
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
uri: `filepad://workspace/${ctx.workspaceId}/tree`,
|
|
388
|
+
name: 'file-tree',
|
|
389
|
+
mimeType: 'application/json',
|
|
390
|
+
description: 'Workspace file tree',
|
|
391
|
+
},
|
|
392
|
+
]
|
|
393
|
+
: []),
|
|
394
|
+
...tree.nodes
|
|
395
|
+
.filter((n) => n.kind === 'file')
|
|
396
|
+
.map((n) => ({
|
|
397
|
+
uri: `filepad://workspace/${ctx.workspaceId}/files/${n.id}`,
|
|
398
|
+
name: n.name,
|
|
399
|
+
mimeType: n.name.endsWith('.md') ? 'text/markdown' : 'text/plain',
|
|
400
|
+
description: `Workspace file: ${n.name}`,
|
|
401
|
+
})),
|
|
402
|
+
];
|
|
403
|
+
return { resources };
|
|
404
|
+
}
|
|
405
|
+
export async function handleReadResource(request, ctx) {
|
|
406
|
+
const req = request;
|
|
407
|
+
const uri = req.params.uri;
|
|
408
|
+
if (uri === `filepad://workspace/${ctx.workspaceId}/environment`) {
|
|
409
|
+
const env = await ctx.client.getEnvironment();
|
|
410
|
+
return {
|
|
411
|
+
contents: [
|
|
412
|
+
{
|
|
413
|
+
uri,
|
|
414
|
+
mimeType: 'application/json',
|
|
415
|
+
text: JSON.stringify(env, null, 2),
|
|
416
|
+
},
|
|
417
|
+
],
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
if (uri === `filepad://workspace/${ctx.workspaceId}/tree`) {
|
|
421
|
+
const tree = await ctx.client.getFileTree();
|
|
422
|
+
return {
|
|
423
|
+
contents: [
|
|
424
|
+
{
|
|
425
|
+
uri,
|
|
426
|
+
mimeType: 'application/json',
|
|
427
|
+
text: JSON.stringify(tree, null, 2),
|
|
428
|
+
},
|
|
429
|
+
],
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
if (uri === `filepad://workspace/${ctx.workspaceId}/mailbox`) {
|
|
433
|
+
const mailbox = await ctx.client.getMailbox({ limit: 50 });
|
|
434
|
+
return {
|
|
435
|
+
contents: [
|
|
436
|
+
{
|
|
437
|
+
uri,
|
|
438
|
+
mimeType: 'application/json',
|
|
439
|
+
text: JSON.stringify(mailbox, null, 2),
|
|
440
|
+
},
|
|
441
|
+
],
|
|
442
|
+
};
|
|
443
|
+
}
|
|
444
|
+
const fileMatch = uri.match(new RegExp(`^filepad://workspace/${ctx.workspaceId}/files/(.+)$`));
|
|
445
|
+
if (fileMatch && fileMatch[1]) {
|
|
446
|
+
const file = await ctx.client.getFile(fileMatch[1]);
|
|
447
|
+
const text = file.content.kind === 'inlineText'
|
|
448
|
+
? (file.content.text ?? '')
|
|
449
|
+
: JSON.stringify(file.content);
|
|
450
|
+
return {
|
|
451
|
+
contents: [
|
|
452
|
+
{
|
|
453
|
+
uri,
|
|
454
|
+
mimeType: file.node.name.endsWith('.md')
|
|
455
|
+
? 'text/markdown'
|
|
456
|
+
: 'text/plain',
|
|
457
|
+
text,
|
|
458
|
+
},
|
|
459
|
+
],
|
|
460
|
+
};
|
|
461
|
+
}
|
|
462
|
+
throw new Error(`Unknown resource URI: ${uri}`);
|
|
463
|
+
}
|
|
464
|
+
export async function handleListPrompts(_request, ctx) {
|
|
465
|
+
const prompts = await ctx.client.getMcpPrompts();
|
|
466
|
+
return {
|
|
467
|
+
prompts: prompts.prompts.map((p) => ({
|
|
468
|
+
name: p.name,
|
|
469
|
+
description: p.description,
|
|
470
|
+
arguments: p.arguments,
|
|
471
|
+
})),
|
|
472
|
+
};
|
|
473
|
+
}
|
|
474
|
+
export async function handleGetPrompt(request, ctx) {
|
|
475
|
+
const req = request;
|
|
476
|
+
const { name } = req.params;
|
|
477
|
+
const prompts = await ctx.client.getMcpPrompts();
|
|
478
|
+
const prompt = prompts.prompts.find((p) => p.name === name);
|
|
479
|
+
if (!prompt) {
|
|
480
|
+
throw new Error(`Unknown prompt: ${name}`);
|
|
481
|
+
}
|
|
482
|
+
const fileNodeId = prompt.contentUrl.split('/').pop();
|
|
483
|
+
if (!fileNodeId) {
|
|
484
|
+
throw new Error(`Invalid contentUrl for prompt: ${name}`);
|
|
485
|
+
}
|
|
486
|
+
const file = await ctx.client.getFile(fileNodeId);
|
|
487
|
+
return {
|
|
488
|
+
description: prompt.description,
|
|
489
|
+
messages: [
|
|
490
|
+
{
|
|
491
|
+
role: 'user',
|
|
492
|
+
content: {
|
|
493
|
+
type: 'text',
|
|
494
|
+
text: file.content.kind === 'inlineText'
|
|
495
|
+
? (file.content.text ?? '')
|
|
496
|
+
: '',
|
|
497
|
+
},
|
|
498
|
+
},
|
|
499
|
+
],
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
//# sourceMappingURL=handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { FilepadMcpServer } from './server.js';
|
|
2
|
+
export { sendMcpMessage } from './transport.js';
|
|
3
|
+
export { listToolsForScopes, findTool } from './tool-registry.js';
|
|
4
|
+
export type { McpToolDefinition } from './tool-registry.js';
|
|
5
|
+
export type { McpHandlerContext } from './handlers.js';
|
|
6
|
+
export type { FilepadMcpServerConfig } from './server.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAClE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
export interface FilepadMcpServerConfig {
|
|
3
|
+
baseUrl: string;
|
|
4
|
+
workspaceId: string;
|
|
5
|
+
keyId: string;
|
|
6
|
+
secret: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class FilepadMcpServer {
|
|
9
|
+
private readonly client;
|
|
10
|
+
private readonly workspaceId;
|
|
11
|
+
private scopes;
|
|
12
|
+
constructor(config: FilepadMcpServerConfig);
|
|
13
|
+
private get context();
|
|
14
|
+
initialize(): Promise<void>;
|
|
15
|
+
handleMessage(message: JSONRPCMessage): Promise<JSONRPCMessage | JSONRPCMessage[] | null>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAYzE,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAoBD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,MAAM,CAA0B;gBAE5B,MAAM,EAAE,sBAAsB;IAK1C,OAAO,KAAK,OAAO,GAMlB;IAEK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,aAAa,CACjB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,cAAc,GAAG,cAAc,EAAE,GAAG,IAAI,CAAC;CAkErD"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// FILE MEMO: MCP Server factory. Wires protocol handlers to Agent Access SDK.
|
|
2
|
+
import { FilepadAgentClient } from '@filepad/agent-access-sdk';
|
|
3
|
+
import { handleInitialize, handleListTools, handleCallTool, handleListResources, handleReadResource, handleListPrompts, handleGetPrompt, } from './handlers.js';
|
|
4
|
+
function isMcpRequest(msg) {
|
|
5
|
+
return (typeof msg === 'object' &&
|
|
6
|
+
msg !== null &&
|
|
7
|
+
'method' in msg &&
|
|
8
|
+
typeof msg.method === 'string');
|
|
9
|
+
}
|
|
10
|
+
export class FilepadMcpServer {
|
|
11
|
+
client;
|
|
12
|
+
workspaceId;
|
|
13
|
+
scopes = [];
|
|
14
|
+
constructor(config) {
|
|
15
|
+
this.client = new FilepadAgentClient(config);
|
|
16
|
+
this.workspaceId = config.workspaceId;
|
|
17
|
+
}
|
|
18
|
+
get context() {
|
|
19
|
+
return {
|
|
20
|
+
client: this.client,
|
|
21
|
+
workspaceId: this.workspaceId,
|
|
22
|
+
scopes: this.scopes,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
async initialize() {
|
|
26
|
+
const caps = await this.client.verifyCredentials();
|
|
27
|
+
this.scopes = caps.scopes;
|
|
28
|
+
}
|
|
29
|
+
async handleMessage(message) {
|
|
30
|
+
if (!isMcpRequest(message)) {
|
|
31
|
+
return null; // Response, not request
|
|
32
|
+
}
|
|
33
|
+
const { id, method } = message;
|
|
34
|
+
try {
|
|
35
|
+
switch (method) {
|
|
36
|
+
case 'initialize': {
|
|
37
|
+
const result = await handleInitialize();
|
|
38
|
+
return { jsonrpc: '2.0', id, result };
|
|
39
|
+
}
|
|
40
|
+
case 'tools/list': {
|
|
41
|
+
const result = await handleListTools(message, this.context);
|
|
42
|
+
return { jsonrpc: '2.0', id, result };
|
|
43
|
+
}
|
|
44
|
+
case 'tools/call': {
|
|
45
|
+
const result = await handleCallTool(message, this.context);
|
|
46
|
+
return { jsonrpc: '2.0', id, result };
|
|
47
|
+
}
|
|
48
|
+
case 'resources/list': {
|
|
49
|
+
const result = await handleListResources(message, this.context);
|
|
50
|
+
return { jsonrpc: '2.0', id, result };
|
|
51
|
+
}
|
|
52
|
+
case 'resources/read': {
|
|
53
|
+
const result = await handleReadResource(message, this.context);
|
|
54
|
+
return { jsonrpc: '2.0', id, result };
|
|
55
|
+
}
|
|
56
|
+
case 'prompts/list': {
|
|
57
|
+
const result = await handleListPrompts(message, this.context);
|
|
58
|
+
return { jsonrpc: '2.0', id, result };
|
|
59
|
+
}
|
|
60
|
+
case 'prompts/get': {
|
|
61
|
+
const result = await handleGetPrompt(message, this.context);
|
|
62
|
+
return { jsonrpc: '2.0', id, result };
|
|
63
|
+
}
|
|
64
|
+
default:
|
|
65
|
+
return {
|
|
66
|
+
jsonrpc: '2.0',
|
|
67
|
+
id,
|
|
68
|
+
error: {
|
|
69
|
+
code: -32601,
|
|
70
|
+
message: `Method not found: ${method}`,
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
const message_text = err instanceof Error ? err.message : String(err);
|
|
77
|
+
return {
|
|
78
|
+
jsonrpc: '2.0',
|
|
79
|
+
id,
|
|
80
|
+
error: {
|
|
81
|
+
code: -32603,
|
|
82
|
+
message: message_text,
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|