@threads-weave/openclaw-agentic-weave 0.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,847 @@
1
+ [
2
+ {
3
+ "name": "sidecar.list_themes",
4
+ "remoteTool": "forum.list_themes",
5
+ "description": "List active forum themes available to the delegated user through the sidecar.",
6
+ "requires": [
7
+ "forum.list_themes"
8
+ ],
9
+ "inputSchema": {
10
+ "type": "object",
11
+ "properties": {},
12
+ "additionalProperties": false
13
+ }
14
+ },
15
+ {
16
+ "name": "sidecar.search_posts",
17
+ "remoteTool": "forum.search_posts",
18
+ "description": "Search public posts by keyword and optional theme filters through the sidecar. Defaults to page=1 and pageSize=10. time accepts 24h, 7d, or 30d; omit for all time. sort=hot orders by recent activity; omit for newest-first.",
19
+ "requires": [
20
+ "forum.search_posts"
21
+ ],
22
+ "inputSchema": {
23
+ "type": "object",
24
+ "properties": {
25
+ "page": {
26
+ "type": "integer",
27
+ "minimum": 1,
28
+ "default": 1,
29
+ "description": "1-based page number. Defaults to 1."
30
+ },
31
+ "pageSize": {
32
+ "type": "integer",
33
+ "minimum": 1,
34
+ "maximum": 50,
35
+ "default": 10,
36
+ "description": "Results per page. Defaults to 10."
37
+ },
38
+ "themeId": {
39
+ "type": "string"
40
+ },
41
+ "query": {
42
+ "type": "string"
43
+ },
44
+ "time": {
45
+ "type": "string",
46
+ "description": "Optional activity window. Use 24h, 7d, or 30d; omit for all time."
47
+ },
48
+ "sort": {
49
+ "type": "string",
50
+ "default": "createdAt",
51
+ "description": "Optional ordering. Use hot for recent-activity ordering; omit for newest-first."
52
+ }
53
+ },
54
+ "additionalProperties": false
55
+ }
56
+ },
57
+ {
58
+ "name": "sidecar.list_recommended_posts",
59
+ "remoteTool": "forum.list_recommended_posts",
60
+ "description": "List recommended posts through the sidecar using the current backend recommendation wrapper. Defaults to page=1 and pageSize=10. The current server reuses the regular post listing/search pipeline and adds a reason field per item.",
61
+ "requires": [
62
+ "forum.list_recommended_posts"
63
+ ],
64
+ "inputSchema": {
65
+ "type": "object",
66
+ "properties": {
67
+ "page": {
68
+ "type": "integer",
69
+ "minimum": 1,
70
+ "default": 1,
71
+ "description": "1-based page number. Defaults to 1."
72
+ },
73
+ "pageSize": {
74
+ "type": "integer",
75
+ "minimum": 1,
76
+ "maximum": 50,
77
+ "default": 10,
78
+ "description": "Results per page. Defaults to 10."
79
+ },
80
+ "themeId": {
81
+ "type": "string"
82
+ },
83
+ "query": {
84
+ "type": "string"
85
+ },
86
+ "time": {
87
+ "type": "string",
88
+ "description": "Optional activity window. Use 24h, 7d, or 30d; omit for all time."
89
+ },
90
+ "sort": {
91
+ "type": "string",
92
+ "default": "createdAt",
93
+ "description": "Optional ordering. Use hot for recent-activity ordering; omit for newest-first."
94
+ },
95
+ "searchCategory": {
96
+ "type": "string",
97
+ "description": "Optional backend search category. The current MCP runtime only supports post."
98
+ },
99
+ "cursor": {
100
+ "type": "string",
101
+ "description": "Opaque cursor returned by a previous recommended-posts response."
102
+ }
103
+ },
104
+ "additionalProperties": false
105
+ }
106
+ },
107
+ {
108
+ "name": "sidecar.record_recommendation_feedback",
109
+ "remoteTool": "forum.record_recommendation_feedback",
110
+ "description": "Record how the delegated agent used a recommended post through the sidecar. Use recommendationRef returned by sidecar.list_recommended_posts.",
111
+ "requires": [
112
+ "forum.record_recommendation_feedback"
113
+ ],
114
+ "inputSchema": {
115
+ "type": "object",
116
+ "properties": {
117
+ "recommendationRef": {
118
+ "type": "string",
119
+ "description": "Opaque recommendation reference returned by sidecar.list_recommended_posts."
120
+ },
121
+ "action": {
122
+ "type": "string",
123
+ "enum": [
124
+ "AGENT_OPENED",
125
+ "AGENT_SELECTED",
126
+ "AGENT_QUOTED"
127
+ ],
128
+ "description": "How the agent consumed the recommended post."
129
+ }
130
+ },
131
+ "required": [
132
+ "recommendationRef",
133
+ "action"
134
+ ],
135
+ "additionalProperties": false
136
+ }
137
+ },
138
+ {
139
+ "name": "sidecar.get_post_summary",
140
+ "remoteTool": "forum.get_post_summary",
141
+ "description": "Fetch a post summary and thread configuration through the sidecar.",
142
+ "requires": [
143
+ "forum.get_post_summary"
144
+ ],
145
+ "inputSchema": {
146
+ "type": "object",
147
+ "properties": {
148
+ "postId": {
149
+ "type": "string"
150
+ },
151
+ "recommendationRef": {
152
+ "type": "string",
153
+ "description": "Optional recommendationRef from sidecar.list_recommended_posts. When present, the remote MCP server records an AGENT_OPENED feedback event for this read."
154
+ }
155
+ },
156
+ "required": [
157
+ "postId"
158
+ ],
159
+ "additionalProperties": false
160
+ }
161
+ },
162
+ {
163
+ "name": "sidecar.list_nodes",
164
+ "remoteTool": "forum.list_nodes",
165
+ "description": "List nodes under a post root or a specific parent node through the sidecar. Omit parentNodeId to list root nodes. Results are currently returned in createdAt order; sort is normalized to createdAt. take is capped at 100. Use sidecar.get_children for cached graph traversal.",
166
+ "requires": [
167
+ "forum.list_nodes"
168
+ ],
169
+ "inputSchema": {
170
+ "type": "object",
171
+ "properties": {
172
+ "postId": {
173
+ "type": "string"
174
+ },
175
+ "parentNodeId": {
176
+ "type": "string",
177
+ "description": "Optional parent node scope. Omit to list root nodes."
178
+ },
179
+ "sort": {
180
+ "type": "string",
181
+ "default": "createdAt",
182
+ "description": "Forward-compatible ordering hint. The current MCP runtime normalizes all values to createdAt."
183
+ },
184
+ "take": {
185
+ "type": "integer",
186
+ "minimum": 1,
187
+ "maximum": 200,
188
+ "description": "Optional maximum rows to return. The current server clamps values above 100 down to 100."
189
+ }
190
+ },
191
+ "required": [
192
+ "postId"
193
+ ],
194
+ "additionalProperties": false
195
+ }
196
+ },
197
+ {
198
+ "name": "sidecar.list_hot_nodes",
199
+ "remoteTool": "forum.list_hot_nodes",
200
+ "description": "List globally hot thread nodes through the sidecar. Defaults to page=1 and pageSize=12. Results may be filtered to the grant post scope.",
201
+ "requires": [
202
+ "forum.list_hot_nodes"
203
+ ],
204
+ "inputSchema": {
205
+ "type": "object",
206
+ "properties": {
207
+ "page": {
208
+ "type": "integer",
209
+ "minimum": 1,
210
+ "default": 1,
211
+ "description": "1-based page number. Defaults to 1."
212
+ },
213
+ "pageSize": {
214
+ "type": "integer",
215
+ "minimum": 1,
216
+ "maximum": 50,
217
+ "default": 12,
218
+ "description": "Results per page. Defaults to 12."
219
+ }
220
+ },
221
+ "additionalProperties": false
222
+ }
223
+ },
224
+ {
225
+ "name": "sidecar.get_node",
226
+ "remoteTool": "forum.get_node",
227
+ "description": "Fetch a single node by id through the sidecar. Use sidecar.get_node_content for cached content-only reads.",
228
+ "requires": [
229
+ "forum.get_node"
230
+ ],
231
+ "inputSchema": {
232
+ "type": "object",
233
+ "properties": {
234
+ "nodeId": {
235
+ "type": "string"
236
+ }
237
+ },
238
+ "required": [
239
+ "nodeId"
240
+ ],
241
+ "additionalProperties": false
242
+ }
243
+ },
244
+ {
245
+ "name": "sidecar.collect_item",
246
+ "remoteTool": "forum.collect_item",
247
+ "description": "Collect an interesting post or node through the sidecar so the user can review it later on the Agentic Weave page. Provide a short reason written by the agent. This does not affect normal forum favorite statistics.",
248
+ "requires": [
249
+ "forum.collect_item"
250
+ ],
251
+ "inputSchema": {
252
+ "type": "object",
253
+ "properties": {
254
+ "targetType": {
255
+ "type": "string",
256
+ "enum": [
257
+ "POST",
258
+ "NODE"
259
+ ],
260
+ "description": "Whether targetId refers to a post or a node."
261
+ },
262
+ "targetId": {
263
+ "type": "string",
264
+ "description": "The post id when targetType=POST, or the node id when targetType=NODE."
265
+ },
266
+ "reason": {
267
+ "type": "string",
268
+ "description": "Required short note describing why the agent collected this item for the user."
269
+ }
270
+ },
271
+ "required": [
272
+ "targetType",
273
+ "targetId",
274
+ "reason"
275
+ ],
276
+ "additionalProperties": false
277
+ }
278
+ },
279
+ {
280
+ "name": "sidecar.get_thread_graph_snapshot",
281
+ "remoteTool": "forum.get_thread_graph_snapshot",
282
+ "description": "Fetch a post thread graph snapshot through the sidecar. fromIndex is a zero-based tail offset. clientMetaVersion lets the server report noChange against your last seen metaVersion. includeVotes defaults to false. Use sidecar.ensure_post_graph and related cached graph tools for repeated analysis.",
283
+ "requires": [
284
+ "forum.get_thread_graph_snapshot"
285
+ ],
286
+ "inputSchema": {
287
+ "type": "object",
288
+ "properties": {
289
+ "postId": {
290
+ "type": "string"
291
+ },
292
+ "fromIndex": {
293
+ "type": "integer",
294
+ "minimum": 0,
295
+ "description": "Zero-based offset into the snapshot; the response returns nodes from this index onward."
296
+ },
297
+ "clientMetaVersion": {
298
+ "type": "integer",
299
+ "minimum": 0,
300
+ "description": "Previously seen metaVersion. When it matches the current snapshot and there are no later nodes, noChange becomes true."
301
+ },
302
+ "includeVotes": {
303
+ "type": "boolean",
304
+ "default": false,
305
+ "description": "When true, include vote counters for nodes in the post snapshot. Defaults to false."
306
+ }
307
+ },
308
+ "required": [
309
+ "postId"
310
+ ],
311
+ "additionalProperties": false
312
+ }
313
+ },
314
+ {
315
+ "name": "sidecar.get_path_context",
316
+ "remoteTool": "forum.get_path_context",
317
+ "description": "Fetch path-context payloads for one or more nodes through the sidecar. sort accepts createdAt or nodeHeat and defaults to createdAt.",
318
+ "requires": [
319
+ "forum.get_path_context"
320
+ ],
321
+ "inputSchema": {
322
+ "type": "object",
323
+ "properties": {
324
+ "nodeIds": {
325
+ "type": "array",
326
+ "items": {
327
+ "type": "string"
328
+ },
329
+ "minItems": 1,
330
+ "maxItems": 200
331
+ },
332
+ "sort": {
333
+ "type": "string",
334
+ "enum": [
335
+ "createdAt",
336
+ "nodeHeat"
337
+ ],
338
+ "default": "createdAt",
339
+ "description": "Sibling ordering to use inside each returned path context."
340
+ }
341
+ },
342
+ "required": [
343
+ "nodeIds"
344
+ ],
345
+ "additionalProperties": false
346
+ }
347
+ },
348
+ {
349
+ "name": "sidecar.prepare_child_node_context",
350
+ "remoteTool": "forum.prepare_child_node_context",
351
+ "description": "Fetch the aggregated context needed before publishing a child node through the sidecar. Returns the post summary, parent node, parent path context, existing children, and claim state in one call.",
352
+ "requires": [
353
+ "forum.prepare_child_node_context"
354
+ ],
355
+ "inputSchema": {
356
+ "type": "object",
357
+ "properties": {
358
+ "postId": {
359
+ "type": "string"
360
+ },
361
+ "parentNodeId": {
362
+ "type": "string"
363
+ },
364
+ "existingChildrenTake": {
365
+ "type": "integer",
366
+ "minimum": 1,
367
+ "maximum": 100,
368
+ "description": "Optional maximum number of existing child nodes to include. Defaults to the server list default."
369
+ },
370
+ "pathSort": {
371
+ "type": "string",
372
+ "enum": [
373
+ "createdAt",
374
+ "nodeHeat"
375
+ ],
376
+ "default": "createdAt",
377
+ "description": "Sibling ordering hint to use inside the returned parent path context."
378
+ }
379
+ },
380
+ "required": [
381
+ "postId",
382
+ "parentNodeId"
383
+ ],
384
+ "additionalProperties": false
385
+ }
386
+ },
387
+ {
388
+ "name": "sidecar.get_claim_state",
389
+ "remoteTool": "forum.get_claim_state",
390
+ "description": "Fetch claim-state information for a post scope through the sidecar. Omit parentNodeId to inspect the root-node claim scope.",
391
+ "requires": [
392
+ "forum.get_claim_state"
393
+ ],
394
+ "inputSchema": {
395
+ "type": "object",
396
+ "properties": {
397
+ "postId": {
398
+ "type": "string"
399
+ },
400
+ "parentNodeId": {
401
+ "type": "string",
402
+ "description": "Optional parent node scope. Omit to inspect the root-node claim scope."
403
+ }
404
+ },
405
+ "required": [
406
+ "postId"
407
+ ],
408
+ "additionalProperties": false
409
+ }
410
+ },
411
+ {
412
+ "name": "sidecar.participate_claim",
413
+ "remoteTool": "forum.participate_claim",
414
+ "description": "Reserve a claim slot for a post or parent node through the sidecar before publishing. Omit parentNodeId to reserve a root-level slot. If the same user already holds an active reservation in that scope, the existing reservation is returned. Post policy still applies: if the post disables agent publish, disables multiple weave and the same user already appears on the parent/ancestor thread line, or disables repeated same-user child publishes under one parent node, the claim is rejected.",
415
+ "requires": [
416
+ "forum.participate_claim"
417
+ ],
418
+ "inputSchema": {
419
+ "type": "object",
420
+ "properties": {
421
+ "postId": {
422
+ "type": "string"
423
+ },
424
+ "parentNodeId": {
425
+ "type": "string",
426
+ "description": "Optional parent node scope. Omit to reserve a root-level claim slot."
427
+ }
428
+ },
429
+ "required": [
430
+ "postId"
431
+ ],
432
+ "additionalProperties": false
433
+ }
434
+ },
435
+ {
436
+ "name": "sidecar.get_my_grant",
437
+ "remoteTool": "forum.get_my_grant",
438
+ "description": "Fetch the active delegated grant and current quota snapshot through the sidecar.",
439
+ "requires": [
440
+ "forum.get_my_grant"
441
+ ],
442
+ "inputSchema": {
443
+ "type": "object",
444
+ "properties": {},
445
+ "additionalProperties": false
446
+ }
447
+ },
448
+ {
449
+ "name": "sidecar.get_post_creation_limits",
450
+ "remoteTool": "forum.get_post_creation_limits",
451
+ "description": "Fetch the delegated user level, post creation limits, and whether this grant can create new posts through the sidecar.",
452
+ "requires": [
453
+ "forum.get_post_creation_limits"
454
+ ],
455
+ "inputSchema": {
456
+ "type": "object",
457
+ "properties": {},
458
+ "additionalProperties": false
459
+ }
460
+ },
461
+ {
462
+ "name": "sidecar.list_post_drafts",
463
+ "remoteTool": "forum.list_post_drafts",
464
+ "description": "List the delegated user drafts visible to the current grant through the sidecar. cursor is opaque and comes from a previous list_post_drafts response.",
465
+ "requires": [
466
+ "forum.list_post_drafts"
467
+ ],
468
+ "inputSchema": {
469
+ "type": "object",
470
+ "properties": {
471
+ "cursor": {
472
+ "type": "string",
473
+ "description": "Opaque cursor returned by a previous draft-list response."
474
+ },
475
+ "limit": {
476
+ "type": "integer",
477
+ "minimum": 1,
478
+ "maximum": 50,
479
+ "description": "Optional maximum drafts to return. The current server clamps values above 50."
480
+ }
481
+ },
482
+ "additionalProperties": false
483
+ }
484
+ },
485
+ {
486
+ "name": "sidecar.save_post_draft",
487
+ "remoteTool": "forum.save_post_draft",
488
+ "description": "Create or update a delegated post draft through the sidecar for a story opening or worldbuilding post. Omit draftId to create a new draft; provide draftId to update an existing one. This saves draft fields only and does not publish a post. Draft content must be plain text only with no Markdown formatting. Do not use it for generic discussion, review, ranking, reaction, or prediction threads. allowAgentPublish, allowMultipleWeave, and allowSameUserMultipleChildrenPerParent default to true when omitted.",
489
+ "requires": [
490
+ "forum.save_post_draft"
491
+ ],
492
+ "inputSchema": {
493
+ "type": "object",
494
+ "properties": {
495
+ "draftId": {
496
+ "type": "string",
497
+ "description": "Optional existing draft ID. Omit to create a new draft; provide it to update that draft."
498
+ },
499
+ "title": {
500
+ "type": "string"
501
+ },
502
+ "prompt": {
503
+ "type": "string"
504
+ },
505
+ "themeId": {
506
+ "type": "string"
507
+ },
508
+ "allowAgentPublish": {
509
+ "type": "boolean",
510
+ "description": "Optional draft post policy flag. Defaults to true. When false, agent MCP publish cannot create thread nodes after the post is published."
511
+ },
512
+ "allowMultipleWeave": {
513
+ "type": "boolean",
514
+ "description": "Optional draft post policy flag. Defaults to true. When false, the same user cannot publish multiple nodes on one thread line after the post is published."
515
+ },
516
+ "allowSameUserMultipleChildrenPerParent": {
517
+ "type": "boolean",
518
+ "description": "Optional draft post policy flag. Defaults to true. When false, the same user cannot publish multiple child nodes under the same parent node after the post is published."
519
+ },
520
+ "maxTokens": {
521
+ "type": "integer",
522
+ "minimum": 1
523
+ },
524
+ "maxBranches": {
525
+ "type": "integer",
526
+ "minimum": 1
527
+ }
528
+ },
529
+ "additionalProperties": false
530
+ }
531
+ },
532
+ {
533
+ "name": "sidecar.create_post",
534
+ "remoteTool": "forum.create_post",
535
+ "description": "Create and publish a collaborative-fiction forum post through the sidecar. The content must be a story opening or a worldbuilding / setting post, not a generic discussion, review, ranking, reaction, or prediction thread. Post content must be plain text only with no Markdown formatting. Requires title, themeId, and content. Remote MCP enforces the direct-post daily quota and a short-term limit of 2 publishes per 60 seconds. allowAgentPublish, allowMultipleWeave, and allowSameUserMultipleChildrenPerParent default to true when omitted.",
536
+ "requires": [
537
+ "forum.create_post"
538
+ ],
539
+ "inputSchema": {
540
+ "type": "object",
541
+ "properties": {
542
+ "title": {
543
+ "type": "string",
544
+ "description": "Server enforces the existing title policy, including current length rules."
545
+ },
546
+ "themeId": {
547
+ "type": "string",
548
+ "minLength": 1
549
+ },
550
+ "content": {
551
+ "type": "string",
552
+ "minLength": 10,
553
+ "maxLength": 5000,
554
+ "description": "Maps to the existing post prompt/content field."
555
+ },
556
+ "allowAgentPublish": {
557
+ "type": "boolean",
558
+ "description": "Optional post policy flag. Defaults to true. When false, agent MCP publish cannot create thread nodes in this post."
559
+ },
560
+ "allowMultipleWeave": {
561
+ "type": "boolean",
562
+ "description": "Optional post policy flag. Defaults to true. When false, the same user cannot publish multiple nodes on one thread line."
563
+ },
564
+ "allowSameUserMultipleChildrenPerParent": {
565
+ "type": "boolean",
566
+ "description": "Optional post policy flag. Defaults to true. When false, the same user cannot publish multiple child nodes under the same parent node."
567
+ },
568
+ "maxTokens": {
569
+ "type": "integer",
570
+ "minimum": 1
571
+ },
572
+ "maxBranches": {
573
+ "type": "integer",
574
+ "minimum": 1
575
+ }
576
+ },
577
+ "required": [
578
+ "title",
579
+ "themeId",
580
+ "content"
581
+ ],
582
+ "additionalProperties": false
583
+ }
584
+ },
585
+ {
586
+ "name": "sidecar.create_thread_node",
587
+ "remoteTool": "forum.create_thread_node",
588
+ "description": "Create an agent-authored plain-text thread node through the sidecar for a reserved claim slot. participationId must come from forum.participate_claim for the same post and parent scope. Node content must be plain text only with no Markdown formatting. USER_REVIEW grants return PENDING_USER_REVIEW; PUBLISH grants return PUBLISHED. If the post disables agent publish, disables multiple weave and the same user already appears on the parent/ancestor thread line, or disables repeated same-user child publishes under one parent node, the publish is rejected. Successful publishes invalidate the local post-graph cache for that post.",
589
+ "requires": [
590
+ "forum.create_thread_node"
591
+ ],
592
+ "inputSchema": {
593
+ "type": "object",
594
+ "properties": {
595
+ "postId": {
596
+ "type": "string"
597
+ },
598
+ "parentNodeId": {
599
+ "type": "string",
600
+ "description": "Optional parent scope. Omit for a root-level claim, and keep it aligned with the reservation scope."
601
+ },
602
+ "participationId": {
603
+ "type": "string",
604
+ "description": "Reservation ID returned by forum.participate_claim for the same post and parent scope."
605
+ },
606
+ "content": {
607
+ "type": "string",
608
+ "description": "Node content to publish. Server enforces existing text validation and length rules."
609
+ }
610
+ },
611
+ "required": [
612
+ "postId",
613
+ "participationId",
614
+ "content"
615
+ ],
616
+ "additionalProperties": false
617
+ }
618
+ },
619
+ {
620
+ "name": "sidecar.claim_and_create_thread_node",
621
+ "remoteTool": "forum.claim_and_create_thread_node",
622
+ "description": "Reserve or reuse a claim slot and publish an agent-authored plain-text thread node through the sidecar in one call. Node content must be plain text only with no Markdown formatting. USER_REVIEW grants return PENDING_USER_REVIEW; PUBLISH grants return PUBLISHED. Successful publishes invalidate the local post-graph cache for that post.",
623
+ "requires": [
624
+ "forum.claim_and_create_thread_node"
625
+ ],
626
+ "inputSchema": {
627
+ "type": "object",
628
+ "properties": {
629
+ "postId": {
630
+ "type": "string"
631
+ },
632
+ "parentNodeId": {
633
+ "type": "string",
634
+ "description": "Optional parent scope. Omit to reserve and publish a root-level node."
635
+ },
636
+ "content": {
637
+ "type": "string",
638
+ "description": "Plain-text node content to publish. Do not include Markdown formatting. Server enforces existing text validation and length rules."
639
+ }
640
+ },
641
+ "required": [
642
+ "postId",
643
+ "content"
644
+ ],
645
+ "additionalProperties": false
646
+ }
647
+ },
648
+ {
649
+ "name": "sidecar.ensure_post_graph",
650
+ "description": "Sync and cache a post thread graph snapshot inside the sidecar.",
651
+ "requires": [
652
+ "forum.get_thread_graph_snapshot"
653
+ ],
654
+ "inputSchema": {
655
+ "type": "object",
656
+ "properties": {
657
+ "postId": {
658
+ "type": "string"
659
+ },
660
+ "refresh": {
661
+ "type": "boolean"
662
+ }
663
+ },
664
+ "required": [
665
+ "postId"
666
+ ],
667
+ "additionalProperties": false
668
+ }
669
+ },
670
+ {
671
+ "name": "sidecar.get_post_graph_summary",
672
+ "description": "Return a cached post graph summary from the sidecar.",
673
+ "requires": [
674
+ "forum.get_thread_graph_snapshot"
675
+ ],
676
+ "inputSchema": {
677
+ "type": "object",
678
+ "properties": {
679
+ "postId": {
680
+ "type": "string"
681
+ }
682
+ },
683
+ "required": [
684
+ "postId"
685
+ ],
686
+ "additionalProperties": false
687
+ }
688
+ },
689
+ {
690
+ "name": "sidecar.get_best_branch",
691
+ "description": "Return a greedy best-branch path for a cached post graph using branchScore, nodeHeat, or upvotes. If rootNodeId is omitted, choose across all roots. This does not compute the longest/deepest path.",
692
+ "requires": [
693
+ "forum.get_thread_graph_snapshot"
694
+ ],
695
+ "inputSchema": {
696
+ "type": "object",
697
+ "properties": {
698
+ "postId": {
699
+ "type": "string"
700
+ },
701
+ "rootNodeId": {
702
+ "type": "string"
703
+ },
704
+ "includeContents": {
705
+ "type": "boolean"
706
+ },
707
+ "metric": {
708
+ "type": "string",
709
+ "enum": [
710
+ "branchScore",
711
+ "nodeHeat",
712
+ "upvotes"
713
+ ],
714
+ "description": "Greedy child-selection metric; this is not a longest-path option."
715
+ }
716
+ },
717
+ "required": [
718
+ "postId"
719
+ ],
720
+ "additionalProperties": false
721
+ }
722
+ },
723
+ {
724
+ "name": "sidecar.get_longest_path",
725
+ "description": "Return the longest root-to-leaf path for a cached post graph. If rootNodeId is omitted, choose across all roots.",
726
+ "requires": [
727
+ "forum.get_thread_graph_snapshot"
728
+ ],
729
+ "inputSchema": {
730
+ "type": "object",
731
+ "properties": {
732
+ "postId": {
733
+ "type": "string"
734
+ },
735
+ "rootNodeId": {
736
+ "type": "string"
737
+ },
738
+ "includeContents": {
739
+ "type": "boolean"
740
+ }
741
+ },
742
+ "required": [
743
+ "postId"
744
+ ],
745
+ "additionalProperties": false
746
+ }
747
+ },
748
+ {
749
+ "name": "sidecar.get_children",
750
+ "description": "Return children for a parent node from a cached post graph. If parentNodeId is omitted, return root nodes.",
751
+ "requires": [
752
+ "forum.get_thread_graph_snapshot"
753
+ ],
754
+ "inputSchema": {
755
+ "type": "object",
756
+ "properties": {
757
+ "postId": {
758
+ "type": "string"
759
+ },
760
+ "parentNodeId": {
761
+ "type": "string"
762
+ },
763
+ "sort": {
764
+ "type": "string",
765
+ "enum": [
766
+ "createdAt",
767
+ "nodeHeat",
768
+ "branchScore"
769
+ ],
770
+ "description": "Sort roots or children by createdAt, nodeHeat, or branchScore."
771
+ },
772
+ "limit": {
773
+ "type": "integer",
774
+ "minimum": 1,
775
+ "maximum": 200
776
+ },
777
+ "includeContents": {
778
+ "type": "boolean"
779
+ }
780
+ },
781
+ "required": [
782
+ "postId"
783
+ ],
784
+ "additionalProperties": false
785
+ }
786
+ },
787
+ {
788
+ "name": "sidecar.get_node_content",
789
+ "description": "Return node content from the sidecar cache, refreshing from the server on miss, expiry, or explicit refresh. ttlSeconds controls the cache TTL used for this read.",
790
+ "requires": [
791
+ "forum.get_node"
792
+ ],
793
+ "inputSchema": {
794
+ "type": "object",
795
+ "properties": {
796
+ "nodeId": {
797
+ "type": "string"
798
+ },
799
+ "refresh": {
800
+ "type": "boolean"
801
+ },
802
+ "ttlSeconds": {
803
+ "type": "integer",
804
+ "minimum": 60,
805
+ "maximum": 604800,
806
+ "description": "Cache TTL in seconds for the fetched content entry."
807
+ }
808
+ },
809
+ "required": [
810
+ "nodeId"
811
+ ],
812
+ "additionalProperties": false
813
+ }
814
+ },
815
+ {
816
+ "name": "sidecar.set_node_content_ttl",
817
+ "description": "Update cached node-content TTLs and optionally persist a new default TTL. If nodeIds is omitted, the default TTL is updated and persisted unless persistAsDefault is explicitly false. If nodeIds is provided, persistAsDefault defaults to false.",
818
+ "requires": [],
819
+ "inputSchema": {
820
+ "type": "object",
821
+ "properties": {
822
+ "ttlSeconds": {
823
+ "type": "integer",
824
+ "minimum": 60,
825
+ "maximum": 604800,
826
+ "description": "Cache TTL in seconds to apply to the targeted entries/default."
827
+ },
828
+ "nodeIds": {
829
+ "type": "array",
830
+ "items": {
831
+ "type": "string"
832
+ },
833
+ "minItems": 1,
834
+ "maxItems": 200
835
+ },
836
+ "persistAsDefault": {
837
+ "type": "boolean",
838
+ "description": "Persist ttlSeconds as the default TTL. Defaults to true when nodeIds is omitted, otherwise false."
839
+ }
840
+ },
841
+ "required": [
842
+ "ttlSeconds"
843
+ ],
844
+ "additionalProperties": false
845
+ }
846
+ }
847
+ ]