@artyfacts/mcp-server 1.0.4 → 1.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/dist/chunk-NUVCJMET.js +600 -0
- package/dist/chunk-XLUIPOCO.js +605 -0
- package/dist/index.cjs +58 -32
- package/dist/index.js +1 -1
- package/dist/server.cjs +58 -32
- package/dist/server.js +1 -1
- package/package.json +1 -1
- package/src/server.ts +60 -34
package/dist/index.cjs
CHANGED
|
@@ -238,6 +238,23 @@ var ARTYFACTS_TOOLS = [
|
|
|
238
238
|
required: ["task_id", "reason"]
|
|
239
239
|
}
|
|
240
240
|
},
|
|
241
|
+
{
|
|
242
|
+
name: "create_task",
|
|
243
|
+
description: "Create a new task under a goal. Use this to create actionable tasks \u2014 NOT create_artifact or create_section.",
|
|
244
|
+
inputSchema: {
|
|
245
|
+
type: "object",
|
|
246
|
+
properties: {
|
|
247
|
+
goal_id: { type: "string", description: "The goal UUID this task belongs to (required)" },
|
|
248
|
+
title: { type: "string", description: "Task title" },
|
|
249
|
+
description: { type: "string", description: "Task description / what needs to be done" },
|
|
250
|
+
priority: { type: "string", description: "Priority: low, medium, high, urgent" },
|
|
251
|
+
assigned_to: { type: "string", description: "Agent UUID to assign the task to" },
|
|
252
|
+
depends_on: { type: "array", items: { type: "string" }, description: "List of task UUIDs this task depends on" },
|
|
253
|
+
estimated_minutes: { type: "number", description: "Estimated time in minutes" }
|
|
254
|
+
},
|
|
255
|
+
required: ["goal_id", "title"]
|
|
256
|
+
}
|
|
257
|
+
},
|
|
241
258
|
// Agent tools
|
|
242
259
|
{
|
|
243
260
|
name: "list_agents",
|
|
@@ -300,46 +317,50 @@ var ARTYFACTS_TOOLS = [
|
|
|
300
317
|
required: ["agent_id"]
|
|
301
318
|
}
|
|
302
319
|
},
|
|
303
|
-
//
|
|
320
|
+
// Inbox tools (human-in-the-loop)
|
|
304
321
|
{
|
|
305
|
-
name: "
|
|
306
|
-
description: "
|
|
322
|
+
name: "create_inbox_item",
|
|
323
|
+
description: "Request human approval, a decision, or an answer before proceeding. Automatically blocks the task. Use for agent creation, risky actions, or anything requiring human sign-off.",
|
|
307
324
|
inputSchema: {
|
|
308
325
|
type: "object",
|
|
309
326
|
properties: {
|
|
310
|
-
|
|
311
|
-
|
|
327
|
+
task_id: { type: "string", description: "UUID of the task being blocked (required)" },
|
|
328
|
+
type: { type: "string", description: "Type: approval, decision, question" },
|
|
329
|
+
title: { type: "string", description: "Short summary shown to the human in the inbox" },
|
|
330
|
+
content: { type: "string", description: "Full context and details for the human" },
|
|
331
|
+
action: { type: "string", description: "Action to auto-execute if approved (e.g. agent.create)" },
|
|
332
|
+
action_payload: { type: "object", description: "Data for the action (e.g. full agent spec for agent.create)" },
|
|
333
|
+
options: { type: "array", description: "Options for decision type: [{id, label, description}]" }
|
|
312
334
|
},
|
|
313
|
-
required: []
|
|
335
|
+
required: ["task_id", "type", "title"]
|
|
314
336
|
}
|
|
315
337
|
},
|
|
316
338
|
{
|
|
317
|
-
name: "
|
|
318
|
-
description: "
|
|
339
|
+
name: "list_inbox",
|
|
340
|
+
description: "List pending inbox items (approvals, decisions, questions) waiting for human resolution.",
|
|
319
341
|
inputSchema: {
|
|
320
342
|
type: "object",
|
|
321
343
|
properties: {
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
description: { type: "string", description: "Details" },
|
|
326
|
-
options: { type: "array", description: "Options for decisions" },
|
|
327
|
-
blocked_tasks: { type: "array", items: { type: "string" }, description: "Task IDs blocked by this" }
|
|
344
|
+
status: { type: "string", description: "Filter by status: pending (default), resolved" },
|
|
345
|
+
type: { type: "string", description: "Filter by type: approval, decision, question" },
|
|
346
|
+
limit: { type: "number", description: "Max results (default 50)" }
|
|
328
347
|
},
|
|
329
|
-
required: [
|
|
348
|
+
required: []
|
|
330
349
|
}
|
|
331
350
|
},
|
|
332
351
|
{
|
|
333
|
-
name: "
|
|
334
|
-
description: "Resolve
|
|
352
|
+
name: "resolve_inbox",
|
|
353
|
+
description: "Resolve an inbox item from the agent side. Humans resolve via the UI \u2014 only use this for automated resolution.",
|
|
335
354
|
inputSchema: {
|
|
336
355
|
type: "object",
|
|
337
356
|
properties: {
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
357
|
+
item_id: { type: "string", description: "Inbox item UUID" },
|
|
358
|
+
approved: { type: "boolean", description: "For approvals: true to approve, false to deny" },
|
|
359
|
+
chosen_option: { type: "string", description: "For decisions: the selected option ID" },
|
|
360
|
+
answer: { type: "string", description: "For questions: the answer text" },
|
|
361
|
+
notes: { type: "string", description: "Optional notes" }
|
|
341
362
|
},
|
|
342
|
-
required: ["
|
|
363
|
+
required: ["item_id"]
|
|
343
364
|
}
|
|
344
365
|
},
|
|
345
366
|
// Search tools
|
|
@@ -479,6 +500,10 @@ var toolHandlers = {
|
|
|
479
500
|
const { task_id, ...body } = args;
|
|
480
501
|
return client.post(`/tasks/${task_id}/block`, body);
|
|
481
502
|
},
|
|
503
|
+
create_task: (client, args) => {
|
|
504
|
+
const { goal_id, title, description, priority, assigned_to, depends_on, estimated_minutes } = args;
|
|
505
|
+
return client.post("/tasks", { goal_id, title, description, priority, assigned_to, depends_on, estimated_minutes });
|
|
506
|
+
},
|
|
482
507
|
// Agents
|
|
483
508
|
list_agents: (client, args) => {
|
|
484
509
|
const params = new URLSearchParams();
|
|
@@ -505,20 +530,21 @@ var toolHandlers = {
|
|
|
505
530
|
const { agent_id, ...body } = args;
|
|
506
531
|
return client.patch(`/agents/${agent_id}`, body);
|
|
507
532
|
},
|
|
508
|
-
//
|
|
509
|
-
|
|
533
|
+
// Inbox (human-in-the-loop)
|
|
534
|
+
create_inbox_item: (client, args) => {
|
|
535
|
+
const { task_id, type, title, content, action, action_payload, options } = args;
|
|
536
|
+
return client.post("/inbox", { task_id, type, title, content, action, action_payload, options });
|
|
537
|
+
},
|
|
538
|
+
list_inbox: (client, args) => {
|
|
510
539
|
const params = new URLSearchParams();
|
|
511
|
-
if (args.artifact_id) params.set("artifact_id", String(args.artifact_id));
|
|
512
540
|
if (args.status) params.set("status", String(args.status));
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
const { artifact_id, ...body } = args;
|
|
517
|
-
return client.post(`/artifacts/${artifact_id}/blockers`, body);
|
|
541
|
+
if (args.type) params.set("type", String(args.type));
|
|
542
|
+
if (args.limit) params.set("limit", String(args.limit));
|
|
543
|
+
return client.get(`/inbox?${params}`);
|
|
518
544
|
},
|
|
519
|
-
|
|
520
|
-
const {
|
|
521
|
-
return client.post(`/
|
|
545
|
+
resolve_inbox: (client, args) => {
|
|
546
|
+
const { item_id, ...body } = args;
|
|
547
|
+
return client.post(`/inbox/${item_id}/resolve`, body);
|
|
522
548
|
},
|
|
523
549
|
// Search
|
|
524
550
|
search_artifacts: (client, args) => {
|
package/dist/index.js
CHANGED
package/dist/server.cjs
CHANGED
|
@@ -236,6 +236,23 @@ var ARTYFACTS_TOOLS = [
|
|
|
236
236
|
required: ["task_id", "reason"]
|
|
237
237
|
}
|
|
238
238
|
},
|
|
239
|
+
{
|
|
240
|
+
name: "create_task",
|
|
241
|
+
description: "Create a new task under a goal. Use this to create actionable tasks \u2014 NOT create_artifact or create_section.",
|
|
242
|
+
inputSchema: {
|
|
243
|
+
type: "object",
|
|
244
|
+
properties: {
|
|
245
|
+
goal_id: { type: "string", description: "The goal UUID this task belongs to (required)" },
|
|
246
|
+
title: { type: "string", description: "Task title" },
|
|
247
|
+
description: { type: "string", description: "Task description / what needs to be done" },
|
|
248
|
+
priority: { type: "string", description: "Priority: low, medium, high, urgent" },
|
|
249
|
+
assigned_to: { type: "string", description: "Agent UUID to assign the task to" },
|
|
250
|
+
depends_on: { type: "array", items: { type: "string" }, description: "List of task UUIDs this task depends on" },
|
|
251
|
+
estimated_minutes: { type: "number", description: "Estimated time in minutes" }
|
|
252
|
+
},
|
|
253
|
+
required: ["goal_id", "title"]
|
|
254
|
+
}
|
|
255
|
+
},
|
|
239
256
|
// Agent tools
|
|
240
257
|
{
|
|
241
258
|
name: "list_agents",
|
|
@@ -298,46 +315,50 @@ var ARTYFACTS_TOOLS = [
|
|
|
298
315
|
required: ["agent_id"]
|
|
299
316
|
}
|
|
300
317
|
},
|
|
301
|
-
//
|
|
318
|
+
// Inbox tools (human-in-the-loop)
|
|
302
319
|
{
|
|
303
|
-
name: "
|
|
304
|
-
description: "
|
|
320
|
+
name: "create_inbox_item",
|
|
321
|
+
description: "Request human approval, a decision, or an answer before proceeding. Automatically blocks the task. Use for agent creation, risky actions, or anything requiring human sign-off.",
|
|
305
322
|
inputSchema: {
|
|
306
323
|
type: "object",
|
|
307
324
|
properties: {
|
|
308
|
-
|
|
309
|
-
|
|
325
|
+
task_id: { type: "string", description: "UUID of the task being blocked (required)" },
|
|
326
|
+
type: { type: "string", description: "Type: approval, decision, question" },
|
|
327
|
+
title: { type: "string", description: "Short summary shown to the human in the inbox" },
|
|
328
|
+
content: { type: "string", description: "Full context and details for the human" },
|
|
329
|
+
action: { type: "string", description: "Action to auto-execute if approved (e.g. agent.create)" },
|
|
330
|
+
action_payload: { type: "object", description: "Data for the action (e.g. full agent spec for agent.create)" },
|
|
331
|
+
options: { type: "array", description: "Options for decision type: [{id, label, description}]" }
|
|
310
332
|
},
|
|
311
|
-
required: []
|
|
333
|
+
required: ["task_id", "type", "title"]
|
|
312
334
|
}
|
|
313
335
|
},
|
|
314
336
|
{
|
|
315
|
-
name: "
|
|
316
|
-
description: "
|
|
337
|
+
name: "list_inbox",
|
|
338
|
+
description: "List pending inbox items (approvals, decisions, questions) waiting for human resolution.",
|
|
317
339
|
inputSchema: {
|
|
318
340
|
type: "object",
|
|
319
341
|
properties: {
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
description: { type: "string", description: "Details" },
|
|
324
|
-
options: { type: "array", description: "Options for decisions" },
|
|
325
|
-
blocked_tasks: { type: "array", items: { type: "string" }, description: "Task IDs blocked by this" }
|
|
342
|
+
status: { type: "string", description: "Filter by status: pending (default), resolved" },
|
|
343
|
+
type: { type: "string", description: "Filter by type: approval, decision, question" },
|
|
344
|
+
limit: { type: "number", description: "Max results (default 50)" }
|
|
326
345
|
},
|
|
327
|
-
required: [
|
|
346
|
+
required: []
|
|
328
347
|
}
|
|
329
348
|
},
|
|
330
349
|
{
|
|
331
|
-
name: "
|
|
332
|
-
description: "Resolve
|
|
350
|
+
name: "resolve_inbox",
|
|
351
|
+
description: "Resolve an inbox item from the agent side. Humans resolve via the UI \u2014 only use this for automated resolution.",
|
|
333
352
|
inputSchema: {
|
|
334
353
|
type: "object",
|
|
335
354
|
properties: {
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
355
|
+
item_id: { type: "string", description: "Inbox item UUID" },
|
|
356
|
+
approved: { type: "boolean", description: "For approvals: true to approve, false to deny" },
|
|
357
|
+
chosen_option: { type: "string", description: "For decisions: the selected option ID" },
|
|
358
|
+
answer: { type: "string", description: "For questions: the answer text" },
|
|
359
|
+
notes: { type: "string", description: "Optional notes" }
|
|
339
360
|
},
|
|
340
|
-
required: ["
|
|
361
|
+
required: ["item_id"]
|
|
341
362
|
}
|
|
342
363
|
},
|
|
343
364
|
// Search tools
|
|
@@ -477,6 +498,10 @@ var toolHandlers = {
|
|
|
477
498
|
const { task_id, ...body } = args;
|
|
478
499
|
return client.post(`/tasks/${task_id}/block`, body);
|
|
479
500
|
},
|
|
501
|
+
create_task: (client, args) => {
|
|
502
|
+
const { goal_id, title, description, priority, assigned_to, depends_on, estimated_minutes } = args;
|
|
503
|
+
return client.post("/tasks", { goal_id, title, description, priority, assigned_to, depends_on, estimated_minutes });
|
|
504
|
+
},
|
|
480
505
|
// Agents
|
|
481
506
|
list_agents: (client, args) => {
|
|
482
507
|
const params = new URLSearchParams();
|
|
@@ -503,20 +528,21 @@ var toolHandlers = {
|
|
|
503
528
|
const { agent_id, ...body } = args;
|
|
504
529
|
return client.patch(`/agents/${agent_id}`, body);
|
|
505
530
|
},
|
|
506
|
-
//
|
|
507
|
-
|
|
531
|
+
// Inbox (human-in-the-loop)
|
|
532
|
+
create_inbox_item: (client, args) => {
|
|
533
|
+
const { task_id, type, title, content, action, action_payload, options } = args;
|
|
534
|
+
return client.post("/inbox", { task_id, type, title, content, action, action_payload, options });
|
|
535
|
+
},
|
|
536
|
+
list_inbox: (client, args) => {
|
|
508
537
|
const params = new URLSearchParams();
|
|
509
|
-
if (args.artifact_id) params.set("artifact_id", String(args.artifact_id));
|
|
510
538
|
if (args.status) params.set("status", String(args.status));
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
const { artifact_id, ...body } = args;
|
|
515
|
-
return client.post(`/artifacts/${artifact_id}/blockers`, body);
|
|
539
|
+
if (args.type) params.set("type", String(args.type));
|
|
540
|
+
if (args.limit) params.set("limit", String(args.limit));
|
|
541
|
+
return client.get(`/inbox?${params}`);
|
|
516
542
|
},
|
|
517
|
-
|
|
518
|
-
const {
|
|
519
|
-
return client.post(`/
|
|
543
|
+
resolve_inbox: (client, args) => {
|
|
544
|
+
const { item_id, ...body } = args;
|
|
545
|
+
return client.post(`/inbox/${item_id}/resolve`, body);
|
|
520
546
|
},
|
|
521
547
|
// Search
|
|
522
548
|
search_artifacts: (client, args) => {
|
package/dist/server.js
CHANGED
package/package.json
CHANGED
package/src/server.ts
CHANGED
|
@@ -244,7 +244,24 @@ const ARTYFACTS_TOOLS: Tool[] = [
|
|
|
244
244
|
required: ['task_id', 'reason'],
|
|
245
245
|
},
|
|
246
246
|
},
|
|
247
|
-
|
|
247
|
+
{
|
|
248
|
+
name: 'create_task',
|
|
249
|
+
description: 'Create a new task under a goal. Use this to create actionable tasks — NOT create_artifact or create_section.',
|
|
250
|
+
inputSchema: {
|
|
251
|
+
type: 'object',
|
|
252
|
+
properties: {
|
|
253
|
+
goal_id: { type: 'string', description: 'The goal UUID this task belongs to (required)' },
|
|
254
|
+
title: { type: 'string', description: 'Task title' },
|
|
255
|
+
description: { type: 'string', description: 'Task description / what needs to be done' },
|
|
256
|
+
priority: { type: 'string', description: 'Priority: low, medium, high, urgent' },
|
|
257
|
+
assigned_to: { type: 'string', description: 'Agent UUID to assign the task to' },
|
|
258
|
+
depends_on: { type: 'array', items: { type: 'string' }, description: 'List of task UUIDs this task depends on' },
|
|
259
|
+
estimated_minutes: { type: 'number', description: 'Estimated time in minutes' },
|
|
260
|
+
},
|
|
261
|
+
required: ['goal_id', 'title'],
|
|
262
|
+
},
|
|
263
|
+
},
|
|
264
|
+
|
|
248
265
|
// Agent tools
|
|
249
266
|
{
|
|
250
267
|
name: 'list_agents',
|
|
@@ -308,46 +325,50 @@ const ARTYFACTS_TOOLS: Tool[] = [
|
|
|
308
325
|
},
|
|
309
326
|
},
|
|
310
327
|
|
|
311
|
-
//
|
|
328
|
+
// Inbox tools (human-in-the-loop)
|
|
312
329
|
{
|
|
313
|
-
name: '
|
|
314
|
-
description: '
|
|
330
|
+
name: 'create_inbox_item',
|
|
331
|
+
description: 'Request human approval, a decision, or an answer before proceeding. Automatically blocks the task. Use for agent creation, risky actions, or anything requiring human sign-off.',
|
|
315
332
|
inputSchema: {
|
|
316
333
|
type: 'object',
|
|
317
334
|
properties: {
|
|
318
|
-
|
|
319
|
-
|
|
335
|
+
task_id: { type: 'string', description: 'UUID of the task being blocked (required)' },
|
|
336
|
+
type: { type: 'string', description: 'Type: approval, decision, question' },
|
|
337
|
+
title: { type: 'string', description: 'Short summary shown to the human in the inbox' },
|
|
338
|
+
content: { type: 'string', description: 'Full context and details for the human' },
|
|
339
|
+
action: { type: 'string', description: 'Action to auto-execute if approved (e.g. agent.create)' },
|
|
340
|
+
action_payload: { type: 'object', description: 'Data for the action (e.g. full agent spec for agent.create)' },
|
|
341
|
+
options: { type: 'array', description: 'Options for decision type: [{id, label, description}]' },
|
|
320
342
|
},
|
|
321
|
-
required: [],
|
|
343
|
+
required: ['task_id', 'type', 'title'],
|
|
322
344
|
},
|
|
323
345
|
},
|
|
324
346
|
{
|
|
325
|
-
name: '
|
|
326
|
-
description: '
|
|
347
|
+
name: 'list_inbox',
|
|
348
|
+
description: 'List pending inbox items (approvals, decisions, questions) waiting for human resolution.',
|
|
327
349
|
inputSchema: {
|
|
328
350
|
type: 'object',
|
|
329
351
|
properties: {
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
description: { type: 'string', description: 'Details' },
|
|
334
|
-
options: { type: 'array', description: 'Options for decisions' },
|
|
335
|
-
blocked_tasks: { type: 'array', items: { type: 'string' }, description: 'Task IDs blocked by this' },
|
|
352
|
+
status: { type: 'string', description: 'Filter by status: pending (default), resolved' },
|
|
353
|
+
type: { type: 'string', description: 'Filter by type: approval, decision, question' },
|
|
354
|
+
limit: { type: 'number', description: 'Max results (default 50)' },
|
|
336
355
|
},
|
|
337
|
-
required: [
|
|
356
|
+
required: [],
|
|
338
357
|
},
|
|
339
358
|
},
|
|
340
359
|
{
|
|
341
|
-
name: '
|
|
342
|
-
description: 'Resolve
|
|
360
|
+
name: 'resolve_inbox',
|
|
361
|
+
description: 'Resolve an inbox item from the agent side. Humans resolve via the UI — only use this for automated resolution.',
|
|
343
362
|
inputSchema: {
|
|
344
363
|
type: 'object',
|
|
345
364
|
properties: {
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
365
|
+
item_id: { type: 'string', description: 'Inbox item UUID' },
|
|
366
|
+
approved: { type: 'boolean', description: 'For approvals: true to approve, false to deny' },
|
|
367
|
+
chosen_option: { type: 'string', description: 'For decisions: the selected option ID' },
|
|
368
|
+
answer: { type: 'string', description: 'For questions: the answer text' },
|
|
369
|
+
notes: { type: 'string', description: 'Optional notes' },
|
|
349
370
|
},
|
|
350
|
-
required: ['
|
|
371
|
+
required: ['item_id'],
|
|
351
372
|
},
|
|
352
373
|
},
|
|
353
374
|
|
|
@@ -504,7 +525,11 @@ const toolHandlers: Record<string, ToolHandler> = {
|
|
|
504
525
|
const { task_id, ...body } = args;
|
|
505
526
|
return client.post(`/tasks/${task_id}/block`, body);
|
|
506
527
|
},
|
|
507
|
-
|
|
528
|
+
create_task: (client, args) => {
|
|
529
|
+
const { goal_id, title, description, priority, assigned_to, depends_on, estimated_minutes } = args;
|
|
530
|
+
return client.post('/tasks', { goal_id, title, description, priority, assigned_to, depends_on, estimated_minutes });
|
|
531
|
+
},
|
|
532
|
+
|
|
508
533
|
// Agents
|
|
509
534
|
list_agents: (client, args) => {
|
|
510
535
|
const params = new URLSearchParams();
|
|
@@ -533,20 +558,21 @@ const toolHandlers: Record<string, ToolHandler> = {
|
|
|
533
558
|
return client.patch(`/agents/${agent_id}`, body);
|
|
534
559
|
},
|
|
535
560
|
|
|
536
|
-
//
|
|
537
|
-
|
|
561
|
+
// Inbox (human-in-the-loop)
|
|
562
|
+
create_inbox_item: (client, args) => {
|
|
563
|
+
const { task_id, type, title, content, action, action_payload, options } = args;
|
|
564
|
+
return client.post('/inbox', { task_id, type, title, content, action, action_payload, options });
|
|
565
|
+
},
|
|
566
|
+
list_inbox: (client, args) => {
|
|
538
567
|
const params = new URLSearchParams();
|
|
539
|
-
if (args.artifact_id) params.set('artifact_id', String(args.artifact_id));
|
|
540
568
|
if (args.status) params.set('status', String(args.status));
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
const { artifact_id, ...body } = args;
|
|
545
|
-
return client.post(`/artifacts/${artifact_id}/blockers`, body);
|
|
569
|
+
if (args.type) params.set('type', String(args.type));
|
|
570
|
+
if (args.limit) params.set('limit', String(args.limit));
|
|
571
|
+
return client.get(`/inbox?${params}`);
|
|
546
572
|
},
|
|
547
|
-
|
|
548
|
-
const {
|
|
549
|
-
return client.post(`/
|
|
573
|
+
resolve_inbox: (client, args) => {
|
|
574
|
+
const { item_id, ...body } = args;
|
|
575
|
+
return client.post(`/inbox/${item_id}/resolve`, body);
|
|
550
576
|
},
|
|
551
577
|
|
|
552
578
|
// Search
|