@live-context/mcp 0.7.1 → 0.10.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/README.md +32 -0
- package/dist/index.js +304 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -30,6 +30,38 @@ For Claude Desktop, Cursor, or any other MCP client, add this to your `mcpServer
|
|
|
30
30
|
}
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
+
## Remote (HTTP) transport
|
|
34
|
+
|
|
35
|
+
Live Context also exposes a [Streamable HTTP MCP transport](https://modelcontextprotocol.io/specification/2025-06-18/basic/transports#streamable-http) at `https://live-context.com/api/mcp/mcp`. Use this when you'd rather not install Node — Claude Code, Cursor, Codex CLI, and ChatGPT Developer Mode all support paste-in URLs with custom headers.
|
|
36
|
+
|
|
37
|
+
**Claude Code remote:**
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
claude mcp add --transport http live-context https://live-context.com/api/mcp/mcp \
|
|
41
|
+
--header "Authorization: Bearer <your-team-key>" \
|
|
42
|
+
--header "X-LC-User-Token: <your-user-token>"
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**Cursor / Claude Desktop / any "URL + headers" client:**
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"mcpServers": {
|
|
50
|
+
"live-context": {
|
|
51
|
+
"url": "https://live-context.com/api/mcp/mcp",
|
|
52
|
+
"headers": {
|
|
53
|
+
"Authorization": "Bearer <your-team-key>",
|
|
54
|
+
"X-LC-User-Token": "<your-user-token>"
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
The HTTP endpoint is authenticated with the same team key + (optional) user token as the stdio proxy. Both transports talk to the same backend and expose the same tools.
|
|
62
|
+
|
|
63
|
+
A dashboard-driven one-click install flow (OAuth-based — no token pasting) is on the way; until then, the snippets above are the canonical Remote setup.
|
|
64
|
+
|
|
33
65
|
## Environment variables
|
|
34
66
|
|
|
35
67
|
| Variable | Required | Purpose |
|
package/dist/index.js
CHANGED
|
@@ -91,7 +91,7 @@ async function callMcpApi(tool, args, method = 'POST') {
|
|
|
91
91
|
// ---------------------------------------------------------------------------
|
|
92
92
|
const server = new McpServer({
|
|
93
93
|
name: 'live-context-mcp',
|
|
94
|
-
version: '0.
|
|
94
|
+
version: '0.10.0', // 0.10.0 adds Projects MLP v2 tools: reads (list_projects/workstreams/tickets/milestones/agents, search_*, get_*), ticket management (update_ticket, set_ticket_milestone, dependencies, move/unlink/reorder, update_ticket_comment), scaffold (create/update workstream, create/complete milestone, create/update agent, create_project)
|
|
95
95
|
});
|
|
96
96
|
server.registerTool('get_context', {
|
|
97
97
|
description: 'Retrieve relevant context entries. Returns L0 summaries (title, type, snippet) by default. Pass drawer_id to get full page body.',
|
|
@@ -311,6 +311,309 @@ server.registerTool('get_page', {
|
|
|
311
311
|
page_id: z.string().describe('Page id (from list_pages or write_page result).'),
|
|
312
312
|
},
|
|
313
313
|
}, (args) => callMcpApi('get-page', args));
|
|
314
|
+
server.registerTool('ask', {
|
|
315
|
+
description: 'Ask the live-context brain a question. Returns hybrid-search retrieval (drawers + pages) with ratification metadata and — for contested cases — raw evidence (recency delta, citation counts, author agent, evidence-for counts). The server does NOT synthesize a prose answer; the calling agent reasons over the structured result. Requires X-LC-User-Token.',
|
|
316
|
+
inputSchema: {
|
|
317
|
+
question: z.string().min(1).describe('The question to ask the team brain.'),
|
|
318
|
+
limit: z
|
|
319
|
+
.number()
|
|
320
|
+
.int()
|
|
321
|
+
.min(1)
|
|
322
|
+
.max(50)
|
|
323
|
+
.optional()
|
|
324
|
+
.describe('Max candidates returned (default 8, max 50)'),
|
|
325
|
+
},
|
|
326
|
+
}, (args) => callMcpApi('ask', args));
|
|
327
|
+
// ---------------------------------------------------------------------------
|
|
328
|
+
// Projects MLP — ticket tools (mig 056/057/058). All require a user token
|
|
329
|
+
// (LC_USER_TOKEN). Actor resolution (agent vs member) happens server-side from
|
|
330
|
+
// the token's agent binding; the proxy just forwards args.
|
|
331
|
+
// ---------------------------------------------------------------------------
|
|
332
|
+
server.registerTool('list_my_tasks', {
|
|
333
|
+
description: 'List the tickets assigned to you as the executor (the actor to do the work). The actor is the agent when called with an agent-bound token, otherwise the human member. Optionally filter by status. Use get_ticket for the full body, links, and comments.',
|
|
334
|
+
inputSchema: {
|
|
335
|
+
status: z
|
|
336
|
+
.enum(['backlog', 'ready', 'in_progress', 'in_review', 'done'])
|
|
337
|
+
.optional()
|
|
338
|
+
.describe('Filter to tickets in this status. Omit to return all of your tasks.'),
|
|
339
|
+
},
|
|
340
|
+
}, (args) => callMcpApi('list-my-tasks', args));
|
|
341
|
+
server.registerTool('get_ticket', {
|
|
342
|
+
description: 'Fetch a single ticket by id. Returns title, body, status, workstream + project, executor/reviewer assignment, links to drawers/pages, timestamps, and the full comment thread. Call this before updating status or commenting so you act on current state.',
|
|
343
|
+
inputSchema: {
|
|
344
|
+
ticket_id: z.string().describe('Ticket id (from list_my_tasks, list_my_reviews, or create_ticket).'),
|
|
345
|
+
},
|
|
346
|
+
}, (args) => callMcpApi('get-ticket', args));
|
|
347
|
+
server.registerTool('create_ticket', {
|
|
348
|
+
description: 'Create a new ticket inside a workstream. Returns the new ticket id. Defaults to backlog status. Use list_context / project tooling to find the target workstream_id first.',
|
|
349
|
+
inputSchema: {
|
|
350
|
+
workstream_id: z.string().describe('Workstream the ticket belongs to.'),
|
|
351
|
+
title: z.string().describe('Short, action-oriented ticket title.'),
|
|
352
|
+
body: z.string().optional().describe('Optional detailed description / acceptance criteria.'),
|
|
353
|
+
status: z
|
|
354
|
+
.enum(['backlog', 'ready', 'in_progress', 'in_review', 'done'])
|
|
355
|
+
.optional()
|
|
356
|
+
.describe("Initial status. Defaults to 'backlog'."),
|
|
357
|
+
},
|
|
358
|
+
}, (args) => callMcpApi('create-ticket', args));
|
|
359
|
+
server.registerTool('update_ticket_status', {
|
|
360
|
+
description: "Move a ticket to a new status. If you request 'done' on a ticket that has a reviewer, the server rewrites it to 'in_review' and submits it for review instead of closing it — the result includes rewritten=true and a message explaining this. Always inspect the returned status vs requested_status.",
|
|
361
|
+
inputSchema: {
|
|
362
|
+
ticket_id: z.string().describe('Ticket to transition.'),
|
|
363
|
+
status: z
|
|
364
|
+
.enum(['backlog', 'ready', 'in_progress', 'in_review', 'done'])
|
|
365
|
+
.describe('Desired status. May be rewritten to in_review when a reviewer is assigned.'),
|
|
366
|
+
},
|
|
367
|
+
}, (args) => callMcpApi('update-ticket-status', args));
|
|
368
|
+
server.registerTool('comment_on_ticket', {
|
|
369
|
+
description: 'Add a comment to a ticket. The comment is attributed to you (agent or member). Returns the new comment id. Use this to record progress, hand-off notes, or review feedback.',
|
|
370
|
+
inputSchema: {
|
|
371
|
+
ticket_id: z.string().describe('Ticket to comment on.'),
|
|
372
|
+
body: z.string().describe('Comment text.'),
|
|
373
|
+
},
|
|
374
|
+
}, (args) => callMcpApi('comment-on-ticket', args));
|
|
375
|
+
server.registerTool('list_my_reviews', {
|
|
376
|
+
description: 'List tickets awaiting your review (where you are the assigned reviewer, or which are open for review claiming). The actor is the agent or human member. Use claim_review to take an unclaimed review and get_ticket for details.',
|
|
377
|
+
inputSchema: {},
|
|
378
|
+
}, (args) => callMcpApi('list-my-reviews', args));
|
|
379
|
+
server.registerTool('claim_review', {
|
|
380
|
+
description: 'Claim the reviewer slot on a ticket that is open for review, assigning yourself (agent or member) as its reviewer. Returns the updated ticket. Use list_my_reviews to find claimable tickets.',
|
|
381
|
+
inputSchema: {
|
|
382
|
+
ticket_id: z.string().describe('Ticket to claim review on.'),
|
|
383
|
+
},
|
|
384
|
+
}, (args) => callMcpApi('claim-review', args));
|
|
385
|
+
server.registerTool('assign_ticket', {
|
|
386
|
+
description: 'Set or change a ticket\'s executor and/or reviewer. Each side is an actor (kind + id) — kind is "member" (a user id) or "agent" (an agent id). Pass only the side(s) you want to change. The executor and reviewer must differ; assigning the same actor to both is rejected with executor_equals_reviewer.',
|
|
387
|
+
inputSchema: {
|
|
388
|
+
ticket_id: z.string().describe('Ticket to (re)assign.'),
|
|
389
|
+
executor_kind: z
|
|
390
|
+
.enum(['member', 'agent'])
|
|
391
|
+
.optional()
|
|
392
|
+
.describe('Executor actor kind. Provide together with executor_id.'),
|
|
393
|
+
executor_id: z.string().optional().describe('Executor actor id (user id or agent id).'),
|
|
394
|
+
reviewer_kind: z
|
|
395
|
+
.enum(['member', 'agent'])
|
|
396
|
+
.optional()
|
|
397
|
+
.describe('Reviewer actor kind. Provide together with reviewer_id.'),
|
|
398
|
+
reviewer_id: z.string().optional().describe('Reviewer actor id (user id or agent id).'),
|
|
399
|
+
},
|
|
400
|
+
}, (args) => callMcpApi('assign-ticket', args));
|
|
401
|
+
server.registerTool('link_ticket', {
|
|
402
|
+
description: "Link a ticket to a drawer or a page as supporting context. Provide exactly one of drawer_id or page_id. relation_kind labels the relationship and defaults to 'relates_to'.",
|
|
403
|
+
inputSchema: {
|
|
404
|
+
ticket_id: z.string().describe('Ticket to link from.'),
|
|
405
|
+
drawer_id: z.string().optional().describe('Drawer (context entry) id to link to.'),
|
|
406
|
+
page_id: z.string().optional().describe('Page id to link to.'),
|
|
407
|
+
relation_kind: z
|
|
408
|
+
.string()
|
|
409
|
+
.optional()
|
|
410
|
+
.describe("Relationship label. Defaults to 'relates_to'."),
|
|
411
|
+
},
|
|
412
|
+
}, (args) => callMcpApi('link-ticket', args));
|
|
413
|
+
// ===================================================================
|
|
414
|
+
// Projects MLP v2 — reads + management + scaffold (0.10.0)
|
|
415
|
+
// ===================================================================
|
|
416
|
+
server.registerTool('list_projects', {
|
|
417
|
+
description: "List all projects in your org (notebooks with kind=project). Returns id, name, goal, due_at, status. Use to discover the project to work in.",
|
|
418
|
+
inputSchema: {},
|
|
419
|
+
}, (args) => callMcpApi('list-projects', args));
|
|
420
|
+
server.registerTool('list_workstreams', {
|
|
421
|
+
description: "List the workstreams in a project. Returns each workstream id, name, status, owner, and ticket rollups. Use to get a workstream_id before creating or listing tickets.",
|
|
422
|
+
inputSchema: {
|
|
423
|
+
project_id: z.string().describe('Project id (notebook with kind=project).'),
|
|
424
|
+
},
|
|
425
|
+
}, (args) => callMcpApi('list-workstreams', args));
|
|
426
|
+
server.registerTool('list_workstream_tickets', {
|
|
427
|
+
description: "List all tickets in a workstream (the board). Returns id, key, title, status, priority, assignment, milestone, sort_order.",
|
|
428
|
+
inputSchema: {
|
|
429
|
+
workstream_id: z.string().describe('Workstream id.'),
|
|
430
|
+
},
|
|
431
|
+
}, (args) => callMcpApi('list-workstream-tickets', args));
|
|
432
|
+
server.registerTool('get_workstream', {
|
|
433
|
+
description: "Fetch a single workstream by id with its detail and ticket rollups.",
|
|
434
|
+
inputSchema: {
|
|
435
|
+
workstream_id: z.string().describe('Workstream id.'),
|
|
436
|
+
},
|
|
437
|
+
}, (args) => callMcpApi('get-workstream', args));
|
|
438
|
+
server.registerTool('list_milestones', {
|
|
439
|
+
description: "List the milestones for a project (pass the project id). Returns id, title, due_at, completed_at, and ticket rollups.",
|
|
440
|
+
inputSchema: {
|
|
441
|
+
project_id: z.string().describe('Project id (the milestones live on the project notebook).'),
|
|
442
|
+
},
|
|
443
|
+
}, (args) => callMcpApi('list-milestones', args));
|
|
444
|
+
server.registerTool('get_milestone', {
|
|
445
|
+
description: "Fetch a single milestone by id, including its ticket rollups.",
|
|
446
|
+
inputSchema: {
|
|
447
|
+
milestone_id: z.string().describe('Milestone id.'),
|
|
448
|
+
},
|
|
449
|
+
}, (args) => callMcpApi('get-milestone', args));
|
|
450
|
+
server.registerTool('list_ticket_comments', {
|
|
451
|
+
description: "List the full comment thread for a ticket, with author attribution (member or agent).",
|
|
452
|
+
inputSchema: {
|
|
453
|
+
ticket_id: z.string().describe('Ticket id.'),
|
|
454
|
+
},
|
|
455
|
+
}, (args) => callMcpApi('list-ticket-comments', args));
|
|
456
|
+
server.registerTool('list_ticket_dependencies', {
|
|
457
|
+
description: "List a ticket dependencies: which tickets block it and which it blocks, with blocked-open state.",
|
|
458
|
+
inputSchema: {
|
|
459
|
+
ticket_id: z.string().describe('Ticket id.'),
|
|
460
|
+
},
|
|
461
|
+
}, (args) => callMcpApi('list-ticket-dependencies', args));
|
|
462
|
+
server.registerTool('list_ticket_events', {
|
|
463
|
+
description: "List the activity timeline for a ticket (status changes, assignments, links, and more).",
|
|
464
|
+
inputSchema: {
|
|
465
|
+
ticket_id: z.string().describe('Ticket id.'),
|
|
466
|
+
},
|
|
467
|
+
}, (args) => callMcpApi('list-ticket-events', args));
|
|
468
|
+
server.registerTool('list_team_agents', {
|
|
469
|
+
description: "List the agents registered for your team. Returns id, name, role, is_active. Use to find an agent id to assign as executor or reviewer.",
|
|
470
|
+
inputSchema: {},
|
|
471
|
+
}, (args) => callMcpApi('list-team-agents', args));
|
|
472
|
+
server.registerTool('search_tickets', {
|
|
473
|
+
description: "Search tickets across the org by text and filters (status, priority, project, executor, milestone). Returns matching tickets.",
|
|
474
|
+
inputSchema: {
|
|
475
|
+
query: z.string().optional().describe('Free-text search over title and body.'),
|
|
476
|
+
status: z.enum(['backlog', 'ready', 'in_progress', 'in_review', 'done']).optional().describe('Filter by status.'),
|
|
477
|
+
priority: z.string().optional().describe('Filter by priority.'),
|
|
478
|
+
project_id: z.string().optional().describe('Restrict to one project.'),
|
|
479
|
+
executor_kind: z.enum(['member', 'agent']).optional().describe('Filter by executor actor kind.'),
|
|
480
|
+
executor_id: z.string().optional().describe('Filter by executor actor id.'),
|
|
481
|
+
milestone_id: z.string().optional().describe('Filter by milestone.'),
|
|
482
|
+
limit: z.number().int().positive().max(200).optional().describe('Max results (default 100).'),
|
|
483
|
+
},
|
|
484
|
+
}, (args) => callMcpApi('search-tickets', args));
|
|
485
|
+
server.registerTool('search_linkable', {
|
|
486
|
+
description: "Search for drawers, pages, and tickets you can link to a ticket. Returns id, kind, title for use with link_ticket.",
|
|
487
|
+
inputSchema: {
|
|
488
|
+
query: z.string().optional().describe('Free-text search.'),
|
|
489
|
+
limit: z.number().int().positive().max(50).optional().describe('Max results (default 20).'),
|
|
490
|
+
},
|
|
491
|
+
}, (args) => callMcpApi('search-linkable', args));
|
|
492
|
+
server.registerTool('update_ticket', {
|
|
493
|
+
description: "Update ticket fields: title, body, priority, due_at. Pass clear_due=true to remove the due date. Member-only.",
|
|
494
|
+
inputSchema: {
|
|
495
|
+
ticket_id: z.string().describe('Ticket to update.'),
|
|
496
|
+
title: z.string().optional().describe('New title.'),
|
|
497
|
+
body: z.string().optional().describe('New body / acceptance criteria.'),
|
|
498
|
+
priority: z.string().optional().describe('New priority.'),
|
|
499
|
+
due_at: z.string().optional().describe('ISO 8601 due date.'),
|
|
500
|
+
clear_due: z.boolean().optional().describe('Set true to clear the due date.'),
|
|
501
|
+
},
|
|
502
|
+
}, (args) => callMcpApi('update-ticket', args));
|
|
503
|
+
server.registerTool('set_ticket_milestone', {
|
|
504
|
+
description: "Set or clear a ticket milestone. Pass milestone_id to set it; omit milestone_id to clear it. The milestone must belong to the same project. Member-only.",
|
|
505
|
+
inputSchema: {
|
|
506
|
+
ticket_id: z.string().describe('Ticket id.'),
|
|
507
|
+
milestone_id: z.string().optional().describe('Milestone id to set. Omit to clear the milestone.'),
|
|
508
|
+
},
|
|
509
|
+
}, (args) => callMcpApi('set-ticket-milestone', args));
|
|
510
|
+
server.registerTool('add_ticket_dependency', {
|
|
511
|
+
description: "Add a dependency: blocked_id is blocked by blocker_id. Both tickets must be in the same project. Rejects self-dependency and cycles. Member-only.",
|
|
512
|
+
inputSchema: {
|
|
513
|
+
blocked_id: z.string().describe('The ticket that is blocked.'),
|
|
514
|
+
blocker_id: z.string().describe('The ticket that blocks it.'),
|
|
515
|
+
},
|
|
516
|
+
}, (args) => callMcpApi('add-ticket-dependency', args));
|
|
517
|
+
server.registerTool('remove_ticket_dependency', {
|
|
518
|
+
description: "Remove a ticket dependency by its dependency id (from list_ticket_dependencies). Member-only.",
|
|
519
|
+
inputSchema: {
|
|
520
|
+
dependency_id: z.string().describe('Dependency id to remove.'),
|
|
521
|
+
},
|
|
522
|
+
}, (args) => callMcpApi('remove-ticket-dependency', args));
|
|
523
|
+
server.registerTool('move_ticket_to_workstream', {
|
|
524
|
+
description: "Move a ticket to a different workstream in the same project. Member-only.",
|
|
525
|
+
inputSchema: {
|
|
526
|
+
ticket_id: z.string().describe('Ticket to move.'),
|
|
527
|
+
workstream_id: z.string().describe('Destination workstream id.'),
|
|
528
|
+
},
|
|
529
|
+
}, (args) => callMcpApi('move-ticket-to-workstream', args));
|
|
530
|
+
server.registerTool('unlink_ticket', {
|
|
531
|
+
description: "Remove a link from a ticket. kind is drawer or page; id is the linked drawer or page id. Member-only.",
|
|
532
|
+
inputSchema: {
|
|
533
|
+
ticket_id: z.string().describe('Ticket to unlink from.'),
|
|
534
|
+
kind: z.enum(['drawer', 'page']).describe('Linked target kind.'),
|
|
535
|
+
id: z.string().describe('Linked drawer or page id.'),
|
|
536
|
+
},
|
|
537
|
+
}, (args) => callMcpApi('unlink-ticket', args));
|
|
538
|
+
server.registerTool('reorder_tickets', {
|
|
539
|
+
description: "Reorder tickets within a workstream. ordered_ids is the full list of ticket ids in the new order. Member-only.",
|
|
540
|
+
inputSchema: {
|
|
541
|
+
workstream_id: z.string().describe('Workstream id.'),
|
|
542
|
+
ordered_ids: z.array(z.string()).describe('All ticket ids in the new order.'),
|
|
543
|
+
},
|
|
544
|
+
}, (args) => callMcpApi('reorder-tickets', args));
|
|
545
|
+
server.registerTool('create_workstream', {
|
|
546
|
+
description: "Create a workstream in a project. Optionally set an owner member. Returns the new workstream id. Member-only.",
|
|
547
|
+
inputSchema: {
|
|
548
|
+
project_id: z.string().describe('Project id (notebook with kind=project).'),
|
|
549
|
+
name: z.string().describe('Workstream name.'),
|
|
550
|
+
owner_user_id: z.string().optional().describe('Optional owner member user id.'),
|
|
551
|
+
},
|
|
552
|
+
}, (args) => callMcpApi('create-workstream', args));
|
|
553
|
+
server.registerTool('update_workstream', {
|
|
554
|
+
description: "Update a workstream name, status, description, or owner. Pass clear_owner=true to unset the owner. Member-only.",
|
|
555
|
+
inputSchema: {
|
|
556
|
+
workstream_id: z.string().describe('Workstream to update.'),
|
|
557
|
+
name: z.string().optional().describe('New name.'),
|
|
558
|
+
status: z.string().optional().describe('New status.'),
|
|
559
|
+
owner_user_id: z.string().optional().describe('New owner member user id.'),
|
|
560
|
+
description: z.string().optional().describe('New description.'),
|
|
561
|
+
clear_owner: z.boolean().optional().describe('Set true to unset the owner.'),
|
|
562
|
+
},
|
|
563
|
+
}, (args) => callMcpApi('update-workstream', args));
|
|
564
|
+
server.registerTool('reorder_workstreams', {
|
|
565
|
+
description: "Reorder workstreams within a project. ordered_ids is the full list of workstream ids in the new order. Member-only.",
|
|
566
|
+
inputSchema: {
|
|
567
|
+
project_id: z.string().describe('Project id.'),
|
|
568
|
+
ordered_ids: z.array(z.string()).describe('All workstream ids in the new order.'),
|
|
569
|
+
},
|
|
570
|
+
}, (args) => callMcpApi('reorder-workstreams', args));
|
|
571
|
+
server.registerTool('create_milestone', {
|
|
572
|
+
description: "Create a milestone in a project (pass the project id and a title, optional due_at). Returns the new milestone id. Member-only.",
|
|
573
|
+
inputSchema: {
|
|
574
|
+
project_id: z.string().describe('Project id the milestone belongs to.'),
|
|
575
|
+
title: z.string().describe('Milestone title.'),
|
|
576
|
+
due_at: z.string().optional().describe('ISO 8601 due date (optional).'),
|
|
577
|
+
},
|
|
578
|
+
}, (args) => callMcpApi('create-milestone', args));
|
|
579
|
+
server.registerTool('complete_milestone', {
|
|
580
|
+
description: "Mark a milestone complete or incomplete. completed defaults to true. Member-only.",
|
|
581
|
+
inputSchema: {
|
|
582
|
+
milestone_id: z.string().describe('Milestone id.'),
|
|
583
|
+
completed: z.boolean().optional().describe('True to complete (default), false to reopen.'),
|
|
584
|
+
},
|
|
585
|
+
}, (args) => callMcpApi('complete-milestone', args));
|
|
586
|
+
server.registerTool('create_agent', {
|
|
587
|
+
description: "Register an agent actor for your team (name, optional role). Returns the new agent id. To let the agent act, mint an agent-bound token in the dashboard. Member-only.",
|
|
588
|
+
inputSchema: {
|
|
589
|
+
name: z.string().describe('Agent display name.'),
|
|
590
|
+
role: z.string().optional().describe('Optional role label.'),
|
|
591
|
+
},
|
|
592
|
+
}, (args) => callMcpApi('create-agent', args));
|
|
593
|
+
server.registerTool('update_agent', {
|
|
594
|
+
description: "Update an agent name, role, or is_active flag. Setting is_active=false deactivates the agent (kill-switch). Member-only.",
|
|
595
|
+
inputSchema: {
|
|
596
|
+
agent_id: z.string().describe('Agent to update.'),
|
|
597
|
+
name: z.string().optional().describe('New name.'),
|
|
598
|
+
role: z.string().optional().describe('New role.'),
|
|
599
|
+
is_active: z.boolean().optional().describe('Set false to deactivate (kill-switch), true to reactivate.'),
|
|
600
|
+
},
|
|
601
|
+
}, (args) => callMcpApi('update-agent', args));
|
|
602
|
+
server.registerTool('create_project', {
|
|
603
|
+
description: "Create a new project (a notebook with kind=project) in your org, with a name and optional goal and due_at. Returns the new project id. Member-only.",
|
|
604
|
+
inputSchema: {
|
|
605
|
+
name: z.string().describe('Project name.'),
|
|
606
|
+
goal: z.string().optional().describe('Project objective or outcome.'),
|
|
607
|
+
due_at: z.string().optional().describe('ISO 8601 due date (optional).'),
|
|
608
|
+
},
|
|
609
|
+
}, (args) => callMcpApi('create-project', args));
|
|
610
|
+
server.registerTool('update_ticket_comment', {
|
|
611
|
+
description: "Edit one of your own ticket comments. Only the original author (you, member or agent) may edit it.",
|
|
612
|
+
inputSchema: {
|
|
613
|
+
comment_id: z.string().describe('Comment id to edit.'),
|
|
614
|
+
body: z.string().describe('New comment text.'),
|
|
615
|
+
},
|
|
616
|
+
}, (args) => callMcpApi('update-ticket-comment', args));
|
|
314
617
|
server.registerTool('health_check', {
|
|
315
618
|
description: 'Returns server health status and resolved team identity',
|
|
316
619
|
}, () => callMcpApi('health-check', undefined, 'GET'));
|
package/package.json
CHANGED