@honua/mcp-server 0.1.14 → 0.1.16

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 (81) hide show
  1. package/README.md +12 -3
  2. package/certification/geospatial-mcp-schemas/PROVENANCE.md +14 -8
  3. package/certification/geospatial-mcp-schemas/common/controls.schema.json +81 -0
  4. package/certification/geospatial-mcp-schemas/common/exploration.schema.json +165 -0
  5. package/certification/geospatial-mcp-schemas/common/interactions.schema.json +263 -0
  6. package/certification/geospatial-mcp-schemas/index.json +155 -4
  7. package/certification/geospatial-mcp-schemas/resources/app-package.schema.json +17 -1
  8. package/certification/geospatial-mcp-schemas/resources/map-package.schema.json +17 -1
  9. package/certification/geospatial-mcp-schemas/resources/ops-findings.schema.json +61 -0
  10. package/certification/geospatial-mcp-schemas/resources/ops-health.schema.json +138 -0
  11. package/certification/geospatial-mcp-schemas/tools/add_control.schema.json +107 -0
  12. package/certification/geospatial-mcp-schemas/tools/alert_events.result.schema.json +49 -0
  13. package/certification/geospatial-mcp-schemas/tools/alert_events.schema.json +49 -0
  14. package/certification/geospatial-mcp-schemas/tools/bind_component_context.schema.json +60 -0
  15. package/certification/geospatial-mcp-schemas/tools/bind_interaction.schema.json +97 -0
  16. package/certification/geospatial-mcp-schemas/tools/create_exploration_context.schema.json +35 -0
  17. package/certification/geospatial-mcp-schemas/tools/deploy_operations.result.schema.json +109 -0
  18. package/certification/geospatial-mcp-schemas/tools/deploy_operations.schema.json +49 -0
  19. package/certification/geospatial-mcp-schemas/tools/operate_events.result.schema.json +67 -0
  20. package/certification/geospatial-mcp-schemas/tools/operate_events.schema.json +46 -0
  21. package/certification/geospatial-mcp-schemas/tools/ops_findings.schema.json +25 -0
  22. package/certification/geospatial-mcp-schemas/tools/ops_health.schema.json +10 -0
  23. package/certification/geospatial-mcp-schemas/tools/platform_release_status.result.schema.json +53 -0
  24. package/certification/geospatial-mcp-schemas/tools/platform_release_status.schema.json +10 -0
  25. package/certification/geospatial-mcp-schemas/tools/propose_operation.schema.json +7 -2
  26. package/certification/geospatial-mcp-schemas/tools/propose_rollback.schema.json +29 -0
  27. package/certification/geospatial-mcp-schemas/tools/remove_control.schema.json +114 -0
  28. package/certification/geospatial-mcp-schemas/tools/remove_exploration_context.schema.json +42 -0
  29. package/certification/geospatial-mcp-schemas/tools/remove_interaction.schema.json +99 -0
  30. package/certification/setup-parity.md +6 -1
  31. package/dist/src/certification/certifier.d.ts +17 -2
  32. package/dist/src/certification/certifier.d.ts.map +1 -1
  33. package/dist/src/certification/certifier.js +69 -11
  34. package/dist/src/certification/cli.js +4 -1
  35. package/dist/src/certification/lifecycle.d.ts +2 -0
  36. package/dist/src/certification/lifecycle.d.ts.map +1 -1
  37. package/dist/src/certification/lifecycle.js +3 -0
  38. package/dist/src/certification/operator-catalog.d.ts.map +1 -1
  39. package/dist/src/certification/operator-catalog.js +0 -12
  40. package/dist/src/certification/report.d.ts.map +1 -1
  41. package/dist/src/certification/report.js +2 -1
  42. package/dist/src/certification/roster.d.ts +99 -0
  43. package/dist/src/certification/roster.d.ts.map +1 -0
  44. package/dist/src/certification/roster.js +233 -0
  45. package/dist/src/certification/round-trip-target.d.ts +45 -0
  46. package/dist/src/certification/round-trip-target.d.ts.map +1 -0
  47. package/dist/src/certification/round-trip-target.js +122 -0
  48. package/dist/src/certification/run.d.ts.map +1 -1
  49. package/dist/src/certification/run.js +7 -0
  50. package/dist/src/certification/setup-parity.js +2 -2
  51. package/dist/src/eval/northstar-corpus.d.ts.map +1 -1
  52. package/dist/src/eval/northstar-corpus.js +12 -10
  53. package/dist/src/eval/operator-corpus.d.ts.map +1 -1
  54. package/dist/src/eval/operator-corpus.js +11 -6
  55. package/dist/src/eval/proposal-tools.d.ts +14 -0
  56. package/dist/src/eval/proposal-tools.d.ts.map +1 -0
  57. package/dist/src/eval/proposal-tools.js +20 -0
  58. package/dist/src/index.d.ts.map +1 -1
  59. package/dist/src/index.js +12 -3
  60. package/dist/src/neutral/query.js +1 -1
  61. package/dist/src/release/zero-to-map-cli.d.ts.map +1 -1
  62. package/dist/src/release/zero-to-map-cli.js +8 -2
  63. package/dist/src/release/zero-to-map-provision.d.ts +6 -0
  64. package/dist/src/release/zero-to-map-provision.d.ts.map +1 -1
  65. package/dist/src/release/zero-to-map-provision.js +6 -0
  66. package/dist/src/tools/apply-style-preset.d.ts +1 -1
  67. package/dist/src/tools/apply-style-preset.d.ts.map +1 -1
  68. package/dist/src/tools/apply-style-preset.js +4 -2
  69. package/dist/src/tools/control-plane-command.d.ts +1 -1
  70. package/dist/src/tools/control-plane-command.d.ts.map +1 -1
  71. package/dist/src/tools/control-plane-command.js +3 -2
  72. package/dist/src/tools/docs-search.d.ts +2 -2
  73. package/dist/src/tools/docs-search.d.ts.map +1 -1
  74. package/dist/src/tools/docs-search.js +15 -4
  75. package/dist/src/tools/query-features.d.ts +10 -1
  76. package/dist/src/tools/query-features.d.ts.map +1 -1
  77. package/dist/src/tools/query-features.js +16 -4
  78. package/package.json +2 -2
  79. package/release/zero-to-map/configs/claude-code.mcp.json +1 -1
  80. package/release/zero-to-map/configs/claude-desktop.json +1 -1
  81. package/release/zero-to-map/configs/cursor.json +1 -1
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "title": "geospatial-mcp JSON Schema index",
4
4
  "description": "Machine-readable map from standard MCP tool names and resource family URIs to their JSON Schema (draft 2020-12) files. 'standardName' is the bare taxonomy.md tool name; 'referenceToolName' is the name the reference implementation (Honua /mcp) advertises. 'implementationStatus' records whether the reference implementation ships the tool/resource family today (implemented) or whether it is a standard family not yet served by the reference (known-gap). For resources, 'implementationStatus' gates the FULL conformance level the same way it does for tools: a manifest must advertise every 'implemented' resource family to reach FULL; 'known-gap' families are reported as informational notes only. 'profile' (optional; default 'base') assigns a tool to a conformance profile: 'base' tools are required for the base FULL verdict; tools in an additive profile such as 'mutation' are required for FULL only when a manifest declares that profile, and are otherwise reported as informational notes (see /CONFORMANCE.md §Conformance Profiles).",
5
- "date": "2026-07-06",
5
+ "date": "2026-08-12",
6
6
  "dialect": "https://json-schema.org/draft/2020-12/schema",
7
7
  "tools": [
8
8
  {
@@ -47,7 +47,7 @@
47
47
  "family": "Map composition",
48
48
  "schema": "tools/create_map_package.schema.json",
49
49
  "implementationStatus": "implemented",
50
- "notes": "Reference implementation (#1951): routes through the canonical IMapGenerationService pipeline."
50
+ "notes": "Reference implementation (honua-server#3255): deterministic draft-creation entry point. It builds a draft MapPackage directly from the structured inputs defined in this schema (template, source bindings, style/theme selection, initial view) and returns its stable map package identifier; no server-side model inference runs. Model reasoning is owned by the client agent, and the composition is then refined through the fine-grained composition element operations."
51
51
  },
52
52
  {
53
53
  "standardName": "refine_map_package",
@@ -90,7 +90,7 @@
90
90
  "family": "App composition",
91
91
  "schema": "tools/create_app_package.schema.json",
92
92
  "implementationStatus": "implemented",
93
- "notes": "Reference implementation (#1951): routes through the canonical IAppGenerationService pipeline."
93
+ "notes": "Reference implementation (honua-server#3255): deterministic draft-creation entry point. It builds a draft AppPackage directly from the structured inputs defined in this schema (app template, target SDK, bound map package and artifacts, runtime config) and returns its stable app package identifier; no server-side model inference runs. Model reasoning is owned by the client agent, and the composition is then refined through the fine-grained composition element operations."
94
94
  },
95
95
  {
96
96
  "standardName": "preview_app_package",
@@ -99,6 +99,69 @@
99
99
  "schema": "tools/preview_app_package.schema.json",
100
100
  "implementationStatus": "known-gap"
101
101
  },
102
+ {
103
+ "standardName": "bind_interaction",
104
+ "referenceToolName": null,
105
+ "family": "Composition interactions",
106
+ "schema": "tools/bind_interaction.schema.json",
107
+ "implementationStatus": "known-gap",
108
+ "profile": "composition",
109
+ "notes": "Adds or replaces one declarative event→action binding in a composition document; member of the opt-in composition conformance profile (docs/adr/0030-declarative-interactions-and-layout.md). Bindings are data-only ($event.* substitution, no expression language); actions never emit events. The reference implementation does not ship the standard-named tool yet; required for FULL only when a manifest declares the composition profile."
110
+ },
111
+ {
112
+ "standardName": "remove_interaction",
113
+ "referenceToolName": null,
114
+ "family": "Composition interactions",
115
+ "schema": "tools/remove_interaction.schema.json",
116
+ "implementationStatus": "known-gap",
117
+ "profile": "composition",
118
+ "notes": "Removes one declarative binding, by id, from a composition document; member of the opt-in composition conformance profile (docs/adr/0030-declarative-interactions-and-layout.md)."
119
+ },
120
+ {
121
+ "standardName": "add_control",
122
+ "referenceToolName": null,
123
+ "family": "Composition controls",
124
+ "schema": "tools/add_control.schema.json",
125
+ "implementationStatus": "known-gap",
126
+ "profile": "composition",
127
+ "notes": "Adds or replaces (by id) one control in a composition document's controls collection; member of the opt-in composition conformance profile (docs/adr/0031-composition-controls.md). The control kind vocabulary is closed and excludes a feature-editing draw control (ADR-0028). Controls are what control:{id} interaction references resolve against. The reference implementation does not ship the standard-named tool yet; required for FULL only when a manifest declares the composition profile."
128
+ },
129
+ {
130
+ "standardName": "remove_control",
131
+ "referenceToolName": null,
132
+ "family": "Composition controls",
133
+ "schema": "tools/remove_control.schema.json",
134
+ "implementationStatus": "known-gap",
135
+ "profile": "composition",
136
+ "notes": "Removes one control, by id, from a composition document; member of the opt-in composition conformance profile (docs/adr/0031-composition-controls.md). Interactions bound to the removed control must be removed with it or the call rejected — no dangling control: references."
137
+ },
138
+ {
139
+ "standardName": "create_exploration_context",
140
+ "referenceToolName": null,
141
+ "family": "Composition exploration",
142
+ "schema": "tools/create_exploration_context.schema.json",
143
+ "implementationStatus": "known-gap",
144
+ "profile": "composition",
145
+ "notes": "Adds or replaces (by id) one exploration context in a composition document's explorationContexts collection; member of the opt-in composition conformance profile (docs/adr/0032-shared-exploration-contexts.md). A context is a named unit of shared interaction state (filters, spatial filter, extent, selection, sort, page, visible fields, grouping, aggregation) governed by a closed preset vocabulary. Contexts are data-only: no expression language and no $event.* substitution. The reference implementation does not ship the standard-named tool yet; required for FULL only when a manifest declares the composition profile."
146
+ },
147
+ {
148
+ "standardName": "remove_exploration_context",
149
+ "referenceToolName": null,
150
+ "family": "Composition exploration",
151
+ "schema": "tools/remove_exploration_context.schema.json",
152
+ "implementationStatus": "known-gap",
153
+ "profile": "composition",
154
+ "notes": "Removes one exploration context, by id, from a composition document; member of the opt-in composition conformance profile (docs/adr/0032-shared-exploration-contexts.md). Components bound to the removed context must be unbound with it or the call rejected — no orphaned explorationContextId."
155
+ },
156
+ {
157
+ "standardName": "bind_component_context",
158
+ "referenceToolName": null,
159
+ "family": "Composition exploration",
160
+ "schema": "tools/bind_component_context.schema.json",
161
+ "implementationStatus": "known-gap",
162
+ "profile": "composition",
163
+ "notes": "Sets or clears one component's exploration-context membership and role, addressed by the ADR-0030 ref grammar; member of the opt-in composition conformance profile (docs/adr/0032-shared-exploration-contexts.md). Linking N components into one shared-state workspace is N calls, not one per component pair — the authoring-cost difference that motivates ADR-0032."
164
+ },
102
165
  {
103
166
  "standardName": "publish_result",
104
167
  "referenceToolName": "honua_publish_result",
@@ -225,7 +288,64 @@
225
288
  "referenceToolName": "honua_propose_operation",
226
289
  "family": "Control-plane proposal (reference shape)",
227
290
  "schema": "tools/propose_operation.schema.json",
228
- "implementationStatus": "implemented"
291
+ "implementationStatus": "implemented",
292
+ "notes": "Amended with x-honua-supported-kinds runtime capability discovery (geospatial-mcp#57): the kind enum stays the full wire-compatible OperationClass set, but the routable subset is discoverable at runtime (Seed is currently not routable in the reference)."
293
+ },
294
+ {
295
+ "standardName": "ops_health",
296
+ "referenceToolName": "honua_ops_health",
297
+ "family": "Platform operations (reference shape)",
298
+ "schema": "tools/ops_health.schema.json",
299
+ "implementationStatus": "implemented",
300
+ "notes": "Read-only platform-ops health snapshot; mirror of honua-server GET /api/v1/admin/observability/ops-health (OpsHealthSnapshotResponse, incl. the additive clusterReplicaCount from honua-server#2576). Response payload is the honua://ops/health resource (resources/ops-health.schema.json). Reference surface lands via honua-server#2555 (read-tools impl) under epic #2552 and is kept in sync with the vendored schema copy per honua-server#2496."
301
+ },
302
+ {
303
+ "standardName": "ops_findings",
304
+ "referenceToolName": "honua_ops_findings",
305
+ "family": "Platform operations (reference shape)",
306
+ "schema": "tools/ops_findings.schema.json",
307
+ "implementationStatus": "implemented",
308
+ "notes": "Read-only deterministic ops findings (list/get via optional findingId); mirror of honua-server GET /api/v1/admin/observability/findings. Each finding carries recommendedAction {kind, summary, reason} + evidenceRefs; the action is proposed (never executed) by finding id (honua-server ADR-0028 posture). Response payload is the honua://ops/findings resource (resources/ops-findings.schema.json). Reference surface lands via honua-server#2555 under epic #2552; vendored copy synced per honua-server#2496."
309
+ },
310
+ {
311
+ "standardName": "alert_events",
312
+ "referenceToolName": "honua_alert_events",
313
+ "family": "Platform operations (reference shape)",
314
+ "schema": "tools/alert_events.schema.json",
315
+ "implementationStatus": "implemented",
316
+ "notes": "Read-only, cursor-paged alert-event query (filters: source gis|ops, severity, rule, lifecycle state, time range). Mirror of the honua-server Console Operate alert-event API. Response envelope in tools/alert_events.result.schema.json. Reference surface lands via honua-server#2555 under epic #2552; vendored copy synced per honua-server#2496."
317
+ },
318
+ {
319
+ "standardName": "operate_events",
320
+ "referenceToolName": "honua_operate_events",
321
+ "family": "Platform operations (reference shape)",
322
+ "schema": "tools/operate_events.schema.json",
323
+ "implementationStatus": "implemented",
324
+ "notes": "Read-only, paged fused Operate timeline (filters: kind, correlationId, operationId, releaseId, time range). Mirror of honua-server GET /api/v1/admin/observability/events; the ReleaseId filter is fed by the Release events added in honua-server#2577. Response envelope in tools/operate_events.result.schema.json. Reference surface lands via honua-server#2555 under epic #2552; vendored copy synced per honua-server#2496."
325
+ },
326
+ {
327
+ "standardName": "platform_release_status",
328
+ "referenceToolName": "honua_platform_release_status",
329
+ "family": "Platform operations (reference shape)",
330
+ "schema": "tools/platform_release_status.schema.json",
331
+ "implementationStatus": "implemented",
332
+ "notes": "Read-only platform_release / server_upgrade co-versioning + skew snapshot (declared release, co-versioning, per-plane serving/execution projections, skewed plane ids). Mirror of the honua-server platformRelease projection (DeployPreflightPlatformRelease). Distinct from the hosted-content Deployment resource. Response in tools/platform_release_status.result.schema.json. Reference surface lands via honua-server#2555 under epic #2552; vendored copy synced per honua-server#2496."
333
+ },
334
+ {
335
+ "standardName": "deploy_operations",
336
+ "referenceToolName": "honua_deploy_operations",
337
+ "family": "Platform operations (reference shape)",
338
+ "schema": "tools/deploy_operations.schema.json",
339
+ "implementationStatus": "implemented",
340
+ "notes": "Read-only platform_release / server_upgrade operation surface (list/get via optional operationId; list filters status, kind, page, pageSize). Paged response envelope {items, page, pageSize, totalCount, hasMore} copied VERBATIM from the wire contract pinned in honua-server#2562 / PR #2577 (tools/deploy_operations.result.schema.json). Distinct from the hosted-content Deployment resource. Reference surface lands via honua-server#2577 under epic #2552; vendored copy synced per honua-server#2496."
341
+ },
342
+ {
343
+ "standardName": "propose_rollback",
344
+ "referenceToolName": "honua_propose_rollback",
345
+ "family": "Control-plane proposal (reference shape)",
346
+ "schema": "tools/propose_rollback.schema.json",
347
+ "implementationStatus": "implemented",
348
+ "notes": "Action tool: proposes a platform rollback as a NEW FORWARD Deploy operation to the target's prior revision (not an in-flight-operation abort); returns a proposal id / honua://proposals/{id} like propose_operation, approval-gated behind the human console inbox (honua-server ADR-0028 posture). Reference surface lands under epic #2552 (backed by the prior-succeeded-deploy lookup added in honua-server#2577); vendored copy synced per honua-server#2496."
229
349
  },
230
350
  {
231
351
  "standardName": "ingest_dataset",
@@ -371,6 +491,22 @@
371
491
  "schema": "resources/deployment.schema.json",
372
492
  "shapeFidelity": "responsibility-level",
373
493
  "implementationStatus": "implemented"
494
+ },
495
+ {
496
+ "family": "Ops health",
497
+ "uriForm": "honua://ops/health",
498
+ "schema": "resources/ops-health.schema.json",
499
+ "shapeFidelity": "concrete-reference",
500
+ "implementationStatus": "implemented",
501
+ "notes": "Read-only, admin-gated consolidated operational-health snapshot; mirror of honua-server OpsHealthSnapshotResponse (incl. the additive clusterReplicaCount from honua-server#2576). Same gated pattern as the promotion-surface resources. Response of the ops_health tool. Reference surface lands via honua-server#2555 under epic #2552; vendored copy synced per honua-server#2496."
502
+ },
503
+ {
504
+ "family": "Ops findings",
505
+ "uriForm": "honua://ops/findings",
506
+ "schema": "resources/ops-findings.schema.json",
507
+ "shapeFidelity": "concrete-reference",
508
+ "implementationStatus": "implemented",
509
+ "notes": "Read-only, admin-gated deterministic ops findings (recommendedAction {kind, summary, reason} + evidence refs); mirror of honua-server OpsFindingsListResponse. Same gated pattern as the promotion-surface resources. Response of the ops_findings tool. Reference surface lands via honua-server#2555 under epic #2552; vendored copy synced per honua-server#2496."
374
510
  }
375
511
  ],
376
512
  "common": [
@@ -378,6 +514,21 @@
378
514
  "name": "GeoprocessingError",
379
515
  "schema": "common/geoprocessing-error.schema.json",
380
516
  "role": "Canonical error envelope reused by all tool/resource failure paths."
517
+ },
518
+ {
519
+ "name": "CompositionInteractions",
520
+ "schema": "common/interactions.schema.json",
521
+ "role": "Standard-owned interactions and layout blocks for composition documents (MapPackage/AppPackage); referenced by both resource schemas and by bind_interaction. See docs/adr/0030-declarative-interactions-and-layout.md."
522
+ },
523
+ {
524
+ "name": "CompositionControls",
525
+ "schema": "common/controls.schema.json",
526
+ "role": "Standard-owned controls collection for composition documents (MapPackage/AppPackage) — the closed input-affordance vocabulary that control:{id} references resolve against; referenced by both resource schemas and by add_control. See docs/adr/0031-composition-controls.md."
527
+ },
528
+ {
529
+ "name": "CompositionExplorationContexts",
530
+ "schema": "common/exploration.schema.json",
531
+ "role": "Standard-owned explorationContexts collection for composition documents (MapPackage/AppPackage) — named units of shared interaction state that components join by id, making cross-filtering context membership rather than an event→action edge; referenced by both resource schemas, by the controls schema's component binding, and by create_exploration_context / bind_component_context. See docs/adr/0032-shared-exploration-contexts.md."
381
532
  }
382
533
  ],
383
534
  "conformance": [
@@ -15,6 +15,22 @@
15
15
  "targetSdk": { "type": "string" },
16
16
  "mapPackageId": { "type": "string" },
17
17
  "bundleArtifactId": { "type": "string" },
18
- "boundArtifactIds": { "type": "array", "items": { "type": "string" } }
18
+ "boundArtifactIds": { "type": "array", "items": { "type": "string" } },
19
+ "controls": {
20
+ "$ref": "../common/controls.schema.json#/properties/controls",
21
+ "description": "Standard-owned input affordances; the collection `control:{id}` references resolve against (ADR-0031)."
22
+ },
23
+ "explorationContexts": {
24
+ "$ref": "../common/exploration.schema.json#/properties/explorationContexts",
25
+ "description": "Standard-owned units of shared interaction state; the primary interaction model, which components join by naming a context (ADR-0032)."
26
+ },
27
+ "interactions": {
28
+ "$ref": "../common/interactions.schema.json#/properties/interactions",
29
+ "description": "Standard-owned declarative event→action bindings, narrowed by ADR-0032 to one-shot gestures (ADR-0030)."
30
+ },
31
+ "layout": {
32
+ "$ref": "../common/interactions.schema.json#/properties/layout",
33
+ "description": "Standard-owned grid placement for widgets (ADR-0030)."
34
+ }
19
35
  }
20
36
  }
@@ -16,6 +16,22 @@
16
16
  "styleId": { "type": "string" },
17
17
  "themeId": { "type": "string" },
18
18
  "initialView": { "type": "object", "additionalProperties": true },
19
- "previewArtifactId": { "type": "string" }
19
+ "previewArtifactId": { "type": "string" },
20
+ "controls": {
21
+ "$ref": "../common/controls.schema.json#/properties/controls",
22
+ "description": "Standard-owned input affordances; the collection `control:{id}` references resolve against (ADR-0031)."
23
+ },
24
+ "explorationContexts": {
25
+ "$ref": "../common/exploration.schema.json#/properties/explorationContexts",
26
+ "description": "Standard-owned units of shared interaction state; the primary interaction model, which components join by naming a context (ADR-0032)."
27
+ },
28
+ "interactions": {
29
+ "$ref": "../common/interactions.schema.json#/properties/interactions",
30
+ "description": "Standard-owned declarative event→action bindings, narrowed by ADR-0032 to one-shot gestures (ADR-0030)."
31
+ },
32
+ "layout": {
33
+ "$ref": "../common/interactions.schema.json#/properties/layout",
34
+ "description": "Standard-owned grid placement for widgets (ADR-0030)."
35
+ }
20
36
  }
21
37
  }
@@ -0,0 +1,61 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://geospatial-mcp.honua.io/spec/schemas/resources/ops-findings.schema.json",
4
+ "title": "Ops findings resource payload",
5
+ "description": "Read-only, admin-gated projection of the deterministic ops findings at honua://ops/findings. Mirrors the honua-server OpsFindingsListResponse (GET /api/v1/admin/observability/findings): the evaluation time plus the active findings ordered by descending severity. Each finding carries a kebab-case rule, severity, plain-language explanation, subject identifiers, evidence references, and a recommendedAction {kind, summary, reason} (null for informational findings) that the console proposes by finding id — the opaque execution payload is never surfaced and is never autonomously executed (honua-server ADR-0028 posture). Read-only — no control paths. Same gated pattern as the promotion-surface resources. x-honua-reference-shape: this shape tracks the reference implementation.",
6
+ "x-honua-reference-shape": true,
7
+ "type": "object",
8
+ "additionalProperties": true,
9
+ "required": ["generatedAt", "findings"],
10
+ "properties": {
11
+ "generatedAt": { "type": "string", "format": "date-time", "description": "UTC time the findings were evaluated." },
12
+ "findings": {
13
+ "type": "array",
14
+ "description": "Active findings, ordered by descending severity.",
15
+ "items": { "$ref": "#/$defs/finding" }
16
+ }
17
+ },
18
+ "$defs": {
19
+ "finding": {
20
+ "type": "object",
21
+ "additionalProperties": true,
22
+ "required": ["id", "rule", "severity", "title", "explanation", "detectedAt", "subject", "evidenceRefs"],
23
+ "properties": {
24
+ "id": { "type": "string", "description": "Deterministic finding identifier (used to propose its action)." },
25
+ "rule": { "type": "string", "description": "Kebab-case rule identifier." },
26
+ "severity": { "type": "string", "enum": ["Info", "Warning", "Critical"] },
27
+ "title": { "type": "string" },
28
+ "explanation": { "type": "string", "description": "Plain-language explanation." },
29
+ "detectedAt": { "type": "string", "format": "date-time" },
30
+ "subject": {
31
+ "type": "object",
32
+ "additionalProperties": true,
33
+ "description": "Subject identifiers a finding pins to (all optional).",
34
+ "properties": {
35
+ "targetId": { "type": "string" },
36
+ "workloadId": { "type": "string" },
37
+ "channel": { "type": "string" },
38
+ "operationId": { "type": "string" },
39
+ "releaseVersion": { "type": "string" }
40
+ }
41
+ },
42
+ "evidenceRefs": {
43
+ "type": "array",
44
+ "description": "Supporting evidence references.",
45
+ "items": { "type": "string" }
46
+ },
47
+ "recommendedAction": {
48
+ "type": "object",
49
+ "additionalProperties": true,
50
+ "description": "Recommended action, or absent/null when the finding is informational. Proposed by finding id through the operation gateway; never autonomously executed.",
51
+ "required": ["kind", "summary", "reason"],
52
+ "properties": {
53
+ "kind": { "type": "string", "description": "OperationClass the action routes through: AdminConfigChange / Deploy / MetadataRelease / Seed." },
54
+ "summary": { "type": "string", "description": "Plain-language action summary." },
55
+ "reason": { "type": "string", "description": "Operator-facing reason recorded on the proposal." }
56
+ }
57
+ }
58
+ }
59
+ }
60
+ }
61
+ }
@@ -0,0 +1,138 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://geospatial-mcp.honua.io/spec/schemas/resources/ops-health.schema.json",
4
+ "title": "Ops health resource payload",
5
+ "description": "Read-only, admin-gated projection of the consolidated operational-health snapshot at honua://ops/health. Mirrors the honua-server OpsHealthSnapshotResponse (GET /api/v1/admin/observability/ops-health): overall status roll-up, comprehensive health-check entries, in-process serving latency, geoprocessing queue depth, alert-dispatch backlog, coordinated-deploy readiness + platform-release skew, and database/cache utilization. Read-only — no control paths. Same gated pattern as the promotion-surface resources. x-honua-reference-shape: this shape tracks the reference implementation.",
6
+ "x-honua-reference-shape": true,
7
+ "type": "object",
8
+ "additionalProperties": true,
9
+ "required": ["generatedAt", "overallStatus", "health", "servingLatency", "geoprocessing", "alertDispatch", "deploy", "database"],
10
+ "properties": {
11
+ "generatedAt": { "type": "string", "format": "date-time", "description": "UTC time the snapshot was produced." },
12
+ "overallStatus": { "type": "string", "description": "Overall status roll-up: Healthy / Degraded / Unhealthy." },
13
+ "clusterReplicaCount": {
14
+ "type": "integer",
15
+ "description": "Number of replicas whose recent flushes contributed to this snapshot (additive; honua-server#2576 ops-health rollup). Absent when the rollup store is unavailable and the snapshot is local-only."
16
+ },
17
+ "health": {
18
+ "type": "object",
19
+ "additionalProperties": true,
20
+ "required": ["status", "totalDurationMs", "entries"],
21
+ "properties": {
22
+ "status": { "type": "string" },
23
+ "totalDurationMs": { "type": "number" },
24
+ "entries": {
25
+ "type": "array",
26
+ "items": {
27
+ "type": "object",
28
+ "additionalProperties": true,
29
+ "required": ["name", "status", "durationMs"],
30
+ "properties": {
31
+ "name": { "type": "string" },
32
+ "status": { "type": "string" },
33
+ "description": { "type": "string" },
34
+ "durationMs": { "type": "number" }
35
+ }
36
+ }
37
+ }
38
+ }
39
+ },
40
+ "servingLatency": {
41
+ "type": "object",
42
+ "additionalProperties": true,
43
+ "required": ["windowSeconds", "protocols"],
44
+ "properties": {
45
+ "windowSeconds": { "type": "number" },
46
+ "protocols": {
47
+ "type": "array",
48
+ "items": {
49
+ "type": "object",
50
+ "additionalProperties": true,
51
+ "required": ["protocol", "requestCount", "errorCount", "errorRate", "p50Ms", "p95Ms", "p99Ms", "maxMs"],
52
+ "properties": {
53
+ "protocol": { "type": "string" },
54
+ "requestCount": { "type": "integer" },
55
+ "errorCount": { "type": "integer" },
56
+ "errorRate": { "type": "number" },
57
+ "p50Ms": { "type": "number" },
58
+ "p95Ms": { "type": "number" },
59
+ "p99Ms": { "type": "number" },
60
+ "maxMs": { "type": "number" }
61
+ }
62
+ }
63
+ }
64
+ }
65
+ },
66
+ "geoprocessing": {
67
+ "type": "object",
68
+ "additionalProperties": true,
69
+ "required": ["totalActive", "available", "buckets"],
70
+ "properties": {
71
+ "totalActive": { "type": "integer" },
72
+ "available": { "type": "boolean" },
73
+ "buckets": {
74
+ "type": "array",
75
+ "items": {
76
+ "type": "object",
77
+ "additionalProperties": true,
78
+ "required": ["status", "backend", "count"],
79
+ "properties": {
80
+ "status": { "type": "string" },
81
+ "backend": { "type": "string" },
82
+ "count": { "type": "integer" }
83
+ }
84
+ }
85
+ }
86
+ }
87
+ },
88
+ "alertDispatch": {
89
+ "type": "object",
90
+ "additionalProperties": true,
91
+ "required": ["dispatcherRunning", "dispatcherEnabled", "storagePollFailing"],
92
+ "properties": {
93
+ "dispatcherRunning": { "type": "boolean" },
94
+ "dispatcherEnabled": { "type": "boolean" },
95
+ "storagePollFailing": { "type": "boolean" },
96
+ "lastPollAt": { "type": "string", "format": "date-time" },
97
+ "pendingCount": { "type": "integer" },
98
+ "deadLetteredCount": { "type": "integer" }
99
+ }
100
+ },
101
+ "deploy": {
102
+ "type": "object",
103
+ "additionalProperties": true,
104
+ "required": ["status", "readyForCoordinatedDeploy", "pendingMigrationsCount", "pendingContractScriptsCount", "platformRelease"],
105
+ "properties": {
106
+ "status": { "type": "string", "description": "Preflight status: ready / blocked." },
107
+ "readyForCoordinatedDeploy": { "type": "boolean" },
108
+ "pendingMigrationsCount": { "type": "integer" },
109
+ "pendingContractScriptsCount": { "type": "integer" },
110
+ "platformRelease": {
111
+ "type": "object",
112
+ "additionalProperties": true,
113
+ "required": ["releaseDeclared", "isCoVersioned", "skewedIds"],
114
+ "properties": {
115
+ "releaseVersion": { "type": "string" },
116
+ "releaseDeclared": { "type": "boolean" },
117
+ "isCoVersioned": { "type": "boolean" },
118
+ "skewedIds": { "type": "array", "items": { "type": "string" } }
119
+ }
120
+ }
121
+ }
122
+ },
123
+ "database": {
124
+ "type": "object",
125
+ "additionalProperties": true,
126
+ "required": ["hasConnectionPoolData", "activeConnections", "connectionAcquisitionTimeouts", "connectionAcquisitionFailures", "cacheHitRatio", "errorRate"],
127
+ "properties": {
128
+ "connectionPoolUtilization": { "type": "number" },
129
+ "hasConnectionPoolData": { "type": "boolean" },
130
+ "activeConnections": { "type": "integer" },
131
+ "connectionAcquisitionTimeouts": { "type": "integer" },
132
+ "connectionAcquisitionFailures": { "type": "integer" },
133
+ "cacheHitRatio": { "type": "number" },
134
+ "errorRate": { "type": "number" }
135
+ }
136
+ }
137
+ }
138
+ }
@@ -0,0 +1,107 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://geospatial-mcp.honua.io/spec/schemas/tools/add_control.schema.json",
4
+ "title": "add_control inputSchema",
5
+ "description": "Argument shape for add_control (composition profile, ADR-0031). Adds or replaces (by control id) one control in a composition document's `controls` collection. The standard-level target is a composition document (mapPackageId or appPackageId). The reference implementation authors compositions through a draft lifecycle; its optimistic-concurrency draft spelling (draftId + generation) is admitted as x-honua-reference-shape, consistent with ADR-0030's bind_interaction and ADR-0029's admission of reference spellings. Validation gate: control.id must be unique within the document, control.kind must be a member of the closed vocabulary, and a control.sourceId must resolve to a layer or datasource declared in the target document. See docs/adr/0031-composition-controls.md and common/controls.schema.json. Exactly one target must be supplied: mapPackageId, appPackageId, or the x-honua-reference-shape draftId (which requires generation, and generation may not appear without it). The oneOf enforces that; without it a call with no destination, several destinations, a bare draftId, or a stray generation all validated against a contract no server can route.",
6
+ "type": "object",
7
+ "additionalProperties": true,
8
+ "required": [
9
+ "control"
10
+ ],
11
+ "properties": {
12
+ "mapPackageId": {
13
+ "type": "string",
14
+ "minLength": 1,
15
+ "description": "Target MapPackage composition document. Exactly one of mapPackageId / appPackageId / draftId identifies the target."
16
+ },
17
+ "appPackageId": {
18
+ "type": "string",
19
+ "minLength": 1,
20
+ "description": "Target AppPackage composition document. Exactly one of mapPackageId / appPackageId / draftId identifies the target."
21
+ },
22
+ "draftId": {
23
+ "type": "string",
24
+ "minLength": 1,
25
+ "description": "x-honua-reference-shape: reference-implementation draft-lifecycle target. Requires generation."
26
+ },
27
+ "generation": {
28
+ "type": "integer",
29
+ "minimum": 0,
30
+ "description": "x-honua-reference-shape: optimistic-concurrency generation of the draft being mutated; the call fails on generation conflict."
31
+ },
32
+ "control": {
33
+ "$ref": "../common/controls.schema.json#/$defs/control",
34
+ "description": "The control to add or replace. Replacement matches on control.id."
35
+ }
36
+ },
37
+ "oneOf": [
38
+ {
39
+ "required": [
40
+ "mapPackageId"
41
+ ],
42
+ "not": {
43
+ "anyOf": [
44
+ {
45
+ "required": [
46
+ "appPackageId"
47
+ ]
48
+ },
49
+ {
50
+ "required": [
51
+ "draftId"
52
+ ]
53
+ },
54
+ {
55
+ "required": [
56
+ "generation"
57
+ ]
58
+ }
59
+ ]
60
+ }
61
+ },
62
+ {
63
+ "required": [
64
+ "appPackageId"
65
+ ],
66
+ "not": {
67
+ "anyOf": [
68
+ {
69
+ "required": [
70
+ "mapPackageId"
71
+ ]
72
+ },
73
+ {
74
+ "required": [
75
+ "draftId"
76
+ ]
77
+ },
78
+ {
79
+ "required": [
80
+ "generation"
81
+ ]
82
+ }
83
+ ]
84
+ }
85
+ },
86
+ {
87
+ "required": [
88
+ "draftId",
89
+ "generation"
90
+ ],
91
+ "not": {
92
+ "anyOf": [
93
+ {
94
+ "required": [
95
+ "mapPackageId"
96
+ ]
97
+ },
98
+ {
99
+ "required": [
100
+ "appPackageId"
101
+ ]
102
+ }
103
+ ]
104
+ }
105
+ }
106
+ ]
107
+ }
@@ -0,0 +1,49 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://geospatial-mcp.honua.io/spec/schemas/tools/alert_events.result.schema.json",
4
+ "title": "alert_events result payload",
5
+ "description": "Response payload for the alert_events tool: a cursor-paged page of alert events, mirroring the honua-server Console Operate alert-event wire shape (ObservabilityAlertEventResponse). items are newest-first; nextCursor is present when more events remain and absent on the final page. x-honua-reference-shape: this shape tracks the reference implementation.",
6
+ "x-honua-reference-shape": true,
7
+ "type": "object",
8
+ "additionalProperties": true,
9
+ "required": ["items"],
10
+ "properties": {
11
+ "items": {
12
+ "type": "array",
13
+ "description": "Alert events in this page (newest first).",
14
+ "items": { "$ref": "#/$defs/alertEvent" }
15
+ },
16
+ "nextCursor": {
17
+ "type": "string",
18
+ "description": "Opaque continuation token for the next page, or absent when none remain."
19
+ }
20
+ },
21
+ "$defs": {
22
+ "alertEvent": {
23
+ "type": "object",
24
+ "additionalProperties": true,
25
+ "required": ["eventId", "ruleId", "serviceId", "layerId", "objectId", "triggerType", "severity", "occurredAt", "incidentStatus", "incidentDurationMs", "lifecycleStatus", "resourceRef"],
26
+ "properties": {
27
+ "eventId": { "type": "integer", "description": "Event identifier." },
28
+ "ruleId": { "type": ["integer", "null"], "description": "Source alert-rule id, or null for ops notifications not linked to a rule." },
29
+ "ruleName": { "type": "string", "description": "Source rule name when available." },
30
+ "zoneId": { "type": "integer", "description": "Zone identifier when the rule targets a geofence." },
31
+ "serviceId": { "type": "string" },
32
+ "layerId": { "type": "integer" },
33
+ "objectId": { "type": "integer" },
34
+ "triggerType": { "type": "string", "description": "Lower-case: enter / exit / dwell / threshold." },
35
+ "severity": { "type": "string", "enum": ["info", "warning", "critical"] },
36
+ "occurredAt": { "type": "string", "format": "date-time" },
37
+ "incidentStatus": { "type": "string", "description": "Incident lifecycle status: started / ongoing / ended." },
38
+ "incidentDurationMs": { "type": "integer" },
39
+ "lifecycleStatus": { "type": "string", "enum": ["open", "acknowledged", "suppressed", "resolved"] },
40
+ "acknowledgedAt": { "type": "string", "format": "date-time" },
41
+ "acknowledgedBy": { "type": "string" },
42
+ "suppressedUntil": { "type": "string", "format": "date-time" },
43
+ "resolvedAt": { "type": "string", "format": "date-time" },
44
+ "resolvedBy": { "type": "string" },
45
+ "resourceRef": { "type": "string", "description": "Source-prefixed deep-link reference, e.g. \"alert/42\"." }
46
+ }
47
+ }
48
+ }
49
+ }