@wowok/agent-mcp 2.5.1 → 2.5.2

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.
@@ -78,6 +78,7 @@ export const ProjectOperationInputSchema = z
78
78
  "aggregate_risks",
79
79
  "generate_deployment_doc",
80
80
  "trace_substeps",
81
+ "get_project_status",
81
82
  ])
82
83
  .describe("Action to perform. Two categories:\n" +
83
84
  "1. Graph Query (10): list_projects, list_objects, shareable, dependencies, referenced_by, pre_publish_check, cross_project_refs, graph_stats, save_graph, load_graph.\n" +
@@ -279,6 +280,9 @@ const AnalyzeIntentResultSchema = z
279
280
  puzzles: z.record(z.string(), PuzzleEntrySchema),
280
281
  overall_completeness: z.enum(["complete", "partial", "empty"]),
281
282
  next_step: z.string(),
283
+ recommended_creation_order: z
284
+ .array(z.string())
285
+ .describe("Recommended object creation order based on dependency topology (e.g. ['permission','progress','guard','allocation','machine','service'])."),
282
286
  next_action: z
283
287
  .enum(["aggregate_risks", "none"])
284
288
  .describe("Next project_operation action to call. 'aggregate_risks' when puzzles are complete enough; 'none' if user must fill missing fields first."),
@@ -330,6 +334,16 @@ const AggregateRisksResultSchema = z
330
334
  entry_id: z.string(),
331
335
  }))
332
336
  .optional(),
337
+ fix_suggestions_grouped: z
338
+ .record(z.string(), z.array(z.object({
339
+ risk_rule_id: z.string(),
340
+ severity: z.enum(["CRITICAL", "HIGH", "MEDIUM", "LOW", "INFO"]),
341
+ message: z.string(),
342
+ fix_suggestion: z.string(),
343
+ entry_id: z.string(),
344
+ })))
345
+ .optional()
346
+ .describe("Fix suggestions grouped by object_type for better readability."),
333
347
  calibrated_at: z.number().int(),
334
348
  warnings: z.array(z.string()),
335
349
  can_proceed: z
@@ -367,6 +381,19 @@ const GenerateDeploymentDocResultSchema = z
367
381
  })
368
382
  .optional()
369
383
  .describe("Scanner validation result. Present when run_scanner=true."),
384
+ estimated_gas: z
385
+ .object({
386
+ total_gas_mist: z.number().int().describe("Estimated total gas in MIST (1 WOW = 10^9 MIST)."),
387
+ per_object: z.array(z.object({
388
+ entry_id: z.string(),
389
+ object_type: z.string(),
390
+ create_gas_mist: z.number().int(),
391
+ publish_gas_mist: z.number().int(),
392
+ })),
393
+ publish_gas_mist: z.number().int().describe("Gas for publish operations only."),
394
+ })
395
+ .optional()
396
+ .describe("Gas cost estimate for deploying all objects."),
370
397
  can_proceed: z
371
398
  .boolean()
372
399
  .describe("Whether the user can proceed to stage 5. False when D-errors exist."),
@@ -429,6 +456,23 @@ const TraceSubstepsResultSchema = z
429
456
  user_action_required: z.string(),
430
457
  })
431
458
  .strict();
459
+ const GetProjectStatusResultSchema = z
460
+ .object({
461
+ action: z.literal("get_project_status"),
462
+ project: z.string(),
463
+ version: z.string(),
464
+ stage: z.number().int().min(1).max(5),
465
+ stage_name: z.string(),
466
+ stage_description: z.string(),
467
+ next_action: z.string().describe("The next project_operation action to call."),
468
+ can_proceed: z.boolean(),
469
+ last_updated: z.number().int().optional().describe("Timestamp of last stage update (ms)."),
470
+ risk_status: z.string().optional(),
471
+ risk_can_proceed: z.boolean().optional(),
472
+ doc_generated: z.boolean().optional(),
473
+ trace_coherent: z.boolean().optional(),
474
+ })
475
+ .strict();
432
476
  export const ProjectOperationOutputSchema = z
433
477
  .object({
434
478
  result: z.discriminatedUnion("action", [
@@ -465,6 +509,7 @@ export const ProjectOperationOutputSchema = z
465
509
  AggregateRisksResultSchema,
466
510
  GenerateDeploymentDocResultSchema,
467
511
  TraceSubstepsResultSchema,
512
+ GetProjectStatusResultSchema,
468
513
  ]).describe("Query result — shape depends on action"),
469
514
  })
470
515
  .strict();
@@ -2,7 +2,7 @@
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "title": "WoWok MCP Schema Index",
4
4
  "description": "Index of all available JSON schemas for WoWok MCP tools",
5
- "generatedAt": "2026-07-21T13:52:06.712Z",
5
+ "generatedAt": "2026-07-21T22:17:57.943Z",
6
6
  "tools": [
7
7
  {
8
8
  "name": "onchain_operations",
@@ -83,583 +83,6 @@
83
83
  "data"
84
84
  ],
85
85
  "definitions": {
86
- "guard_namedNew": {
87
- "anyOf": [
88
- {
89
- "not": {}
90
- },
91
- {
92
- "type": "object",
93
- "properties": {
94
- "name": {
95
- "type": "string",
96
- "description": "The name of the object"
97
- },
98
- "tags": {
99
- "type": "array",
100
- "items": {
101
- "type": "string"
102
- },
103
- "description": "The tags of the object"
104
- },
105
- "onChain": {
106
- "type": "boolean",
107
- "description": "CRITICAL: Whether to sync the name to the blockchain. DEFAULT (undefined/false): The name is stored LOCALLY ONLY on your device (PRIVATE). If set to true: The name is published ON-CHAIN and becomes PUBLICLY VISIBLE to everyone. Only set to true for displaying the relationships you are willing to make public on the chain."
108
- },
109
- "replaceExistName": {
110
- "type": "boolean",
111
- "description": "FORCE CLAIM: Set to true ONLY when the user explicitly expresses a STRONG INTENTION to forcefully take over an existing name (e.g., 'I must use this name', 'force rename', 'replace the existing one'). WARNING: This will UNBIND the name from its original object and rebind it to the new one, potentially breaking existing references. If not specified or false: the operation will FAIL with an error when the name is already in use (safe default behavior)."
112
- }
113
- },
114
- "additionalProperties": false,
115
- "description": "Assign a name and optional tags to a new object. By default, names are stored LOCALLY (private) on your device. Set 'onChain: true' to create a PUBLIC on-chain identity visible to everyone. IMPORTANT: If the requested name is already taken, the operation will FAIL by default. Only set 'replaceExistName: true' when the user EXPLICITLY demands to forcefully claim the name."
116
- }
117
- ],
118
- "description": "Name and optional tags for the new Guard object. Set 'onChain: true' to create a public on-chain identity. When using root.type='file', this field OVERRIDES namedNew in the file."
119
- },
120
- "guard_description": {
121
- "anyOf": [
122
- {
123
- "not": {}
124
- },
125
- {
126
- "type": "string",
127
- "description": "Description string (max 4000 bcs characters)"
128
- }
129
- ],
130
- "description": "Guard description. When using root.type='file', this field OVERRIDES description in the file."
131
- },
132
- "guard_table": {
133
- "anyOf": [
134
- {
135
- "not": {}
136
- },
137
- {
138
- "type": "array",
139
- "items": {
140
- "type": "object",
141
- "properties": {
142
- "identifier": {
143
- "type": "integer",
144
- "minimum": 0,
145
- "maximum": 255,
146
- "description": "Identifier (0-255) for data lookup in Guard table."
147
- },
148
- "b_submission": {
149
- "type": "boolean",
150
- "description": "Whether user submission is required for this data"
151
- },
152
- "value_type": {
153
- "anyOf": [
154
- {
155
- "type": "number",
156
- "const": 0,
157
- "description": "Bool (0)"
158
- },
159
- {
160
- "type": "number",
161
- "const": 1,
162
- "description": "Address (1)"
163
- },
164
- {
165
- "type": "number",
166
- "const": 2,
167
- "description": "String (2)"
168
- },
169
- {
170
- "type": "number",
171
- "const": 3,
172
- "description": "U8 (3)"
173
- },
174
- {
175
- "type": "number",
176
- "const": 4,
177
- "description": "U16 (4)"
178
- },
179
- {
180
- "type": "number",
181
- "const": 5,
182
- "description": "U32 (5)"
183
- },
184
- {
185
- "type": "number",
186
- "const": 6,
187
- "description": "U64 (6)"
188
- },
189
- {
190
- "type": "number",
191
- "const": 7,
192
- "description": "U128 (7)"
193
- },
194
- {
195
- "type": "number",
196
- "const": 8,
197
- "description": "U256 (8)"
198
- },
199
- {
200
- "type": "number",
201
- "const": 9,
202
- "description": "VecBool (9)"
203
- },
204
- {
205
- "type": "number",
206
- "const": 10,
207
- "description": "VecAddress (10)"
208
- },
209
- {
210
- "type": "number",
211
- "const": 11,
212
- "description": "VecString (11)"
213
- },
214
- {
215
- "type": "number",
216
- "const": 12,
217
- "description": "VecU8 (12)"
218
- },
219
- {
220
- "type": "number",
221
- "const": 13,
222
- "description": "VecU16 (13)"
223
- },
224
- {
225
- "type": "number",
226
- "const": 14,
227
- "description": "VecU32 (14)"
228
- },
229
- {
230
- "type": "number",
231
- "const": 15,
232
- "description": "VecU64 (15)"
233
- },
234
- {
235
- "type": "number",
236
- "const": 16,
237
- "description": "VecU128 (16)"
238
- },
239
- {
240
- "type": "number",
241
- "const": 17,
242
- "description": "VecU256 (17)"
243
- },
244
- {
245
- "type": "number",
246
- "const": 18,
247
- "description": "VecVecU8 (18)"
248
- },
249
- {
250
- "type": "string",
251
- "const": "Bool",
252
- "description": "Bool"
253
- },
254
- {
255
- "type": "string",
256
- "const": "Address",
257
- "description": "Address"
258
- },
259
- {
260
- "type": "string",
261
- "const": "String",
262
- "description": "String"
263
- },
264
- {
265
- "type": "string",
266
- "const": "U8",
267
- "description": "U8"
268
- },
269
- {
270
- "type": "string",
271
- "const": "U16",
272
- "description": "U16"
273
- },
274
- {
275
- "type": "string",
276
- "const": "U32",
277
- "description": "U32"
278
- },
279
- {
280
- "type": "string",
281
- "const": "U64",
282
- "description": "U64"
283
- },
284
- {
285
- "type": "string",
286
- "const": "U128",
287
- "description": "U128"
288
- },
289
- {
290
- "type": "string",
291
- "const": "U256",
292
- "description": "U256"
293
- },
294
- {
295
- "type": "string",
296
- "const": "VecBool",
297
- "description": "VecBool"
298
- },
299
- {
300
- "type": "string",
301
- "const": "VecAddress",
302
- "description": "VecAddress"
303
- },
304
- {
305
- "type": "string",
306
- "const": "VecString",
307
- "description": "VecString"
308
- },
309
- {
310
- "type": "string",
311
- "const": "VecU8",
312
- "description": "VecU8"
313
- },
314
- {
315
- "type": "string",
316
- "const": "VecU16",
317
- "description": "VecU16"
318
- },
319
- {
320
- "type": "string",
321
- "const": "VecU32",
322
- "description": "VecU32"
323
- },
324
- {
325
- "type": "string",
326
- "const": "VecU64",
327
- "description": "VecU64"
328
- },
329
- {
330
- "type": "string",
331
- "const": "VecU128",
332
- "description": "VecU128"
333
- },
334
- {
335
- "type": "string",
336
- "const": "VecU256",
337
- "description": "VecU256"
338
- },
339
- {
340
- "type": "string",
341
- "const": "VecVecU8",
342
- "description": "VecVecU8"
343
- },
344
- {
345
- "type": "string",
346
- "const": "bool",
347
- "description": "bool"
348
- },
349
- {
350
- "type": "string",
351
- "const": "address",
352
- "description": "address"
353
- },
354
- {
355
- "type": "string",
356
- "const": "string",
357
- "description": "string"
358
- },
359
- {
360
- "type": "string",
361
- "const": "u8",
362
- "description": "u8"
363
- },
364
- {
365
- "type": "string",
366
- "const": "u16",
367
- "description": "u16"
368
- },
369
- {
370
- "type": "string",
371
- "const": "u32",
372
- "description": "u32"
373
- },
374
- {
375
- "type": "string",
376
- "const": "u64",
377
- "description": "u64"
378
- },
379
- {
380
- "type": "string",
381
- "const": "u128",
382
- "description": "u128"
383
- },
384
- {
385
- "type": "string",
386
- "const": "u256",
387
- "description": "u256"
388
- },
389
- {
390
- "type": "string",
391
- "const": "vecbool",
392
- "description": "vecbool"
393
- },
394
- {
395
- "type": "string",
396
- "const": "vecaddress",
397
- "description": "vecaddress"
398
- },
399
- {
400
- "type": "string",
401
- "const": "vecstring",
402
- "description": "vecstring"
403
- },
404
- {
405
- "type": "string",
406
- "const": "vecu8",
407
- "description": "vecu8"
408
- },
409
- {
410
- "type": "string",
411
- "const": "vecu16",
412
- "description": "vecu16"
413
- },
414
- {
415
- "type": "string",
416
- "const": "vecu32",
417
- "description": "vecu32"
418
- },
419
- {
420
- "type": "string",
421
- "const": "vecu64",
422
- "description": "vecu64"
423
- },
424
- {
425
- "type": "string",
426
- "const": "vecu128",
427
- "description": "vecu128"
428
- },
429
- {
430
- "type": "string",
431
- "const": "vecu256",
432
- "description": "vecu256"
433
- },
434
- {
435
- "type": "string",
436
- "const": "vecvecu8",
437
- "description": "vecvecu8"
438
- }
439
- ],
440
- "description": "Type of the value"
441
- },
442
- "value": {
443
- "anyOf": [
444
- {
445
- "type": "boolean"
446
- },
447
- {
448
- "anyOf": [
449
- {
450
- "type": "object",
451
- "properties": {
452
- "name_or_address": {
453
- "type": "string",
454
- "description": "Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."
455
- },
456
- "local_mark_first": {
457
- "type": "boolean",
458
- "description": "Whether to prioritize local marks, if true, prioritize local marks, otherwise prioritize global marks"
459
- }
460
- },
461
- "additionalProperties": false,
462
- "description": "Account or address lookup object. Use this to specify which account to use for an operation. EXAMPLE: { name_or_address: 'testor2' } - looks up account by name; EXAMPLE: { name_or_address: '0x1234...' } - uses address directly; If name_or_address is empty string '', uses the default local account."
463
- },
464
- {
465
- "type": "string"
466
- }
467
- ]
468
- },
469
- {
470
- "type": "string"
471
- },
472
- {
473
- "type": "number"
474
- },
475
- {
476
- "type": "array",
477
- "items": {
478
- "type": "boolean"
479
- }
480
- },
481
- {
482
- "anyOf": [
483
- {
484
- "type": "object",
485
- "properties": {
486
- "entities": {
487
- "type": "array",
488
- "items": {
489
- "$ref": "#/definitions/guard_table/anyOf/1/items/properties/value/anyOf/1/anyOf/0"
490
- }
491
- },
492
- "check_all_founded": {
493
- "type": "boolean",
494
- "description": "Whether to check all entities are found, if true, all entities must be found (abort and throw exception if any ID not found); if false, only return found IDs"
495
- }
496
- },
497
- "required": [
498
- "entities"
499
- ],
500
- "additionalProperties": false,
501
- "description": "Used to batch find account or object IDs by name"
502
- },
503
- {
504
- "type": "array",
505
- "items": {
506
- "type": "string"
507
- }
508
- }
509
- ]
510
- },
511
- {
512
- "type": "array",
513
- "items": {
514
- "type": "string"
515
- }
516
- },
517
- {
518
- "type": "array",
519
- "items": {
520
- "type": "number"
521
- }
522
- },
523
- {
524
- "type": "array",
525
- "items": {
526
- "type": "array",
527
- "items": {
528
- "type": "number"
529
- }
530
- }
531
- }
532
- ],
533
- "description": "The actual value data"
534
- },
535
- "name": {
536
- "type": "string",
537
- "default": "",
538
- "description": "Name or description of this data"
539
- }
540
- },
541
- "required": [
542
- "identifier",
543
- "b_submission",
544
- "value_type"
545
- ],
546
- "additionalProperties": false,
547
- "description": "Guard table item"
548
- }
549
- }
550
- ],
551
- "description": "Data table of the Guard object. When using root.type='file', this field OVERRIDES table in the file."
552
- },
553
- "guard_rely": {
554
- "anyOf": [
555
- {
556
- "not": {}
557
- },
558
- {
559
- "type": "object",
560
- "properties": {
561
- "guards": {
562
- "type": "array",
563
- "items": {
564
- "type": "string",
565
- "description": "Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."
566
- },
567
- "description": "List of dependent Guard object IDs or names."
568
- },
569
- "logic_or": {
570
- "type": "boolean",
571
- "description": "Whether to use logical OR operator."
572
- }
573
- },
574
- "required": [
575
- "guards"
576
- ],
577
- "additionalProperties": false
578
- }
579
- ],
580
- "description": "All Guard objects that the new Guard object depends on. If logic_or is true, the execution result of the new Guard object is the logical OR of the execution results of all dependent Guard objects; otherwise, it is logical AND. When using root.type='file', this field OVERRIDES rely in the file."
581
- },
582
- "guard_binding_hint": {
583
- "anyOf": [
584
- {
585
- "not": {}
586
- },
587
- {
588
- "type": "object",
589
- "properties": {
590
- "action": {
591
- "type": "string",
592
- "enum": [
593
- "buy",
594
- "forward",
595
- "allocate",
596
- "claim_reward",
597
- "vote",
598
- "dispute",
599
- "write_repository",
600
- "submit_progress",
601
- "gen_passport",
602
- "custom"
603
- ],
604
- "description": "Protected action type. Example: 'buy' for Service buy_guard, 'forward' for Machine Forward.guard."
605
- },
606
- "host_object": {
607
- "type": "string",
608
- "enum": [
609
- "Service",
610
- "Machine",
611
- "Arbitration",
612
- "Reward",
613
- "Repository",
614
- "Progress",
615
- "Demand",
616
- "Standalone"
617
- ],
618
- "description": "Host object type. Example: 'Service', 'Machine'."
619
- },
620
- "binding_field": {
621
- "type": "string",
622
- "enum": [
623
- "buy_guard",
624
- "order_allocators",
625
- "Forward.guard",
626
- "submission",
627
- "guard",
628
- "write_guard",
629
- "usage_guard",
630
- "voting_guard",
631
- "ServiceGuard",
632
- "none"
633
- ],
634
- "description": "Binding field. Example: 'buy_guard', 'Forward.guard'."
635
- },
636
- "rule_sentence": {
637
- "type": "string",
638
- "description": "One-sentence description of the validation rule (human-readable). Example: 'Only the author can purchase this service'."
639
- },
640
- "failure_conditions": {
641
- "type": "array",
642
- "items": {
643
- "type": "string"
644
- },
645
- "description": "List of conditions under which the Guard should FAIL. Example: ['Signer is not in allowlist','Order is already completed']."
646
- },
647
- "circular_reference": {
648
- "type": "boolean",
649
- "description": "Whether the Guard references the Host Object itself (circular reference pattern). true=Guard queries the Host Object it binds to."
650
- }
651
- },
652
- "required": [
653
- "action",
654
- "host_object",
655
- "binding_field"
656
- ],
657
- "additionalProperties": false,
658
- "description": "Optional semantic hint for Guard capability system. Provides intent + binding context so the MCP server can derive GuardPuzzle, run risk assessment, and generate confirmation text. Strongly recommended: fill this field to enable puzzle_status, matched_scene, suggested_patterns, confirmation_text, and pending_questions in the response guard_advice."
659
- }
660
- ],
661
- "description": "Phase 5 Guard capability hint. Provides semantic context (action + host_object + binding_field + optional rule/failure_conditions) for puzzle derivation. When provided, the response will include complete guard_advice (puzzle_status, matched_scene, suggested_patterns, confirmation_text, pending_questions). When absent, puzzle_status intent/binding dimensions are marked incomplete."
662
- },
663
86
  "env": {
664
87
  "type": "object",
665
88
  "properties": {