dodo-mcp 1.3.0 → 1.3.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.
Files changed (49) hide show
  1. package/README.md +19 -1
  2. package/dist/cli/main.js +1 -0
  3. package/dist/cli/main.js.map +1 -1
  4. package/dist/server/aiAdmin.js +19 -23
  5. package/dist/server/aiAdmin.js.map +1 -1
  6. package/dist/server/appServer.js +1 -1
  7. package/dist/server/appServer.js.map +1 -1
  8. package/dist/server/configSession.js +21 -0
  9. package/dist/server/configSession.js.map +1 -0
  10. package/dist/server/configUi/index.html +1 -0
  11. package/dist/server/configUi/ui/recovery.js +2 -17
  12. package/dist/server/configUi/ui/recoveryMaintenance.js +61 -0
  13. package/dist/server/ipcDispatch.js +6 -2
  14. package/dist/server/ipcDispatch.js.map +1 -1
  15. package/dist/server/localConfig.js +34 -11
  16. package/dist/server/localConfig.js.map +1 -1
  17. package/dist/server/remoteConfig.js +23 -13
  18. package/dist/server/remoteConfig.js.map +1 -1
  19. package/dist/services/recovery/contracts.js +1 -0
  20. package/dist/services/recovery/contracts.js.map +1 -1
  21. package/dist/services/recovery/maintenance.js +220 -0
  22. package/dist/services/recovery/maintenance.js.map +1 -0
  23. package/dist/services/recovery/recoveryService.js +18 -5
  24. package/dist/services/recovery/recoveryService.js.map +1 -1
  25. package/dist/services/recovery/storage.js +46 -2
  26. package/dist/services/recovery/storage.js.map +1 -1
  27. package/dist/store/db.js +6 -0
  28. package/dist/store/db.js.map +1 -1
  29. package/dist/tools/recoveryTools.js +24 -3
  30. package/dist/tools/recoveryTools.js.map +1 -1
  31. package/dist/tools/surface.js +2 -2
  32. package/dist/tools/surface.js.map +1 -1
  33. package/docs/ARCHITECTURE.md +28 -2
  34. package/docs/COMPATIBILITY.md +9 -0
  35. package/docs/MANUAL_ACCEPTANCE.md +41 -0
  36. package/docs/MCP_CONNECTIONS.md +238 -0
  37. package/docs/RECOVERY.md +73 -8
  38. package/docs/RELEASE_1.3.1.md +49 -0
  39. package/docs/RELEASE_1.3.2.md +50 -0
  40. package/docs/RELEASE_NOTES.md +18 -0
  41. package/docs/SECURITY.md +28 -0
  42. package/docs/TEST_REPORT.md +40 -0
  43. package/docs/TUNNEL.md +6 -0
  44. package/docs/WEB_CLIENTS.md +3 -0
  45. package/docs/adr/047-temporary-remote-config.md +11 -0
  46. package/package.json +4 -1
  47. package/schemas/tools.compact.json +16 -8
  48. package/schemas/tools.hybrid.json +16 -8
  49. package/schemas/tools.json +682 -2
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$comment": "GENERATED from src/tools — do not edit by hand. Complete DODO capability contract; optional feature metadata describes definitions filtered from the default live MCP catalog.",
3
3
  "version": 1,
4
- "toolCount": 158,
5
- "defaultLiveToolCount": 154,
4
+ "toolCount": 162,
5
+ "defaultLiveToolCount": 158,
6
6
  "optionalMcpFeatures": {
7
7
  "subagents": {
8
8
  "configKey": "exposeSubagentsToMcp",
@@ -38453,6 +38453,686 @@
38453
38453
  "additionalProperties": false
38454
38454
  }
38455
38455
  },
38456
+ {
38457
+ "name": "recovery_storage_status",
38458
+ "title": "recovery storage status",
38459
+ "description": "Inspect Recovery quotas, unique source storage versus logical checkpoint sizes, pending cleanup and caller-owned checkpoints. Never exposes private backup paths.",
38460
+ "requiredScope": "dodo:read",
38461
+ "annotations": {
38462
+ "readOnlyHint": true,
38463
+ "destructiveHint": false,
38464
+ "idempotentHint": true,
38465
+ "openWorldHint": false
38466
+ },
38467
+ "inputSchema": {
38468
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
38469
+ "type": "object",
38470
+ "properties": {
38471
+ "recoverySessionId": {
38472
+ "description": "Explicit caller-owned recovery session for this operation; never an authorization grant",
38473
+ "type": "string",
38474
+ "minLength": 1,
38475
+ "maxLength": 128
38476
+ },
38477
+ "targetProjectId": {
38478
+ "description": "Explicit owner-registered target; use its project_overview context",
38479
+ "type": "string",
38480
+ "pattern": "^prj_[0-9a-hjkmnp-tv-z]{8,64}$"
38481
+ },
38482
+ "targetProject": {
38483
+ "description": "Owner-registered project NAME to target (alternative to targetProjectId; must match exactly one project)",
38484
+ "type": "string",
38485
+ "minLength": 1,
38486
+ "maxLength": 120
38487
+ },
38488
+ "workspaceId": {
38489
+ "type": "string",
38490
+ "minLength": 1,
38491
+ "maxLength": 128,
38492
+ "description": "Workspace id from project_overview"
38493
+ },
38494
+ "workspaceEpoch": {
38495
+ "type": "string",
38496
+ "minLength": 1,
38497
+ "maxLength": 128,
38498
+ "description": "Workspace epoch from project_overview (changes on server restart or workspace switch)"
38499
+ },
38500
+ "cursor": {
38501
+ "default": 0,
38502
+ "type": "integer",
38503
+ "minimum": 0,
38504
+ "maximum": 1000000
38505
+ },
38506
+ "limit": {
38507
+ "default": 20,
38508
+ "type": "integer",
38509
+ "minimum": 1,
38510
+ "maximum": 100
38511
+ },
38512
+ "planId": {
38513
+ "type": "string",
38514
+ "minLength": 1,
38515
+ "maxLength": 128
38516
+ }
38517
+ },
38518
+ "required": [
38519
+ "workspaceId",
38520
+ "workspaceEpoch",
38521
+ "cursor",
38522
+ "limit"
38523
+ ],
38524
+ "additionalProperties": false
38525
+ },
38526
+ "outputSchema": {
38527
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
38528
+ "type": "object",
38529
+ "properties": {
38530
+ "ok": {
38531
+ "type": "boolean"
38532
+ },
38533
+ "workspaceId": {
38534
+ "type": [
38535
+ "string",
38536
+ "null"
38537
+ ]
38538
+ },
38539
+ "workspaceEpoch": {
38540
+ "type": [
38541
+ "string",
38542
+ "null"
38543
+ ]
38544
+ },
38545
+ "data": {
38546
+ "anyOf": [
38547
+ {
38548
+ "type": "object",
38549
+ "properties": {},
38550
+ "additionalProperties": {}
38551
+ },
38552
+ {
38553
+ "type": "null"
38554
+ }
38555
+ ]
38556
+ },
38557
+ "error": {
38558
+ "anyOf": [
38559
+ {
38560
+ "type": "object",
38561
+ "properties": {
38562
+ "code": {
38563
+ "type": "string"
38564
+ },
38565
+ "message": {
38566
+ "type": "string"
38567
+ },
38568
+ "retryable": {
38569
+ "type": "boolean"
38570
+ },
38571
+ "recovery": {
38572
+ "type": "string"
38573
+ },
38574
+ "detail": {
38575
+ "type": "object",
38576
+ "propertyNames": {
38577
+ "type": "string"
38578
+ },
38579
+ "additionalProperties": {}
38580
+ }
38581
+ },
38582
+ "required": [
38583
+ "code",
38584
+ "message",
38585
+ "retryable"
38586
+ ],
38587
+ "additionalProperties": false
38588
+ },
38589
+ {
38590
+ "type": "null"
38591
+ }
38592
+ ]
38593
+ },
38594
+ "warnings": {
38595
+ "type": "array",
38596
+ "items": {
38597
+ "type": "string"
38598
+ }
38599
+ },
38600
+ "truncated": {
38601
+ "type": "boolean"
38602
+ },
38603
+ "nextCursor": {
38604
+ "type": [
38605
+ "string",
38606
+ "null"
38607
+ ]
38608
+ }
38609
+ },
38610
+ "required": [
38611
+ "ok",
38612
+ "workspaceId",
38613
+ "workspaceEpoch",
38614
+ "data",
38615
+ "error",
38616
+ "warnings",
38617
+ "truncated",
38618
+ "nextCursor"
38619
+ ],
38620
+ "additionalProperties": false
38621
+ }
38622
+ },
38623
+ {
38624
+ "name": "recovery_cleanup_preview",
38625
+ "title": "recovery cleanup preview",
38626
+ "description": "Preview deletion of up to 100 caller-owned checkpoints, retention cleanup, or retry of pending physical cleanup. Does not delete files. Protected/current points and incomplete session selections cannot be deleted. Apply needs separate owner approval even in trusted mode.",
38627
+ "requiredScope": "dodo:write",
38628
+ "annotations": {
38629
+ "readOnlyHint": false,
38630
+ "destructiveHint": false,
38631
+ "idempotentHint": false,
38632
+ "openWorldHint": false
38633
+ },
38634
+ "inputSchema": {
38635
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
38636
+ "type": "object",
38637
+ "properties": {
38638
+ "recoverySessionId": {
38639
+ "description": "Explicit caller-owned recovery session for this operation; never an authorization grant",
38640
+ "type": "string",
38641
+ "minLength": 1,
38642
+ "maxLength": 128
38643
+ },
38644
+ "targetProjectId": {
38645
+ "description": "Explicit owner-registered target; use its project_overview context",
38646
+ "type": "string",
38647
+ "pattern": "^prj_[0-9a-hjkmnp-tv-z]{8,64}$"
38648
+ },
38649
+ "targetProject": {
38650
+ "description": "Owner-registered project NAME to target (alternative to targetProjectId; must match exactly one project)",
38651
+ "type": "string",
38652
+ "minLength": 1,
38653
+ "maxLength": 120
38654
+ },
38655
+ "workspaceId": {
38656
+ "type": "string",
38657
+ "minLength": 1,
38658
+ "maxLength": 128,
38659
+ "description": "Workspace id from project_overview"
38660
+ },
38661
+ "workspaceEpoch": {
38662
+ "type": "string",
38663
+ "minLength": 1,
38664
+ "maxLength": 128,
38665
+ "description": "Workspace epoch from project_overview (changes on server restart or workspace switch)"
38666
+ },
38667
+ "mode": {
38668
+ "default": "selected",
38669
+ "type": "string",
38670
+ "enum": [
38671
+ "selected",
38672
+ "retention",
38673
+ "pending"
38674
+ ]
38675
+ },
38676
+ "checkpointIds": {
38677
+ "default": [],
38678
+ "maxItems": 100,
38679
+ "type": "array",
38680
+ "items": {
38681
+ "type": "string",
38682
+ "minLength": 1,
38683
+ "maxLength": 128
38684
+ }
38685
+ }
38686
+ },
38687
+ "required": [
38688
+ "workspaceId",
38689
+ "workspaceEpoch",
38690
+ "mode",
38691
+ "checkpointIds"
38692
+ ],
38693
+ "additionalProperties": false
38694
+ },
38695
+ "outputSchema": {
38696
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
38697
+ "type": "object",
38698
+ "properties": {
38699
+ "ok": {
38700
+ "type": "boolean"
38701
+ },
38702
+ "workspaceId": {
38703
+ "type": [
38704
+ "string",
38705
+ "null"
38706
+ ]
38707
+ },
38708
+ "workspaceEpoch": {
38709
+ "type": [
38710
+ "string",
38711
+ "null"
38712
+ ]
38713
+ },
38714
+ "data": {
38715
+ "anyOf": [
38716
+ {
38717
+ "type": "object",
38718
+ "properties": {},
38719
+ "additionalProperties": {}
38720
+ },
38721
+ {
38722
+ "type": "null"
38723
+ }
38724
+ ]
38725
+ },
38726
+ "error": {
38727
+ "anyOf": [
38728
+ {
38729
+ "type": "object",
38730
+ "properties": {
38731
+ "code": {
38732
+ "type": "string"
38733
+ },
38734
+ "message": {
38735
+ "type": "string"
38736
+ },
38737
+ "retryable": {
38738
+ "type": "boolean"
38739
+ },
38740
+ "recovery": {
38741
+ "type": "string"
38742
+ },
38743
+ "detail": {
38744
+ "type": "object",
38745
+ "propertyNames": {
38746
+ "type": "string"
38747
+ },
38748
+ "additionalProperties": {}
38749
+ }
38750
+ },
38751
+ "required": [
38752
+ "code",
38753
+ "message",
38754
+ "retryable"
38755
+ ],
38756
+ "additionalProperties": false
38757
+ },
38758
+ {
38759
+ "type": "null"
38760
+ }
38761
+ ]
38762
+ },
38763
+ "warnings": {
38764
+ "type": "array",
38765
+ "items": {
38766
+ "type": "string"
38767
+ }
38768
+ },
38769
+ "truncated": {
38770
+ "type": "boolean"
38771
+ },
38772
+ "nextCursor": {
38773
+ "type": [
38774
+ "string",
38775
+ "null"
38776
+ ]
38777
+ }
38778
+ },
38779
+ "required": [
38780
+ "ok",
38781
+ "workspaceId",
38782
+ "workspaceEpoch",
38783
+ "data",
38784
+ "error",
38785
+ "warnings",
38786
+ "truncated",
38787
+ "nextCursor"
38788
+ ],
38789
+ "additionalProperties": false
38790
+ }
38791
+ },
38792
+ {
38793
+ "name": "recovery_settings_preview",
38794
+ "title": "recovery settings preview",
38795
+ "description": "Propose project backup quota, retention and relative exclusion paths (e.g. models). Does not change policy. Cannot disable Recovery or change private destinations. Exclusions affect future coverage only; owner approval required to apply.",
38796
+ "requiredScope": "dodo:write",
38797
+ "annotations": {
38798
+ "readOnlyHint": false,
38799
+ "destructiveHint": false,
38800
+ "idempotentHint": false,
38801
+ "openWorldHint": false
38802
+ },
38803
+ "inputSchema": {
38804
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
38805
+ "type": "object",
38806
+ "properties": {
38807
+ "recoverySessionId": {
38808
+ "description": "Explicit caller-owned recovery session for this operation; never an authorization grant",
38809
+ "type": "string",
38810
+ "minLength": 1,
38811
+ "maxLength": 128
38812
+ },
38813
+ "targetProjectId": {
38814
+ "description": "Explicit owner-registered target; use its project_overview context",
38815
+ "type": "string",
38816
+ "pattern": "^prj_[0-9a-hjkmnp-tv-z]{8,64}$"
38817
+ },
38818
+ "targetProject": {
38819
+ "description": "Owner-registered project NAME to target (alternative to targetProjectId; must match exactly one project)",
38820
+ "type": "string",
38821
+ "minLength": 1,
38822
+ "maxLength": 120
38823
+ },
38824
+ "workspaceId": {
38825
+ "type": "string",
38826
+ "minLength": 1,
38827
+ "maxLength": 128,
38828
+ "description": "Workspace id from project_overview"
38829
+ },
38830
+ "workspaceEpoch": {
38831
+ "type": "string",
38832
+ "minLength": 1,
38833
+ "maxLength": 128,
38834
+ "description": "Workspace epoch from project_overview (changes on server restart or workspace switch)"
38835
+ },
38836
+ "changes": {
38837
+ "type": "object",
38838
+ "properties": {
38839
+ "projectBytes": {
38840
+ "type": "integer",
38841
+ "minimum": 1048576,
38842
+ "maximum": 107374182400
38843
+ },
38844
+ "retentionDays": {
38845
+ "type": "integer",
38846
+ "minimum": 1,
38847
+ "maximum": 3650
38848
+ },
38849
+ "retainedPoints": {
38850
+ "type": "integer",
38851
+ "minimum": 1,
38852
+ "maximum": 10000
38853
+ },
38854
+ "excludePaths": {
38855
+ "maxItems": 100,
38856
+ "type": "array",
38857
+ "items": {
38858
+ "type": "string",
38859
+ "minLength": 1,
38860
+ "maxLength": 1024
38861
+ }
38862
+ }
38863
+ },
38864
+ "additionalProperties": false
38865
+ }
38866
+ },
38867
+ "required": [
38868
+ "workspaceId",
38869
+ "workspaceEpoch",
38870
+ "changes"
38871
+ ],
38872
+ "additionalProperties": false
38873
+ },
38874
+ "outputSchema": {
38875
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
38876
+ "type": "object",
38877
+ "properties": {
38878
+ "ok": {
38879
+ "type": "boolean"
38880
+ },
38881
+ "workspaceId": {
38882
+ "type": [
38883
+ "string",
38884
+ "null"
38885
+ ]
38886
+ },
38887
+ "workspaceEpoch": {
38888
+ "type": [
38889
+ "string",
38890
+ "null"
38891
+ ]
38892
+ },
38893
+ "data": {
38894
+ "anyOf": [
38895
+ {
38896
+ "type": "object",
38897
+ "properties": {},
38898
+ "additionalProperties": {}
38899
+ },
38900
+ {
38901
+ "type": "null"
38902
+ }
38903
+ ]
38904
+ },
38905
+ "error": {
38906
+ "anyOf": [
38907
+ {
38908
+ "type": "object",
38909
+ "properties": {
38910
+ "code": {
38911
+ "type": "string"
38912
+ },
38913
+ "message": {
38914
+ "type": "string"
38915
+ },
38916
+ "retryable": {
38917
+ "type": "boolean"
38918
+ },
38919
+ "recovery": {
38920
+ "type": "string"
38921
+ },
38922
+ "detail": {
38923
+ "type": "object",
38924
+ "propertyNames": {
38925
+ "type": "string"
38926
+ },
38927
+ "additionalProperties": {}
38928
+ }
38929
+ },
38930
+ "required": [
38931
+ "code",
38932
+ "message",
38933
+ "retryable"
38934
+ ],
38935
+ "additionalProperties": false
38936
+ },
38937
+ {
38938
+ "type": "null"
38939
+ }
38940
+ ]
38941
+ },
38942
+ "warnings": {
38943
+ "type": "array",
38944
+ "items": {
38945
+ "type": "string"
38946
+ }
38947
+ },
38948
+ "truncated": {
38949
+ "type": "boolean"
38950
+ },
38951
+ "nextCursor": {
38952
+ "type": [
38953
+ "string",
38954
+ "null"
38955
+ ]
38956
+ }
38957
+ },
38958
+ "required": [
38959
+ "ok",
38960
+ "workspaceId",
38961
+ "workspaceEpoch",
38962
+ "data",
38963
+ "error",
38964
+ "warnings",
38965
+ "truncated",
38966
+ "nextCursor"
38967
+ ],
38968
+ "additionalProperties": false
38969
+ }
38970
+ },
38971
+ {
38972
+ "name": "recovery_maintenance_apply",
38973
+ "title": "recovery maintenance apply",
38974
+ "description": "Apply exactly a reviewed Recovery cleanup/settings plan and hash. Requires owner approval even in trusted mode. Keeps current/pinned/referenced checkpoints, caller ownership and live ACL checks. Never repairs corruption by accepting it. Retry with the same idempotency key returns the receipt.",
38975
+ "requiredScope": "dodo:write",
38976
+ "annotations": {
38977
+ "readOnlyHint": false,
38978
+ "destructiveHint": true,
38979
+ "idempotentHint": true,
38980
+ "openWorldHint": false
38981
+ },
38982
+ "inputSchema": {
38983
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
38984
+ "type": "object",
38985
+ "properties": {
38986
+ "recoverySessionId": {
38987
+ "description": "Explicit caller-owned recovery session for this operation; never an authorization grant",
38988
+ "type": "string",
38989
+ "minLength": 1,
38990
+ "maxLength": 128
38991
+ },
38992
+ "targetProjectId": {
38993
+ "description": "Explicit owner-registered target; use its project_overview context",
38994
+ "type": "string",
38995
+ "pattern": "^prj_[0-9a-hjkmnp-tv-z]{8,64}$"
38996
+ },
38997
+ "targetProject": {
38998
+ "description": "Owner-registered project NAME to target (alternative to targetProjectId; must match exactly one project)",
38999
+ "type": "string",
39000
+ "minLength": 1,
39001
+ "maxLength": 120
39002
+ },
39003
+ "workspaceId": {
39004
+ "type": "string",
39005
+ "minLength": 1,
39006
+ "maxLength": 128,
39007
+ "description": "Workspace id from project_overview"
39008
+ },
39009
+ "workspaceEpoch": {
39010
+ "type": "string",
39011
+ "minLength": 1,
39012
+ "maxLength": 128,
39013
+ "description": "Workspace epoch from project_overview (changes on server restart or workspace switch)"
39014
+ },
39015
+ "planId": {
39016
+ "type": "string",
39017
+ "minLength": 1,
39018
+ "maxLength": 128
39019
+ },
39020
+ "planHash": {
39021
+ "type": "string",
39022
+ "pattern": "^sha256:[a-f0-9]{64}$"
39023
+ },
39024
+ "idempotencyKey": {
39025
+ "type": "string",
39026
+ "minLength": 8,
39027
+ "maxLength": 128
39028
+ }
39029
+ },
39030
+ "required": [
39031
+ "workspaceId",
39032
+ "workspaceEpoch",
39033
+ "planId",
39034
+ "planHash",
39035
+ "idempotencyKey"
39036
+ ],
39037
+ "additionalProperties": false
39038
+ },
39039
+ "outputSchema": {
39040
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
39041
+ "type": "object",
39042
+ "properties": {
39043
+ "ok": {
39044
+ "type": "boolean"
39045
+ },
39046
+ "workspaceId": {
39047
+ "type": [
39048
+ "string",
39049
+ "null"
39050
+ ]
39051
+ },
39052
+ "workspaceEpoch": {
39053
+ "type": [
39054
+ "string",
39055
+ "null"
39056
+ ]
39057
+ },
39058
+ "data": {
39059
+ "anyOf": [
39060
+ {
39061
+ "type": "object",
39062
+ "properties": {},
39063
+ "additionalProperties": {}
39064
+ },
39065
+ {
39066
+ "type": "null"
39067
+ }
39068
+ ]
39069
+ },
39070
+ "error": {
39071
+ "anyOf": [
39072
+ {
39073
+ "type": "object",
39074
+ "properties": {
39075
+ "code": {
39076
+ "type": "string"
39077
+ },
39078
+ "message": {
39079
+ "type": "string"
39080
+ },
39081
+ "retryable": {
39082
+ "type": "boolean"
39083
+ },
39084
+ "recovery": {
39085
+ "type": "string"
39086
+ },
39087
+ "detail": {
39088
+ "type": "object",
39089
+ "propertyNames": {
39090
+ "type": "string"
39091
+ },
39092
+ "additionalProperties": {}
39093
+ }
39094
+ },
39095
+ "required": [
39096
+ "code",
39097
+ "message",
39098
+ "retryable"
39099
+ ],
39100
+ "additionalProperties": false
39101
+ },
39102
+ {
39103
+ "type": "null"
39104
+ }
39105
+ ]
39106
+ },
39107
+ "warnings": {
39108
+ "type": "array",
39109
+ "items": {
39110
+ "type": "string"
39111
+ }
39112
+ },
39113
+ "truncated": {
39114
+ "type": "boolean"
39115
+ },
39116
+ "nextCursor": {
39117
+ "type": [
39118
+ "string",
39119
+ "null"
39120
+ ]
39121
+ }
39122
+ },
39123
+ "required": [
39124
+ "ok",
39125
+ "workspaceId",
39126
+ "workspaceEpoch",
39127
+ "data",
39128
+ "error",
39129
+ "warnings",
39130
+ "truncated",
39131
+ "nextCursor"
39132
+ ],
39133
+ "additionalProperties": false
39134
+ }
39135
+ },
38456
39136
  {
38457
39137
  "name": "restore_status",
38458
39138
  "title": "restore status",