@agllama/mcp 0.6.17 → 0.6.19

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.
@@ -0,0 +1,470 @@
1
+ import { z } from 'zod';
2
+ import { getApiClient, LlamaApiError } from '../api-client.js';
3
+ import { getSessionDefaults } from './session.js';
4
+ function promptResult(p) {
5
+ return {
6
+ id: p.id,
7
+ name: p.name,
8
+ description: p.description,
9
+ scope: p.scope,
10
+ folder: p.folder,
11
+ sourcePromptId: p.sourcePromptId,
12
+ updatedAt: p.updatedAt,
13
+ };
14
+ }
15
+ // ============================================
16
+ // llama_run_prompt
17
+ // ============================================
18
+ export const runPromptToolName = 'llama_run_prompt';
19
+ export const runPromptToolDescription = `Fetch a prompt from the Prompt Library and return its markdown content.
20
+
21
+ Provide either \`promptId\` (UUID) or \`name\`. When both are provided, \`promptId\` wins. When only \`name\` is given the server resolves it with priority personal > project > organization within the session's org/project context.
22
+
23
+ The returned \`content\` field is a markdown prompt that you should begin following immediately as instructions.`;
24
+ export const runPromptToolSchema = z.object({
25
+ orgSlug: z.string().optional().describe('Organization slug (session default)'),
26
+ projectKey: z.string().optional().describe('Project key (session default). Used for name resolution when only name is provided.'),
27
+ promptId: z.string().uuid().optional().describe('Prompt UUID'),
28
+ name: z.string().optional().describe('Prompt name to resolve against the session org/project'),
29
+ });
30
+ export async function executeRunPrompt(input) {
31
+ try {
32
+ if (!input.promptId && !input.name) {
33
+ return JSON.stringify({
34
+ success: false,
35
+ error: 'At least one of promptId or name is required',
36
+ });
37
+ }
38
+ const session = await getSessionDefaults();
39
+ const orgSlug = input.orgSlug ?? session?.orgSlug;
40
+ const projectKey = input.projectKey ?? session?.projectKey;
41
+ if (!orgSlug) {
42
+ return JSON.stringify({
43
+ success: false,
44
+ error: 'orgSlug is required. Either provide it or set session context with llama_set_context first.',
45
+ });
46
+ }
47
+ const client = getApiClient();
48
+ // Resolve by id first
49
+ if (input.promptId) {
50
+ const prompt = await client.getPrompt(orgSlug, input.promptId, projectKey);
51
+ return JSON.stringify({
52
+ success: true,
53
+ prompt: {
54
+ id: prompt.id,
55
+ name: prompt.name,
56
+ description: prompt.description,
57
+ scope: prompt.scope,
58
+ folder: prompt.folder,
59
+ sourcePromptId: prompt.sourcePromptId,
60
+ content: prompt.content,
61
+ },
62
+ }, null, 2);
63
+ }
64
+ // Resolve by name: list prompts in the current scope and pick by priority personal > project > org
65
+ const prompts = projectKey
66
+ ? await client.listProjectPrompts(orgSlug, projectKey)
67
+ : await client.listOrgPrompts(orgSlug);
68
+ const matches = prompts.filter((p) => p.name === input.name);
69
+ if (matches.length === 0) {
70
+ return JSON.stringify({
71
+ success: false,
72
+ error: `No prompt found with name "${input.name}" in the current scope.`,
73
+ });
74
+ }
75
+ const priority = { personal: 0, project: 1, organization: 2 };
76
+ matches.sort((a, b) => priority[a.scope] - priority[b.scope]);
77
+ const winner = matches[0];
78
+ // Summary list omits content. Fetch the detail to get it.
79
+ const detail = await client.getPrompt(orgSlug, winner.id, projectKey);
80
+ return JSON.stringify({
81
+ success: true,
82
+ prompt: {
83
+ id: detail.id,
84
+ name: detail.name,
85
+ description: detail.description,
86
+ scope: detail.scope,
87
+ folder: detail.folder,
88
+ sourcePromptId: detail.sourcePromptId,
89
+ content: detail.content,
90
+ },
91
+ resolution: {
92
+ searchedBy: 'name',
93
+ matchedScope: winner.scope,
94
+ candidateCount: matches.length,
95
+ },
96
+ }, null, 2);
97
+ }
98
+ catch (error) {
99
+ if (error instanceof LlamaApiError) {
100
+ return JSON.stringify({
101
+ success: false,
102
+ error: `Failed to run prompt: ${error.message}`,
103
+ statusCode: error.statusCode,
104
+ });
105
+ }
106
+ return JSON.stringify({
107
+ success: false,
108
+ error: error instanceof Error ? error.message : 'Unknown error',
109
+ });
110
+ }
111
+ }
112
+ // ============================================
113
+ // llama_list_prompts
114
+ // ============================================
115
+ export const listPromptsToolName = 'llama_list_prompts';
116
+ export const listPromptsToolDescription = `List prompts visible in the current org/project scope. Returns summary objects without prompt body; call \`llama_run_prompt\` to fetch content.`;
117
+ export const listPromptsToolSchema = z.object({
118
+ orgSlug: z.string().optional().describe('Organization slug (session default)'),
119
+ projectKey: z.string().optional().describe('Project key (session default)'),
120
+ scope: z
121
+ .enum(['organization', 'project', 'personal'])
122
+ .optional()
123
+ .describe('Filter by scope. Omit to see everything visible.'),
124
+ folderId: z.string().uuid().optional().describe('Filter by folder id'),
125
+ search: z.string().optional().describe('Case-insensitive substring match against name or description'),
126
+ includeHidden: z
127
+ .preprocess((val) => (typeof val === 'string' ? val.toLowerCase() === 'true' : val), z.boolean())
128
+ .optional()
129
+ .describe('Include prompts the caller has hidden (default: false)'),
130
+ });
131
+ export async function executeListPrompts(input) {
132
+ try {
133
+ const session = await getSessionDefaults();
134
+ const orgSlug = input.orgSlug ?? session?.orgSlug;
135
+ const projectKey = input.projectKey ?? session?.projectKey;
136
+ if (!orgSlug) {
137
+ return JSON.stringify({
138
+ success: false,
139
+ error: 'orgSlug is required. Either provide it or set session context with llama_set_context first.',
140
+ });
141
+ }
142
+ const client = getApiClient();
143
+ const raw = projectKey
144
+ ? await client.listProjectPrompts(orgSlug, projectKey, input.includeHidden)
145
+ : await client.listOrgPrompts(orgSlug, input.includeHidden);
146
+ let prompts = raw;
147
+ if (input.scope)
148
+ prompts = prompts.filter((p) => p.scope === input.scope);
149
+ if (input.folderId)
150
+ prompts = prompts.filter((p) => p.folderId === input.folderId);
151
+ if (input.search) {
152
+ const needle = input.search.toLowerCase();
153
+ prompts = prompts.filter((p) => p.name.toLowerCase().includes(needle) ||
154
+ (p.description ?? '').toLowerCase().includes(needle));
155
+ }
156
+ return JSON.stringify({
157
+ success: true,
158
+ count: prompts.length,
159
+ prompts: prompts.map((p) => ({
160
+ id: p.id,
161
+ name: p.name,
162
+ description: p.description,
163
+ scope: p.scope,
164
+ folder: p.folder,
165
+ sourcePromptId: p.sourcePromptId,
166
+ updatedAt: p.updatedAt,
167
+ ...(input.includeHidden && { isHidden: p.isHidden, hideScope: p.hideScope }),
168
+ })),
169
+ }, null, 2);
170
+ }
171
+ catch (error) {
172
+ if (error instanceof LlamaApiError) {
173
+ return JSON.stringify({
174
+ success: false,
175
+ error: `Failed to list prompts: ${error.message}`,
176
+ statusCode: error.statusCode,
177
+ });
178
+ }
179
+ return JSON.stringify({
180
+ success: false,
181
+ error: error instanceof Error ? error.message : 'Unknown error',
182
+ });
183
+ }
184
+ }
185
+ // ============================================
186
+ // llama_create_prompt
187
+ // ============================================
188
+ export const createPromptToolName = 'llama_create_prompt';
189
+ export const createPromptToolDescription = `Create a new prompt in the Prompt Library.
190
+
191
+ Scope: "organization" writes to the org library; "project" writes to the session project library (requires projectKey in session); "personal" creates a prompt visible only to the calling user.`;
192
+ export const createPromptToolSchema = z.object({
193
+ orgSlug: z.string().optional().describe('Organization slug (session default)'),
194
+ projectKey: z.string().optional().describe('Project key (session default). Required for scope="project".'),
195
+ scope: z.enum(['organization', 'project', 'personal']).describe('Where the prompt lives'),
196
+ name: z.string().min(1).max(120).describe('Prompt name'),
197
+ description: z.string().max(500).optional().describe('Short description'),
198
+ content: z.string().min(1).max(100_000).describe('Markdown prompt body'),
199
+ folderId: z.string().uuid().optional().describe('Folder id (must match scope)'),
200
+ sourcePromptId: z.string().uuid().optional().describe('Source prompt id if this is a copy'),
201
+ });
202
+ export async function executeCreatePrompt(input) {
203
+ try {
204
+ const session = await getSessionDefaults();
205
+ const orgSlug = input.orgSlug ?? session?.orgSlug;
206
+ const projectKey = input.projectKey ?? session?.projectKey;
207
+ if (!orgSlug) {
208
+ return JSON.stringify({
209
+ success: false,
210
+ error: 'orgSlug is required. Either provide it or set session context with llama_set_context first.',
211
+ });
212
+ }
213
+ if (input.scope === 'project' && !projectKey) {
214
+ return JSON.stringify({
215
+ success: false,
216
+ error: 'projectKey is required for scope="project". Either provide it or set it via llama_set_context.',
217
+ });
218
+ }
219
+ const client = getApiClient();
220
+ const body = {
221
+ name: input.name,
222
+ description: input.description ?? null,
223
+ content: input.content,
224
+ folderId: input.folderId ?? null,
225
+ sourcePromptId: input.sourcePromptId ?? null,
226
+ };
227
+ let prompt;
228
+ if (input.scope === 'organization') {
229
+ prompt = await client.createOrgPrompt(orgSlug, body);
230
+ }
231
+ else if (input.scope === 'project') {
232
+ prompt = await client.createProjectPrompt(orgSlug, projectKey, body);
233
+ }
234
+ else {
235
+ prompt = await client.createPersonalPrompt(orgSlug, body, projectKey);
236
+ }
237
+ return JSON.stringify({
238
+ success: true,
239
+ message: `Prompt "${prompt.name}" created`,
240
+ prompt: promptResult(prompt),
241
+ }, null, 2);
242
+ }
243
+ catch (error) {
244
+ if (error instanceof LlamaApiError) {
245
+ return JSON.stringify({
246
+ success: false,
247
+ error: `Failed to create prompt: ${error.message}`,
248
+ statusCode: error.statusCode,
249
+ });
250
+ }
251
+ return JSON.stringify({
252
+ success: false,
253
+ error: error instanceof Error ? error.message : 'Unknown error',
254
+ });
255
+ }
256
+ }
257
+ // ============================================
258
+ // llama_update_prompt
259
+ // ============================================
260
+ export const updatePromptToolName = 'llama_update_prompt';
261
+ export const updatePromptToolDescription = `Update an existing prompt. Partial update — only fields you pass are changed.`;
262
+ // Note: `description` and `folderId` use `.nullish()` (rather than
263
+ // `.optional().nullable()`) so zod-to-json-schema emits a proper optional key
264
+ // — `.optional().nullable()` marks the key as required in the JSON schema
265
+ // even though the TS type is optional, which forces MCP callers to pass
266
+ // explicit nulls for every update.
267
+ export const updatePromptToolSchema = z.object({
268
+ orgSlug: z.string().optional().describe('Organization slug (session default)'),
269
+ projectKey: z.string().optional().describe('Project key (session default). Used when the prompt lives in a project.'),
270
+ promptId: z.string().uuid().describe('Prompt UUID'),
271
+ name: z.string().min(1).max(120).optional(),
272
+ description: z.string().max(500).nullish(),
273
+ content: z.string().min(1).max(100_000).optional(),
274
+ folderId: z.string().uuid().nullish(),
275
+ });
276
+ export async function executeUpdatePrompt(input) {
277
+ try {
278
+ const session = await getSessionDefaults();
279
+ const orgSlug = input.orgSlug ?? session?.orgSlug;
280
+ const projectKey = input.projectKey ?? session?.projectKey;
281
+ if (!orgSlug) {
282
+ return JSON.stringify({
283
+ success: false,
284
+ error: 'orgSlug is required. Either provide it or set session context with llama_set_context first.',
285
+ });
286
+ }
287
+ const client = getApiClient();
288
+ const patch = {};
289
+ if (input.name !== undefined)
290
+ patch.name = input.name;
291
+ if (input.description !== undefined)
292
+ patch.description = input.description;
293
+ if (input.content !== undefined)
294
+ patch.content = input.content;
295
+ if (input.folderId !== undefined)
296
+ patch.folderId = input.folderId;
297
+ const prompt = await client.updatePrompt(orgSlug, input.promptId, patch, projectKey);
298
+ return JSON.stringify({
299
+ success: true,
300
+ message: `Prompt "${prompt.name}" updated`,
301
+ prompt: promptResult(prompt),
302
+ }, null, 2);
303
+ }
304
+ catch (error) {
305
+ if (error instanceof LlamaApiError) {
306
+ return JSON.stringify({
307
+ success: false,
308
+ error: `Failed to update prompt: ${error.message}`,
309
+ statusCode: error.statusCode,
310
+ });
311
+ }
312
+ return JSON.stringify({
313
+ success: false,
314
+ error: error instanceof Error ? error.message : 'Unknown error',
315
+ });
316
+ }
317
+ }
318
+ // ============================================
319
+ // llama_delete_prompt
320
+ // ============================================
321
+ export const deletePromptToolName = 'llama_delete_prompt';
322
+ export const deletePromptToolDescription = `Soft-delete a prompt (sets deletedAt; can be restored with a direct DB query if needed).`;
323
+ export const deletePromptToolSchema = z.object({
324
+ orgSlug: z.string().optional().describe('Organization slug (session default)'),
325
+ projectKey: z.string().optional().describe('Project key (session default). Used when the prompt lives in a project.'),
326
+ promptId: z.string().uuid().describe('Prompt UUID'),
327
+ });
328
+ export async function executeDeletePrompt(input) {
329
+ try {
330
+ const session = await getSessionDefaults();
331
+ const orgSlug = input.orgSlug ?? session?.orgSlug;
332
+ const projectKey = input.projectKey ?? session?.projectKey;
333
+ if (!orgSlug) {
334
+ return JSON.stringify({
335
+ success: false,
336
+ error: 'orgSlug is required. Either provide it or set session context with llama_set_context first.',
337
+ });
338
+ }
339
+ const client = getApiClient();
340
+ await client.deletePrompt(orgSlug, input.promptId, projectKey);
341
+ return JSON.stringify({ success: true, deleted: true, promptId: input.promptId });
342
+ }
343
+ catch (error) {
344
+ if (error instanceof LlamaApiError) {
345
+ return JSON.stringify({
346
+ success: false,
347
+ error: `Failed to delete prompt: ${error.message}`,
348
+ statusCode: error.statusCode,
349
+ });
350
+ }
351
+ return JSON.stringify({
352
+ success: false,
353
+ error: error instanceof Error ? error.message : 'Unknown error',
354
+ });
355
+ }
356
+ }
357
+ // ============================================
358
+ // llama_manage_prompt_folder
359
+ // ============================================
360
+ export const managePromptFolderToolName = 'llama_manage_prompt_folder';
361
+ export const managePromptFolderToolDescription = `Manage prompt folders: create, rename, delete, or list.
362
+
363
+ Actions:
364
+ - "list" — list folders in current scope (defaults to project if set, else org)
365
+ - "create" — requires scope ("organization"|"project"|"personal") and name
366
+ - "rename" — requires folderId and name
367
+ - "delete" — requires folderId (prompts in the folder are preserved; their folderId is nulled)`;
368
+ export const managePromptFolderToolSchema = z.object({
369
+ orgSlug: z.string().optional().describe('Organization slug (session default)'),
370
+ projectKey: z.string().optional().describe('Project key (session default)'),
371
+ action: z.enum(['list', 'create', 'rename', 'delete']).describe('Action to perform'),
372
+ scope: z.enum(['organization', 'project', 'personal']).optional().describe('Required for create'),
373
+ folderId: z.string().uuid().optional().describe('Required for rename/delete'),
374
+ name: z.string().min(1).max(80).optional().describe('Required for create/rename'),
375
+ });
376
+ export async function executeManagePromptFolder(input) {
377
+ try {
378
+ const session = await getSessionDefaults();
379
+ const orgSlug = input.orgSlug ?? session?.orgSlug;
380
+ const projectKey = input.projectKey ?? session?.projectKey;
381
+ if (!orgSlug) {
382
+ return JSON.stringify({
383
+ success: false,
384
+ error: 'orgSlug is required. Either provide it or set session context with llama_set_context first.',
385
+ });
386
+ }
387
+ const client = getApiClient();
388
+ if (input.action === 'list') {
389
+ const folders = projectKey
390
+ ? await client.listProjectPromptFolders(orgSlug, projectKey)
391
+ : await client.listOrgPromptFolders(orgSlug);
392
+ return JSON.stringify({
393
+ success: true,
394
+ count: folders.length,
395
+ folders: folders.map(summariseFolder),
396
+ }, null, 2);
397
+ }
398
+ if (input.action === 'create') {
399
+ if (!input.scope) {
400
+ return JSON.stringify({ success: false, error: 'scope is required for create' });
401
+ }
402
+ if (!input.name) {
403
+ return JSON.stringify({ success: false, error: 'name is required for create' });
404
+ }
405
+ let folder;
406
+ if (input.scope === 'project') {
407
+ if (!projectKey) {
408
+ return JSON.stringify({
409
+ success: false,
410
+ error: 'projectKey is required for scope="project"',
411
+ });
412
+ }
413
+ folder = await client.createProjectPromptFolder(orgSlug, projectKey, { name: input.name });
414
+ }
415
+ else if (input.scope === 'organization') {
416
+ folder = await client.createOrgPromptFolder(orgSlug, {
417
+ scope: 'organization',
418
+ name: input.name,
419
+ });
420
+ }
421
+ else {
422
+ folder = await client.createOrgPromptFolder(orgSlug, {
423
+ scope: 'personal',
424
+ name: input.name,
425
+ });
426
+ }
427
+ return JSON.stringify({ success: true, message: `Folder "${folder.name}" created`, folder: summariseFolder(folder) }, null, 2);
428
+ }
429
+ if (input.action === 'rename') {
430
+ if (!input.folderId) {
431
+ return JSON.stringify({ success: false, error: 'folderId is required for rename' });
432
+ }
433
+ if (!input.name) {
434
+ return JSON.stringify({ success: false, error: 'name is required for rename' });
435
+ }
436
+ const folder = await client.renamePromptFolder(orgSlug, input.folderId, { name: input.name }, projectKey);
437
+ return JSON.stringify({ success: true, message: `Folder renamed to "${folder.name}"`, folder: summariseFolder(folder) }, null, 2);
438
+ }
439
+ if (input.action === 'delete') {
440
+ if (!input.folderId) {
441
+ return JSON.stringify({ success: false, error: 'folderId is required for delete' });
442
+ }
443
+ await client.deletePromptFolder(orgSlug, input.folderId, projectKey);
444
+ return JSON.stringify({ success: true, deleted: true, folderId: input.folderId });
445
+ }
446
+ return JSON.stringify({ success: false, error: `Unknown action: ${String(input.action)}` });
447
+ }
448
+ catch (error) {
449
+ if (error instanceof LlamaApiError) {
450
+ return JSON.stringify({
451
+ success: false,
452
+ error: `Failed to manage prompt folder: ${error.message}`,
453
+ statusCode: error.statusCode,
454
+ });
455
+ }
456
+ return JSON.stringify({
457
+ success: false,
458
+ error: error instanceof Error ? error.message : 'Unknown error',
459
+ });
460
+ }
461
+ }
462
+ function summariseFolder(folder) {
463
+ return {
464
+ id: folder.id,
465
+ name: folder.name,
466
+ scope: folder.scope,
467
+ updatedAt: folder.updatedAt,
468
+ };
469
+ }
470
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/tools/prompts.ts"],"names":[],"mappings":"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"}