frinus-mcp 3.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.
@@ -0,0 +1,1548 @@
1
+ export const TOOLS = [
2
+ // ==========================================================================
3
+ // Core Memory (5)
4
+ // ==========================================================================
5
+ {
6
+ name: "memory_store",
7
+ description: `Store a memory in the memory service.
8
+
9
+ Use this to record important information, learnings, decisions, or procedures
10
+ that should be remembered for future reference.
11
+
12
+ Memory types:
13
+ - episodic: Specific experiences and events (what happened)
14
+ - semantic: General knowledge and facts (what I know)
15
+ - procedural: How to do things (step-by-step procedures)
16
+
17
+ Scopes:
18
+ - user: Private to the user
19
+ - agent: Private to the agent
20
+ - universe: Shared within the universe (department)
21
+ - organization: Available to all agents in the organization`,
22
+ inputSchema: {
23
+ type: "object",
24
+ properties: {
25
+ agent_id: {
26
+ type: "string",
27
+ description: "UUID of the agent storing the memory",
28
+ },
29
+ content: {
30
+ type: "string",
31
+ description: "The memory content to store",
32
+ },
33
+ memory_type: {
34
+ type: "string",
35
+ enum: ["episodic", "semantic", "procedural"],
36
+ description: "Type of memory (default: episodic)",
37
+ },
38
+ scope: {
39
+ type: "string",
40
+ enum: ["user", "agent", "universe", "organization"],
41
+ description: "Visibility scope: user (private), agent (agent-only), universe (department), organization (org-wide). Default: organization",
42
+ },
43
+ importance: {
44
+ type: "number",
45
+ description: "Importance score 0-1 (default: 0.5)",
46
+ },
47
+ user_id: {
48
+ type: "string",
49
+ description: "Optional user identifier (email) who owns this memory",
50
+ },
51
+ created_by_user_id: {
52
+ type: "string",
53
+ description: "Optional user identifier (email) who triggered this memory creation. Auto-injected from logged-in user if not provided.",
54
+ },
55
+ metadata: {
56
+ type: "object",
57
+ description: "Metadata adicional (tags, universe, idioma, etc.)",
58
+ },
59
+ context_id: {
60
+ type: "string",
61
+ description: "Optional UUID of a hierarchy node (universe, concept, theme, topic, or point). When provided, the memory is automatically linked to this node and all its ancestors. Takes precedence over universe_id for hierarchy placement.",
62
+ },
63
+ credential_ref: {
64
+ type: "string",
65
+ description: "Reference key linking this memory to an encrypted credential in the vault. When an agent retrieves this memory and sees a credential_ref, it can fetch the credential via credential_get(ref). E.g., 'jira_muza', 'mysql_centerpag'.",
66
+ },
67
+ },
68
+ required: ["agent_id", "content"],
69
+ },
70
+ },
71
+ {
72
+ name: "memory_search",
73
+ description: `Search memories by semantic similarity.
74
+
75
+ Use this to find relevant memories based on a query.
76
+ Returns memories ranked by similarity to the query.`,
77
+ inputSchema: {
78
+ type: "object",
79
+ properties: {
80
+ query_text: {
81
+ type: "string",
82
+ description: "The search query text",
83
+ },
84
+ agent_id: {
85
+ type: "string",
86
+ description: "Filter by agent UUID",
87
+ },
88
+ memory_types: {
89
+ type: "array",
90
+ items: { type: "string" },
91
+ description: "Filter by memory types",
92
+ },
93
+ limit: {
94
+ type: "integer",
95
+ description: "Maximum results (default: 10)",
96
+ },
97
+ },
98
+ required: ["query_text"],
99
+ },
100
+ },
101
+ {
102
+ name: "memory_get",
103
+ description: `Get a specific memory by its ID.
104
+
105
+ Use this to retrieve the full details of a memory including content,
106
+ metadata, importance score, and hierarchy level.`,
107
+ inputSchema: {
108
+ type: "object",
109
+ properties: {
110
+ memory_id: { type: "string", description: "UUID of the memory to retrieve" },
111
+ },
112
+ required: ["memory_id"],
113
+ },
114
+ },
115
+ {
116
+ name: "memory_list",
117
+ description: `List memories for an agent.
118
+
119
+ Use this to see all memories stored by an agent,
120
+ optionally filtered by type.`,
121
+ inputSchema: {
122
+ type: "object",
123
+ properties: {
124
+ agent_id: {
125
+ type: "string",
126
+ description: "UUID of the agent",
127
+ },
128
+ memory_type: {
129
+ type: "string",
130
+ enum: ["episodic", "semantic", "procedural"],
131
+ description: "Filter by memory type",
132
+ },
133
+ limit: {
134
+ type: "integer",
135
+ description: "Maximum results (default: 50)",
136
+ },
137
+ },
138
+ required: ["agent_id"],
139
+ },
140
+ },
141
+ {
142
+ name: "memory_delete",
143
+ description: `Delete a memory by its ID.
144
+
145
+ Use with caution - this permanently removes the memory.`,
146
+ inputSchema: {
147
+ type: "object",
148
+ properties: {
149
+ memory_id: { type: "string", description: "UUID of the memory to delete" },
150
+ },
151
+ required: ["memory_id"],
152
+ },
153
+ },
154
+ // ==========================================================================
155
+ // Dynamic Relevance (2)
156
+ // ==========================================================================
157
+ {
158
+ name: "memory_reinforce",
159
+ description: `Reinforce a memory after successful use (Dynamic Relevance).
160
+
161
+ Use this when a memory was helpful to increase its importance.
162
+ The memory's relevance score will be boosted.`,
163
+ inputSchema: {
164
+ type: "object",
165
+ properties: {
166
+ memory_id: { type: "string", description: "UUID of the memory to reinforce" },
167
+ boost: { type: "number", description: "Boost amount 0-1 (default: 0.1)" },
168
+ },
169
+ required: ["memory_id"],
170
+ },
171
+ },
172
+ {
173
+ name: "memory_weaken",
174
+ description: `Weaken a memory that was not useful (Dynamic Relevance).
175
+
176
+ Use this when a memory was retrieved but not helpful.
177
+ The memory's relevance score will be reduced.`,
178
+ inputSchema: {
179
+ type: "object",
180
+ properties: {
181
+ memory_id: { type: "string", description: "UUID of the memory to weaken" },
182
+ penalty: { type: "number", description: "Penalty amount 0-1 (default: 0.05)" },
183
+ },
184
+ required: ["memory_id"],
185
+ },
186
+ },
187
+ // ==========================================================================
188
+ // Working Memory (3)
189
+ // ==========================================================================
190
+ {
191
+ name: "working_memory_get",
192
+ description: `Get working memory for a context (agent, universe, or organization).
193
+
194
+ CRITICAL: Always call this at the START of any task to load current state.
195
+ Working memory contains the agent's current role, responsibilities, and task state.
196
+
197
+ Context ID formats:
198
+ - agent:{uuid} - Agent's working memory
199
+ - universe:{uuid} - Universe's working memory
200
+ - organization:{uuid} - Organization's working memory`,
201
+ inputSchema: {
202
+ type: "object",
203
+ properties: {
204
+ context_id: {
205
+ type: "string",
206
+ description: "Context ID (e.g., 'agent:aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa')",
207
+ },
208
+ },
209
+ required: ["context_id"],
210
+ },
211
+ },
212
+ {
213
+ name: "working_memory_add",
214
+ description: `Add or update working memory for a context.
215
+
216
+ Use this to save current state during and after tasks.
217
+ Limited to 7 items per context (Miller's Law). Oldest items auto-evict.
218
+ Default TTL: 30 minutes.`,
219
+ inputSchema: {
220
+ type: "object",
221
+ properties: {
222
+ context_id: {
223
+ type: "string",
224
+ description: "Context ID (e.g., 'agent:uuid', 'project:uuid')",
225
+ },
226
+ content: {
227
+ type: "string",
228
+ description: "Current state/task description to remember",
229
+ },
230
+ agent_id: {
231
+ type: "string",
232
+ description: "Optional agent UUID",
233
+ },
234
+ ttl_seconds: {
235
+ type: "integer",
236
+ description: "TTL in seconds (default: 1800 = 30min, max: 7200 = 2h)",
237
+ },
238
+ },
239
+ required: ["context_id", "content"],
240
+ },
241
+ },
242
+ {
243
+ name: "working_memory_clear",
244
+ description: "Clear all working memory for a context. Use with caution.",
245
+ inputSchema: {
246
+ type: "object",
247
+ properties: {
248
+ context_id: {
249
+ type: "string",
250
+ description: "Context ID to clear",
251
+ },
252
+ },
253
+ required: ["context_id"],
254
+ },
255
+ },
256
+ // ==========================================================================
257
+ // Session (5)
258
+ // ==========================================================================
259
+ {
260
+ name: "session_start",
261
+ description: `Start a memory session.
262
+
263
+ Loads agent rules and memories, creates session tracking.
264
+ Streams from this point are linked to the session.
265
+ Memories generated from streams are NOT linked to the session.
266
+
267
+ For subagent inheritance, pass the parent's session_id as parent_session_id.`,
268
+ inputSchema: {
269
+ type: "object",
270
+ properties: {
271
+ agent_id: {
272
+ type: "string",
273
+ description: "Agent UUID for this session",
274
+ },
275
+ parent_session_id: {
276
+ type: "string",
277
+ description: "Parent session ID for subagent inheritance. "
278
+ + "When a subagent is invoked, pass the parent's session_id here.",
279
+ },
280
+ },
281
+ required: [],
282
+ },
283
+ },
284
+ {
285
+ name: "session_end",
286
+ description: `End an active memory session.`,
287
+ inputSchema: {
288
+ type: "object",
289
+ properties: {
290
+ session_id: {
291
+ type: "string",
292
+ description: "Session ID to end",
293
+ },
294
+ },
295
+ required: ["session_id"],
296
+ },
297
+ },
298
+ {
299
+ name: "session_context",
300
+ description: `Get combined working + long-term memory context for a session.
301
+
302
+ Retrieves:
303
+ 1. Recent items from working memory (session-specific)
304
+ 2. Relevant long-term memories using RAG (enhanced with session context)
305
+ 3. Extracted topics from the session
306
+
307
+ The query is enhanced with session topics to improve retrieval relevance.`,
308
+ inputSchema: {
309
+ type: "object",
310
+ properties: {
311
+ session_id: { type: "string", description: "Session identifier" },
312
+ query: { type: "string", description: "Current query to contextualize" },
313
+ agent_id: { type: "string", description: "Optional agent UUID" },
314
+ max_working_memory: { type: "integer", description: "Max working memory items (default: 5)" },
315
+ max_long_term: { type: "integer", description: "Max long-term memories (default: 10)" },
316
+ include_topics: { type: "boolean", description: "Include extracted topics (default: true)" },
317
+ },
318
+ required: ["session_id", "query"],
319
+ },
320
+ },
321
+ {
322
+ name: "session_summary",
323
+ description: `Get a summary of the current session.
324
+
325
+ Returns main topics, item count, and recent items for the session.`,
326
+ inputSchema: {
327
+ type: "object",
328
+ properties: {
329
+ session_id: { type: "string", description: "Session identifier" },
330
+ },
331
+ required: ["session_id"],
332
+ },
333
+ },
334
+ {
335
+ name: "session_clear",
336
+ description: `Clear all working memory for a session.
337
+
338
+ Removes all temporary items from the session's working memory.
339
+ Long-term memories are not affected.`,
340
+ inputSchema: {
341
+ type: "object",
342
+ properties: {
343
+ session_id: { type: "string", description: "Session identifier" },
344
+ },
345
+ required: ["session_id"],
346
+ },
347
+ },
348
+ // ==========================================================================
349
+ // Stream (4)
350
+ // ==========================================================================
351
+ {
352
+ name: "stream_capture",
353
+ description: `Capture interaction to memory stream for learning.
354
+
355
+ Use this to record important inputs, outputs, decisions, or learnings.
356
+ The memory stream is processed periodically and important items
357
+ are promoted to long-term memory.
358
+
359
+ Directions:
360
+ - input: User/external input
361
+ - output: Agent response/action
362
+ - internal: Internal thought/decision`,
363
+ inputSchema: {
364
+ type: "object",
365
+ properties: {
366
+ session_id: {
367
+ type: "string",
368
+ description: "Session identifier for grouping related captures",
369
+ },
370
+ content: {
371
+ type: "string",
372
+ description: "Content to capture",
373
+ },
374
+ direction: {
375
+ type: "string",
376
+ enum: ["input", "output", "internal"],
377
+ description: "Direction of the content",
378
+ },
379
+ agent_id: {
380
+ type: "string",
381
+ description: "Optional agent UUID",
382
+ },
383
+ importance: {
384
+ type: "number",
385
+ description: "Importance score 0-1 (default: 0.5)",
386
+ },
387
+ },
388
+ required: ["session_id", "content", "direction"],
389
+ },
390
+ },
391
+ {
392
+ name: "stream_get_session",
393
+ description: `Get all stream items from a specific session.
394
+
395
+ Returns the captured inputs, outputs, and internal thoughts
396
+ for the specified session.`,
397
+ inputSchema: {
398
+ type: "object",
399
+ properties: {
400
+ session_id: { type: "string", description: "Session ID to retrieve (required)" },
401
+ limit: { type: "integer", description: "Maximum items to return (default: 100, max: 500)" },
402
+ },
403
+ required: ["session_id"],
404
+ },
405
+ },
406
+ {
407
+ name: "stream_get_recent",
408
+ description: `Get recent stream items.
409
+
410
+ Returns the most recent items captured to the memory stream,
411
+ optionally filtered by agent.`,
412
+ inputSchema: {
413
+ type: "object",
414
+ properties: {
415
+ agent_id: { type: "string", description: "Filter by agent UUID" },
416
+ limit: { type: "integer", description: "Maximum items to return (default: 50, max: 500)" },
417
+ include_forgotten: { type: "boolean", description: "Include forgotten items (default: false)" },
418
+ },
419
+ required: [],
420
+ },
421
+ },
422
+ {
423
+ name: "stream_process",
424
+ description: `Process unprocessed stream items.
425
+
426
+ - Calculates true importance based on content analysis
427
+ - Promotes items with importance >= 0.6 to permanent memories
428
+ - Marks all processed items as processed
429
+
430
+ Call this periodically or during sleep cycles to convert
431
+ stream items into permanent memories.`,
432
+ inputSchema: {
433
+ type: "object",
434
+ properties: {
435
+ batch_size: { type: "integer", description: "Number of items to process (default: 100, max: 1000)" },
436
+ },
437
+ required: [],
438
+ },
439
+ },
440
+ // ==========================================================================
441
+ // Context (2)
442
+ // ==========================================================================
443
+ {
444
+ name: "memory_get_context",
445
+ description: `Get relevant context for a task.
446
+
447
+ Use this at the start of a task to retrieve relevant memories
448
+ that can help with the task. Returns a formatted context prompt.`,
449
+ inputSchema: {
450
+ type: "object",
451
+ properties: {
452
+ agent_id: {
453
+ type: "string",
454
+ description: "UUID of the agent",
455
+ },
456
+ task_description: {
457
+ type: "string",
458
+ description: "Description of the task",
459
+ },
460
+ max_tokens: {
461
+ type: "integer",
462
+ description: "Maximum tokens in context (default: 2000)",
463
+ },
464
+ },
465
+ required: ["agent_id", "task_description"],
466
+ },
467
+ },
468
+ {
469
+ name: "search_with_attention",
470
+ description: `Search memories with task-specific attention (Selective Attention).
471
+
472
+ Weights memory types based on task type for better results.
473
+ E.g., debug tasks prioritize episodic memories.`,
474
+ inputSchema: {
475
+ type: "object",
476
+ properties: {
477
+ query_text: { type: "string", description: "Search query text" },
478
+ agent_id: { type: "string", description: "Optional agent UUID filter" },
479
+ user_id: { type: "string", description: "Optional user identifier filter (auto-injected from logged-in user if not provided)" },
480
+ task_type: { type: "string", description: "Task type (deploy, debug, documentation, implementation, review)" },
481
+ limit: { type: "integer", description: "Maximum results (default: 10)" },
482
+ },
483
+ required: ["query_text"],
484
+ },
485
+ },
486
+ // ==========================================================================
487
+ // User (2)
488
+ // ==========================================================================
489
+ {
490
+ name: "user_register",
491
+ description: `Register a new user and create an organization.
492
+
493
+ Creates a Keycloak user, provisions a tenant database, and returns auth tokens.
494
+ After successful registration, the user is automatically logged in.`,
495
+ inputSchema: {
496
+ type: "object",
497
+ properties: {
498
+ email: { type: "string", description: "User email address" },
499
+ password: { type: "string", description: "User password (min 8 chars)" },
500
+ first_name: { type: "string", description: "First name" },
501
+ last_name: { type: "string", description: "Last name" },
502
+ org_name: { type: "string", description: "Organization name" },
503
+ org_slug: { type: "string", description: "Organization slug (lowercase, alphanumeric, hyphens)" },
504
+ },
505
+ required: ["email", "password", "first_name", "last_name", "org_name", "org_slug"],
506
+ },
507
+ },
508
+ {
509
+ name: "user_get_context",
510
+ description: `Get combined user context for current logged-in user.
511
+
512
+ Use this to retrieve context that combines:
513
+ - User's personal memories and preferences
514
+ - Relevant task context
515
+
516
+ Returns formatted context ready for use.`,
517
+ inputSchema: {
518
+ type: "object",
519
+ properties: {
520
+ task_description: {
521
+ type: "string",
522
+ description: "Optional task description for context filtering",
523
+ },
524
+ user_email: {
525
+ type: "string",
526
+ description: "User email (from previous login)",
527
+ },
528
+ },
529
+ required: [],
530
+ },
531
+ },
532
+ // ==========================================================================
533
+ // Maintenance (2)
534
+ // ==========================================================================
535
+ {
536
+ name: "heartbeat_tick",
537
+ description: `Tick the heartbeat and trigger scheduled maintenance routines.
538
+
539
+ Call this on every user interaction or periodically. It will automatically
540
+ trigger maintenance routines based on configured intervals:
541
+ - Every 5 ticks: Working memory check
542
+ - Every 10 ticks: Stream capture
543
+ - Every 20 ticks: Mini-sleep (light maintenance)
544
+ - Every 50 ticks: Normal sleep (full maintenance)
545
+ - Daily: Deep sleep (all phases)
546
+ - Weekly: Full meta-cognition
547
+
548
+ Returns the current interaction count and any actions that were triggered.`,
549
+ inputSchema: {
550
+ type: "object",
551
+ properties: {
552
+ agent_id: { type: "string", description: "Optional agent UUID" },
553
+ context_id: { type: "string", description: "Optional context ID for working memory (e.g., 'agent:uuid')" },
554
+ session_id: { type: "string", description: "Optional session ID for stream capture" },
555
+ },
556
+ required: [],
557
+ },
558
+ },
559
+ {
560
+ name: "sleep_run",
561
+ description: `Run a sleep cycle (Sleep Meta-Evaluation).
562
+
563
+ Executes memory maintenance phases:
564
+ 1. evaluation - Assess memory quality
565
+ 2. forgetting - Detect and resolve conflicts
566
+ 3. consolidation - Create hierarchical summaries
567
+ 4. relevance - Adjust dynamic relevance`,
568
+ inputSchema: {
569
+ type: "object",
570
+ properties: {
571
+ phases: {
572
+ type: "array",
573
+ items: { type: "string" },
574
+ description: "Phases to run (default: all)",
575
+ },
576
+ },
577
+ required: [],
578
+ },
579
+ },
580
+ // ==========================================================================
581
+ // Consolidation (3)
582
+ // ==========================================================================
583
+ {
584
+ name: "consolidation_detect_conflicts",
585
+ description: `Detect conflicting memories (Active Forgetting).
586
+
587
+ Finds memories that may contain contradictory information.
588
+ Useful for maintaining consistency in the knowledge base.`,
589
+ inputSchema: {
590
+ type: "object",
591
+ properties: {
592
+ similarity_threshold: { type: "number", description: "Similarity threshold 0-1 (default: 0.9)" },
593
+ limit: { type: "integer", description: "Maximum results (default: 50)" },
594
+ },
595
+ required: [],
596
+ },
597
+ },
598
+ {
599
+ name: "consolidation_resolve_conflict",
600
+ description: `Resolve a conflict between two memories (Active Forgetting).
601
+
602
+ When two memories contain contradictory information, use this to:
603
+ - Keep one memory as the authoritative source
604
+ - Mark the other as superseded
605
+ - Document the resolution reason
606
+
607
+ The superseded memory will be marked as obsolete.`,
608
+ inputSchema: {
609
+ type: "object",
610
+ properties: {
611
+ keep_id: { type: "string", description: "UUID of the memory to keep as current" },
612
+ supersede_id: { type: "string", description: "UUID of the memory to mark as superseded" },
613
+ resolution_note: { type: "string", description: "Explanation of why this resolution was chosen (required)" },
614
+ },
615
+ required: ["keep_id", "supersede_id", "resolution_note"],
616
+ },
617
+ },
618
+ {
619
+ name: "consolidation_detect_redundant",
620
+ description: `Detect redundant memories (Active Forgetting).
621
+
622
+ Finds near-duplicate memories that could be consolidated.`,
623
+ inputSchema: {
624
+ type: "object",
625
+ properties: {
626
+ similarity_threshold: { type: "number", description: "Similarity threshold 0-1 (default: 0.95)" },
627
+ limit: { type: "integer", description: "Maximum results (default: 50)" },
628
+ },
629
+ required: [],
630
+ },
631
+ },
632
+ // ==========================================================================
633
+ // Hierarchy (2)
634
+ // ==========================================================================
635
+ {
636
+ name: "hierarchy_consolidate",
637
+ description: `Consolidate multiple memories into a summary (Hierarchical Memory).
638
+
639
+ Takes a list of related memories (minimum 2) and creates a higher-level summary.
640
+ Useful for creating abstract knowledge from detailed experiences.
641
+ If summary_content is not provided, it will be auto-generated.
642
+
643
+ Levels: raw -> chunk -> summary -> abstract`,
644
+ inputSchema: {
645
+ type: "object",
646
+ properties: {
647
+ memory_ids: {
648
+ type: "array",
649
+ items: { type: "string" },
650
+ description: "UUIDs of memories to consolidate (minimum 2)",
651
+ },
652
+ summary_content: { type: "string", description: "Custom summary content (optional, auto-generated if not provided)" },
653
+ agent_id: { type: "string", description: "Agent UUID for the new memory (inherits from first memory if not specified)" },
654
+ },
655
+ required: ["memory_ids"],
656
+ },
657
+ },
658
+ {
659
+ name: "hierarchy_get_tree",
660
+ description: `Get the hierarchy tree for a memory (Hierarchical Memory).
661
+
662
+ Returns the memory and all its related memories in the hierarchy:
663
+ - Parent memories (if this is derived from others)
664
+ - Child memories (if this was used to create others)`,
665
+ inputSchema: {
666
+ type: "object",
667
+ properties: {
668
+ memory_id: { type: "string", description: "UUID of the memory" },
669
+ },
670
+ required: ["memory_id"],
671
+ },
672
+ },
673
+ // ==========================================================================
674
+ // Agent CRUD (5)
675
+ // ==========================================================================
676
+ {
677
+ name: "agent_create",
678
+ description: `Create a new agent in the organization.
679
+
680
+ An agent is an AI entity with a persona, optional universe membership,
681
+ and optional team assignment.`,
682
+ inputSchema: {
683
+ type: "object",
684
+ properties: {
685
+ name: { type: "string", description: "Name of the agent (required)" },
686
+ template_id: { type: "string", description: "Optional template ID to base the agent on" },
687
+ universe_id: { type: "string", description: "Optional universe ID to assign the agent to" },
688
+ persona: { type: "object", description: "Optional persona configuration (personality, instructions, greeting, etc.)" },
689
+ team_id: { type: "string", description: "Optional team ID to assign the agent to" },
690
+ is_team_lead: { type: "boolean", description: "Whether this agent is a team lead (default: false)" },
691
+ },
692
+ required: ["name"],
693
+ },
694
+ },
695
+ {
696
+ name: "agent_list",
697
+ description: `List all agents in the organization.
698
+
699
+ Returns agent name, ID, status, and universe assignment.`,
700
+ inputSchema: {
701
+ type: "object",
702
+ properties: {
703
+ org_id: { type: "string", description: "Optional organization ID filter" },
704
+ },
705
+ required: [],
706
+ },
707
+ },
708
+ {
709
+ name: "agent_get",
710
+ description: `Get detailed information about a specific agent.
711
+
712
+ Returns full agent data including persona, status, and configuration.`,
713
+ inputSchema: {
714
+ type: "object",
715
+ properties: {
716
+ agent_id: { type: "string", description: "UUID of the agent to retrieve" },
717
+ },
718
+ required: ["agent_id"],
719
+ },
720
+ },
721
+ {
722
+ name: "agent_update",
723
+ description: `Update an agent's persona and configuration.
724
+
725
+ Allows updating personality, instructions, greeting, forbidden topics,
726
+ language, specialization, and name.`,
727
+ inputSchema: {
728
+ type: "object",
729
+ properties: {
730
+ agent_id: { type: "string", description: "UUID of the agent to update" },
731
+ name: { type: "string", description: "New agent name" },
732
+ personality: { type: "string", description: "Agent personality description" },
733
+ instructions: { type: "string", description: "Agent system instructions" },
734
+ greeting: { type: "string", description: "Agent greeting message" },
735
+ forbidden_topics: {
736
+ type: "array",
737
+ items: { type: "string" },
738
+ description: "List of topics the agent should not discuss",
739
+ },
740
+ language: { type: "string", description: "Agent's primary language (e.g., 'pt-BR', 'en')" },
741
+ specialization: { type: "string", description: "Agent's area of specialization" },
742
+ },
743
+ required: ["agent_id"],
744
+ },
745
+ },
746
+ {
747
+ name: "agent_delete",
748
+ description: `Delete an agent permanently.
749
+
750
+ Use with caution - this removes the agent and its configuration.
751
+ Memories created by the agent are NOT deleted.`,
752
+ inputSchema: {
753
+ type: "object",
754
+ properties: {
755
+ agent_id: { type: "string", description: "UUID of the agent to delete" },
756
+ },
757
+ required: ["agent_id"],
758
+ },
759
+ },
760
+ {
761
+ name: "agent_bootstrap",
762
+ description: `Bootstrap completo do agente — chame no início da sessão para carregar identidade, system prompt e contexto runtime. O agente thin-client chama isto como regra única de boot.
763
+
764
+ Retorna identity, system_prompt, runtime (working_memory, recent_memories, skills, delegate_targets) e persona_version em uma única chamada.`,
765
+ inputSchema: {
766
+ type: "object",
767
+ properties: {
768
+ agent_id: { type: "string", description: "UUID of the agent to bootstrap (required)" },
769
+ },
770
+ required: ["agent_id"],
771
+ },
772
+ },
773
+ {
774
+ name: "agent_reorient",
775
+ description: `Re-fundamentação compacta (heartbeat de reorientação). Chame a cada N alterações ou ao saturar o contexto para o agente se re-orientar sem recarregar tudo.
776
+
777
+ Retorna identity, working_memory, active_task, relevant_memories, recent_high_importance, persona_version e config. Opcionalmente filtra por um foco específico.`,
778
+ inputSchema: {
779
+ type: "object",
780
+ properties: {
781
+ agent_id: { type: "string", description: "UUID of the agent to reorient (required)" },
782
+ focus: { type: "string", description: "Optional focus/topic to bias the reorientation toward" },
783
+ },
784
+ required: ["agent_id"],
785
+ },
786
+ },
787
+ // ==========================================================================
788
+ // Universe CRUD (3)
789
+ // ==========================================================================
790
+ {
791
+ name: "universe_create",
792
+ description: `Create a universe within the organization.
793
+
794
+ A universe is an isolated knowledge domain (e.g., Security, Operations).
795
+ Agents can be assigned to universes for scoped memory access.
796
+ The org_id is auto-resolved from your API key.`,
797
+ inputSchema: {
798
+ type: "object",
799
+ properties: {
800
+ name: { type: "string", description: "Universe display name" },
801
+ slug: { type: "string", description: "Universe slug (lowercase, alphanumeric, hyphens)" },
802
+ description: { type: "string", description: "Optional description of the universe" },
803
+ },
804
+ required: ["name", "slug"],
805
+ },
806
+ },
807
+ {
808
+ name: "universe_list",
809
+ description: `List all universes in the organization.
810
+
811
+ Returns universe name, slug, ID, and description.
812
+ The org_id is auto-resolved from your API key.`,
813
+ inputSchema: {
814
+ type: "object",
815
+ properties: {},
816
+ required: [],
817
+ },
818
+ },
819
+ {
820
+ name: "universe_update",
821
+ description: `Update a universe's name or description.
822
+
823
+ The org_id is auto-resolved from your API key.`,
824
+ inputSchema: {
825
+ type: "object",
826
+ properties: {
827
+ universe_id: { type: "string", description: "UUID of the universe to update" },
828
+ name: { type: "string", description: "New universe name" },
829
+ description: { type: "string", description: "New universe description" },
830
+ },
831
+ required: ["universe_id"],
832
+ },
833
+ },
834
+ {
835
+ name: "universe_delete",
836
+ description: `Delete a universe and all its contents (concepts, themes, topics, points).
837
+
838
+ WARNING: This is destructive and cannot be undone.
839
+ The org_id is auto-resolved from your API key.`,
840
+ inputSchema: {
841
+ type: "object",
842
+ properties: {
843
+ universe_id: { type: "string", description: "UUID of the universe to delete" },
844
+ },
845
+ required: ["universe_id"],
846
+ },
847
+ },
848
+ // ==========================================================================
849
+ // Knowledge Graph - Concepts (4)
850
+ // ==========================================================================
851
+ {
852
+ name: "concept_create",
853
+ description: `Create a concept within a universe (L0 - knowledge body).
854
+
855
+ A concept is the top-level node in the knowledge hierarchy:
856
+ Concept > Theme > Topic > Point.
857
+
858
+ Each concept belongs to a universe and represents a major knowledge domain.`,
859
+ inputSchema: {
860
+ type: "object",
861
+ properties: {
862
+ name: { type: "string", description: "Concept name" },
863
+ universe_id: { type: "string", description: "UUID of the universe this concept belongs to" },
864
+ description: { type: "string", description: "Optional description" },
865
+ },
866
+ required: ["name", "universe_id"],
867
+ },
868
+ },
869
+ {
870
+ name: "concept_list",
871
+ description: `List all concepts for a universe.
872
+
873
+ Returns the L0 nodes of the knowledge hierarchy within a universe.`,
874
+ inputSchema: {
875
+ type: "object",
876
+ properties: {
877
+ universe_id: { type: "string", description: "UUID of the universe" },
878
+ },
879
+ required: ["universe_id"],
880
+ },
881
+ },
882
+ {
883
+ name: "concept_update",
884
+ description: `Update a concept's name or description.`,
885
+ inputSchema: {
886
+ type: "object",
887
+ properties: {
888
+ concept_id: { type: "string", description: "UUID of the concept to update" },
889
+ name: { type: "string", description: "New concept name" },
890
+ description: { type: "string", description: "New concept description" },
891
+ },
892
+ required: ["concept_id"],
893
+ },
894
+ },
895
+ {
896
+ name: "concept_delete",
897
+ description: `Delete a concept and all its children (themes, topics, points).
898
+
899
+ Use with caution - this cascades to all child nodes.`,
900
+ inputSchema: {
901
+ type: "object",
902
+ properties: {
903
+ concept_id: { type: "string", description: "UUID of the concept to delete" },
904
+ },
905
+ required: ["concept_id"],
906
+ },
907
+ },
908
+ // ==========================================================================
909
+ // Knowledge Graph - Themes (4)
910
+ // ==========================================================================
911
+ {
912
+ name: "theme_create",
913
+ description: `Create a theme within a concept (L1 - thematic division).
914
+
915
+ A theme groups related topics under a concept:
916
+ Concept > Theme > Topic > Point.`,
917
+ inputSchema: {
918
+ type: "object",
919
+ properties: {
920
+ name: { type: "string", description: "Theme name" },
921
+ concept_id: { type: "string", description: "UUID of the parent concept" },
922
+ description: { type: "string", description: "Optional description" },
923
+ },
924
+ required: ["name", "concept_id"],
925
+ },
926
+ },
927
+ {
928
+ name: "theme_list",
929
+ description: `List all themes for a concept.
930
+
931
+ Returns the L1 nodes under a specific concept.`,
932
+ inputSchema: {
933
+ type: "object",
934
+ properties: {
935
+ concept_id: { type: "string", description: "UUID of the parent concept" },
936
+ },
937
+ required: ["concept_id"],
938
+ },
939
+ },
940
+ {
941
+ name: "theme_update",
942
+ description: `Update a theme's name or description.`,
943
+ inputSchema: {
944
+ type: "object",
945
+ properties: {
946
+ theme_id: { type: "string", description: "UUID of the theme to update" },
947
+ name: { type: "string", description: "New theme name" },
948
+ description: { type: "string", description: "New theme description" },
949
+ },
950
+ required: ["theme_id"],
951
+ },
952
+ },
953
+ {
954
+ name: "theme_delete",
955
+ description: `Delete a theme and all its children (topics, points).
956
+
957
+ Use with caution - this cascades to all child nodes.`,
958
+ inputSchema: {
959
+ type: "object",
960
+ properties: {
961
+ theme_id: { type: "string", description: "UUID of the theme to delete" },
962
+ },
963
+ required: ["theme_id"],
964
+ },
965
+ },
966
+ // ==========================================================================
967
+ // Knowledge Graph - Topics (4)
968
+ // ==========================================================================
969
+ {
970
+ name: "topic_create",
971
+ description: `Create a topic within a theme (L2 - work unit).
972
+
973
+ A topic is a specific subject area that can be tracked:
974
+ Concept > Theme > Topic > Point.
975
+
976
+ Status: pending | in_progress | completed.`,
977
+ inputSchema: {
978
+ type: "object",
979
+ properties: {
980
+ name: { type: "string", description: "Topic name" },
981
+ theme_id: { type: "string", description: "UUID of the parent theme" },
982
+ description: { type: "string", description: "Optional description" },
983
+ status: {
984
+ type: "string",
985
+ enum: ["pending", "in_progress", "completed"],
986
+ description: "Topic status (default: pending)",
987
+ },
988
+ },
989
+ required: ["name", "theme_id"],
990
+ },
991
+ },
992
+ {
993
+ name: "topic_list",
994
+ description: `List all topics for a theme.
995
+
996
+ Returns the L2 nodes under a specific theme with their status.`,
997
+ inputSchema: {
998
+ type: "object",
999
+ properties: {
1000
+ theme_id: { type: "string", description: "UUID of the parent theme" },
1001
+ },
1002
+ required: ["theme_id"],
1003
+ },
1004
+ },
1005
+ {
1006
+ name: "topic_update",
1007
+ description: `Update a topic's name, description, or status.
1008
+
1009
+ When status is provided alongside other fields, both the metadata
1010
+ and status are updated. Status: pending | in_progress | completed.`,
1011
+ inputSchema: {
1012
+ type: "object",
1013
+ properties: {
1014
+ topic_id: { type: "string", description: "UUID of the topic to update" },
1015
+ name: { type: "string", description: "New topic name" },
1016
+ description: { type: "string", description: "New topic description" },
1017
+ status: {
1018
+ type: "string",
1019
+ enum: ["pending", "in_progress", "completed"],
1020
+ description: "New topic status",
1021
+ },
1022
+ },
1023
+ required: ["topic_id"],
1024
+ },
1025
+ },
1026
+ {
1027
+ name: "topic_delete",
1028
+ description: `Delete a topic and all its children (points).
1029
+
1030
+ Use with caution - this cascades to all child points.`,
1031
+ inputSchema: {
1032
+ type: "object",
1033
+ properties: {
1034
+ topic_id: { type: "string", description: "UUID of the topic to delete" },
1035
+ },
1036
+ required: ["topic_id"],
1037
+ },
1038
+ },
1039
+ // ==========================================================================
1040
+ // Knowledge Graph - Points (4)
1041
+ // ==========================================================================
1042
+ {
1043
+ name: "point_create",
1044
+ description: `Create a point within a topic (L3 - atomic knowledge unit).
1045
+
1046
+ A point is the leaf node in the knowledge hierarchy:
1047
+ Concept > Theme > Topic > Point.
1048
+
1049
+ Points represent individual facts, procedures, or learnings.`,
1050
+ inputSchema: {
1051
+ type: "object",
1052
+ properties: {
1053
+ name: { type: "string", description: "Point name" },
1054
+ topic_id: { type: "string", description: "UUID of the parent topic" },
1055
+ description: { type: "string", description: "Optional short description" },
1056
+ status: { type: "string", description: "Optional status (e.g., pending, completed)" },
1057
+ },
1058
+ required: ["name", "topic_id"],
1059
+ },
1060
+ },
1061
+ {
1062
+ name: "point_list",
1063
+ description: `List all points for a topic.
1064
+
1065
+ Returns the L3 leaf nodes under a specific topic.`,
1066
+ inputSchema: {
1067
+ type: "object",
1068
+ properties: {
1069
+ topic_id: { type: "string", description: "UUID of the parent topic" },
1070
+ },
1071
+ required: ["topic_id"],
1072
+ },
1073
+ },
1074
+ {
1075
+ name: "point_update",
1076
+ description: `Update a point's name, description, content, or status.
1077
+
1078
+ When status is provided alongside other fields, both the metadata
1079
+ and status are updated.`,
1080
+ inputSchema: {
1081
+ type: "object",
1082
+ properties: {
1083
+ point_id: { type: "string", description: "UUID of the point to update" },
1084
+ name: { type: "string", description: "New point name" },
1085
+ description: { type: "string", description: "New point description" },
1086
+ content: { type: "string", description: "New point content (detailed knowledge)" },
1087
+ status: { type: "string", description: "New point status" },
1088
+ },
1089
+ required: ["point_id"],
1090
+ },
1091
+ },
1092
+ {
1093
+ name: "point_delete",
1094
+ description: `Delete a point permanently.
1095
+
1096
+ This removes the leaf node from the knowledge hierarchy.`,
1097
+ inputSchema: {
1098
+ type: "object",
1099
+ properties: {
1100
+ point_id: { type: "string", description: "UUID of the point to delete" },
1101
+ },
1102
+ required: ["point_id"],
1103
+ },
1104
+ },
1105
+ // ==========================================================================
1106
+ // Knowledge Hierarchy (1)
1107
+ // ==========================================================================
1108
+ {
1109
+ name: "universe_hierarchy",
1110
+ description: `Get the full knowledge hierarchy tree for a universe.
1111
+
1112
+ Returns a tree structure: Concepts > Themes > Topics > Points.
1113
+ Useful for understanding the complete knowledge structure of a universe.`,
1114
+ inputSchema: {
1115
+ type: "object",
1116
+ properties: {
1117
+ universe_id: { type: "string", description: "UUID of the universe" },
1118
+ },
1119
+ required: ["universe_id"],
1120
+ },
1121
+ },
1122
+ // ==========================================================================
1123
+ // Training (6)
1124
+ // ==========================================================================
1125
+ {
1126
+ name: "training_teach",
1127
+ description: `Teach a fact or procedure to the memory system.
1128
+
1129
+ Use this to directly teach the system new knowledge.
1130
+ Creates a permanent memory of the specified type.
1131
+
1132
+ Types:
1133
+ - semantic: Facts, knowledge, definitions
1134
+ - procedural: How-to, step-by-step instructions`,
1135
+ inputSchema: {
1136
+ type: "object",
1137
+ properties: {
1138
+ content: {
1139
+ type: "string",
1140
+ description: "The fact or procedure to teach (min 10 chars)",
1141
+ },
1142
+ type: {
1143
+ type: "string",
1144
+ enum: ["semantic", "procedural"],
1145
+ description: "Memory type (default: semantic)",
1146
+ },
1147
+ importance: {
1148
+ type: "number",
1149
+ description: "Importance score 0-1 (default: 0.7)",
1150
+ },
1151
+ universe_id: {
1152
+ type: "string",
1153
+ description: "Optional universe UUID for scoped access",
1154
+ },
1155
+ },
1156
+ required: ["content"],
1157
+ },
1158
+ },
1159
+ {
1160
+ name: "training_qa",
1161
+ description: `Train with question-answer pairs.
1162
+
1163
+ Provide Q&A pairs to improve FAQ-style responses.
1164
+ Each pair becomes a high-value semantic memory optimized for question matching.`,
1165
+ inputSchema: {
1166
+ type: "object",
1167
+ properties: {
1168
+ pairs: {
1169
+ type: "array",
1170
+ items: {
1171
+ type: "object",
1172
+ properties: {
1173
+ question: { type: "string", description: "The question" },
1174
+ answer: { type: "string", description: "The answer" },
1175
+ },
1176
+ required: ["question", "answer"],
1177
+ },
1178
+ description: "Array of Q&A pairs (min 1, max 100)",
1179
+ },
1180
+ importance: {
1181
+ type: "number",
1182
+ description: "Importance score 0-1 (default: 0.8)",
1183
+ },
1184
+ universe_id: {
1185
+ type: "string",
1186
+ description: "Optional universe UUID for scoped access",
1187
+ },
1188
+ },
1189
+ required: ["pairs"],
1190
+ },
1191
+ },
1192
+ {
1193
+ name: "training_stats",
1194
+ description: `Get training statistics.
1195
+
1196
+ Returns memory counts by type, layer, recent daily activity,
1197
+ and counts of gaps and conflicts. Useful for monitoring training progress.`,
1198
+ inputSchema: {
1199
+ type: "object",
1200
+ properties: {},
1201
+ required: [],
1202
+ },
1203
+ },
1204
+ {
1205
+ name: "training_gaps",
1206
+ description: `Identify training coverage gaps.
1207
+
1208
+ Analyzes existing memories and suggests areas that need more training:
1209
+ - Missing procedural knowledge
1210
+ - Missing Q&A pairs
1211
+ - Low factual coverage
1212
+ - Low overall training volume`,
1213
+ inputSchema: {
1214
+ type: "object",
1215
+ properties: {},
1216
+ required: [],
1217
+ },
1218
+ },
1219
+ {
1220
+ name: "training_recent",
1221
+ description: `Get recently created training memories.
1222
+
1223
+ Returns the most recent memories ordered by creation date.
1224
+ Useful for reviewing what was recently taught or uploaded.`,
1225
+ inputSchema: {
1226
+ type: "object",
1227
+ properties: {
1228
+ limit: {
1229
+ type: "integer",
1230
+ description: "Maximum results (default: 20, max: 100)",
1231
+ },
1232
+ },
1233
+ required: [],
1234
+ },
1235
+ },
1236
+ // -------------------------------------------------------------------------
1237
+ // Agent Invocation
1238
+ // -------------------------------------------------------------------------
1239
+ {
1240
+ name: "agent_invoke",
1241
+ description: `Invoke an agent to execute a task and return the result.
1242
+
1243
+ Calls an agent by ID or name, waits for completion, and returns the full response.
1244
+ Use this for programmatic agent orchestration when you need a specialist's output.`,
1245
+ inputSchema: {
1246
+ type: "object",
1247
+ properties: {
1248
+ agent_id: {
1249
+ type: "string",
1250
+ description: "UUID of the agent to invoke (use this OR agent_name)",
1251
+ },
1252
+ agent_name: {
1253
+ type: "string",
1254
+ description: "Name of the agent to invoke (use this OR agent_id)",
1255
+ },
1256
+ message: {
1257
+ type: "string",
1258
+ description: "The task/question for the agent",
1259
+ },
1260
+ context: {
1261
+ type: "object",
1262
+ description: "Optional context/data for the agent",
1263
+ },
1264
+ timeout_seconds: {
1265
+ type: "integer",
1266
+ description: "Timeout in seconds (default: 120, max: 600)",
1267
+ },
1268
+ },
1269
+ required: ["message"],
1270
+ },
1271
+ },
1272
+ // -------------------------------------------------------------------------
1273
+ // Task Management (4 tools)
1274
+ // -------------------------------------------------------------------------
1275
+ {
1276
+ name: "task_create",
1277
+ description: `Create a tracked task for delegated work.
1278
+
1279
+ Use this when assigning work to another agent or breaking down complex operations
1280
+ into subtasks. Returns the task ID for tracking progress.`,
1281
+ inputSchema: {
1282
+ type: "object",
1283
+ properties: {
1284
+ title: {
1285
+ type: "string",
1286
+ description: "Short title describing the task",
1287
+ },
1288
+ description: {
1289
+ type: "string",
1290
+ description: "Detailed description of what needs to be done",
1291
+ },
1292
+ assigned_agent_id: {
1293
+ type: "string",
1294
+ description: "UUID of the agent to assign this task to",
1295
+ },
1296
+ parent_task_id: {
1297
+ type: "string",
1298
+ description: "UUID of parent task (for creating subtasks)",
1299
+ },
1300
+ priority: {
1301
+ type: "integer",
1302
+ description: "Priority 1-10 (default 5). Higher = more urgent",
1303
+ },
1304
+ input_data: {
1305
+ type: "object",
1306
+ description: "Input data/context for the task",
1307
+ },
1308
+ },
1309
+ required: ["title"],
1310
+ },
1311
+ },
1312
+ {
1313
+ name: "task_get",
1314
+ description: `Get details of a specific task by ID.
1315
+
1316
+ Returns full task information including status, output, timestamps, and metadata.`,
1317
+ inputSchema: {
1318
+ type: "object",
1319
+ properties: {
1320
+ task_id: {
1321
+ type: "string",
1322
+ description: "UUID of the task to retrieve",
1323
+ },
1324
+ },
1325
+ required: ["task_id"],
1326
+ },
1327
+ },
1328
+ {
1329
+ name: "task_list",
1330
+ description: `List tasks with optional filters.
1331
+
1332
+ Can filter by status, assigned agent, or parent task. Returns paginated results
1333
+ ordered by creation date (newest first).`,
1334
+ inputSchema: {
1335
+ type: "object",
1336
+ properties: {
1337
+ status: {
1338
+ type: "string",
1339
+ enum: ["pending", "assigned", "running", "completed", "failed", "cancelled"],
1340
+ description: "Filter by task status",
1341
+ },
1342
+ assigned_agent_id: {
1343
+ type: "string",
1344
+ description: "Filter by assigned agent UUID",
1345
+ },
1346
+ parent_task_id: {
1347
+ type: "string",
1348
+ description: "Filter by parent task UUID (get subtasks)",
1349
+ },
1350
+ limit: {
1351
+ type: "integer",
1352
+ description: "Max results (default: 50, max: 200)",
1353
+ },
1354
+ },
1355
+ required: [],
1356
+ },
1357
+ },
1358
+ {
1359
+ name: "task_update",
1360
+ description: `Update a task's status, output, or error message.
1361
+
1362
+ Use this to report progress (status='running'), submit results (status='completed'
1363
+ with output_data), or report failures (status='failed' with error_message).`,
1364
+ inputSchema: {
1365
+ type: "object",
1366
+ properties: {
1367
+ task_id: {
1368
+ type: "string",
1369
+ description: "UUID of the task to update",
1370
+ },
1371
+ status: {
1372
+ type: "string",
1373
+ enum: ["pending", "assigned", "running", "completed", "failed", "cancelled"],
1374
+ description: "New status for the task",
1375
+ },
1376
+ output_data: {
1377
+ type: "object",
1378
+ description: "Output/result data from task execution",
1379
+ },
1380
+ error_message: {
1381
+ type: "string",
1382
+ description: "Error message if task failed",
1383
+ },
1384
+ },
1385
+ required: ["task_id"],
1386
+ },
1387
+ },
1388
+ // ---------------------------------------------------------------------------
1389
+ // Skills
1390
+ // ---------------------------------------------------------------------------
1391
+ {
1392
+ name: "skill_list",
1393
+ description: `List available skills in the organization.
1394
+
1395
+ Returns skills with their schemas, categories, and integration requirements.`,
1396
+ inputSchema: {
1397
+ type: "object",
1398
+ properties: {
1399
+ category: {
1400
+ type: "string",
1401
+ description: "Filter by skill category (e.g., 'communication', 'development')",
1402
+ },
1403
+ },
1404
+ },
1405
+ },
1406
+ {
1407
+ name: "skill_agent_list",
1408
+ description: `List skills assigned to a specific agent.
1409
+
1410
+ Returns the agent's assigned skills with permission levels.`,
1411
+ inputSchema: {
1412
+ type: "object",
1413
+ properties: {
1414
+ agent_id: {
1415
+ type: "string",
1416
+ description: "UUID of the agent",
1417
+ },
1418
+ },
1419
+ required: ["agent_id"],
1420
+ },
1421
+ },
1422
+ {
1423
+ name: "skill_assign",
1424
+ description: `Assign a skill to an agent.
1425
+
1426
+ Gives an agent the ability to use a specific skill.`,
1427
+ inputSchema: {
1428
+ type: "object",
1429
+ properties: {
1430
+ agent_id: {
1431
+ type: "string",
1432
+ description: "UUID of the agent",
1433
+ },
1434
+ skill_id: {
1435
+ type: "string",
1436
+ description: "UUID of the skill to assign",
1437
+ },
1438
+ permission: {
1439
+ type: "string",
1440
+ enum: ["execute", "manage"],
1441
+ description: "Permission level (default: execute)",
1442
+ },
1443
+ },
1444
+ required: ["agent_id", "skill_id"],
1445
+ },
1446
+ },
1447
+ {
1448
+ name: "skill_remove",
1449
+ description: `Remove a skill from an agent.
1450
+
1451
+ Revokes the agent's ability to use a specific skill.`,
1452
+ inputSchema: {
1453
+ type: "object",
1454
+ properties: {
1455
+ agent_id: {
1456
+ type: "string",
1457
+ description: "UUID of the agent",
1458
+ },
1459
+ skill_id: {
1460
+ type: "string",
1461
+ description: "UUID of the skill to remove",
1462
+ },
1463
+ },
1464
+ required: ["agent_id", "skill_id"],
1465
+ },
1466
+ },
1467
+ // ==========================================================================
1468
+ // Credential Vault (4)
1469
+ // ==========================================================================
1470
+ {
1471
+ name: "credential_store",
1472
+ description: `Store an encrypted credential in the vault.
1473
+
1474
+ Credentials are encrypted at rest with AES-256-GCM using per-org derived keys.
1475
+ Use this to securely store API keys, tokens, passwords, or connection strings
1476
+ for third-party integrations (JIRA, databases, APIs, etc.).
1477
+
1478
+ The 'ref' is a unique identifier for this credential (e.g., 'jira_muza',
1479
+ 'mysql_centerpag'). Use the same ref in memory_store's credential_ref field
1480
+ to link a memory to this credential.`,
1481
+ inputSchema: {
1482
+ type: "object",
1483
+ properties: {
1484
+ ref: {
1485
+ type: "string",
1486
+ description: "Unique credential reference (e.g., 'jira_muza', 'mysql_centerpag', 'elastic_prod')",
1487
+ },
1488
+ data: {
1489
+ type: "object",
1490
+ description: "Secret credential data to encrypt (e.g., { api_key: '...', email: '...', base_url: '...' })",
1491
+ },
1492
+ metadata: {
1493
+ type: "object",
1494
+ description: "Optional non-secret metadata (e.g., { type: 'api_key', provider: 'atlassian' })",
1495
+ },
1496
+ },
1497
+ required: ["ref", "data"],
1498
+ },
1499
+ },
1500
+ {
1501
+ name: "credential_get",
1502
+ description: `Retrieve a decrypted credential from the vault.
1503
+
1504
+ Returns the decrypted credential data for the given reference.
1505
+ Only the credential owner (authenticated user) can access their credentials.
1506
+
1507
+ Use this when a memory has a credential_ref and you need the actual
1508
+ credentials to perform an action (e.g., connect to a database, call an API).`,
1509
+ inputSchema: {
1510
+ type: "object",
1511
+ properties: {
1512
+ ref: {
1513
+ type: "string",
1514
+ description: "Credential reference to retrieve (e.g., 'jira_muza')",
1515
+ },
1516
+ },
1517
+ required: ["ref"],
1518
+ },
1519
+ },
1520
+ {
1521
+ name: "credential_list",
1522
+ description: `List all stored credentials for the current user.
1523
+
1524
+ Returns credential metadata (ref, type, created_at) without any secret data.
1525
+ Use this to see what integrations have stored credentials.`,
1526
+ inputSchema: {
1527
+ type: "object",
1528
+ properties: {},
1529
+ },
1530
+ },
1531
+ {
1532
+ name: "credential_delete",
1533
+ description: `Delete a stored credential from the vault.
1534
+
1535
+ Permanently removes the encrypted credential for the given reference.
1536
+ This cannot be undone.`,
1537
+ inputSchema: {
1538
+ type: "object",
1539
+ properties: {
1540
+ ref: {
1541
+ type: "string",
1542
+ description: "Credential reference to delete (e.g., 'jira_muza')",
1543
+ },
1544
+ },
1545
+ required: ["ref"],
1546
+ },
1547
+ },
1548
+ ];