@topline-build/harness-mcp 0.4.0 → 0.5.1

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,2120 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "package": {
4
+ "name": "@topline-build/harness-mcp",
5
+ "version": "0.5.1",
6
+ "bin": {
7
+ "topline-mcp": "dist/cli.js"
8
+ }
9
+ },
10
+ "protocol": {
11
+ "transport": "stdio",
12
+ "defaultVersion": "2025-11-25",
13
+ "server": {
14
+ "name": "topline-build-stdio",
15
+ "version": "0.5.1"
16
+ }
17
+ },
18
+ "generatedFrom": {
19
+ "source": "src/index.ts#BUILD_MCP_TOOLS",
20
+ "command": "npm run docs:generate",
21
+ "notice": "Generated from the registry used by tools/list. Do not edit generated files by hand."
22
+ },
23
+ "canonicalWebsiteDocs": "https://topline.build/docs/build-mcp-guide",
24
+ "setup": {
25
+ "command": "npx -y @topline-build/harness-mcp --url https://YOUR-TOPLINE-HOST",
26
+ "clientConfigs": {
27
+ "json": {
28
+ "mcpServers": {
29
+ "topline-build": {
30
+ "command": "npx",
31
+ "args": [
32
+ "-y",
33
+ "@topline-build/harness-mcp",
34
+ "--url",
35
+ "https://YOUR-TOPLINE-HOST"
36
+ ]
37
+ }
38
+ }
39
+ },
40
+ "codexToml": "[mcp_servers.topline-build]\ncommand = \"npx\"\nargs = [\"-y\", \"@topline-build/harness-mcp\", \"--url\", \"https://YOUR-TOPLINE-HOST\"]"
41
+ },
42
+ "options": [
43
+ {
44
+ "flag": "--url",
45
+ "env": "TOPLINE_API_URL",
46
+ "aliases": [
47
+ "PLATFORM_API_URL",
48
+ "OVERSITE_API_URL"
49
+ ],
50
+ "required": true,
51
+ "description": "Topline tenant base URL. HTTPS is required except for loopback development."
52
+ },
53
+ {
54
+ "flag": "--workspace-root",
55
+ "env": "TOPLINE_WORKSPACE_ROOT",
56
+ "aliases": [
57
+ "PLATFORM_WORKSPACE_ROOT"
58
+ ],
59
+ "default": "current working directory",
60
+ "description": "Local root that contains artifact app directories."
61
+ },
62
+ {
63
+ "flag": "--surface",
64
+ "env": "TOPLINE_MCP_SURFACE",
65
+ "default": "build",
66
+ "allowed": [
67
+ "build",
68
+ "harness"
69
+ ],
70
+ "description": "Build is the current surface; harness preserves legacy OAuth compatibility."
71
+ },
72
+ {
73
+ "flag": "--protocol-version",
74
+ "env": "TOPLINE_MCP_PROTOCOL_VERSION",
75
+ "aliases": [
76
+ "PLATFORM_MCP_PROTOCOL_VERSION"
77
+ ],
78
+ "default": "2025-11-25",
79
+ "description": "MCP protocol version sent to Topline HTTP endpoints."
80
+ },
81
+ {
82
+ "flag": "--auth-file",
83
+ "env": "TOPLINE_MCP_AUTH_FILE",
84
+ "aliases": [
85
+ "PLATFORM_MCP_AUTH_FILE"
86
+ ],
87
+ "default": "per-tenant file in the local Topline config directory",
88
+ "description": "OAuth credential cache. Keep it outside artifact app directories."
89
+ },
90
+ {
91
+ "flag": "--scopes",
92
+ "env": "TOPLINE_MCP_SCOPES",
93
+ "aliases": [
94
+ "PLATFORM_MCP_SCOPES"
95
+ ],
96
+ "default": "harness:artifact:read harness:artifact:write harness:artifact:deploy harness:artifact:delete",
97
+ "description": "Space- or comma-separated OAuth scopes."
98
+ },
99
+ {
100
+ "flag": "--timeout-ms",
101
+ "env": "TOPLINE_MCP_TIMEOUT_MS",
102
+ "aliases": [
103
+ "PLATFORM_MCP_TIMEOUT_MS",
104
+ "OVERSITE_MCP_TIMEOUT_MS"
105
+ ],
106
+ "default": 120000,
107
+ "description": "Positive request timeout in milliseconds."
108
+ },
109
+ {
110
+ "flag": "--token",
111
+ "env": "TOPLINE_MCP_TOKEN",
112
+ "aliases": [
113
+ "PLATFORM_MCP_TOKEN",
114
+ "OVERSITE_MCP_TOKEN"
115
+ ],
116
+ "description": "Advanced manual bearer-token fallback. Prefer browser-approved OAuth."
117
+ }
118
+ ]
119
+ },
120
+ "authentication": {
121
+ "preferred": "OAuth 2.0 browser approval with a refresh token cached outside the project repository",
122
+ "manualFallbackEnv": "TOPLINE_MCP_TOKEN",
123
+ "defaultScopes": [
124
+ "harness:artifact:read",
125
+ "harness:artifact:write",
126
+ "harness:artifact:deploy",
127
+ "harness:artifact:delete"
128
+ ]
129
+ },
130
+ "errors": {
131
+ "outputSchema": {
132
+ "type": "object",
133
+ "properties": {
134
+ "ok": {
135
+ "const": false
136
+ },
137
+ "error": {
138
+ "type": "object",
139
+ "properties": {
140
+ "code": {
141
+ "type": "string"
142
+ },
143
+ "message": {
144
+ "type": "string"
145
+ },
146
+ "retryable": {
147
+ "type": "boolean"
148
+ },
149
+ "recoveryAction": {
150
+ "type": "string"
151
+ }
152
+ },
153
+ "required": [
154
+ "code",
155
+ "message",
156
+ "retryable",
157
+ "recoveryAction"
158
+ ],
159
+ "additionalProperties": false
160
+ }
161
+ },
162
+ "required": [
163
+ "ok",
164
+ "error"
165
+ ],
166
+ "additionalProperties": false
167
+ },
168
+ "default": {
169
+ "code": "topline_mcp_tool_failed",
170
+ "retryable": false,
171
+ "recoveryAction": "Inspect the code and message, correct the input if needed, then retry the same tool."
172
+ },
173
+ "catalog": [
174
+ {
175
+ "code": "platform_harness_timeout",
176
+ "retryable": true,
177
+ "recoveryAction": "Retry the call. For a deployment, use platform_list_artifact_drafts to recover the artifact and platform_wait_artifact_deploy to resume progress."
178
+ },
179
+ {
180
+ "code": "platform_mcp_tool_error",
181
+ "retryable": false,
182
+ "recoveryAction": "Read the returned error code, correct the request or OAuth scopes, then retry."
183
+ },
184
+ {
185
+ "code": "artifact_deploy_wait_timeout",
186
+ "retryable": true,
187
+ "recoveryAction": "Call platform_wait_artifact_deploy again with the same artifactId and operationId."
188
+ },
189
+ {
190
+ "code": "artifact_delete_plan_stale",
191
+ "retryable": true,
192
+ "recoveryAction": "Call platform_plan_artifact_draft_delete again, review the new effects, and use its planToken."
193
+ },
194
+ {
195
+ "code": "artifact_app_bundle_changed_after_inspection",
196
+ "retryable": true,
197
+ "recoveryAction": "Call platform_inspect_artifact_app again, review the new bundle hash, then retry deployment with that hash."
198
+ },
199
+ {
200
+ "code": "artifact_app_bundle_hardlink_forbidden",
201
+ "retryable": false,
202
+ "recoveryAction": "Replace the hard link with a regular file copied into appDir, then inspect again."
203
+ },
204
+ {
205
+ "code": "artifact_app_auth_file_inside_app_dir",
206
+ "retryable": false,
207
+ "recoveryAction": "Move TOPLINE_MCP_AUTH_FILE outside appDir, reconnect the Build MCP, then inspect again."
208
+ },
209
+ {
210
+ "code": "artifact_app_manifest_not_found",
211
+ "retryable": false,
212
+ "recoveryAction": "Create artifact-app.json inside appDir, or correct appDir, then inspect again."
213
+ },
214
+ {
215
+ "code": "artifact_app_manifest_too_large",
216
+ "retryable": false,
217
+ "recoveryAction": "Keep artifact-app.json below 512 KiB. Move application data and source into separate files, then inspect again."
218
+ },
219
+ {
220
+ "code": "scope_required",
221
+ "retryable": false,
222
+ "recoveryAction": "Reconnect the Build MCP and approve the requested scope."
223
+ },
224
+ {
225
+ "code": "artifact_app_scaffold_target_not_empty",
226
+ "retryable": false,
227
+ "recoveryAction": "Choose an empty appDir or deploy the existing app without scaffolding."
228
+ }
229
+ ]
230
+ },
231
+ "tools": [
232
+ {
233
+ "name": "platform_connection_check",
234
+ "description": "Complete the one-time Developer Access verification challenge for this Build MCP client.",
235
+ "annotations": {
236
+ "title": "Platform Connection Check",
237
+ "readOnlyHint": false,
238
+ "destructiveHint": false,
239
+ "openWorldHint": true
240
+ },
241
+ "inputSchema": {
242
+ "type": "object",
243
+ "properties": {
244
+ "verificationCode": {
245
+ "type": "string",
246
+ "minLength": 16,
247
+ "maxLength": 80
248
+ }
249
+ },
250
+ "required": [
251
+ "verificationCode"
252
+ ],
253
+ "additionalProperties": false
254
+ },
255
+ "outputSchema": {
256
+ "type": "object",
257
+ "oneOf": [
258
+ {
259
+ "type": "object",
260
+ "properties": {
261
+ "ok": {
262
+ "type": "boolean"
263
+ },
264
+ "verified": {
265
+ "type": "boolean"
266
+ },
267
+ "product": {
268
+ "type": "string",
269
+ "enum": [
270
+ "build"
271
+ ]
272
+ },
273
+ "verifiedAt": {
274
+ "type": "string"
275
+ }
276
+ },
277
+ "required": [
278
+ "ok",
279
+ "verified",
280
+ "product",
281
+ "verifiedAt"
282
+ ]
283
+ },
284
+ {
285
+ "type": "object",
286
+ "properties": {
287
+ "ok": {
288
+ "const": false
289
+ },
290
+ "error": {
291
+ "type": "object",
292
+ "properties": {
293
+ "code": {
294
+ "type": "string"
295
+ },
296
+ "message": {
297
+ "type": "string"
298
+ },
299
+ "retryable": {
300
+ "type": "boolean"
301
+ },
302
+ "recoveryAction": {
303
+ "type": "string"
304
+ }
305
+ },
306
+ "required": [
307
+ "code",
308
+ "message",
309
+ "retryable",
310
+ "recoveryAction"
311
+ ],
312
+ "additionalProperties": false
313
+ }
314
+ },
315
+ "required": [
316
+ "ok",
317
+ "error"
318
+ ],
319
+ "additionalProperties": false
320
+ }
321
+ ]
322
+ },
323
+ "examples": [
324
+ {
325
+ "request": {
326
+ "verificationCode": "example-verification-code"
327
+ },
328
+ "success": {
329
+ "ok": true,
330
+ "verified": true,
331
+ "product": "build",
332
+ "verifiedAt": "<verifiedAt>"
333
+ }
334
+ }
335
+ ]
336
+ },
337
+ {
338
+ "name": "platform_init_artifact_app",
339
+ "description": "Create a minimal, validated artifact app starter inside the configured local workspace.",
340
+ "annotations": {
341
+ "title": "Platform Init Artifact App",
342
+ "readOnlyHint": false,
343
+ "destructiveHint": false,
344
+ "openWorldHint": false
345
+ },
346
+ "inputSchema": {
347
+ "type": "object",
348
+ "properties": {
349
+ "appDir": {
350
+ "type": "string",
351
+ "minLength": 1
352
+ },
353
+ "manifestId": {
354
+ "type": "string"
355
+ },
356
+ "title": {
357
+ "type": "string"
358
+ }
359
+ },
360
+ "required": [
361
+ "appDir"
362
+ ],
363
+ "additionalProperties": false
364
+ },
365
+ "outputSchema": {
366
+ "type": "object",
367
+ "oneOf": [
368
+ {
369
+ "type": "object",
370
+ "properties": {
371
+ "ok": {
372
+ "type": "boolean"
373
+ },
374
+ "appDir": {
375
+ "type": "string"
376
+ },
377
+ "manifestId": {
378
+ "type": "string"
379
+ },
380
+ "title": {
381
+ "type": "string"
382
+ },
383
+ "files": {
384
+ "type": "array",
385
+ "items": {
386
+ "type": "string"
387
+ }
388
+ },
389
+ "nextAction": {
390
+ "type": "string"
391
+ }
392
+ },
393
+ "required": [
394
+ "ok",
395
+ "appDir",
396
+ "manifestId",
397
+ "title",
398
+ "files",
399
+ "nextAction"
400
+ ]
401
+ },
402
+ {
403
+ "type": "object",
404
+ "properties": {
405
+ "ok": {
406
+ "const": false
407
+ },
408
+ "error": {
409
+ "type": "object",
410
+ "properties": {
411
+ "code": {
412
+ "type": "string"
413
+ },
414
+ "message": {
415
+ "type": "string"
416
+ },
417
+ "retryable": {
418
+ "type": "boolean"
419
+ },
420
+ "recoveryAction": {
421
+ "type": "string"
422
+ }
423
+ },
424
+ "required": [
425
+ "code",
426
+ "message",
427
+ "retryable",
428
+ "recoveryAction"
429
+ ],
430
+ "additionalProperties": false
431
+ }
432
+ },
433
+ "required": [
434
+ "ok",
435
+ "error"
436
+ ],
437
+ "additionalProperties": false
438
+ }
439
+ ]
440
+ },
441
+ "examples": [
442
+ {
443
+ "request": {
444
+ "appDir": "artifact-apps/example-app"
445
+ },
446
+ "success": {
447
+ "ok": true,
448
+ "appDir": "artifact-apps/example-app",
449
+ "manifestId": "example-app",
450
+ "title": "Example app",
451
+ "files": [],
452
+ "nextAction": "Follow the tool-provided next action."
453
+ }
454
+ }
455
+ ]
456
+ },
457
+ {
458
+ "name": "platform_deploy_artifact_app",
459
+ "description": "Package a local artifact app directory, upload it, deploy a private draft, and return status.",
460
+ "annotations": {
461
+ "title": "Platform Deploy Artifact App",
462
+ "readOnlyHint": false,
463
+ "destructiveHint": false,
464
+ "openWorldHint": true
465
+ },
466
+ "inputSchema": {
467
+ "type": "object",
468
+ "properties": {
469
+ "appDir": {
470
+ "type": "string",
471
+ "minLength": 1
472
+ },
473
+ "artifactId": {
474
+ "type": "string",
475
+ "format": "uuid"
476
+ },
477
+ "title": {
478
+ "type": "string"
479
+ },
480
+ "description": {
481
+ "type": "string"
482
+ },
483
+ "projectId": {
484
+ "type": "string",
485
+ "format": "uuid"
486
+ },
487
+ "expectedBundleSha256": {
488
+ "type": "string",
489
+ "pattern": "^[0-9a-fA-F]{64}$",
490
+ "description": "Optional SHA-256 from platform_inspect_artifact_app; deployment fails locally if source changed."
491
+ },
492
+ "requestId": {
493
+ "type": "string",
494
+ "minLength": 1,
495
+ "maxLength": 128,
496
+ "description": "Optional stable retry key; generated deterministically when omitted."
497
+ }
498
+ },
499
+ "required": [
500
+ "appDir"
501
+ ],
502
+ "additionalProperties": false
503
+ },
504
+ "outputSchema": {
505
+ "type": "object",
506
+ "oneOf": [
507
+ {
508
+ "type": "object",
509
+ "properties": {
510
+ "ok": {
511
+ "type": "boolean"
512
+ },
513
+ "artifactId": {
514
+ "type": "string"
515
+ },
516
+ "artifactVersionId": {
517
+ "type": "string"
518
+ },
519
+ "clientRequestId": {
520
+ "type": "string"
521
+ },
522
+ "operationId": {
523
+ "type": [
524
+ "string",
525
+ "null"
526
+ ]
527
+ },
528
+ "bundle": {
529
+ "type": "object"
530
+ },
531
+ "create": {
532
+ "type": "object"
533
+ },
534
+ "deploy": {
535
+ "type": "object"
536
+ }
537
+ },
538
+ "required": [
539
+ "ok",
540
+ "artifactId",
541
+ "artifactVersionId",
542
+ "clientRequestId",
543
+ "operationId",
544
+ "bundle",
545
+ "create",
546
+ "deploy"
547
+ ]
548
+ },
549
+ {
550
+ "type": "object",
551
+ "properties": {
552
+ "ok": {
553
+ "const": false
554
+ },
555
+ "error": {
556
+ "type": "object",
557
+ "properties": {
558
+ "code": {
559
+ "type": "string"
560
+ },
561
+ "message": {
562
+ "type": "string"
563
+ },
564
+ "retryable": {
565
+ "type": "boolean"
566
+ },
567
+ "recoveryAction": {
568
+ "type": "string"
569
+ }
570
+ },
571
+ "required": [
572
+ "code",
573
+ "message",
574
+ "retryable",
575
+ "recoveryAction"
576
+ ],
577
+ "additionalProperties": false
578
+ }
579
+ },
580
+ "required": [
581
+ "ok",
582
+ "error"
583
+ ],
584
+ "additionalProperties": false
585
+ }
586
+ ]
587
+ },
588
+ "examples": [
589
+ {
590
+ "request": {
591
+ "appDir": "artifact-apps/example-app"
592
+ },
593
+ "success": {
594
+ "ok": true,
595
+ "artifactId": "00000000-0000-4000-8000-000000000001",
596
+ "artifactVersionId": "00000000-0000-4000-8000-000000000002",
597
+ "clientRequestId": "example-request",
598
+ "operationId": "00000000-0000-4000-8000-000000000004",
599
+ "bundle": {},
600
+ "create": {},
601
+ "deploy": {}
602
+ }
603
+ }
604
+ ]
605
+ },
606
+ {
607
+ "name": "platform_inspect_artifact_app",
608
+ "description": "Inspect local artifact paths and package boundaries without authenticating, uploading, or creating a remote draft.",
609
+ "annotations": {
610
+ "title": "Platform Inspect Artifact App",
611
+ "readOnlyHint": true,
612
+ "destructiveHint": false,
613
+ "openWorldHint": false
614
+ },
615
+ "inputSchema": {
616
+ "type": "object",
617
+ "properties": {
618
+ "appDir": {
619
+ "type": "string",
620
+ "minLength": 1
621
+ }
622
+ },
623
+ "required": [
624
+ "appDir"
625
+ ],
626
+ "additionalProperties": false
627
+ },
628
+ "outputSchema": {
629
+ "type": "object",
630
+ "oneOf": [
631
+ {
632
+ "type": "object",
633
+ "properties": {
634
+ "ok": {
635
+ "type": "boolean"
636
+ },
637
+ "packageReady": {
638
+ "type": "boolean"
639
+ },
640
+ "serverManifestValidationRequired": {
641
+ "type": "boolean"
642
+ },
643
+ "appDir": {
644
+ "type": "string"
645
+ },
646
+ "platformAppDir": {
647
+ "type": "string"
648
+ },
649
+ "manifest": {
650
+ "type": "object"
651
+ },
652
+ "bundle": {
653
+ "type": "object"
654
+ },
655
+ "nextAction": {
656
+ "type": "string"
657
+ }
658
+ },
659
+ "required": [
660
+ "ok",
661
+ "packageReady",
662
+ "serverManifestValidationRequired",
663
+ "appDir",
664
+ "platformAppDir",
665
+ "manifest",
666
+ "bundle",
667
+ "nextAction"
668
+ ]
669
+ },
670
+ {
671
+ "type": "object",
672
+ "properties": {
673
+ "ok": {
674
+ "const": false
675
+ },
676
+ "error": {
677
+ "type": "object",
678
+ "properties": {
679
+ "code": {
680
+ "type": "string"
681
+ },
682
+ "message": {
683
+ "type": "string"
684
+ },
685
+ "retryable": {
686
+ "type": "boolean"
687
+ },
688
+ "recoveryAction": {
689
+ "type": "string"
690
+ }
691
+ },
692
+ "required": [
693
+ "code",
694
+ "message",
695
+ "retryable",
696
+ "recoveryAction"
697
+ ],
698
+ "additionalProperties": false
699
+ }
700
+ },
701
+ "required": [
702
+ "ok",
703
+ "error"
704
+ ],
705
+ "additionalProperties": false
706
+ }
707
+ ]
708
+ },
709
+ "examples": [
710
+ {
711
+ "request": {
712
+ "appDir": "artifact-apps/example-app"
713
+ },
714
+ "success": {
715
+ "ok": true,
716
+ "packageReady": true,
717
+ "serverManifestValidationRequired": true,
718
+ "appDir": "artifact-apps/example-app",
719
+ "platformAppDir": "<platformAppDir>",
720
+ "manifest": {},
721
+ "bundle": {},
722
+ "nextAction": "Follow the tool-provided next action."
723
+ }
724
+ }
725
+ ]
726
+ },
727
+ {
728
+ "name": "platform_list_build_workspaces",
729
+ "description": "List Topline workspaces available for artifact placement.",
730
+ "annotations": {
731
+ "title": "Platform List Build Workspaces",
732
+ "readOnlyHint": true,
733
+ "destructiveHint": false,
734
+ "openWorldHint": true
735
+ },
736
+ "inputSchema": {
737
+ "type": "object",
738
+ "properties": {},
739
+ "additionalProperties": false
740
+ },
741
+ "outputSchema": {
742
+ "type": "object",
743
+ "oneOf": [
744
+ {
745
+ "type": "object",
746
+ "properties": {
747
+ "ok": {
748
+ "type": "boolean"
749
+ },
750
+ "workspaces": {
751
+ "type": "array",
752
+ "items": {
753
+ "type": "object"
754
+ }
755
+ }
756
+ },
757
+ "required": [
758
+ "ok",
759
+ "workspaces"
760
+ ]
761
+ },
762
+ {
763
+ "type": "object",
764
+ "properties": {
765
+ "ok": {
766
+ "const": false
767
+ },
768
+ "error": {
769
+ "type": "object",
770
+ "properties": {
771
+ "code": {
772
+ "type": "string"
773
+ },
774
+ "message": {
775
+ "type": "string"
776
+ },
777
+ "retryable": {
778
+ "type": "boolean"
779
+ },
780
+ "recoveryAction": {
781
+ "type": "string"
782
+ }
783
+ },
784
+ "required": [
785
+ "code",
786
+ "message",
787
+ "retryable",
788
+ "recoveryAction"
789
+ ],
790
+ "additionalProperties": false
791
+ }
792
+ },
793
+ "required": [
794
+ "ok",
795
+ "error"
796
+ ],
797
+ "additionalProperties": false
798
+ }
799
+ ]
800
+ },
801
+ "examples": [
802
+ {
803
+ "request": {},
804
+ "success": {
805
+ "ok": true,
806
+ "workspaces": []
807
+ }
808
+ }
809
+ ]
810
+ },
811
+ {
812
+ "name": "platform_list_artifact_drafts",
813
+ "description": "Discover private artifact drafts created through this Build MCP connection.",
814
+ "annotations": {
815
+ "title": "Platform List Artifact Drafts",
816
+ "readOnlyHint": true,
817
+ "destructiveHint": false,
818
+ "openWorldHint": true
819
+ },
820
+ "inputSchema": {
821
+ "type": "object",
822
+ "properties": {
823
+ "projectId": {
824
+ "type": "string",
825
+ "format": "uuid"
826
+ },
827
+ "limit": {
828
+ "type": "integer",
829
+ "minimum": 1,
830
+ "maximum": 100
831
+ }
832
+ },
833
+ "additionalProperties": false
834
+ },
835
+ "outputSchema": {
836
+ "type": "object",
837
+ "oneOf": [
838
+ {
839
+ "type": "object",
840
+ "properties": {
841
+ "ok": {
842
+ "type": "boolean"
843
+ },
844
+ "drafts": {
845
+ "type": "array",
846
+ "items": {
847
+ "type": "object"
848
+ }
849
+ }
850
+ },
851
+ "required": [
852
+ "ok",
853
+ "drafts"
854
+ ]
855
+ },
856
+ {
857
+ "type": "object",
858
+ "properties": {
859
+ "ok": {
860
+ "const": false
861
+ },
862
+ "error": {
863
+ "type": "object",
864
+ "properties": {
865
+ "code": {
866
+ "type": "string"
867
+ },
868
+ "message": {
869
+ "type": "string"
870
+ },
871
+ "retryable": {
872
+ "type": "boolean"
873
+ },
874
+ "recoveryAction": {
875
+ "type": "string"
876
+ }
877
+ },
878
+ "required": [
879
+ "code",
880
+ "message",
881
+ "retryable",
882
+ "recoveryAction"
883
+ ],
884
+ "additionalProperties": false
885
+ }
886
+ },
887
+ "required": [
888
+ "ok",
889
+ "error"
890
+ ],
891
+ "additionalProperties": false
892
+ }
893
+ ]
894
+ },
895
+ "examples": [
896
+ {
897
+ "request": {},
898
+ "success": {
899
+ "ok": true,
900
+ "drafts": []
901
+ }
902
+ }
903
+ ]
904
+ },
905
+ {
906
+ "name": "platform_deploy_operation",
907
+ "description": "Read durable server-side progress for one artifact deployment operation.",
908
+ "annotations": {
909
+ "title": "Platform Deploy Operation",
910
+ "readOnlyHint": true,
911
+ "destructiveHint": false,
912
+ "openWorldHint": true
913
+ },
914
+ "inputSchema": {
915
+ "type": "object",
916
+ "properties": {
917
+ "artifactId": {
918
+ "type": "string",
919
+ "format": "uuid"
920
+ },
921
+ "operationId": {
922
+ "type": "string",
923
+ "format": "uuid"
924
+ },
925
+ "afterSeq": {
926
+ "type": "integer",
927
+ "minimum": 0
928
+ }
929
+ },
930
+ "required": [
931
+ "artifactId",
932
+ "operationId"
933
+ ],
934
+ "additionalProperties": false
935
+ },
936
+ "outputSchema": {
937
+ "type": "object",
938
+ "oneOf": [
939
+ {
940
+ "type": "object",
941
+ "properties": {
942
+ "ok": {
943
+ "type": "boolean"
944
+ },
945
+ "phase": {
946
+ "type": "string"
947
+ },
948
+ "artifactId": {
949
+ "type": "string"
950
+ },
951
+ "operationId": {
952
+ "type": "string"
953
+ },
954
+ "taskStatus": {
955
+ "type": "string"
956
+ },
957
+ "progress": {
958
+ "type": "number"
959
+ },
960
+ "terminal": {
961
+ "type": "boolean"
962
+ },
963
+ "successful": {
964
+ "type": "boolean"
965
+ },
966
+ "events": {
967
+ "type": "array",
968
+ "items": {
969
+ "type": "object"
970
+ }
971
+ }
972
+ },
973
+ "required": [
974
+ "ok",
975
+ "phase",
976
+ "artifactId",
977
+ "operationId",
978
+ "taskStatus",
979
+ "progress",
980
+ "terminal",
981
+ "successful",
982
+ "events"
983
+ ]
984
+ },
985
+ {
986
+ "type": "object",
987
+ "properties": {
988
+ "ok": {
989
+ "const": false
990
+ },
991
+ "error": {
992
+ "type": "object",
993
+ "properties": {
994
+ "code": {
995
+ "type": "string"
996
+ },
997
+ "message": {
998
+ "type": "string"
999
+ },
1000
+ "retryable": {
1001
+ "type": "boolean"
1002
+ },
1003
+ "recoveryAction": {
1004
+ "type": "string"
1005
+ }
1006
+ },
1007
+ "required": [
1008
+ "code",
1009
+ "message",
1010
+ "retryable",
1011
+ "recoveryAction"
1012
+ ],
1013
+ "additionalProperties": false
1014
+ }
1015
+ },
1016
+ "required": [
1017
+ "ok",
1018
+ "error"
1019
+ ],
1020
+ "additionalProperties": false
1021
+ }
1022
+ ]
1023
+ },
1024
+ "examples": [
1025
+ {
1026
+ "request": {
1027
+ "artifactId": "00000000-0000-4000-8000-000000000001",
1028
+ "operationId": "00000000-0000-4000-8000-000000000001"
1029
+ },
1030
+ "success": {
1031
+ "ok": true,
1032
+ "phase": "<phase>",
1033
+ "artifactId": "00000000-0000-4000-8000-000000000001",
1034
+ "operationId": "00000000-0000-4000-8000-000000000004",
1035
+ "taskStatus": "<taskStatus>",
1036
+ "progress": 1,
1037
+ "terminal": true,
1038
+ "successful": true,
1039
+ "events": []
1040
+ }
1041
+ }
1042
+ ]
1043
+ },
1044
+ {
1045
+ "name": "platform_wait_artifact_deploy",
1046
+ "description": "Wait for a durable deployment operation and stream server-derived progress.",
1047
+ "annotations": {
1048
+ "title": "Platform Wait Artifact Deploy",
1049
+ "readOnlyHint": true,
1050
+ "destructiveHint": false,
1051
+ "openWorldHint": true
1052
+ },
1053
+ "inputSchema": {
1054
+ "type": "object",
1055
+ "properties": {
1056
+ "artifactId": {
1057
+ "type": "string",
1058
+ "format": "uuid"
1059
+ },
1060
+ "operationId": {
1061
+ "type": "string",
1062
+ "format": "uuid"
1063
+ },
1064
+ "timeoutSeconds": {
1065
+ "type": "integer",
1066
+ "minimum": 1,
1067
+ "maximum": 900
1068
+ }
1069
+ },
1070
+ "required": [
1071
+ "artifactId",
1072
+ "operationId"
1073
+ ],
1074
+ "additionalProperties": false
1075
+ },
1076
+ "outputSchema": {
1077
+ "type": "object",
1078
+ "oneOf": [
1079
+ {
1080
+ "type": "object",
1081
+ "properties": {
1082
+ "ok": {
1083
+ "type": "boolean"
1084
+ },
1085
+ "phase": {
1086
+ "type": "string"
1087
+ },
1088
+ "artifactId": {
1089
+ "type": "string"
1090
+ },
1091
+ "operationId": {
1092
+ "type": "string"
1093
+ },
1094
+ "taskStatus": {
1095
+ "type": "string"
1096
+ },
1097
+ "progress": {
1098
+ "type": "number"
1099
+ },
1100
+ "terminal": {
1101
+ "type": "boolean"
1102
+ },
1103
+ "successful": {
1104
+ "type": "boolean"
1105
+ },
1106
+ "events": {
1107
+ "type": "array",
1108
+ "items": {
1109
+ "type": "object"
1110
+ }
1111
+ }
1112
+ },
1113
+ "required": [
1114
+ "ok",
1115
+ "phase",
1116
+ "artifactId",
1117
+ "operationId",
1118
+ "taskStatus",
1119
+ "progress",
1120
+ "terminal",
1121
+ "successful",
1122
+ "events"
1123
+ ]
1124
+ },
1125
+ {
1126
+ "type": "object",
1127
+ "properties": {
1128
+ "ok": {
1129
+ "const": false
1130
+ },
1131
+ "error": {
1132
+ "type": "object",
1133
+ "properties": {
1134
+ "code": {
1135
+ "type": "string"
1136
+ },
1137
+ "message": {
1138
+ "type": "string"
1139
+ },
1140
+ "retryable": {
1141
+ "type": "boolean"
1142
+ },
1143
+ "recoveryAction": {
1144
+ "type": "string"
1145
+ }
1146
+ },
1147
+ "required": [
1148
+ "code",
1149
+ "message",
1150
+ "retryable",
1151
+ "recoveryAction"
1152
+ ],
1153
+ "additionalProperties": false
1154
+ }
1155
+ },
1156
+ "required": [
1157
+ "ok",
1158
+ "error"
1159
+ ],
1160
+ "additionalProperties": false
1161
+ }
1162
+ ]
1163
+ },
1164
+ "examples": [
1165
+ {
1166
+ "request": {
1167
+ "artifactId": "00000000-0000-4000-8000-000000000001",
1168
+ "operationId": "00000000-0000-4000-8000-000000000001"
1169
+ },
1170
+ "success": {
1171
+ "ok": true,
1172
+ "phase": "<phase>",
1173
+ "artifactId": "00000000-0000-4000-8000-000000000001",
1174
+ "operationId": "00000000-0000-4000-8000-000000000004",
1175
+ "taskStatus": "<taskStatus>",
1176
+ "progress": 1,
1177
+ "terminal": true,
1178
+ "successful": true,
1179
+ "events": []
1180
+ }
1181
+ }
1182
+ ]
1183
+ },
1184
+ {
1185
+ "name": "platform_artifact_status",
1186
+ "description": "Read private draft deployment status for a hosted artifact app.",
1187
+ "annotations": {
1188
+ "title": "Platform Artifact Status",
1189
+ "readOnlyHint": true,
1190
+ "destructiveHint": false,
1191
+ "openWorldHint": true
1192
+ },
1193
+ "inputSchema": {
1194
+ "type": "object",
1195
+ "properties": {
1196
+ "artifactId": {
1197
+ "type": "string",
1198
+ "format": "uuid"
1199
+ },
1200
+ "limit": {
1201
+ "type": "integer",
1202
+ "minimum": 1,
1203
+ "maximum": 50
1204
+ }
1205
+ },
1206
+ "required": [
1207
+ "artifactId"
1208
+ ],
1209
+ "additionalProperties": false
1210
+ },
1211
+ "outputSchema": {
1212
+ "type": "object",
1213
+ "oneOf": [
1214
+ {
1215
+ "type": "object",
1216
+ "properties": {
1217
+ "ok": {
1218
+ "type": "boolean"
1219
+ },
1220
+ "phase": {
1221
+ "type": "string"
1222
+ },
1223
+ "artifactId": {
1224
+ "type": "string"
1225
+ },
1226
+ "deployments": {
1227
+ "type": "array",
1228
+ "items": {
1229
+ "type": "object"
1230
+ }
1231
+ }
1232
+ },
1233
+ "required": [
1234
+ "ok",
1235
+ "phase",
1236
+ "artifactId",
1237
+ "deployments"
1238
+ ]
1239
+ },
1240
+ {
1241
+ "type": "object",
1242
+ "properties": {
1243
+ "ok": {
1244
+ "const": false
1245
+ },
1246
+ "error": {
1247
+ "type": "object",
1248
+ "properties": {
1249
+ "code": {
1250
+ "type": "string"
1251
+ },
1252
+ "message": {
1253
+ "type": "string"
1254
+ },
1255
+ "retryable": {
1256
+ "type": "boolean"
1257
+ },
1258
+ "recoveryAction": {
1259
+ "type": "string"
1260
+ }
1261
+ },
1262
+ "required": [
1263
+ "code",
1264
+ "message",
1265
+ "retryable",
1266
+ "recoveryAction"
1267
+ ],
1268
+ "additionalProperties": false
1269
+ }
1270
+ },
1271
+ "required": [
1272
+ "ok",
1273
+ "error"
1274
+ ],
1275
+ "additionalProperties": false
1276
+ }
1277
+ ]
1278
+ },
1279
+ "examples": [
1280
+ {
1281
+ "request": {
1282
+ "artifactId": "00000000-0000-4000-8000-000000000001"
1283
+ },
1284
+ "success": {
1285
+ "ok": true,
1286
+ "phase": "<phase>",
1287
+ "artifactId": "00000000-0000-4000-8000-000000000001",
1288
+ "deployments": []
1289
+ }
1290
+ }
1291
+ ]
1292
+ },
1293
+ {
1294
+ "name": "platform_read_artifact_logs",
1295
+ "description": "Read bounded, redacted deployment logs for a hosted artifact app.",
1296
+ "annotations": {
1297
+ "title": "Platform Read Artifact Logs",
1298
+ "readOnlyHint": true,
1299
+ "destructiveHint": false,
1300
+ "openWorldHint": true
1301
+ },
1302
+ "inputSchema": {
1303
+ "type": "object",
1304
+ "properties": {
1305
+ "artifactId": {
1306
+ "type": "string",
1307
+ "format": "uuid"
1308
+ },
1309
+ "deploymentRecordId": {
1310
+ "type": "string",
1311
+ "format": "uuid"
1312
+ },
1313
+ "environment": {
1314
+ "type": "string",
1315
+ "enum": [
1316
+ "draft",
1317
+ "live"
1318
+ ]
1319
+ },
1320
+ "limit": {
1321
+ "type": "integer",
1322
+ "minimum": 1,
1323
+ "maximum": 200
1324
+ },
1325
+ "severity": {
1326
+ "type": "string"
1327
+ },
1328
+ "contains": {
1329
+ "type": "string"
1330
+ },
1331
+ "since": {
1332
+ "type": "string",
1333
+ "format": "date-time"
1334
+ },
1335
+ "windowMinutes": {
1336
+ "type": "integer",
1337
+ "minimum": 1,
1338
+ "maximum": 1440
1339
+ },
1340
+ "trace": {
1341
+ "type": "string"
1342
+ },
1343
+ "requestId": {
1344
+ "type": "string"
1345
+ },
1346
+ "route": {
1347
+ "type": "string"
1348
+ }
1349
+ },
1350
+ "required": [
1351
+ "artifactId"
1352
+ ],
1353
+ "additionalProperties": false
1354
+ },
1355
+ "outputSchema": {
1356
+ "type": "object",
1357
+ "oneOf": [
1358
+ {
1359
+ "type": "object",
1360
+ "properties": {
1361
+ "ok": {
1362
+ "type": "boolean"
1363
+ },
1364
+ "phase": {
1365
+ "type": "string"
1366
+ },
1367
+ "artifactId": {
1368
+ "type": "string"
1369
+ },
1370
+ "entries": {
1371
+ "type": "array",
1372
+ "items": {
1373
+ "type": "object"
1374
+ }
1375
+ }
1376
+ },
1377
+ "required": [
1378
+ "ok",
1379
+ "phase",
1380
+ "artifactId"
1381
+ ]
1382
+ },
1383
+ {
1384
+ "type": "object",
1385
+ "properties": {
1386
+ "ok": {
1387
+ "const": false
1388
+ },
1389
+ "error": {
1390
+ "type": "object",
1391
+ "properties": {
1392
+ "code": {
1393
+ "type": "string"
1394
+ },
1395
+ "message": {
1396
+ "type": "string"
1397
+ },
1398
+ "retryable": {
1399
+ "type": "boolean"
1400
+ },
1401
+ "recoveryAction": {
1402
+ "type": "string"
1403
+ }
1404
+ },
1405
+ "required": [
1406
+ "code",
1407
+ "message",
1408
+ "retryable",
1409
+ "recoveryAction"
1410
+ ],
1411
+ "additionalProperties": false
1412
+ }
1413
+ },
1414
+ "required": [
1415
+ "ok",
1416
+ "error"
1417
+ ],
1418
+ "additionalProperties": false
1419
+ }
1420
+ ]
1421
+ },
1422
+ "examples": [
1423
+ {
1424
+ "request": {
1425
+ "artifactId": "00000000-0000-4000-8000-000000000001"
1426
+ },
1427
+ "success": {
1428
+ "ok": true,
1429
+ "phase": "<phase>",
1430
+ "artifactId": "00000000-0000-4000-8000-000000000001"
1431
+ }
1432
+ }
1433
+ ]
1434
+ },
1435
+ {
1436
+ "name": "platform_open_artifact",
1437
+ "description": "Return the operator URL and latest draft/live URLs for a hosted artifact app.",
1438
+ "annotations": {
1439
+ "title": "Platform Open Artifact",
1440
+ "readOnlyHint": true,
1441
+ "destructiveHint": false,
1442
+ "openWorldHint": true
1443
+ },
1444
+ "inputSchema": {
1445
+ "type": "object",
1446
+ "properties": {
1447
+ "artifactId": {
1448
+ "type": "string",
1449
+ "format": "uuid"
1450
+ }
1451
+ },
1452
+ "required": [
1453
+ "artifactId"
1454
+ ],
1455
+ "additionalProperties": false
1456
+ },
1457
+ "outputSchema": {
1458
+ "type": "object",
1459
+ "oneOf": [
1460
+ {
1461
+ "type": "object",
1462
+ "properties": {
1463
+ "ok": {
1464
+ "type": "boolean"
1465
+ },
1466
+ "artifactId": {
1467
+ "type": "string"
1468
+ },
1469
+ "openUrl": {
1470
+ "type": "string"
1471
+ },
1472
+ "draftUrl": {
1473
+ "type": [
1474
+ "string",
1475
+ "null"
1476
+ ]
1477
+ },
1478
+ "liveUrl": {
1479
+ "type": [
1480
+ "string",
1481
+ "null"
1482
+ ]
1483
+ },
1484
+ "versionUrl": {
1485
+ "type": [
1486
+ "string",
1487
+ "null"
1488
+ ]
1489
+ }
1490
+ },
1491
+ "required": [
1492
+ "ok",
1493
+ "artifactId",
1494
+ "openUrl",
1495
+ "draftUrl",
1496
+ "liveUrl",
1497
+ "versionUrl"
1498
+ ]
1499
+ },
1500
+ {
1501
+ "type": "object",
1502
+ "properties": {
1503
+ "ok": {
1504
+ "const": false
1505
+ },
1506
+ "error": {
1507
+ "type": "object",
1508
+ "properties": {
1509
+ "code": {
1510
+ "type": "string"
1511
+ },
1512
+ "message": {
1513
+ "type": "string"
1514
+ },
1515
+ "retryable": {
1516
+ "type": "boolean"
1517
+ },
1518
+ "recoveryAction": {
1519
+ "type": "string"
1520
+ }
1521
+ },
1522
+ "required": [
1523
+ "code",
1524
+ "message",
1525
+ "retryable",
1526
+ "recoveryAction"
1527
+ ],
1528
+ "additionalProperties": false
1529
+ }
1530
+ },
1531
+ "required": [
1532
+ "ok",
1533
+ "error"
1534
+ ],
1535
+ "additionalProperties": false
1536
+ }
1537
+ ]
1538
+ },
1539
+ "examples": [
1540
+ {
1541
+ "request": {
1542
+ "artifactId": "00000000-0000-4000-8000-000000000001"
1543
+ },
1544
+ "success": {
1545
+ "ok": true,
1546
+ "artifactId": "00000000-0000-4000-8000-000000000001",
1547
+ "openUrl": "<openUrl>",
1548
+ "draftUrl": "<draftUrl>",
1549
+ "liveUrl": "<liveUrl>",
1550
+ "versionUrl": "<versionUrl>"
1551
+ }
1552
+ }
1553
+ ]
1554
+ },
1555
+ {
1556
+ "name": "platform_storybook_access",
1557
+ "description": "Return the tenant Storybook preview URL and HTTP MCP server config.",
1558
+ "annotations": {
1559
+ "title": "Platform Storybook Access",
1560
+ "readOnlyHint": true,
1561
+ "destructiveHint": false,
1562
+ "openWorldHint": false
1563
+ },
1564
+ "inputSchema": {
1565
+ "type": "object",
1566
+ "properties": {},
1567
+ "additionalProperties": false
1568
+ },
1569
+ "outputSchema": {
1570
+ "type": "object",
1571
+ "oneOf": [
1572
+ {
1573
+ "type": "object",
1574
+ "properties": {
1575
+ "ok": {
1576
+ "type": "boolean"
1577
+ },
1578
+ "storybookUrl": {
1579
+ "type": "string"
1580
+ },
1581
+ "mcpUrl": {
1582
+ "type": "string"
1583
+ },
1584
+ "mcpServers": {
1585
+ "type": "object"
1586
+ }
1587
+ },
1588
+ "required": [
1589
+ "ok",
1590
+ "storybookUrl",
1591
+ "mcpUrl",
1592
+ "mcpServers"
1593
+ ]
1594
+ },
1595
+ {
1596
+ "type": "object",
1597
+ "properties": {
1598
+ "ok": {
1599
+ "const": false
1600
+ },
1601
+ "error": {
1602
+ "type": "object",
1603
+ "properties": {
1604
+ "code": {
1605
+ "type": "string"
1606
+ },
1607
+ "message": {
1608
+ "type": "string"
1609
+ },
1610
+ "retryable": {
1611
+ "type": "boolean"
1612
+ },
1613
+ "recoveryAction": {
1614
+ "type": "string"
1615
+ }
1616
+ },
1617
+ "required": [
1618
+ "code",
1619
+ "message",
1620
+ "retryable",
1621
+ "recoveryAction"
1622
+ ],
1623
+ "additionalProperties": false
1624
+ }
1625
+ },
1626
+ "required": [
1627
+ "ok",
1628
+ "error"
1629
+ ],
1630
+ "additionalProperties": false
1631
+ }
1632
+ ]
1633
+ },
1634
+ "examples": [
1635
+ {
1636
+ "request": {},
1637
+ "success": {
1638
+ "ok": true,
1639
+ "storybookUrl": "<storybookUrl>",
1640
+ "mcpUrl": "<mcpUrl>",
1641
+ "mcpServers": {}
1642
+ }
1643
+ }
1644
+ ]
1645
+ },
1646
+ {
1647
+ "name": "platform_validate_artifact",
1648
+ "description": "Read trusted smoke and health evidence for a private artifact draft without requiring a browser session.",
1649
+ "annotations": {
1650
+ "title": "Platform Validate Artifact",
1651
+ "readOnlyHint": true,
1652
+ "destructiveHint": false,
1653
+ "openWorldHint": false
1654
+ },
1655
+ "inputSchema": {
1656
+ "type": "object",
1657
+ "properties": {
1658
+ "artifactId": {
1659
+ "type": "string",
1660
+ "format": "uuid"
1661
+ },
1662
+ "deploymentRecordId": {
1663
+ "type": "string",
1664
+ "format": "uuid"
1665
+ }
1666
+ },
1667
+ "required": [
1668
+ "artifactId"
1669
+ ],
1670
+ "additionalProperties": false
1671
+ },
1672
+ "outputSchema": {
1673
+ "type": "object",
1674
+ "oneOf": [
1675
+ {
1676
+ "type": "object",
1677
+ "properties": {
1678
+ "ok": {
1679
+ "type": "boolean"
1680
+ },
1681
+ "phase": {
1682
+ "type": "string"
1683
+ },
1684
+ "artifactId": {
1685
+ "type": "string"
1686
+ },
1687
+ "deploymentRecordId": {
1688
+ "type": "string"
1689
+ },
1690
+ "deploymentState": {
1691
+ "type": "string"
1692
+ },
1693
+ "healthy": {
1694
+ "type": "boolean"
1695
+ },
1696
+ "checkedAt": {
1697
+ "type": [
1698
+ "string",
1699
+ "null"
1700
+ ]
1701
+ },
1702
+ "draftUrl": {
1703
+ "type": [
1704
+ "string",
1705
+ "null"
1706
+ ]
1707
+ },
1708
+ "smoke": {
1709
+ "type": [
1710
+ "object",
1711
+ "null"
1712
+ ]
1713
+ }
1714
+ },
1715
+ "required": [
1716
+ "ok",
1717
+ "phase",
1718
+ "artifactId",
1719
+ "deploymentRecordId",
1720
+ "deploymentState",
1721
+ "healthy",
1722
+ "checkedAt",
1723
+ "draftUrl",
1724
+ "smoke"
1725
+ ]
1726
+ },
1727
+ {
1728
+ "type": "object",
1729
+ "properties": {
1730
+ "ok": {
1731
+ "const": false
1732
+ },
1733
+ "error": {
1734
+ "type": "object",
1735
+ "properties": {
1736
+ "code": {
1737
+ "type": "string"
1738
+ },
1739
+ "message": {
1740
+ "type": "string"
1741
+ },
1742
+ "retryable": {
1743
+ "type": "boolean"
1744
+ },
1745
+ "recoveryAction": {
1746
+ "type": "string"
1747
+ }
1748
+ },
1749
+ "required": [
1750
+ "code",
1751
+ "message",
1752
+ "retryable",
1753
+ "recoveryAction"
1754
+ ],
1755
+ "additionalProperties": false
1756
+ }
1757
+ },
1758
+ "required": [
1759
+ "ok",
1760
+ "error"
1761
+ ],
1762
+ "additionalProperties": false
1763
+ }
1764
+ ]
1765
+ },
1766
+ "examples": [
1767
+ {
1768
+ "request": {
1769
+ "artifactId": "00000000-0000-4000-8000-000000000001"
1770
+ },
1771
+ "success": {
1772
+ "ok": true,
1773
+ "phase": "<phase>",
1774
+ "artifactId": "00000000-0000-4000-8000-000000000001",
1775
+ "deploymentRecordId": "00000000-0000-4000-8000-000000000003",
1776
+ "deploymentState": "<deploymentState>",
1777
+ "healthy": true,
1778
+ "checkedAt": "<checkedAt>",
1779
+ "draftUrl": "<draftUrl>",
1780
+ "smoke": {}
1781
+ }
1782
+ }
1783
+ ]
1784
+ },
1785
+ {
1786
+ "name": "platform_run_artifact_smoke",
1787
+ "description": "Rerun the trusted draft smoke check and return fresh rendered-page evidence.",
1788
+ "annotations": {
1789
+ "title": "Platform Run Artifact Smoke",
1790
+ "readOnlyHint": false,
1791
+ "destructiveHint": false,
1792
+ "openWorldHint": true
1793
+ },
1794
+ "inputSchema": {
1795
+ "type": "object",
1796
+ "properties": {
1797
+ "artifactId": {
1798
+ "type": "string",
1799
+ "format": "uuid"
1800
+ },
1801
+ "deploymentRecordId": {
1802
+ "type": "string",
1803
+ "format": "uuid"
1804
+ }
1805
+ },
1806
+ "required": [
1807
+ "artifactId"
1808
+ ],
1809
+ "additionalProperties": false
1810
+ },
1811
+ "outputSchema": {
1812
+ "type": "object",
1813
+ "oneOf": [
1814
+ {
1815
+ "type": "object",
1816
+ "properties": {
1817
+ "ok": {
1818
+ "type": "boolean"
1819
+ },
1820
+ "phase": {
1821
+ "type": "string"
1822
+ },
1823
+ "artifactId": {
1824
+ "type": "string"
1825
+ },
1826
+ "deploymentRecordId": {
1827
+ "type": "string"
1828
+ },
1829
+ "smoke": {
1830
+ "type": "object"
1831
+ },
1832
+ "validation": {
1833
+ "type": "object"
1834
+ }
1835
+ },
1836
+ "required": [
1837
+ "ok",
1838
+ "phase",
1839
+ "artifactId",
1840
+ "deploymentRecordId",
1841
+ "smoke",
1842
+ "validation"
1843
+ ]
1844
+ },
1845
+ {
1846
+ "type": "object",
1847
+ "properties": {
1848
+ "ok": {
1849
+ "const": false
1850
+ },
1851
+ "error": {
1852
+ "type": "object",
1853
+ "properties": {
1854
+ "code": {
1855
+ "type": "string"
1856
+ },
1857
+ "message": {
1858
+ "type": "string"
1859
+ },
1860
+ "retryable": {
1861
+ "type": "boolean"
1862
+ },
1863
+ "recoveryAction": {
1864
+ "type": "string"
1865
+ }
1866
+ },
1867
+ "required": [
1868
+ "code",
1869
+ "message",
1870
+ "retryable",
1871
+ "recoveryAction"
1872
+ ],
1873
+ "additionalProperties": false
1874
+ }
1875
+ },
1876
+ "required": [
1877
+ "ok",
1878
+ "error"
1879
+ ],
1880
+ "additionalProperties": false
1881
+ }
1882
+ ]
1883
+ },
1884
+ "examples": [
1885
+ {
1886
+ "request": {
1887
+ "artifactId": "00000000-0000-4000-8000-000000000001"
1888
+ },
1889
+ "success": {
1890
+ "ok": true,
1891
+ "phase": "<phase>",
1892
+ "artifactId": "00000000-0000-4000-8000-000000000001",
1893
+ "deploymentRecordId": "00000000-0000-4000-8000-000000000003",
1894
+ "smoke": {},
1895
+ "validation": {}
1896
+ }
1897
+ }
1898
+ ]
1899
+ },
1900
+ {
1901
+ "name": "platform_plan_artifact_draft_delete",
1902
+ "description": "Preview cleanup effects and receive the state-bound plan token required for deletion.",
1903
+ "annotations": {
1904
+ "title": "Platform Plan Artifact Draft Delete",
1905
+ "readOnlyHint": true,
1906
+ "destructiveHint": false,
1907
+ "openWorldHint": true
1908
+ },
1909
+ "inputSchema": {
1910
+ "type": "object",
1911
+ "properties": {
1912
+ "artifactId": {
1913
+ "type": "string",
1914
+ "format": "uuid"
1915
+ }
1916
+ },
1917
+ "required": [
1918
+ "artifactId"
1919
+ ],
1920
+ "additionalProperties": false
1921
+ },
1922
+ "outputSchema": {
1923
+ "type": "object",
1924
+ "oneOf": [
1925
+ {
1926
+ "type": "object",
1927
+ "properties": {
1928
+ "ok": {
1929
+ "type": "boolean"
1930
+ },
1931
+ "phase": {
1932
+ "type": "string"
1933
+ },
1934
+ "artifactId": {
1935
+ "type": "string"
1936
+ },
1937
+ "eligible": {
1938
+ "type": "boolean"
1939
+ },
1940
+ "effects": {
1941
+ "type": "object"
1942
+ },
1943
+ "planToken": {
1944
+ "type": "string"
1945
+ }
1946
+ },
1947
+ "required": [
1948
+ "ok",
1949
+ "phase",
1950
+ "artifactId",
1951
+ "eligible",
1952
+ "effects",
1953
+ "planToken"
1954
+ ]
1955
+ },
1956
+ {
1957
+ "type": "object",
1958
+ "properties": {
1959
+ "ok": {
1960
+ "const": false
1961
+ },
1962
+ "error": {
1963
+ "type": "object",
1964
+ "properties": {
1965
+ "code": {
1966
+ "type": "string"
1967
+ },
1968
+ "message": {
1969
+ "type": "string"
1970
+ },
1971
+ "retryable": {
1972
+ "type": "boolean"
1973
+ },
1974
+ "recoveryAction": {
1975
+ "type": "string"
1976
+ }
1977
+ },
1978
+ "required": [
1979
+ "code",
1980
+ "message",
1981
+ "retryable",
1982
+ "recoveryAction"
1983
+ ],
1984
+ "additionalProperties": false
1985
+ }
1986
+ },
1987
+ "required": [
1988
+ "ok",
1989
+ "error"
1990
+ ],
1991
+ "additionalProperties": false
1992
+ }
1993
+ ]
1994
+ },
1995
+ "examples": [
1996
+ {
1997
+ "request": {
1998
+ "artifactId": "00000000-0000-4000-8000-000000000001"
1999
+ },
2000
+ "success": {
2001
+ "ok": true,
2002
+ "phase": "<phase>",
2003
+ "artifactId": "00000000-0000-4000-8000-000000000001",
2004
+ "eligible": true,
2005
+ "effects": {},
2006
+ "planToken": "example-plan-token"
2007
+ }
2008
+ }
2009
+ ]
2010
+ },
2011
+ {
2012
+ "name": "platform_delete_artifact_draft",
2013
+ "description": "Permanently remove an unpromoted private draft created by this MCP connection after exact-id confirmation.",
2014
+ "annotations": {
2015
+ "title": "Platform Delete Artifact Draft",
2016
+ "readOnlyHint": false,
2017
+ "destructiveHint": true,
2018
+ "openWorldHint": true
2019
+ },
2020
+ "inputSchema": {
2021
+ "type": "object",
2022
+ "properties": {
2023
+ "artifactId": {
2024
+ "type": "string",
2025
+ "format": "uuid"
2026
+ },
2027
+ "confirmArtifactId": {
2028
+ "type": "string",
2029
+ "format": "uuid"
2030
+ },
2031
+ "planToken": {
2032
+ "type": "string",
2033
+ "minLength": 1
2034
+ }
2035
+ },
2036
+ "required": [
2037
+ "artifactId",
2038
+ "confirmArtifactId",
2039
+ "planToken"
2040
+ ],
2041
+ "additionalProperties": false
2042
+ },
2043
+ "outputSchema": {
2044
+ "type": "object",
2045
+ "oneOf": [
2046
+ {
2047
+ "type": "object",
2048
+ "properties": {
2049
+ "ok": {
2050
+ "type": "boolean"
2051
+ },
2052
+ "deleted": {
2053
+ "type": "boolean"
2054
+ },
2055
+ "artifactId": {
2056
+ "type": "string"
2057
+ }
2058
+ },
2059
+ "required": [
2060
+ "ok",
2061
+ "deleted",
2062
+ "artifactId"
2063
+ ]
2064
+ },
2065
+ {
2066
+ "type": "object",
2067
+ "properties": {
2068
+ "ok": {
2069
+ "const": false
2070
+ },
2071
+ "error": {
2072
+ "type": "object",
2073
+ "properties": {
2074
+ "code": {
2075
+ "type": "string"
2076
+ },
2077
+ "message": {
2078
+ "type": "string"
2079
+ },
2080
+ "retryable": {
2081
+ "type": "boolean"
2082
+ },
2083
+ "recoveryAction": {
2084
+ "type": "string"
2085
+ }
2086
+ },
2087
+ "required": [
2088
+ "code",
2089
+ "message",
2090
+ "retryable",
2091
+ "recoveryAction"
2092
+ ],
2093
+ "additionalProperties": false
2094
+ }
2095
+ },
2096
+ "required": [
2097
+ "ok",
2098
+ "error"
2099
+ ],
2100
+ "additionalProperties": false
2101
+ }
2102
+ ]
2103
+ },
2104
+ "examples": [
2105
+ {
2106
+ "request": {
2107
+ "artifactId": "00000000-0000-4000-8000-000000000001",
2108
+ "confirmArtifactId": "00000000-0000-4000-8000-000000000001",
2109
+ "planToken": "example-plan-token"
2110
+ },
2111
+ "success": {
2112
+ "ok": true,
2113
+ "deleted": true,
2114
+ "artifactId": "00000000-0000-4000-8000-000000000001"
2115
+ }
2116
+ }
2117
+ ]
2118
+ }
2119
+ ]
2120
+ }