@honua/mcp-server 0.0.10-alpha.0 → 0.1.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/README.md +259 -15
  2. package/certification/geospatial-mcp-schemas/PROVENANCE.md +41 -0
  3. package/certification/geospatial-mcp-schemas/README.md +90 -0
  4. package/certification/geospatial-mcp-schemas/common/geoprocessing-error.schema.json +45 -0
  5. package/certification/geospatial-mcp-schemas/conformance/manifest.schema.json +79 -0
  6. package/certification/geospatial-mcp-schemas/index.json +390 -0
  7. package/certification/geospatial-mcp-schemas/resources/app-package.schema.json +20 -0
  8. package/certification/geospatial-mcp-schemas/resources/app-template.schema.json +15 -0
  9. package/certification/geospatial-mcp-schemas/resources/artifact.schema.json +69 -0
  10. package/certification/geospatial-mcp-schemas/resources/deployment.schema.json +27 -0
  11. package/certification/geospatial-mcp-schemas/resources/map-package.schema.json +21 -0
  12. package/certification/geospatial-mcp-schemas/resources/map-template.schema.json +15 -0
  13. package/certification/geospatial-mcp-schemas/resources/provenance.schema.json +50 -0
  14. package/certification/geospatial-mcp-schemas/resources/published-service.schema.json +21 -0
  15. package/certification/geospatial-mcp-schemas/resources/result-package.schema.json +64 -0
  16. package/certification/geospatial-mcp-schemas/resources/style.schema.json +12 -0
  17. package/certification/geospatial-mcp-schemas/resources/theme.schema.json +12 -0
  18. package/certification/geospatial-mcp-schemas/resources/workspace.schema.json +63 -0
  19. package/certification/geospatial-mcp-schemas/tools/apply_style_preset.schema.json +27 -0
  20. package/certification/geospatial-mcp-schemas/tools/buffer_features.schema.json +60 -0
  21. package/certification/geospatial-mcp-schemas/tools/cancel_job.schema.json +15 -0
  22. package/certification/geospatial-mcp-schemas/tools/clarify_intent.schema.json +69 -0
  23. package/certification/geospatial-mcp-schemas/tools/compose_mixed_protocol_map.schema.json +21 -0
  24. package/certification/geospatial-mcp-schemas/tools/create_app_package.schema.json +33 -0
  25. package/certification/geospatial-mcp-schemas/tools/create_map_package.schema.json +41 -0
  26. package/certification/geospatial-mcp-schemas/tools/edit_features.schema.json +74 -0
  27. package/certification/geospatial-mcp-schemas/tools/execute_plan.schema.json +64 -0
  28. package/certification/geospatial-mcp-schemas/tools/export_dataset.schema.json +60 -0
  29. package/certification/geospatial-mcp-schemas/tools/geocode_address.schema.json +36 -0
  30. package/certification/geospatial-mcp-schemas/tools/geocode_addresses.schema.json +34 -0
  31. package/certification/geospatial-mcp-schemas/tools/get_style.schema.json +40 -0
  32. package/certification/geospatial-mcp-schemas/tools/ground_candidates.schema.json +66 -0
  33. package/certification/geospatial-mcp-schemas/tools/ingest_dataset.schema.json +45 -0
  34. package/certification/geospatial-mcp-schemas/tools/join_features.schema.json +73 -0
  35. package/certification/geospatial-mcp-schemas/tools/list_capabilities.schema.json +21 -0
  36. package/certification/geospatial-mcp-schemas/tools/list_layers.schema.json +14 -0
  37. package/certification/geospatial-mcp-schemas/tools/overlay_features.schema.json +53 -0
  38. package/certification/geospatial-mcp-schemas/tools/plan_analysis.schema.json +19 -0
  39. package/certification/geospatial-mcp-schemas/tools/preview_app_package.schema.json +15 -0
  40. package/certification/geospatial-mcp-schemas/tools/preview_map_package.schema.json +17 -0
  41. package/certification/geospatial-mcp-schemas/tools/preview_package.schema.json +40 -0
  42. package/certification/geospatial-mcp-schemas/tools/propose_operation.schema.json +28 -0
  43. package/certification/geospatial-mcp-schemas/tools/publish_result.schema.json +29 -0
  44. package/certification/geospatial-mcp-schemas/tools/publish_service.schema.json +59 -0
  45. package/certification/geospatial-mcp-schemas/tools/query_features.schema.json +74 -0
  46. package/certification/geospatial-mcp-schemas/tools/refine_map_package.schema.json +22 -0
  47. package/certification/geospatial-mcp-schemas/tools/render_map.schema.json +60 -0
  48. package/certification/geospatial-mcp-schemas/tools/reproject_features.schema.json +49 -0
  49. package/certification/geospatial-mcp-schemas/tools/resolve_entity.schema.json +30 -0
  50. package/certification/geospatial-mcp-schemas/tools/solve_route.schema.json +39 -0
  51. package/certification/geospatial-mcp-schemas/tools/summarize_statistics.schema.json +71 -0
  52. package/certification/geospatial-mcp-schemas/tools/validate_package.schema.json +35 -0
  53. package/certification/geospatial-mcp-schemas/tools/validate_plan.schema.json +61 -0
  54. package/dist/src/capability.d.ts +48 -0
  55. package/dist/src/capability.d.ts.map +1 -0
  56. package/dist/src/capability.js +44 -0
  57. package/dist/src/certification/census-data.d.ts +33 -0
  58. package/dist/src/certification/census-data.d.ts.map +1 -0
  59. package/dist/src/certification/census-data.js +506 -0
  60. package/dist/src/certification/census-fixture-client.d.ts +7 -0
  61. package/dist/src/certification/census-fixture-client.d.ts.map +1 -0
  62. package/dist/src/certification/census-fixture-client.js +226 -0
  63. package/dist/src/certification/certifier.d.ts +125 -0
  64. package/dist/src/certification/certifier.d.ts.map +1 -0
  65. package/dist/src/certification/certifier.js +455 -0
  66. package/dist/src/certification/cli.d.ts +3 -0
  67. package/dist/src/certification/cli.d.ts.map +1 -0
  68. package/dist/src/certification/cli.js +63 -0
  69. package/dist/src/certification/contracts.d.ts +103 -0
  70. package/dist/src/certification/contracts.d.ts.map +1 -0
  71. package/dist/src/certification/contracts.js +245 -0
  72. package/dist/src/certification/fixture-client.d.ts +4 -0
  73. package/dist/src/certification/fixture-client.d.ts.map +1 -0
  74. package/dist/src/certification/fixture-client.js +113 -0
  75. package/dist/src/certification/fixtures.d.ts +45 -0
  76. package/dist/src/certification/fixtures.d.ts.map +1 -0
  77. package/dist/src/certification/fixtures.js +92 -0
  78. package/dist/src/certification/json-schema.d.ts +71 -0
  79. package/dist/src/certification/json-schema.d.ts.map +1 -0
  80. package/dist/src/certification/json-schema.js +172 -0
  81. package/dist/src/certification/lifecycle.d.ts +14 -0
  82. package/dist/src/certification/lifecycle.d.ts.map +1 -0
  83. package/dist/src/certification/lifecycle.js +326 -0
  84. package/dist/src/certification/mock-upstream.d.ts +29 -0
  85. package/dist/src/certification/mock-upstream.d.ts.map +1 -0
  86. package/dist/src/certification/mock-upstream.js +96 -0
  87. package/dist/src/certification/operator-catalog.d.ts +90 -0
  88. package/dist/src/certification/operator-catalog.d.ts.map +1 -0
  89. package/dist/src/certification/operator-catalog.js +650 -0
  90. package/dist/src/certification/report.d.ts +4 -0
  91. package/dist/src/certification/report.d.ts.map +1 -0
  92. package/dist/src/certification/report.js +103 -0
  93. package/dist/src/certification/run.d.ts +28 -0
  94. package/dist/src/certification/run.d.ts.map +1 -0
  95. package/dist/src/certification/run.js +32 -0
  96. package/dist/src/certification/schema-index.d.ts +94 -0
  97. package/dist/src/certification/schema-index.d.ts.map +1 -0
  98. package/dist/src/certification/schema-index.js +109 -0
  99. package/dist/src/certification/target.d.ts +48 -0
  100. package/dist/src/certification/target.d.ts.map +1 -0
  101. package/dist/src/certification/target.js +219 -0
  102. package/dist/src/eval/cli.d.ts +3 -0
  103. package/dist/src/eval/cli.d.ts.map +1 -0
  104. package/dist/src/eval/cli.js +118 -0
  105. package/dist/src/eval/corpus.d.ts +34 -0
  106. package/dist/src/eval/corpus.d.ts.map +1 -0
  107. package/dist/src/eval/corpus.js +150 -0
  108. package/dist/src/eval/drivers/anthropic.d.ts +14 -0
  109. package/dist/src/eval/drivers/anthropic.d.ts.map +1 -0
  110. package/dist/src/eval/drivers/anthropic.js +120 -0
  111. package/dist/src/eval/drivers/bedrock.d.ts +54 -0
  112. package/dist/src/eval/drivers/bedrock.d.ts.map +1 -0
  113. package/dist/src/eval/drivers/bedrock.js +178 -0
  114. package/dist/src/eval/drivers/deterministic.d.ts +17 -0
  115. package/dist/src/eval/drivers/deterministic.d.ts.map +1 -0
  116. package/dist/src/eval/drivers/deterministic.js +64 -0
  117. package/dist/src/eval/drivers/index.d.ts +34 -0
  118. package/dist/src/eval/drivers/index.d.ts.map +1 -0
  119. package/dist/src/eval/drivers/index.js +74 -0
  120. package/dist/src/eval/drivers/openai.d.ts +14 -0
  121. package/dist/src/eval/drivers/openai.d.ts.map +1 -0
  122. package/dist/src/eval/drivers/openai.js +136 -0
  123. package/dist/src/eval/grade.d.ts +14 -0
  124. package/dist/src/eval/grade.d.ts.map +1 -0
  125. package/dist/src/eval/grade.js +75 -0
  126. package/dist/src/eval/northstar-corpus.d.ts +3 -0
  127. package/dist/src/eval/northstar-corpus.d.ts.map +1 -0
  128. package/dist/src/eval/northstar-corpus.js +194 -0
  129. package/dist/src/eval/operator-corpus.d.ts +3 -0
  130. package/dist/src/eval/operator-corpus.d.ts.map +1 -0
  131. package/dist/src/eval/operator-corpus.js +193 -0
  132. package/dist/src/eval/report.d.ts +109 -0
  133. package/dist/src/eval/report.d.ts.map +1 -0
  134. package/dist/src/eval/report.js +133 -0
  135. package/dist/src/eval/runner.d.ts +28 -0
  136. package/dist/src/eval/runner.d.ts.map +1 -0
  137. package/dist/src/eval/runner.js +130 -0
  138. package/dist/src/eval/standalone-corpus.d.ts +3 -0
  139. package/dist/src/eval/standalone-corpus.d.ts.map +1 -0
  140. package/dist/src/eval/standalone-corpus.js +699 -0
  141. package/dist/src/eval/types.d.ts +118 -0
  142. package/dist/src/eval/types.d.ts.map +1 -0
  143. package/dist/src/eval/types.js +10 -0
  144. package/dist/src/helpers.d.ts +11 -0
  145. package/dist/src/helpers.d.ts.map +1 -1
  146. package/dist/src/helpers.js +22 -0
  147. package/dist/src/index.d.ts +31 -0
  148. package/dist/src/index.d.ts.map +1 -1
  149. package/dist/src/index.js +50 -4
  150. package/dist/src/provenance.d.ts +44 -0
  151. package/dist/src/provenance.d.ts.map +1 -0
  152. package/dist/src/provenance.js +37 -0
  153. package/dist/src/proxy.d.ts +46 -0
  154. package/dist/src/proxy.d.ts.map +1 -0
  155. package/dist/src/proxy.js +124 -0
  156. package/dist/src/resources/styles.d.ts +29 -0
  157. package/dist/src/resources/styles.d.ts.map +1 -0
  158. package/dist/src/resources/styles.js +76 -0
  159. package/dist/src/styles.d.ts +112 -0
  160. package/dist/src/styles.d.ts.map +1 -0
  161. package/dist/src/styles.js +144 -0
  162. package/dist/src/tools/apply-style-preset.d.ts +27 -0
  163. package/dist/src/tools/apply-style-preset.d.ts.map +1 -0
  164. package/dist/src/tools/apply-style-preset.js +41 -0
  165. package/dist/src/tools/count-features.d.ts.map +1 -1
  166. package/dist/src/tools/count-features.js +5 -4
  167. package/dist/src/tools/get-extent.d.ts.map +1 -1
  168. package/dist/src/tools/get-extent.js +6 -4
  169. package/dist/src/tools/get-style.d.ts +24 -0
  170. package/dist/src/tools/get-style.d.ts.map +1 -0
  171. package/dist/src/tools/get-style.js +39 -0
  172. package/dist/src/tools/list-services.d.ts.map +1 -1
  173. package/dist/src/tools/list-services.js +16 -1
  174. package/dist/src/tools/query-features.d.ts.map +1 -1
  175. package/dist/src/tools/query-features.js +4 -1
  176. package/package.json +28 -4
@@ -0,0 +1,74 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://geospatial-mcp.honua.io/spec/schemas/tools/query_features.schema.json",
4
+ "title": "query_features inputSchema",
5
+ "description": "Argument shape for the discovery/query feature-query tool (advertised name honua_query_features). Reads features from a published layer with an optional attribute and spatial filter. x-honua-reference-shape: this shape tracks the reference implementation.",
6
+ "x-honua-reference-shape": true,
7
+ "type": "object",
8
+ "required": ["serviceId", "layerId"],
9
+ "properties": {
10
+ "serviceId": {
11
+ "type": "string",
12
+ "minLength": 1,
13
+ "description": "Published service identifier or name (from list_layers.serviceId)."
14
+ },
15
+ "layerId": {
16
+ "type": "integer",
17
+ "minimum": 0,
18
+ "description": "Service-local layer index (from list_layers.layerId)."
19
+ },
20
+ "where": {
21
+ "type": "string",
22
+ "description": "Optional attribute filter expressed as an ArcGIS/SQL WHERE clause."
23
+ },
24
+ "bbox": {
25
+ "type": "array",
26
+ "minItems": 4,
27
+ "maxItems": 4,
28
+ "items": { "type": "number" },
29
+ "description": "Optional spatial filter envelope as [minX, minY, maxX, maxY]."
30
+ },
31
+ "bboxSrid": {
32
+ "type": "integer",
33
+ "default": 4326,
34
+ "description": "Spatial reference (SRID/WKID) of the bbox ordinates."
35
+ },
36
+ "outFields": {
37
+ "type": "array",
38
+ "items": { "type": "string" },
39
+ "description": "Optional attribute fields to return; omit for all fields."
40
+ },
41
+ "limit": {
42
+ "type": "integer",
43
+ "minimum": 1,
44
+ "maximum": 1000,
45
+ "default": 100,
46
+ "description": "Maximum number of features to return (capped at 1000)."
47
+ },
48
+ "resultOffset": {
49
+ "type": "integer",
50
+ "minimum": 0,
51
+ "default": 0,
52
+ "description": "Number of matching features to skip before returning results (pagination). Pair with limit to page mechanically through large result sets: when a response reports exceededTransferLimit=true, re-issue the same query with resultOffset set to the returned nextOffset until exceededTransferLimit is false."
53
+ },
54
+ "returnGeometry": {
55
+ "type": "boolean",
56
+ "default": true,
57
+ "description": "When false, features are returned without geometry (attribute-only rows). Use for attribute scans where returning geometry would waste the response/context budget."
58
+ },
59
+ "returnCountOnly": {
60
+ "type": "boolean",
61
+ "default": false,
62
+ "description": "When true, return only the matching feature count and no features. Use for cheap cardinality checks before deciding whether/how to page."
63
+ },
64
+ "outSrid": {
65
+ "type": "integer",
66
+ "default": 4326,
67
+ "description": "Output spatial reference (SRID/WKID) for returned geometries."
68
+ },
69
+ "geometryPrecision": {
70
+ "type": "integer",
71
+ "description": "Optional number of decimal places to round returned GeoJSON coordinates to, trading positional precision for a smaller response/context budget. A negative value returns full precision. When omitted, precision is implementation-defined; the reference implementation defaults to 6 (~0.1 m), which cuts coordinate payload roughly 12% at the default and far more for dense geometries. Standardized from the honua-server x-honua extension (geospatial-mcp#52)."
72
+ }
73
+ }
74
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://geospatial-mcp.honua.io/spec/schemas/tools/refine_map_package.schema.json",
4
+ "title": "refine_map_package inputSchema",
5
+ "description": "Argument shape for refine_map_package (Analyze, Build App; returns the updated MapPackage). Refines an existing map package's composition. Responsibility-level: targets a mapPackageId and carries a refinement delta whose concrete field set finalizes upstream (honua-server#731). See taxonomy.md §Map composition.",
6
+ "type": "object",
7
+ "additionalProperties": true,
8
+ "required": ["mapPackageId"],
9
+ "properties": {
10
+ "mapPackageId": {
11
+ "type": "string",
12
+ "description": "Identifier (map_…) of the MapPackage to refine."
13
+ },
14
+ "styleId": { "type": "string" },
15
+ "themeId": { "type": "string" },
16
+ "sourceBindings": {
17
+ "type": "array",
18
+ "items": { "type": "object", "additionalProperties": true }
19
+ },
20
+ "initialView": { "type": "object", "additionalProperties": true }
21
+ }
22
+ }
@@ -0,0 +1,60 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://geospatial-mcp.honua.io/spec/schemas/tools/render_map.schema.json",
4
+ "title": "render_map inputSchema",
5
+ "description": "Argument shape for the map-render tool (advertised name honua_render_map). Renders an image of ordered layers over an extent. This is the reference implementation's read-only map preview surface, distinct from the semantic map-composition family (create_map_package, etc.). x-honua-reference-shape: this shape tracks the reference implementation.",
6
+ "x-honua-reference-shape": true,
7
+ "type": "object",
8
+ "required": ["layers", "bbox"],
9
+ "properties": {
10
+ "layers": {
11
+ "type": "array",
12
+ "minItems": 1,
13
+ "description": "Ordered layers to draw, bottom-to-top.",
14
+ "items": {
15
+ "type": "object",
16
+ "required": ["serviceId", "layerId"],
17
+ "properties": {
18
+ "serviceId": { "type": "string", "minLength": 1 },
19
+ "layerId": { "type": "integer", "minimum": 0 }
20
+ }
21
+ }
22
+ },
23
+ "bbox": {
24
+ "type": "array",
25
+ "minItems": 4,
26
+ "maxItems": 4,
27
+ "items": { "type": "number" },
28
+ "description": "Map extent as [minX, minY, maxX, maxY]."
29
+ },
30
+ "bboxSrid": {
31
+ "type": "integer",
32
+ "default": 4326,
33
+ "description": "Spatial reference (SRID/WKID) of the bbox and output image."
34
+ },
35
+ "width": {
36
+ "type": "integer",
37
+ "minimum": 1,
38
+ "maximum": 1024,
39
+ "default": 512,
40
+ "description": "Output image width in pixels (capped at 1024)."
41
+ },
42
+ "height": {
43
+ "type": "integer",
44
+ "minimum": 1,
45
+ "maximum": 1024,
46
+ "default": 512,
47
+ "description": "Output image height in pixels (capped at 1024)."
48
+ },
49
+ "transparent": {
50
+ "type": "boolean",
51
+ "default": false,
52
+ "description": "Render a transparent background instead of an opaque one."
53
+ },
54
+ "maxInlineBytes": {
55
+ "type": "integer",
56
+ "minimum": 0,
57
+ "description": "Optional ceiling, in bytes, on inline base64 image content. When the rendered image is at or below this size it may be returned inline; above it, the tool returns a resource_link href to the image instead of inlining megabytes of PNG into model context. When omitted, inlining behavior is implementation-defined; the reference implementation defaults to returning a resource_link href rather than inlining. Standardized from the honua-server x-honua extension (geospatial-mcp#52)."
58
+ }
59
+ }
60
+ }
@@ -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/reproject_features.schema.json",
4
+ "title": "reproject_features inputSchema",
5
+ "description": "Direct geoprocessing verb (advertised name honua_reproject_features): reproject a whole dataset into a target spatial reference and return the reprojected features. Use this when reprojection is the goal (\"give me this layer in EPSG:3857\"); when you only need another verb's output in a particular CRS, prefer that verb's optional outSrid param instead of a second call. For multi-step analysis with dependencies and a packaged result, use plan_analysis + execute_plan instead. Member of the standard's opt-in **analysis** conformance profile (see /CONFORMANCE.md and docs/adr/0029-direct-geoprocessing-verbs.md). Long-running calls return an ExecutionJob handle (honua://jobs/{job_id}), pollable and cancelable via cancel_job; small/fast calls may return an inline result. Advertised readOnlyHint: true (computes a derived result; mutates no server state). x-honua-reference-shape: the concrete source (serviceId/layerId, artifactId) spellings track the reference pipeline.",
6
+ "x-honua-reference-shape": true,
7
+ "type": "object",
8
+ "required": ["source", "targetSrid"],
9
+ "properties": {
10
+ "source": {
11
+ "description": "Dataset to reproject: EITHER a published layer (serviceId + layerId) OR a prior-result artifact (artifactId).",
12
+ "oneOf": [
13
+ { "$ref": "#/$defs/layerRef" },
14
+ { "$ref": "#/$defs/artifactRef" }
15
+ ]
16
+ },
17
+ "targetSrid": {
18
+ "type": "integer",
19
+ "description": "Target spatial reference (SRID/WKID) to reproject into. Required — it is the operation's defining parameter."
20
+ },
21
+ "sourceSrid": {
22
+ "type": "integer",
23
+ "description": "Spatial reference (SRID/WKID) of the input geometries; defaults to the dataset's declared CRS. Provide only to override a missing or incorrect source CRS."
24
+ },
25
+ "where": {
26
+ "type": "string",
27
+ "description": "Optional attribute filter (ArcGIS/SQL WHERE clause) selecting which input features to reproject."
28
+ }
29
+ },
30
+ "$defs": {
31
+ "layerRef": {
32
+ "type": "object",
33
+ "required": ["serviceId", "layerId"],
34
+ "additionalProperties": false,
35
+ "properties": {
36
+ "serviceId": { "type": "string", "minLength": 1, "description": "Published service identifier or name (from list_layers.serviceId or resolve_entity)." },
37
+ "layerId": { "type": "integer", "minimum": 0, "description": "Service-local layer index (from list_layers.layerId)." }
38
+ }
39
+ },
40
+ "artifactRef": {
41
+ "type": "object",
42
+ "required": ["artifactId"],
43
+ "additionalProperties": false,
44
+ "properties": {
45
+ "artifactId": { "type": "string", "minLength": 1, "description": "Identifier (artifact_…) of a prior-result ArtifactRef produced by an earlier analysis job or verb. See resources/artifact.schema.json." }
46
+ }
47
+ }
48
+ }
49
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://geospatial-mcp.honua.io/spec/schemas/tools/resolve_entity.schema.json",
4
+ "title": "resolve_entity inputSchema",
5
+ "description": "Argument shape for resolving a natural-language name or phrase to concrete catalog entity references (services/layers). The bare standard taxonomy models entity resolution as a CapabilityCatalog/grounding read; the reference implementation exposes it as a discrete tool (advertised name honua_resolve_entity). x-honua-extension: this is a documented Honua extension over the bare taxonomy, pending formalization in the geospatial-mcp standard. x-honua-reference-shape: this shape tracks the reference implementation.",
6
+ "x-honua-extension": true,
7
+ "x-honua-reference-shape": true,
8
+ "type": "object",
9
+ "required": ["text"],
10
+ "properties": {
11
+ "text": {
12
+ "type": "string",
13
+ "minLength": 1,
14
+ "description": "Natural-language name or phrase to resolve to catalog entities (e.g. \"parcels\", \"flood zones\", \"roads\")."
15
+ },
16
+ "entityType": {
17
+ "type": "string",
18
+ "enum": ["any", "service", "layer"],
19
+ "default": "any",
20
+ "description": "Restrict matches to services, to layers, or to both (default)."
21
+ },
22
+ "limit": {
23
+ "type": "integer",
24
+ "minimum": 1,
25
+ "maximum": 50,
26
+ "default": 10,
27
+ "description": "Maximum number of ranked matches to return (capped at 50)."
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://geospatial-mcp.honua.io/spec/schemas/tools/solve_route.schema.json",
4
+ "title": "solve_route inputSchema",
5
+ "description": "Argument shape for the analysis/geoprocessing routing tool (advertised name honua_solve_route). Solves an ordered route through a sequence of stops. x-honua-reference-shape: this shape tracks the reference implementation.",
6
+ "x-honua-reference-shape": true,
7
+ "type": "object",
8
+ "required": ["stops"],
9
+ "properties": {
10
+ "stops": {
11
+ "type": "array",
12
+ "minItems": 2,
13
+ "maxItems": 25,
14
+ "description": "Ordered stops to route through, in visit order.",
15
+ "items": {
16
+ "type": "object",
17
+ "required": ["lon", "lat"],
18
+ "properties": {
19
+ "lon": { "type": "number", "description": "Longitude (X) ordinate." },
20
+ "lat": { "type": "number", "description": "Latitude (Y) ordinate." }
21
+ }
22
+ }
23
+ },
24
+ "travelProfile": {
25
+ "type": "string",
26
+ "default": "driving",
27
+ "description": "Travel profile / cost-model selector (e.g. \"driving\", \"walking\")."
28
+ },
29
+ "outSrid": {
30
+ "type": "integer",
31
+ "default": 4326,
32
+ "description": "Output spatial reference (SRID/WKID) for the returned route geometry."
33
+ },
34
+ "inSrid": {
35
+ "type": "integer",
36
+ "description": "Spatial reference of the input stop ordinates; defaults to outSrid."
37
+ }
38
+ }
39
+ }
@@ -0,0 +1,71 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://geospatial-mcp.honua.io/spec/schemas/tools/summarize_statistics.schema.json",
4
+ "title": "summarize_statistics inputSchema",
5
+ "description": "Direct geoprocessing verb (advertised name honua_summarize_statistics): compute summary statistics over a dataset, optionally grouped by attribute fields, and return the summary rows. Use this for a single self-contained summary step (\"total population by county\", \"mean parcel value by zoning\") over a layer or a prior overlay/verb result; for multi-step analysis with dependencies and a packaged result, use plan_analysis + execute_plan instead. Member of the standard's opt-in **analysis** conformance profile (see /CONFORMANCE.md and docs/adr/0029-direct-geoprocessing-verbs.md). Long-running calls return an ExecutionJob handle (honua://jobs/{job_id}), pollable and cancelable via cancel_job; small/fast calls may return an inline result. Advertised readOnlyHint: true (computes a derived result; mutates no server state). x-honua-reference-shape: the concrete source (serviceId/layerId, artifactId) spellings track the reference pipeline.",
6
+ "x-honua-reference-shape": true,
7
+ "type": "object",
8
+ "required": ["source", "statistics"],
9
+ "properties": {
10
+ "source": {
11
+ "description": "Dataset to summarize: EITHER a published layer (serviceId + layerId) OR a prior-result artifact (artifactId) such as an overlay_features or join_features result.",
12
+ "oneOf": [
13
+ { "$ref": "#/$defs/layerRef" },
14
+ { "$ref": "#/$defs/artifactRef" }
15
+ ]
16
+ },
17
+ "groupByFields": {
18
+ "type": "array",
19
+ "items": { "type": "string" },
20
+ "description": "Attribute fields to group by. Omit for a single summary row over all matching features."
21
+ },
22
+ "statistics": {
23
+ "type": "array",
24
+ "minItems": 1,
25
+ "description": "Statistics to compute. Each entry names a statistic type and the field it is computed on.",
26
+ "items": {
27
+ "type": "object",
28
+ "required": ["statisticType", "onField"],
29
+ "additionalProperties": false,
30
+ "properties": {
31
+ "statisticType": {
32
+ "type": "string",
33
+ "enum": ["count", "sum", "min", "max", "mean", "stddev", "var"],
34
+ "description": "Aggregate to compute. count ignores onField values (counts rows)."
35
+ },
36
+ "onField": {
37
+ "type": "string",
38
+ "description": "Attribute field the statistic is computed on."
39
+ },
40
+ "outField": {
41
+ "type": "string",
42
+ "description": "Optional name for the output column; defaults to an implementation-defined name derived from statisticType and onField."
43
+ }
44
+ }
45
+ }
46
+ },
47
+ "where": {
48
+ "type": "string",
49
+ "description": "Optional attribute filter (ArcGIS/SQL WHERE clause) selecting which input features are summarized."
50
+ }
51
+ },
52
+ "$defs": {
53
+ "layerRef": {
54
+ "type": "object",
55
+ "required": ["serviceId", "layerId"],
56
+ "additionalProperties": false,
57
+ "properties": {
58
+ "serviceId": { "type": "string", "minLength": 1, "description": "Published service identifier or name (from list_layers.serviceId or resolve_entity)." },
59
+ "layerId": { "type": "integer", "minimum": 0, "description": "Service-local layer index (from list_layers.layerId)." }
60
+ }
61
+ },
62
+ "artifactRef": {
63
+ "type": "object",
64
+ "required": ["artifactId"],
65
+ "additionalProperties": false,
66
+ "properties": {
67
+ "artifactId": { "type": "string", "minLength": 1, "description": "Identifier (artifact_…) of a prior-result ArtifactRef produced by an earlier analysis job or verb. See resources/artifact.schema.json." }
68
+ }
69
+ }
70
+ }
71
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://geospatial-mcp.honua.io/spec/schemas/tools/validate_package.schema.json",
4
+ "title": "validate_package inputSchema",
5
+ "description": "Argument shape for the read-only composition-review tool (advertised name honua_validate_package). Inspects a map/app package's requirement coverage (data bindings, permissions, schema, CRS, capabilities, dependencies, approvals) and returns canonical findings without mutating server state. x-honua-reference-shape: tracks the reference implementation; the bare taxonomy models package review as a CapabilityCatalog + resource read.",
6
+ "x-honua-reference-shape": true,
7
+ "type": "object",
8
+ "properties": {
9
+ "contractVersion": {
10
+ "type": "string",
11
+ "description": "Package-review contract version. Current value is honua.package_review.v1."
12
+ },
13
+ "packageFamily": {
14
+ "type": "string",
15
+ "description": "Supported values are query, analysis_plan, map_package, dashboard_report, form, app_package, workflow, gp, and etl. Missing or unknown values are returned as canonical missing_package_family or unsupported_package_family findings rather than rejected by the schema."
16
+ },
17
+ "packageId": { "type": "string" },
18
+ "requestedAction": { "type": "string" },
19
+ "format": { "type": "string" },
20
+ "packagePayload": {
21
+ "type": ["object", "array", "string", "number", "boolean", "null"],
22
+ "description": "Opaque package payload inspected only by the matching package-family adapter."
23
+ },
24
+ "requirements": {
25
+ "type": ["object", "null"],
26
+ "description": "Shared data binding, permission, schema, CRS, capability, dependency, and approval requirements. An explicit null is normalized to an empty requirement set."
27
+ },
28
+ "includePassFindings": { "type": "boolean" },
29
+ "resourceRefs": {
30
+ "type": ["object", "null"],
31
+ "additionalProperties": { "type": "string" },
32
+ "description": "Safe caller-visible resource references. An explicit null is normalized to an empty map."
33
+ }
34
+ }
35
+ }
@@ -0,0 +1,61 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://geospatial-mcp.honua.io/spec/schemas/tools/validate_plan.schema.json",
4
+ "title": "validate_plan inputSchema",
5
+ "description": "Argument shape for the validate_plan tool (Analyze, Publish Data, Build App; also shared by the dry_run_plan preview tool in the reference implementation). Reference advertised name: honua_validate_plan. Accepts a partial AnalysisPlan so the validator can report EMPTY_PLAN_ID / EMPTY_STEPS as structured violations rather than rejecting at ingest — planId and steps are therefore NOT required here (contrast execute_plan). See planning.md §5.1.",
6
+ "type": "object",
7
+ "required": ["plan"],
8
+ "properties": {
9
+ "plan": { "$ref": "#/$defs/analysisPlan" }
10
+ },
11
+ "$defs": {
12
+ "analysisPlan": {
13
+ "type": "object",
14
+ "description": "Canonical AnalysisPlan expressed as MCP plan input. Partial plans are permitted at validate time.",
15
+ "required": [],
16
+ "properties": {
17
+ "planId": { "type": "string" },
18
+ "intentId": { "type": "string" },
19
+ "steps": {
20
+ "type": "array",
21
+ "items": { "$ref": "#/$defs/planStep" }
22
+ },
23
+ "outputs": {
24
+ "type": "array",
25
+ "items": { "$ref": "#/$defs/artifactKind" }
26
+ },
27
+ "warnings": {
28
+ "type": "array",
29
+ "items": { "type": "string" }
30
+ }
31
+ }
32
+ },
33
+ "planStep": {
34
+ "type": "object",
35
+ "required": ["stepId", "kind"],
36
+ "properties": {
37
+ "stepId": { "type": "string" },
38
+ "kind": { "$ref": "#/$defs/planStepKind" },
39
+ "processId": { "type": "string" },
40
+ "inputs": {
41
+ "type": "object",
42
+ "additionalProperties": { "type": "string" }
43
+ },
44
+ "dependsOn": {
45
+ "type": "array",
46
+ "items": { "type": "string" }
47
+ }
48
+ }
49
+ },
50
+ "planStepKind": {
51
+ "type": "string",
52
+ "description": "Canonical AnalysisPlanStepKind value. Server parsing is case-insensitive but clients should send the canonical PascalCase spelling.",
53
+ "enum": ["QueryFeatures", "Geoprocess", "Aggregate", "RenderMap", "Export"]
54
+ },
55
+ "artifactKind": {
56
+ "type": "string",
57
+ "description": "Canonical ArtifactKind value.",
58
+ "enum": ["Scalar", "FeatureLayer", "Table", "Raster", "File", "Report", "Map", "AppBundle"]
59
+ }
60
+ }
61
+ }
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Platform-free capability degradation (issue #369).
3
+ *
4
+ * `@honua/mcp-server` runs in two modes: against a Honua-enhanced deployment
5
+ * (which exposes extra surfaces such as OGC API – Styles) and — the platform-free
6
+ * front door — against ANY plain public Esri FeatureServer / OGC endpoint that
7
+ * has none of those surfaces. A tool that depends on a Honua-only surface must
8
+ * NEVER crash, hang, or return misleading empty data on a plain target. Instead
9
+ * it detects the missing surface and reports a clear, structured "not available
10
+ * on this target" result — the same skip-with-reason honesty the certification
11
+ * suite uses.
12
+ *
13
+ * Probing helpers throw {@link CapabilityUnavailableError} when a surface is
14
+ * absent; the tool/resource layer catches it and returns
15
+ * {@link capabilityUnavailable}, a non-error tool result carrying
16
+ * `available: false` plus a human-readable reason.
17
+ */
18
+ export declare class CapabilityUnavailableError extends Error {
19
+ readonly code = "CAPABILITY_UNAVAILABLE";
20
+ /** Human label of the missing surface, e.g. "OGC API - Styles". */
21
+ readonly surface: string;
22
+ /** Why the surface was judged unavailable (status / parse / shape). */
23
+ readonly reason: string;
24
+ constructor(surface: string, reason: string);
25
+ }
26
+ /** Machine-readable body of a graceful capability-degradation result. */
27
+ export interface CapabilityUnavailablePayload {
28
+ available: false;
29
+ surface: string;
30
+ reason: string;
31
+ /** What a client can do instead on a plain public endpoint. */
32
+ guidance: string;
33
+ }
34
+ /**
35
+ * Build a structured "not available on this target" tool/resource result. The
36
+ * result is deliberately NOT an MCP error: a plain FeatureServer legitimately
37
+ * lacks the surface, so degradation is an honest, expected outcome — not a
38
+ * failure. Clients branch on `available === false`.
39
+ */
40
+ export declare function capabilityUnavailablePayload(surface: string, reason: string, guidance: string): CapabilityUnavailablePayload;
41
+ /** Convenience: the {@link capabilityUnavailablePayload} body wrapped as tool text content. */
42
+ export declare function capabilityUnavailable(surface: string, reason: string, guidance: string): {
43
+ content: Array<{
44
+ type: "text";
45
+ text: string;
46
+ }>;
47
+ };
48
+ //# sourceMappingURL=capability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../../src/capability.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,QAAQ,CAAC,IAAI,4BAA4B;IACzC,mEAAmE;IACnE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,uEAAuE;IACvE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAM5C;AAED,yEAAyE;AACzE,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,KAAK,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,4BAA4B,CAE9B;AAED,+FAA+F;AAC/F,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;;;;;EAEtF"}
@@ -0,0 +1,44 @@
1
+ import { jsonText } from "./helpers.js";
2
+ /**
3
+ * Platform-free capability degradation (issue #369).
4
+ *
5
+ * `@honua/mcp-server` runs in two modes: against a Honua-enhanced deployment
6
+ * (which exposes extra surfaces such as OGC API – Styles) and — the platform-free
7
+ * front door — against ANY plain public Esri FeatureServer / OGC endpoint that
8
+ * has none of those surfaces. A tool that depends on a Honua-only surface must
9
+ * NEVER crash, hang, or return misleading empty data on a plain target. Instead
10
+ * it detects the missing surface and reports a clear, structured "not available
11
+ * on this target" result — the same skip-with-reason honesty the certification
12
+ * suite uses.
13
+ *
14
+ * Probing helpers throw {@link CapabilityUnavailableError} when a surface is
15
+ * absent; the tool/resource layer catches it and returns
16
+ * {@link capabilityUnavailable}, a non-error tool result carrying
17
+ * `available: false` plus a human-readable reason.
18
+ */
19
+ export class CapabilityUnavailableError extends Error {
20
+ code = "CAPABILITY_UNAVAILABLE";
21
+ /** Human label of the missing surface, e.g. "OGC API - Styles". */
22
+ surface;
23
+ /** Why the surface was judged unavailable (status / parse / shape). */
24
+ reason;
25
+ constructor(surface, reason) {
26
+ super(`${surface} is not available on this target: ${reason}`);
27
+ this.name = "CapabilityUnavailableError";
28
+ this.surface = surface;
29
+ this.reason = reason;
30
+ }
31
+ }
32
+ /**
33
+ * Build a structured "not available on this target" tool/resource result. The
34
+ * result is deliberately NOT an MCP error: a plain FeatureServer legitimately
35
+ * lacks the surface, so degradation is an honest, expected outcome — not a
36
+ * failure. Clients branch on `available === false`.
37
+ */
38
+ export function capabilityUnavailablePayload(surface, reason, guidance) {
39
+ return { available: false, surface, reason, guidance };
40
+ }
41
+ /** Convenience: the {@link capabilityUnavailablePayload} body wrapped as tool text content. */
42
+ export function capabilityUnavailable(surface, reason, guidance) {
43
+ return jsonText(capabilityUnavailablePayload(surface, reason, guidance));
44
+ }
@@ -0,0 +1,33 @@
1
+ export interface CensusRow {
2
+ OBJECTID: number;
3
+ NAME: string;
4
+ STUSPS: string;
5
+ Total_Pop_2020: number | null;
6
+ Seats_2020: number | null;
7
+ }
8
+ /** The public FeatureServer this fixture was recorded from. */
9
+ export declare const CENSUS_ENDPOINT = "https://services.arcgis.com/P3ePLMYs2RVChkJx/arcgis/rest/services/2020_Census_State_Apportionment/FeatureServer/0";
10
+ /** Service id (as it appears under /rest/services) for the recorded service. */
11
+ export declare const CENSUS_SERVICE_ID = "2020_Census_State_Apportionment";
12
+ /** Human layer name as advertised by the live layer metadata. */
13
+ export declare const CENSUS_LAYER_NAME = "States 2020 Apportionment - U.S. House of Representatives Seats";
14
+ /** Recorded layer extent (Web Mercator, wkid 102100). */
15
+ export declare const CENSUS_EXTENT: {
16
+ readonly xmin: -19942592.3656;
17
+ readonly ymin: 2024070.8216000013;
18
+ readonly xmax: 20012846.037699997;
19
+ readonly ymax: 11523911.845299996;
20
+ readonly spatialReference: {
21
+ readonly wkid: 102100;
22
+ readonly latestWkid: 3857;
23
+ };
24
+ };
25
+ /** Recorded field list for layer 0 (all 22 fields, verbatim). */
26
+ export declare const CENSUS_FIELDS: ReadonlyArray<{
27
+ name: string;
28
+ type: string;
29
+ alias: string;
30
+ }>;
31
+ /** All 52 recorded rows (attribute-only; geometry omitted to keep the fixture small). */
32
+ export declare const CENSUS_ROWS: ReadonlyArray<CensusRow>;
33
+ //# sourceMappingURL=census-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"census-data.d.ts","sourceRoot":"","sources":["../../../src/certification/census-data.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAG9B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,+DAA+D;AAC/D,eAAO,MAAM,eAAe,sHACyF,CAAC;AAEtH,gFAAgF;AAChF,eAAO,MAAM,iBAAiB,oCAAoC,CAAC;AAEnE,iEAAiE;AACjE,eAAO,MAAM,iBAAiB,oEAAoE,CAAC;AAEnG,yDAAyD;AACzD,eAAO,MAAM,aAAa;;;;;;;;;CAMhB,CAAC;AAEX,iEAAiE;AACjE,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CA+GtF,CAAC;AAEF,yFAAyF;AACzF,eAAO,MAAM,WAAW,EAAE,aAAa,CAAC,SAAS,CA6WhD,CAAC"}