@intangle/mcp-server 2.6.13 → 2.6.15

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.
@@ -1,154 +1,6 @@
1
+ // Generated from mcp-contract/tool-catalog.json. Do not edit this projection directly.
1
2
  import { HIGHQ_DIRECT_TOOLS } from "./highq-tool-definitions.js";
2
- const itemAttributesSchema = {
3
- type: "object",
4
- additionalProperties: false,
5
- properties: {
6
- status: {
7
- type: "string",
8
- enum: ["pending", "in_progress", "completed", "invalidated"]
9
- },
10
- priority: {
11
- type: "string",
12
- enum: ["urgent", "high", "medium", "low"]
13
- },
14
- assignee: {
15
- type: ["object", "null"],
16
- additionalProperties: false,
17
- properties: {
18
- id: { type: ["string", "null"] },
19
- type: { type: ["string", "null"], enum: ["agent", "user", null] }
20
- },
21
- required: ["id", "type"]
22
- },
23
- pinned: { type: "boolean" },
24
- presentation: {
25
- type: "string",
26
- enum: ["item", "group", "project", "folder"],
27
- description: "Item presentation only; never a separate entity or hierarchy authority."
28
- },
29
- icon: { type: "string" },
30
- color: { type: "string" },
31
- topics: {
32
- type: "array",
33
- items: { type: "string" },
34
- description: "Topic tags stored on the Item and its topic relationships."
35
- },
36
- importance: {
37
- type: "number",
38
- minimum: 0,
39
- maximum: 1,
40
- description: "Optional importance score for an insight Item."
41
- },
42
- confidence: {
43
- type: "number",
44
- minimum: 0,
45
- maximum: 1,
46
- description: "Optional confidence score for an insight Item."
47
- },
48
- category: {
49
- type: "string",
50
- description: "Optional category for an insight Item."
51
- },
52
- source_type: {
53
- type: "string",
54
- description: "Optional provenance category for an insight Item."
55
- }
56
- }
57
- };
58
- const itemIdsSchema = {
59
- type: "array",
60
- minItems: 1,
61
- maxItems: 100,
62
- items: { type: "string" }
63
- };
64
- const updateItemOperationSchema = {
65
- oneOf: [
66
- {
67
- type: "object",
68
- additionalProperties: false,
69
- required: ["op", "title"],
70
- properties: {
71
- op: { type: "string", const: "create" },
72
- title: { type: "string" },
73
- content: { type: "string" },
74
- type: {
75
- type: "string",
76
- enum: ["context", "task", "skill", "artifact", "insight"],
77
- description: "Durable Item content kind. Skill and insight remain Items/Rooms, not separate product entities."
78
- },
79
- parent_id: { type: ["string", "null"] },
80
- presentation: {
81
- type: "string",
82
- enum: ["item", "group", "project", "folder"],
83
- description: "Optional Item presentation; this does not create a separate entity type."
84
- },
85
- attributes: itemAttributesSchema
86
- }
87
- },
88
- {
89
- type: "object",
90
- additionalProperties: false,
91
- required: ["op", "id"],
92
- properties: {
93
- op: { type: "string", const: "update" },
94
- id: { type: "string" },
95
- title: { type: "string" },
96
- content: { type: "string" },
97
- attributes: itemAttributesSchema
98
- }
99
- },
100
- {
101
- type: "object",
102
- additionalProperties: false,
103
- required: ["op", "new_parent_id"],
104
- oneOf: [{ required: ["ids"] }, { required: ["criteria"] }],
105
- properties: {
106
- op: { type: "string", const: "move" },
107
- ids: itemIdsSchema,
108
- criteria: {
109
- type: "object",
110
- additionalProperties: false,
111
- minProperties: 1,
112
- properties: {
113
- source_parent_id: {
114
- type: ["string", "null"],
115
- description: "Select Items whose authoritative parent_id is this Item. Null selects Space-root Items."
116
- },
117
- under: {
118
- type: "string",
119
- description: "Direct-parent alias for source_parent_id. The current Space ID selects Space-root Items."
120
- },
121
- ungrouped: { type: "boolean" },
122
- type: { type: ["string", "null"] },
123
- status: { type: ["string", "null"] }
124
- }
125
- },
126
- new_parent_id: { type: ["string", "null"] },
127
- relative_to_id: { type: ["string", "null"] },
128
- position: {
129
- type: ["string", "null"],
130
- enum: ["before", "after", null]
131
- },
132
- dry_run: { type: "boolean" },
133
- count_only: { type: "boolean" },
134
- confirm_token: { type: ["string", "null"] },
135
- limit: { type: "integer", minimum: 1, maximum: 500 },
136
- operation_id: { type: ["string", "null"] }
137
- }
138
- },
139
- {
140
- type: "object",
141
- additionalProperties: false,
142
- required: ["op", "ids"],
143
- properties: {
144
- op: { type: "string", const: "delete" },
145
- ids: itemIdsSchema
146
- }
147
- }
148
- ]
149
- };
150
- // Tools definition - matches the stdio server
151
- const TOOL_DEFINITIONS = [
3
+ const BASE_TOOLS = [
152
4
  {
153
5
  name: "search",
154
6
  title: "Search Space",
@@ -159,24 +11,44 @@ const TOOL_DEFINITIONS = [
159
11
  properties: {
160
12
  query: {
161
13
  oneOf: [
162
- { type: "string" },
163
- { type: "array", items: { type: "string" }, minItems: 1 }
14
+ {
15
+ type: "string"
16
+ },
17
+ {
18
+ type: "array",
19
+ items: {
20
+ type: "string"
21
+ },
22
+ minItems: 1
23
+ }
164
24
  ],
165
25
  description: "One query or several queries merged into one ranked result set"
166
26
  },
167
27
  mode: {
168
28
  type: "string",
169
- enum: ["auto", "semantic", "lexical", "recent"],
29
+ enum: [
30
+ "auto",
31
+ "semantic",
32
+ "lexical",
33
+ "recent"
34
+ ],
170
35
  default: "auto"
171
36
  },
172
37
  under: {
173
38
  type: "string",
174
39
  description: "Exact Item/Room subtree root"
175
40
  },
176
- depth: { type: "integer", minimum: 1, maximum: 512, default: 512 },
41
+ depth: {
42
+ type: "integer",
43
+ minimum: 1,
44
+ maximum: 512,
45
+ default: 512
46
+ },
177
47
  spaces: {
178
48
  type: "array",
179
- items: { type: "string" },
49
+ items: {
50
+ type: "string"
51
+ },
180
52
  minItems: 1,
181
53
  description: "Defaults to the current Space; cross-Space search fails closed"
182
54
  },
@@ -184,23 +56,56 @@ const TOOL_DEFINITIONS = [
184
56
  type: "object",
185
57
  additionalProperties: false,
186
58
  properties: {
187
- status: { type: "string" },
188
- priority: { type: "string" },
189
- assignee: { type: "string" },
59
+ status: {
60
+ type: "string"
61
+ },
62
+ priority: {
63
+ type: "string"
64
+ },
65
+ assignee: {
66
+ type: "string"
67
+ },
190
68
  dates: {
191
69
  type: "object",
192
70
  additionalProperties: false,
193
71
  properties: {
194
72
  from: {
195
- oneOf: [{ type: "string" }, { type: "number" }]
73
+ oneOf: [
74
+ {
75
+ type: "string"
76
+ },
77
+ {
78
+ type: "number"
79
+ }
80
+ ]
196
81
  },
197
- to: { oneOf: [{ type: "string" }, { type: "number" }] }
82
+ to: {
83
+ oneOf: [
84
+ {
85
+ type: "string"
86
+ },
87
+ {
88
+ type: "number"
89
+ }
90
+ ]
91
+ }
92
+ }
93
+ },
94
+ topics: {
95
+ type: "array",
96
+ items: {
97
+ type: "string"
198
98
  }
199
99
  },
200
- topics: { type: "array", items: { type: "string" } },
201
- category: { type: "string" },
202
- source: { type: "string" },
203
- has_parent: { type: "boolean" },
100
+ category: {
101
+ type: "string"
102
+ },
103
+ source: {
104
+ type: "string"
105
+ },
106
+ has_parent: {
107
+ type: "boolean"
108
+ },
204
109
  legacy_label: {
205
110
  type: "array",
206
111
  minItems: 1,
@@ -223,22 +128,53 @@ const TOOL_DEFINITIONS = [
223
128
  }
224
129
  }
225
130
  },
226
- expand: { type: "integer", enum: [0, 1], default: 0 },
131
+ expand: {
132
+ type: "integer",
133
+ enum: [
134
+ 0,
135
+ 1
136
+ ],
137
+ default: 0
138
+ },
227
139
  sort: {
228
140
  type: "string",
229
- enum: ["relevance", "recent", "oldest", "priority"]
141
+ enum: [
142
+ "relevance",
143
+ "recent",
144
+ "oldest",
145
+ "priority"
146
+ ]
230
147
  },
231
148
  include: {
232
149
  type: "string",
233
- enum: ["ids", "titles", "snippets", "full"],
150
+ enum: [
151
+ "ids",
152
+ "titles",
153
+ "snippets",
154
+ "full"
155
+ ],
234
156
  default: "snippets"
235
157
  },
236
- limit: { type: "integer", minimum: 1, maximum: 100, default: 20 },
237
- offset: { type: "integer", minimum: 0, maximum: 10000, default: 0 }
158
+ limit: {
159
+ type: "integer",
160
+ minimum: 1,
161
+ maximum: 100,
162
+ default: 20
163
+ },
164
+ offset: {
165
+ type: "integer",
166
+ minimum: 0,
167
+ maximum: 10000,
168
+ default: 0
169
+ }
238
170
  },
239
171
  required: []
240
172
  },
241
- annotations: { readOnlyHint: true }
173
+ annotations: {
174
+ readOnlyHint: true,
175
+ idempotentHint: true,
176
+ openWorldHint: true
177
+ }
242
178
  },
243
179
  {
244
180
  name: "get_items",
@@ -260,16 +196,30 @@ const TOOL_DEFINITIONS = [
260
196
  type: "array",
261
197
  minItems: 1,
262
198
  maxItems: 500,
263
- items: { type: "string" },
199
+ items: {
200
+ type: "string"
201
+ },
264
202
  description: "Exact canonical or legacy Item IDs, returned in requested order."
265
203
  },
266
204
  under: {
267
205
  type: "string",
268
206
  description: "Exact Space ID or canonical/legacy Item ID to browse under."
269
207
  },
270
- depth: { type: "integer", minimum: 0, maximum: 20 },
271
- limit: { type: "integer", minimum: 1, maximum: 200 },
272
- offset: { type: "integer", minimum: 0, maximum: 5000 },
208
+ depth: {
209
+ type: "integer",
210
+ minimum: 0,
211
+ maximum: 20
212
+ },
213
+ limit: {
214
+ type: "integer",
215
+ minimum: 1,
216
+ maximum: 200
217
+ },
218
+ offset: {
219
+ type: "integer",
220
+ minimum: 0,
221
+ maximum: 5000
222
+ },
273
223
  include: {
274
224
  type: "array",
275
225
  uniqueItems: true,
@@ -288,7 +238,14 @@ const TOOL_DEFINITIONS = [
288
238
  }
289
239
  }
290
240
  },
291
- required: ["space_id"]
241
+ required: [
242
+ "space_id"
243
+ ]
244
+ },
245
+ annotations: {
246
+ readOnlyHint: true,
247
+ idempotentHint: true,
248
+ openWorldHint: true
292
249
  }
293
250
  },
294
251
  {
@@ -311,64 +268,425 @@ const TOOL_DEFINITIONS = [
311
268
  type: "array",
312
269
  minItems: 1,
313
270
  maxItems: 100,
314
- items: updateItemOperationSchema
315
- }
316
- },
317
- required: ["space_id", "operations"]
318
- }
319
- },
320
- {
321
- name: "fetch_items",
322
- title: "Fetch Items by ID",
323
- description: "Retrieve full content for specific Items by ID. Canonical generalized Items retain original compatibility IDs such as `file_*`, `doc_*`, `context_*`, `task_*`, and `skill_*`; pass those IDs unchanged. When Phoenix resolves a distinct legacy alias, the result preserves `requested_id` and `legacy_id` while returning the canonical Item `id`. File fetches return extracted content, file metadata, chunk metadata, and decrypted `data.source_data_url` when available. Artifact fetches accept `artifact_*` IDs and return content plus render metadata and `config`/`state`/`data` when available.",
324
- inputSchema: {
325
- type: "object",
326
- properties: {
327
- space_id: {
328
- type: "string",
329
- description: "Optional: Space containing the items. Provide this for shared/org spaces so fetch resolves against the correct graph."
330
- },
331
- organization_id: {
332
- type: "string",
333
- description: "Optional Clerk org ID when the Space belongs to an organization graph. Include it when the same raw space_id could exist in multiple graphs."
334
- },
335
- id: {
336
- type: "string",
337
- description: "Single ID to fetch (e.g. `mem_123`, `task_456`, `skill_789`, `doc_321`, `file_654`, `artifact_654`, or `summary_987`)."
338
- },
339
- ids: {
340
- type: "array",
341
- items: { type: "string" },
342
- description: "Array of IDs to fetch (mix of context, task, skill, document, file, artifact, insight, or conversation IDs). Use this to fetch multiple items in one call."
343
- }
344
- }
345
- }
346
- },
347
- {
348
- name: "read_artifact",
349
- title: "Read Artifact",
350
- description: "Read one existing artifact by `artifact_id` without asking Tan to restream it in chat. Returns content plus render metadata and `config`/`state`/`data` when available. Prefer this when an external agent already has the artifact id and needs the current artifact payload directly.",
351
- inputSchema: {
352
- type: "object",
353
- properties: {
354
- space_id: {
355
- type: "string",
356
- description: "Optional: Space containing the artifact. Provide this for shared/org spaces so access checks resolve against the correct graph."
357
- },
358
- artifact_id: {
359
- type: "string",
360
- description: "REQUIRED: Existing artifact ID to read (e.g. `artifact_123`)."
361
- },
362
- item_id: {
363
- type: "string",
364
- description: "Optional alias for `artifact_id`."
365
- },
366
- organization_id: {
367
- type: "string",
368
- description: "Optional Clerk org ID when the space belongs to an organization graph."
271
+ items: {
272
+ oneOf: [
273
+ {
274
+ type: "object",
275
+ additionalProperties: false,
276
+ required: [
277
+ "op",
278
+ "title"
279
+ ],
280
+ properties: {
281
+ op: {
282
+ type: "string",
283
+ const: "create"
284
+ },
285
+ title: {
286
+ type: "string"
287
+ },
288
+ content: {
289
+ type: "string"
290
+ },
291
+ type: {
292
+ type: "string",
293
+ enum: [
294
+ "context",
295
+ "task",
296
+ "skill",
297
+ "artifact",
298
+ "insight"
299
+ ],
300
+ description: "Durable Item content kind. Skill and insight remain Items/Rooms, not separate product entities."
301
+ },
302
+ parent_id: {
303
+ type: [
304
+ "string",
305
+ "null"
306
+ ]
307
+ },
308
+ presentation: {
309
+ type: "string",
310
+ enum: [
311
+ "item",
312
+ "group",
313
+ "project",
314
+ "folder"
315
+ ],
316
+ description: "Optional Item presentation; this does not create a separate entity type."
317
+ },
318
+ attributes: {
319
+ type: "object",
320
+ additionalProperties: false,
321
+ properties: {
322
+ status: {
323
+ type: "string",
324
+ enum: [
325
+ "pending",
326
+ "in_progress",
327
+ "completed",
328
+ "invalidated"
329
+ ]
330
+ },
331
+ priority: {
332
+ type: "string",
333
+ enum: [
334
+ "urgent",
335
+ "high",
336
+ "medium",
337
+ "low"
338
+ ]
339
+ },
340
+ assignee: {
341
+ type: [
342
+ "object",
343
+ "null"
344
+ ],
345
+ additionalProperties: false,
346
+ properties: {
347
+ id: {
348
+ type: [
349
+ "string",
350
+ "null"
351
+ ]
352
+ },
353
+ type: {
354
+ type: [
355
+ "string",
356
+ "null"
357
+ ],
358
+ enum: [
359
+ "agent",
360
+ "user",
361
+ null
362
+ ]
363
+ }
364
+ },
365
+ required: [
366
+ "id",
367
+ "type"
368
+ ]
369
+ },
370
+ pinned: {
371
+ type: "boolean"
372
+ },
373
+ presentation: {
374
+ type: "string",
375
+ enum: [
376
+ "item",
377
+ "group",
378
+ "project",
379
+ "folder"
380
+ ],
381
+ description: "Item presentation only; never a separate entity or hierarchy authority."
382
+ },
383
+ icon: {
384
+ type: "string"
385
+ },
386
+ color: {
387
+ type: "string"
388
+ },
389
+ topics: {
390
+ type: "array",
391
+ items: {
392
+ type: "string"
393
+ },
394
+ description: "Topic tags stored on the Item and its topic relationships."
395
+ },
396
+ importance: {
397
+ type: "number",
398
+ minimum: 0,
399
+ maximum: 1,
400
+ description: "Optional importance score for an insight Item."
401
+ },
402
+ confidence: {
403
+ type: "number",
404
+ minimum: 0,
405
+ maximum: 1,
406
+ description: "Optional confidence score for an insight Item."
407
+ },
408
+ category: {
409
+ type: "string",
410
+ description: "Optional category for an insight Item."
411
+ },
412
+ source_type: {
413
+ type: "string",
414
+ description: "Optional provenance category for an insight Item."
415
+ }
416
+ }
417
+ }
418
+ }
419
+ },
420
+ {
421
+ type: "object",
422
+ additionalProperties: false,
423
+ required: [
424
+ "op",
425
+ "id"
426
+ ],
427
+ properties: {
428
+ op: {
429
+ type: "string",
430
+ const: "update"
431
+ },
432
+ id: {
433
+ type: "string"
434
+ },
435
+ title: {
436
+ type: "string"
437
+ },
438
+ content: {
439
+ type: "string"
440
+ },
441
+ attributes: {
442
+ type: "object",
443
+ additionalProperties: false,
444
+ properties: {
445
+ status: {
446
+ type: "string",
447
+ enum: [
448
+ "pending",
449
+ "in_progress",
450
+ "completed",
451
+ "invalidated"
452
+ ]
453
+ },
454
+ priority: {
455
+ type: "string",
456
+ enum: [
457
+ "urgent",
458
+ "high",
459
+ "medium",
460
+ "low"
461
+ ]
462
+ },
463
+ assignee: {
464
+ type: [
465
+ "object",
466
+ "null"
467
+ ],
468
+ additionalProperties: false,
469
+ properties: {
470
+ id: {
471
+ type: [
472
+ "string",
473
+ "null"
474
+ ]
475
+ },
476
+ type: {
477
+ type: [
478
+ "string",
479
+ "null"
480
+ ],
481
+ enum: [
482
+ "agent",
483
+ "user",
484
+ null
485
+ ]
486
+ }
487
+ },
488
+ required: [
489
+ "id",
490
+ "type"
491
+ ]
492
+ },
493
+ pinned: {
494
+ type: "boolean"
495
+ },
496
+ presentation: {
497
+ type: "string",
498
+ enum: [
499
+ "item",
500
+ "group",
501
+ "project",
502
+ "folder"
503
+ ],
504
+ description: "Item presentation only; never a separate entity or hierarchy authority."
505
+ },
506
+ icon: {
507
+ type: "string"
508
+ },
509
+ color: {
510
+ type: "string"
511
+ },
512
+ topics: {
513
+ type: "array",
514
+ items: {
515
+ type: "string"
516
+ },
517
+ description: "Topic tags stored on the Item and its topic relationships."
518
+ },
519
+ importance: {
520
+ type: "number",
521
+ minimum: 0,
522
+ maximum: 1,
523
+ description: "Optional importance score for an insight Item."
524
+ },
525
+ confidence: {
526
+ type: "number",
527
+ minimum: 0,
528
+ maximum: 1,
529
+ description: "Optional confidence score for an insight Item."
530
+ },
531
+ category: {
532
+ type: "string",
533
+ description: "Optional category for an insight Item."
534
+ },
535
+ source_type: {
536
+ type: "string",
537
+ description: "Optional provenance category for an insight Item."
538
+ }
539
+ }
540
+ }
541
+ }
542
+ },
543
+ {
544
+ type: "object",
545
+ additionalProperties: false,
546
+ required: [
547
+ "op",
548
+ "new_parent_id"
549
+ ],
550
+ oneOf: [
551
+ {
552
+ required: [
553
+ "ids"
554
+ ]
555
+ },
556
+ {
557
+ required: [
558
+ "criteria"
559
+ ]
560
+ }
561
+ ],
562
+ properties: {
563
+ op: {
564
+ type: "string",
565
+ const: "move"
566
+ },
567
+ ids: {
568
+ type: "array",
569
+ minItems: 1,
570
+ maxItems: 100,
571
+ items: {
572
+ type: "string"
573
+ }
574
+ },
575
+ criteria: {
576
+ type: "object",
577
+ additionalProperties: false,
578
+ minProperties: 1,
579
+ properties: {
580
+ source_parent_id: {
581
+ type: [
582
+ "string",
583
+ "null"
584
+ ],
585
+ description: "Select Items whose authoritative parent_id is this Item. Null selects Space-root Items."
586
+ },
587
+ under: {
588
+ type: "string",
589
+ description: "Direct-parent alias for source_parent_id. The current Space ID selects Space-root Items."
590
+ },
591
+ ungrouped: {
592
+ type: "boolean"
593
+ },
594
+ type: {
595
+ type: [
596
+ "string",
597
+ "null"
598
+ ]
599
+ },
600
+ status: {
601
+ type: [
602
+ "string",
603
+ "null"
604
+ ]
605
+ }
606
+ }
607
+ },
608
+ new_parent_id: {
609
+ type: [
610
+ "string",
611
+ "null"
612
+ ]
613
+ },
614
+ relative_to_id: {
615
+ type: [
616
+ "string",
617
+ "null"
618
+ ]
619
+ },
620
+ position: {
621
+ type: [
622
+ "string",
623
+ "null"
624
+ ],
625
+ enum: [
626
+ "before",
627
+ "after",
628
+ null
629
+ ]
630
+ },
631
+ dry_run: {
632
+ type: "boolean"
633
+ },
634
+ count_only: {
635
+ type: "boolean"
636
+ },
637
+ confirm_token: {
638
+ type: [
639
+ "string",
640
+ "null"
641
+ ]
642
+ },
643
+ limit: {
644
+ type: "integer",
645
+ minimum: 1,
646
+ maximum: 500
647
+ },
648
+ operation_id: {
649
+ type: [
650
+ "string",
651
+ "null"
652
+ ]
653
+ }
654
+ }
655
+ },
656
+ {
657
+ type: "object",
658
+ additionalProperties: false,
659
+ required: [
660
+ "op",
661
+ "ids"
662
+ ],
663
+ properties: {
664
+ op: {
665
+ type: "string",
666
+ const: "delete"
667
+ },
668
+ ids: {
669
+ type: "array",
670
+ minItems: 1,
671
+ maxItems: 100,
672
+ items: {
673
+ type: "string"
674
+ }
675
+ }
676
+ }
677
+ }
678
+ ]
679
+ }
369
680
  }
370
681
  },
371
- required: ["artifact_id"]
682
+ required: [
683
+ "space_id",
684
+ "operations"
685
+ ]
686
+ },
687
+ annotations: {
688
+ destructiveHint: true,
689
+ openWorldHint: true
372
690
  }
373
691
  },
374
692
  {
@@ -380,7 +698,9 @@ const TOOL_DEFINITIONS = [
380
698
  properties: {}
381
699
  },
382
700
  annotations: {
383
- readOnlyHint: true
701
+ readOnlyHint: true,
702
+ idempotentHint: true,
703
+ openWorldHint: true
384
704
  }
385
705
  },
386
706
  {
@@ -411,13 +731,21 @@ const TOOL_DEFINITIONS = [
411
731
  description: "Optional page size from 1 to 200 (default 50)."
412
732
  }
413
733
  },
414
- required: ["space_id", "conversation_id"]
734
+ required: [
735
+ "space_id",
736
+ "conversation_id"
737
+ ]
738
+ },
739
+ annotations: {
740
+ readOnlyHint: true,
741
+ idempotentHint: true,
742
+ openWorldHint: true
415
743
  }
416
744
  },
417
745
  {
418
746
  name: "subscribe_conversation",
419
747
  title: "Subscribe Conversation",
420
- description: "Register a participant in a shared conversation so it can use inbox and read-cursor tools without first sending a message. By default the subscription starts caught up at the latest message. External agents should reuse a stable participant_id, set participant_type to `agent`, and send a clear participant_label so Tan can distinguish callers.",
748
+ description: "Register the authenticated runner participant in a shared conversation so it can use inbox and read-cursor tools without first sending a message. By default the subscription starts caught up at the latest message.",
421
749
  inputSchema: {
422
750
  type: "object",
423
751
  properties: {
@@ -433,30 +761,24 @@ const TOOL_DEFINITIONS = [
433
761
  type: "string",
434
762
  description: "Optional Clerk org ID when the space belongs to an organization graph."
435
763
  },
436
- participant_id: {
437
- type: "string",
438
- description: "Optional stable participant ID. External agents should always reuse the same explicit `agent_*` style ID across message, subscribe_conversation, list_conversation_inbox, fetch_conversation_messages, and mark_conversation_read."
439
- },
440
- participant_type: {
441
- type: "string",
442
- description: "Optional participant type. External MCP callers should set this to `agent`. Supported values: `user`, `agent`, `assistant`, `connector`."
443
- },
444
- participant_label: {
445
- type: "string",
446
- description: "Optional display label for the participant in collaborative chat UIs. External agents should send a human-readable label such as `Claude Research` or `Codex Builder`."
447
- },
448
764
  mark_read: {
449
765
  type: "boolean",
450
766
  description: "Optional. Defaults to true. When true, the subscription starts caught up at the current latest message."
451
767
  }
452
768
  },
453
- required: ["space_id", "conversation_id"]
769
+ required: [
770
+ "space_id",
771
+ "conversation_id"
772
+ ]
773
+ },
774
+ annotations: {
775
+ openWorldHint: true
454
776
  }
455
777
  },
456
778
  {
457
779
  name: "list_conversation_inbox",
458
780
  title: "List Conversation Inbox",
459
- description: "List the conversations a participant is subscribed to in one space, with unread counts and read cursors. Use this to poll multiple shared threads efficiently without reloading full transcripts. Reuse the same participant_id, participant_type=`agent`, and participant_label so unread state stays attached to the right caller.",
781
+ description: "List the conversations the authenticated runner participant is subscribed to in one space, with unread counts and read cursors. Use this to poll multiple shared threads efficiently without reloading full transcripts.",
460
782
  inputSchema: {
461
783
  type: "object",
462
784
  properties: {
@@ -468,18 +790,6 @@ const TOOL_DEFINITIONS = [
468
790
  type: "string",
469
791
  description: "Optional Clerk org ID when the space belongs to an organization graph."
470
792
  },
471
- participant_id: {
472
- type: "string",
473
- description: "Optional stable participant ID. Use the exact same value you used for message and subscribe_conversation so the inbox stays tied to one external agent identity."
474
- },
475
- participant_type: {
476
- type: "string",
477
- description: "Optional participant type. External MCP callers should set this to `agent`. Supported values: `user`, `agent`, `assistant`, `connector`."
478
- },
479
- participant_label: {
480
- type: "string",
481
- description: "Optional display label used when the participant identity is being created for the first time. Reuse the same label for the same external agent."
482
- },
483
793
  unread_only: {
484
794
  type: "boolean",
485
795
  description: "Optional. When true, only return conversations that currently have unread messages."
@@ -493,13 +803,20 @@ const TOOL_DEFINITIONS = [
493
803
  description: "Optional page size from 1 to 200 (default 50)."
494
804
  }
495
805
  },
496
- required: ["space_id"]
806
+ required: [
807
+ "space_id"
808
+ ]
809
+ },
810
+ annotations: {
811
+ readOnlyHint: true,
812
+ idempotentHint: true,
813
+ openWorldHint: true
497
814
  }
498
815
  },
499
816
  {
500
817
  name: "mark_conversation_read",
501
818
  title: "Mark Conversation Read",
502
- description: "Advance a participant's read cursor for a shared conversation. Use this after processing messages returned from fetch_conversation_messages so unread counts stay accurate for external agents and separate callers do not share one cursor.",
819
+ description: "Advance the authenticated runner participant's read cursor for a shared conversation. Use this after processing messages returned from fetch_conversation_messages so unread counts stay accurate and separate runners do not share one cursor.",
503
820
  inputSchema: {
504
821
  type: "object",
505
822
  properties: {
@@ -515,518 +832,44 @@ const TOOL_DEFINITIONS = [
515
832
  type: "string",
516
833
  description: "Optional Clerk org ID when the space belongs to an organization graph."
517
834
  },
518
- participant_id: {
519
- type: "string",
520
- description: "Optional stable participant ID. Use the same value you used for message, subscribe_conversation, and list_conversation_inbox."
521
- },
522
- participant_type: {
523
- type: "string",
524
- description: "Optional participant type. External MCP callers should set this to `agent`. Supported values: `user`, `agent`, `assistant`, `connector`."
525
- },
526
- participant_label: {
527
- type: "string",
528
- description: "Optional display label used when the participant identity is being created for the first time. Reuse the same label for the same external agent."
529
- },
530
835
  read_at: {
531
836
  type: "integer",
532
837
  description: "Optional millisecond cursor to advance to. If omitted, the conversation is marked read through its latest message."
533
838
  }
534
839
  },
535
- required: ["space_id", "conversation_id"]
840
+ required: [
841
+ "space_id",
842
+ "conversation_id"
843
+ ]
844
+ },
845
+ annotations: {
846
+ openWorldHint: true
536
847
  }
537
848
  },
538
849
  {
539
- name: "view_groups",
540
- title: "View Groups",
541
- description: "List all groups in a space, including the projects currently inside each group plus any ungrouped projects.",
850
+ name: "view_spaces",
851
+ title: "View Spaces",
852
+ description: "View the spaces this connector can access so you can choose the right space for memory, communicating and collaborating with Tan agent. If your connector is scoped to one space, you will only see that space. Use the exact space_id from this list for all space-scoped tools.",
542
853
  inputSchema: {
543
854
  type: "object",
544
- properties: {
545
- space_id: {
546
- type: "string",
547
- description: "REQUIRED: Space to list groups from (use view_spaces to see available options)"
548
- }
549
- },
550
- required: ["space_id"]
855
+ properties: {}
856
+ },
857
+ annotations: {
858
+ readOnlyHint: true,
859
+ idempotentHint: true,
860
+ openWorldHint: true
551
861
  }
552
862
  },
553
863
  {
554
- name: "create_group",
555
- title: "Create Group",
556
- description: "Create a new group inside a space.",
864
+ name: "message",
865
+ title: "Message Assistant",
866
+ description: "Primary way to use Intangle for memory, communicating and collaborating with Tan agent in a shared thread. Send a request and either wait for one assistant turn to complete or submit asynchronously for later polling. Intangle derives the durable participant identity from the authenticated runner rather than caller-supplied fields. Conversations are backed by `summary_*` IDs; reuse the returned `conversation_id` and reuse the returned `session_id` so callers can continue the same thread reliably across turns. For shared coordination channels, pass a stable `channel_id`; channel and project/group coordinates scope context, while the stable idempotency key anchors retries to one durable turn and the returned conversation_id remains the durable thread anchor.",
557
867
  inputSchema: {
558
868
  type: "object",
559
869
  properties: {
560
870
  space_id: {
561
871
  type: "string",
562
- description: "REQUIRED: Space to create the group in."
563
- },
564
- name: {
565
- type: "string",
566
- description: "Name for the new group."
567
- }
568
- },
569
- required: ["space_id", "name"]
570
- }
571
- },
572
- {
573
- name: "rename_group",
574
- title: "Rename Group",
575
- description: "Rename an existing group.",
576
- inputSchema: {
577
- type: "object",
578
- properties: {
579
- space_id: {
580
- type: "string",
581
- description: "REQUIRED: Space containing the group."
582
- },
583
- group_id: {
584
- type: "string",
585
- description: "REQUIRED: Group ID to rename."
586
- },
587
- name: {
588
- type: "string",
589
- description: "REQUIRED: New group name."
590
- }
591
- },
592
- required: ["space_id", "group_id", "name"]
593
- }
594
- },
595
- {
596
- name: "delete_group",
597
- title: "Delete Group",
598
- description: "Delete a group. Projects inside it are preserved and become ungrouped.",
599
- inputSchema: {
600
- type: "object",
601
- properties: {
602
- space_id: {
603
- type: "string",
604
- description: "REQUIRED: Space containing the group."
605
- },
606
- group_id: {
607
- type: "string",
608
- description: "REQUIRED: Group ID to delete."
609
- }
610
- },
611
- required: ["space_id", "group_id"]
612
- }
613
- },
614
- {
615
- name: "view_projects",
616
- title: "View Projects",
617
- description: "List all projects in a space, including which group each project belongs to.",
618
- inputSchema: {
619
- type: "object",
620
- properties: {
621
- space_id: {
622
- type: "string",
623
- description: "REQUIRED: Space to list projects from (use view_spaces to see available options)"
624
- }
625
- },
626
- required: ["space_id"]
627
- }
628
- },
629
- {
630
- name: "view_project",
631
- title: "View Project",
632
- description: "View a specific project with all its items. Use fetch_items to retrieve full content for specific item IDs.",
633
- inputSchema: {
634
- type: "object",
635
- properties: {
636
- project_id: {
637
- type: "string",
638
- description: "Project ID to view (e.g., 'proj_123...'). Get project IDs from view_projects."
639
- },
640
- space_id: {
641
- type: "string",
642
- description: "REQUIRED: Space containing the project."
643
- },
644
- slug: {
645
- type: "string",
646
- description: "Optional: Project slug (URL-friendly name)."
647
- }
648
- },
649
- required: ["space_id"]
650
- }
651
- },
652
- {
653
- name: "create_project",
654
- title: "Create Project",
655
- description: "Create a new project in a space. Optionally place it inside a group immediately.",
656
- inputSchema: {
657
- type: "object",
658
- properties: {
659
- space_id: {
660
- type: "string",
661
- description: "REQUIRED: Space to create the project in."
662
- },
663
- name: {
664
- type: "string",
665
- description: "REQUIRED: Project name."
666
- },
667
- group_id: {
668
- type: "string",
669
- description: "Optional: Group ID to place the project inside."
670
- }
671
- },
672
- required: ["space_id", "name"]
673
- }
674
- },
675
- {
676
- name: "rename_project",
677
- title: "Rename Project",
678
- description: "Rename an existing project.",
679
- inputSchema: {
680
- type: "object",
681
- properties: {
682
- space_id: {
683
- type: "string",
684
- description: "REQUIRED: Space containing the project."
685
- },
686
- project_id: {
687
- type: "string",
688
- description: "REQUIRED: Project ID to rename."
689
- },
690
- name: {
691
- type: "string",
692
- description: "REQUIRED: New project name."
693
- }
694
- },
695
- required: ["space_id", "project_id", "name"]
696
- }
697
- },
698
- {
699
- name: "delete_project",
700
- title: "Delete Project",
701
- description: "Delete an existing project from a space.",
702
- inputSchema: {
703
- type: "object",
704
- properties: {
705
- space_id: {
706
- type: "string",
707
- description: "REQUIRED: Space containing the project."
708
- },
709
- project_id: {
710
- type: "string",
711
- description: "REQUIRED: Project ID to delete."
712
- }
713
- },
714
- required: ["space_id", "project_id"]
715
- }
716
- },
717
- {
718
- name: "assign_project_to_group",
719
- title: "Assign Project To Group",
720
- description: "Move a project into a group. Omit group_id to make the project ungrouped.",
721
- inputSchema: {
722
- type: "object",
723
- properties: {
724
- space_id: {
725
- type: "string",
726
- description: "REQUIRED: Space containing the project."
727
- },
728
- project_id: {
729
- type: "string",
730
- description: "REQUIRED: Project ID to move."
731
- },
732
- group_id: {
733
- type: "string",
734
- description: "Optional: Target group ID. Omit this to ungroup the project."
735
- }
736
- },
737
- required: ["space_id", "project_id"]
738
- }
739
- },
740
- {
741
- name: "view_spaces",
742
- title: "View Spaces",
743
- description: "View the spaces this connector can access so you can choose the right space for memory, communicating and collaborating with Tan agent. If your connector is scoped to one space, you will only see that space. Use the exact space_id from this list for all space-scoped tools.",
744
- inputSchema: {
745
- type: "object",
746
- properties: {}
747
- }
748
- },
749
- {
750
- name: "view_space",
751
- title: "View Space",
752
- description: "View detailed information about a space including configuration and overview. Use this when you need the exact active scope before saving memory or communicating and collaborating with Tan agent.",
753
- inputSchema: {
754
- type: "object",
755
- properties: {
756
- space_id: {
757
- type: "string",
758
- description: "ID of space to get info for"
759
- }
760
- },
761
- required: ["space_id"]
762
- }
763
- },
764
- {
765
- name: "update_memory",
766
- title: "Update Memory",
767
- description: "Add, update, or delete items in a space. Supports any combination of operations in a single call.\n\nIMPORTANT: Include at least one operation: add, update, or delete.\n\nTIPS FOR RICH MEMORY: The more context you provide, the smarter the system becomes:\n- Include WHY something matters, not just WHAT it is\n- Note user preferences, patterns, and approaches you observe\n- Describe repeatable workflows as skills (step-by-step procedures)\n- Link related items using parent_id or linkedItemIds\n- Prefer updating an existing related memory when the new information refines or extends it instead of creating a duplicate\n- Use descriptive titles that capture the essence\n- Add context about decisions, reasoning, and outcomes\n- Every write should reassess the surrounding scope and improve organization when possible: prefer updating, merging, linking, reparenting, or retitling existing items over spraying disconnected new ones\n\nUse project_id and group_id when you know the active project or group scope. The system learns from patterns - sharing how the user works helps it anticipate their needs.",
768
- inputSchema: {
769
- type: "object",
770
- properties: {
771
- space_id: {
772
- type: "string",
773
- description: "REQUIRED: Space to operate in (use view_spaces to see available options)"
774
- },
775
- project_id: {
776
- type: "string",
777
- description: "Optional: Project to add items to. All items created in this request will be linked to this project and appear on its canvas. Get project IDs from view_projects or search."
778
- },
779
- group_id: {
780
- type: "string",
781
- description: "Optional: Group to add items to. Use this alongside project_id when the current item belongs in a group."
782
- },
783
- add: {
784
- type: "object",
785
- description: "Add new items. ALWAYS pass 'type' field on each item to skip expensive auto-classification.",
786
- properties: {
787
- items: {
788
- type: "array",
789
- items: {
790
- type: "object",
791
- properties: {
792
- title: { type: "string", description: "Item title" },
793
- content: {
794
- type: "string",
795
- description: "Item content. VALUABLE CONTENT INCLUDES: decisions and their reasoning, user preferences observed, lessons learned, process descriptions, meeting outcomes, project context, expertise areas, working patterns, and anything that would help future sessions understand this user/space better."
796
- },
797
- type: {
798
- type: "string",
799
- enum: ["task", "context", "skill", "document", "insight"],
800
- description: "REQUIRED: Item type. 'task' for actionable items, 'context' for knowledge/facts, 'skill' for workflows, 'document' for long-form reference material, 'insight' for durable patterns/principles. Omitting this triggers expensive auto-classification."
801
- },
802
- subtasks: {
803
- type: "array",
804
- items: {
805
- type: "object",
806
- properties: {
807
- title: { type: "string", description: "Subtask title" },
808
- content: {
809
- type: "string",
810
- description: "Subtask details"
811
- }
812
- },
813
- required: ["title"]
814
- },
815
- description: "Optional: Array of subtasks for task items. Each subtask becomes a linked child task."
816
- },
817
- parent_id: {
818
- type: "string",
819
- description: "Optional: Parent item ID (mem_*, task_*, or skill_*). Links this item as a child of the parent."
820
- },
821
- assignee_id: {
822
- type: "string",
823
- description: "Optional: Assignee ID (user or agent ID) for task assignment on creation."
824
- },
825
- assignee_type: {
826
- type: "string",
827
- enum: ["agent", "user"],
828
- description: "Optional: Type of assignee (agent or user). Required if assignee_id provided."
829
- },
830
- linkedItemIds: {
831
- type: "array",
832
- items: { type: "string" },
833
- description: "Optional: Array of item IDs to create explicit LINKED_TO relationships with."
834
- }
835
- },
836
- required: ["title", "content", "type"]
837
- },
838
- description: "Array of items to add. ALWAYS pass 'type' field to skip auto-classification. System suggests 1-3 relevant topics based on content. Tasks can include subtasks array for hierarchical task management. Before adding, check whether updating, merging, linking, or reparenting an existing item would keep the touched scope cleaner."
839
- }
840
- }
841
- },
842
- update: {
843
- type: "object",
844
- description: "Update existing items (context, tasks, or skills) - system detects type from ID prefix",
845
- properties: {
846
- items: {
847
- type: "array",
848
- items: {
849
- type: "object",
850
- properties: {
851
- id: {
852
- type: "string",
853
- description: "Item ID to update (mem_* for context, task_* for tasks, skill_* for skills)"
854
- },
855
- title: {
856
- type: "string",
857
- description: "New title (optional)"
858
- },
859
- content: {
860
- type: "string",
861
- description: "New content (optional)"
862
- },
863
- topics: {
864
- type: "array",
865
- items: { type: "string" },
866
- description: "New topics (optional)"
867
- },
868
- status: {
869
- type: "string",
870
- enum: [
871
- "pending",
872
- "in_progress",
873
- "completed",
874
- "invalidated"
875
- ],
876
- description: "New status (optional, tasks only)"
877
- },
878
- priority: {
879
- type: "string",
880
- enum: ["urgent", "high", "medium", "low"],
881
- description: "New priority (optional, tasks only)"
882
- },
883
- assignee_id: {
884
- type: "string",
885
- description: "Assignee ID (user or agent ID). Set to null to unassign. (optional, tasks only)"
886
- },
887
- assignee_type: {
888
- type: "string",
889
- enum: ["agent", "user"],
890
- description: "Type of assignee (optional, tasks only)"
891
- },
892
- parent_id: {
893
- type: "string",
894
- description: "Optional: Parent item ID (mem_*, task_*, or skill_*). Links this item as a child of the parent."
895
- },
896
- linkedItemIds: {
897
- type: "array",
898
- items: { type: "string" },
899
- description: "Optional: Array of item IDs to create explicit LINKED_TO relationships with."
900
- }
901
- },
902
- required: ["id"]
903
- },
904
- description: "Array of items to update. Type automatically detected from ID prefix (mem_* = context, task_* = task, skill_* = skill). For context/skill items, status/priority/assignee are ignored. Treat updates as a chance to improve title clarity, links, parent placement, deduplication, and overall organization of the touched scope."
905
- }
906
- }
907
- },
908
- delete: {
909
- type: "object",
910
- description: "Delete items by ID - system detects type from ID prefix",
911
- properties: {
912
- item_ids: {
913
- type: "array",
914
- items: { type: "string" },
915
- description: "Array of item IDs to delete (mem_* for context, task_* for tasks, skill_* for skills). Type automatically detected from ID prefix."
916
- }
917
- }
918
- }
919
- },
920
- required: ["space_id"]
921
- }
922
- },
923
- {
924
- name: "update_folders",
925
- title: "Update Folders",
926
- description: "Unified folder management. Supports list, create, rename, move_items, and delete operations in one call so external MCP callers can organize memory the same way as the in-app assistant.",
927
- inputSchema: {
928
- type: "object",
929
- properties: {
930
- space_id: {
931
- type: "string",
932
- description: "REQUIRED: Space to operate in (use view_spaces to see available options)."
933
- },
934
- list: {
935
- type: "object",
936
- description: "Optional list operation. Use this first to discover existing folders and IDs.",
937
- properties: {
938
- section_type: {
939
- type: "string",
940
- enum: [
941
- "projects",
942
- "insights",
943
- "insights_space",
944
- "insights_user",
945
- "agents",
946
- "skills",
947
- "dashboard"
948
- ],
949
- description: "Optional: filter folders by sidebar section."
950
- }
951
- }
952
- },
953
- create: {
954
- type: "array",
955
- description: "Optional create operations.",
956
- items: {
957
- type: "object",
958
- properties: {
959
- name: { type: "string", description: "Folder name." },
960
- section_type: {
961
- type: "string",
962
- enum: [
963
- "projects",
964
- "insights",
965
- "insights_space",
966
- "insights_user",
967
- "agents",
968
- "skills",
969
- "dashboard"
970
- ],
971
- description: "Sidebar section this folder belongs to."
972
- },
973
- parent_id: {
974
- type: "string",
975
- description: "Optional parent folder ID for nesting."
976
- }
977
- },
978
- required: ["name", "section_type"]
979
- }
980
- },
981
- rename: {
982
- type: "array",
983
- description: "Optional rename operations.",
984
- items: {
985
- type: "object",
986
- properties: {
987
- folder_id: {
988
- type: "string",
989
- description: "Folder ID to rename."
990
- },
991
- new_name: { type: "string", description: "New folder name." }
992
- },
993
- required: ["folder_id", "new_name"]
994
- }
995
- },
996
- move_items: {
997
- type: "array",
998
- description: "Optional item move operations. Omit folder_id to move an item back to root.",
999
- items: {
1000
- type: "object",
1001
- properties: {
1002
- item_id: { type: "string", description: "Item ID to move." },
1003
- folder_id: {
1004
- type: "string",
1005
- description: "Optional target folder ID. Omit this field to remove the item from its current folder."
1006
- }
1007
- },
1008
- required: ["item_id"]
1009
- }
1010
- },
1011
- delete: {
1012
- type: "array",
1013
- description: "Optional delete operations (folder IDs).",
1014
- items: { type: "string" }
1015
- }
1016
- },
1017
- required: ["space_id"]
1018
- }
1019
- },
1020
- {
1021
- name: "message",
1022
- title: "Message Assistant",
1023
- description: "Primary way to use Intangle for memory, communicating and collaborating with Tan agent in a shared thread. Send a request and either wait for one assistant turn to complete or submit asynchronously for later polling. External agents should include a stable participant_id, participant_type=`agent`, and participant_label so Tan can identify who is speaking and keep progress updates attached to the right caller. Conversations are backed by `summary_*` IDs; reuse the returned `conversation_id` and reuse the returned `session_id` so callers can continue the same thread reliably across turns. For shared coordination channels, pass a stable `channel_id`; channel and project/group coordinates scope context, while the stable idempotency key anchors retries to one durable turn and the returned conversation_id remains the durable thread anchor.",
1024
- inputSchema: {
1025
- type: "object",
1026
- properties: {
1027
- space_id: {
1028
- type: "string",
1029
- description: "Space to run the assistant turn in (use view_spaces first)."
872
+ description: "Space to run the assistant turn in (use view_spaces first)."
1030
873
  },
1031
874
  content: {
1032
875
  type: "string",
@@ -1081,103 +924,20 @@ const TOOL_DEFINITIONS = [
1081
924
  pattern: "\\S",
1082
925
  description: "REQUIRED stable retry key for this logical message within its room. Reuse it exactly on retry; Phoenix atomically claims one dispatch and replays the original session_id, real conversation_id, and durable result state."
1083
926
  },
1084
- participant_id: {
1085
- type: "string",
1086
- description: "Optional stable participant ID for collaborative/shared chats. External agents should always send and reuse an explicit `agent_*` style ID so Tan can tell different external agents apart."
1087
- },
1088
- participant_type: {
1089
- type: "string",
1090
- description: "Optional participant type. External MCP callers should set this to `agent`. Supported values: `user`, `agent`, `assistant`, `connector`."
1091
- },
1092
- participant_label: {
1093
- type: "string",
1094
- description: "Optional display label for the participant in collaborative chat UIs. External agents should send a clear label that Tan can use in follow-up coordination."
1095
- },
1096
927
  timezone: {
1097
928
  type: "string",
1098
929
  description: "Optional IANA timezone for assistant context."
1099
930
  }
1100
931
  },
1101
- required: ["space_id", "content", "idempotency_key"]
932
+ required: [
933
+ "space_id",
934
+ "content",
935
+ "idempotency_key"
936
+ ]
937
+ },
938
+ annotations: {
939
+ openWorldHint: true
1102
940
  }
1103
- },
1104
- ...HIGHQ_DIRECT_TOOLS
1105
- // DISABLED: memory_action tool is broken and causing errors.
1106
- // Pending OHM protocol fix. Use update_memory, search, or fetch_items instead.
1107
- // {
1108
- // name: "memory_action",
1109
- // title: "Memory Action (OHM Protocol)",
1110
- // description:
1111
- // "Perform memory operations using natural language. Add, update, delete items, fetch details, view topics. The system parses your intent into structured actions. Do NOT use for search - context comes from background activation.",
1112
- // inputSchema: {
1113
- // type: "object",
1114
- // properties: {
1115
- // space_id: {
1116
- // type: "string",
1117
- // description: "The space to operate in"
1118
- // },
1119
- // intent: {
1120
- // type: "string",
1121
- // description:
1122
- // "Natural language description of the memory operation (e.g., 'add a task to fix the login bug', 'mark task_123 as completed', 'delete mem_456')"
1123
- // }
1124
- // },
1125
- // required: ["space_id", "intent"]
1126
- // }
1127
- // }
1128
- ];
1129
- // Retain implementation dispatch for stored calls and older clients while
1130
- // removing the superseded names from model-facing MCP discovery.
1131
- const PUBLIC_COMPATIBILITY_ALIASES = new Set([
1132
- "assign_project_to_group",
1133
- "create_group",
1134
- "create_project",
1135
- "delete_group",
1136
- "delete_project",
1137
- "fetch_items",
1138
- "read_artifact",
1139
- "rename_group",
1140
- "rename_project",
1141
- "update_folders",
1142
- "update_memory",
1143
- "view_groups",
1144
- "view_project",
1145
- "view_projects",
1146
- "view_space"
1147
- ]);
1148
- const READ_ONLY_TOOLS = new Set([
1149
- "search",
1150
- "get_items",
1151
- "usage_status",
1152
- "fetch_conversation_messages",
1153
- "list_conversation_inbox",
1154
- "view_spaces",
1155
- "view_space",
1156
- "HIGHQ_LIST_PENDING_REVIEWS",
1157
- "HIGHQ_RESOLVE_FOLDER_PATH",
1158
- "HIGHQ_LIST_FOLDER_FILES",
1159
- "HIGHQ_GET_FILE_CONTENT"
1160
- ]);
1161
- const DESTRUCTIVE_TOOLS = new Set(["update_items", "HIGHQ_FILL_LEGAL_REPORT"]);
1162
- const IDEMPOTENT_TOOLS = new Set([
1163
- "search",
1164
- "get_items",
1165
- "usage_status",
1166
- "fetch_conversation_messages",
1167
- "list_conversation_inbox",
1168
- "view_spaces",
1169
- "view_space",
1170
- "HIGHQ_LIST_PENDING_REVIEWS",
1171
- "HIGHQ_RESOLVE_FOLDER_PATH",
1172
- "HIGHQ_LIST_FOLDER_FILES",
1173
- "HIGHQ_GET_FILE_CONTENT"
1174
- ]);
1175
- export const TOOLS = TOOL_DEFINITIONS.filter((tool) => !PUBLIC_COMPATIBILITY_ALIASES.has(tool.name)).map((tool) => ({
1176
- ...tool,
1177
- annotations: {
1178
- ...(READ_ONLY_TOOLS.has(tool.name) ? { readOnlyHint: true } : {}),
1179
- ...(DESTRUCTIVE_TOOLS.has(tool.name) ? { destructiveHint: true } : {}),
1180
- ...(IDEMPOTENT_TOOLS.has(tool.name) ? { idempotentHint: true } : {}),
1181
- openWorldHint: true
1182
941
  }
1183
- }));
942
+ ];
943
+ export const TOOLS = [...BASE_TOOLS, ...HIGHQ_DIRECT_TOOLS];