Tool tree
gradeNot graded
inspect_workspaceAction
List available DuckDB relations, whether each is loaded, saved query results, globe layers, and the active result. Use this first to understand the current spatial workspace.
View tool JSON
{
"name": "inspect_workspace",
"kind": "act",
"impl": "imperative",
"description": "List available DuckDB relations, whether each is loaded, saved query results, globe layers, and the active result. Use this first to understand the current spatial workspace.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
}
}inspect_relationAction
Inspect one dataset or saved result before writing SQL. Returns schema, inferred geographic/time roles, row count, sample rows, and source provenance.
View tool JSON
{
"name": "inspect_relation",
"kind": "act",
"impl": "imperative",
"description": "Inspect one dataset or saved result before writing SQL. Returns schema, inferred geographic/time roles, row count, sample rows, and source provenance.",
"inputSchema": {
"type": "object",
"properties": {
"relation": {
"type": "string",
"description": "Relation, result ID, or saved result relation."
}
},
"required": [
"relation"
],
"additionalProperties": false
}
}load_datasetAction
Load an HTTPS CSV/Parquet URL or up to 500 inline records into DuckDB as a named relation. Include source and license details so the workspace can preserve provenance.
View tool JSON
{
"name": "load_dataset",
"kind": "act",
"impl": "imperative",
"description": "Load an HTTPS CSV/Parquet URL or up to 500 inline records into DuckDB as a named relation. Include source and license details so the workspace can preserve provenance.",
"inputSchema": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Short SQL-safe relation name; it will be normalized."
},
"url": {
"type": "string",
"description": "Public HTTPS CSV or Parquet URL. Must allow browser CORS."
},
"format": {
"type": "string",
"enum": [
"csv",
"parquet"
],
"description": "Remote file format. Inferred from URL if omitted."
},
"records": {
"type": "array",
"maxItems": 500,
"description": "Small JSON records supplied directly by the agent.",
"items": {
"type": "object"
}
},
"sourceTitle": {
"type": "string",
"description": "Human-readable dataset or source title."
},
"sourceUrl": {
"type": "string",
"description": "Canonical page that documents inline records."
},
"organization": {
"type": "string",
"description": "Source organization or publisher."
},
"license": {
"type": "string",
"description": "Dataset license or usage terms."
}
},
"required": [
"name"
],
"additionalProperties": false
}
}execute_sqlAction
Run one read-only SELECT/WITH query across available DuckDB relations. Referenced bundled datasets load on demand. Saves a capped result, updates the result table, and records SQL lineage for rendering.
View tool JSON
{
"name": "execute_sql",
"kind": "act",
"impl": "imperative",
"description": "Run one read-only SELECT/WITH query across available DuckDB relations. Referenced bundled datasets load on demand. Saves a capped result, updates the result table, and records SQL lineage for rendering.",
"inputSchema": {
"type": "object",
"properties": {
"sql": {
"type": "string",
"description": "DuckDB SELECT or WITH query. File, network, DDL, and mutation operations are blocked."
},
"title": {
"type": "string",
"description": "Short title for the result and result panel."
}
},
"required": [
"sql"
],
"additionalProperties": false
}
}render_globe_sceneAction
Present an explanation as a headline, subheadline, and up to eight declarative globe layers. Each layer references a saved SQL result and maps columns to visual roles.
View tool JSON
{
"name": "render_globe_scene",
"kind": "act",
"impl": "imperative",
"description": "Present an explanation as a headline, subheadline, and up to eight declarative globe layers. Each layer references a saved SQL result and maps columns to visual roles.",
"inputSchema": {
"type": "object",
"properties": {
"headline": {
"type": "string",
"maxLength": 120,
"description": "Specific conclusion or subject shown prominently over the globe."
},
"subheadline": {
"type": "string",
"maxLength": 220,
"description": "One concise sentence explaining what is shown and why it matters."
},
"layers": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"description": "Ordered back-to-front scene layers. The last layer also becomes the active table result.",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"maxLength": 80,
"description": "Stable scene-unique layer ID."
},
"resultId": {
"type": "string",
"maxLength": 80,
"description": "Saved result ID returned by execute_sql."
},
"type": {
"type": "string",
"enum": [
"points",
"paths",
"rings",
"polygons"
],
"description": "Normalized spatial mark type."
},
"title": {
"type": "string",
"maxLength": 120,
"description": "Compact label used in the globe legend."
},
"encoding": {
"type": "object",
"description": "Result columns assigned to visual roles. Geographic roles are inferred when omitted.",
"properties": {
"latitude": {
"type": "string",
"description": "Latitude column."
},
"longitude": {
"type": "string",
"description": "Longitude column."
},
"altitude": {
"type": "string",
"description": "Optional altitude in kilometers above the Earth reference ellipsoid."
},
"geometry": {
"type": "string",
"description": "GeoJSON Polygon or MultiPolygon geometry column."
},
"group": {
"type": "string",
"description": "Series or path identifier column."
},
"order": {
"type": "string",
"description": "Path point ordering column."
},
"label": {
"type": "string",
"description": "Hover and selection label column."
},
"size": {
"type": "string",
"description": "Optional numeric ring-size column."
},
"image": {
"type": "string",
"description": "Optional image URL or bundled image-path column for previews."
}
},
"additionalProperties": false
},
"style": {
"type": "object",
"description": "Validated fixed styling. Width and animate affect paths; radius affects points or rings.",
"properties": {
"color": {
"type": "string",
"maxLength": 60,
"description": "CSS color; omit for deterministic group colors."
},
"opacity": {
"type": "number",
"minimum": 0.1,
"maximum": 1,
"description": "Layer opacity."
},
"width": {
"type": "number",
"minimum": 0.1,
"maximum": 4,
"description": "Path stroke width."
},
"radius": {
"type": "number",
"minimum": 0.05,
"maximum": 20,
"description": "Point radius or ring maximum radius."
},
"animate": {
"type": "boolean",
"description": "Whether path dashes move."
}
},
"additionalProperties": false
}
},
"required": [
"id",
"resultId",
"type"
],
"additionalProperties": false
}
},
"camera": {
"type": "object",
"description": "Initial camera behavior after the scene is committed.",
"properties": {
"fit": {
"type": "string",
"enum": [
"all-layers",
"active-layer",
"none"
],
"description": "Fit every layer, one layer, or preserve the camera."
},
"layerId": {
"type": "string",
"maxLength": 80,
"description": "Layer to fit when fit is active-layer; defaults to the last layer."
}
},
"additionalProperties": false
}
},
"required": [
"headline",
"subheadline",
"layers"
],
"additionalProperties": false
}
}present_resultAction
Bring a saved result into the visible table, open a 1-based page, optionally select a 0-based row, and fit the globe. Use after rendering to focus the user's attention.
View tool JSON
{
"name": "present_result",
"kind": "act",
"impl": "imperative",
"description": "Bring a saved result into the visible table, open a 1-based page, optionally select a 0-based row, and fit the globe. Use after rendering to focus the user's attention.",
"inputSchema": {
"type": "object",
"properties": {
"resultId": {
"type": "string",
"description": "Saved result ID returned by execute_sql."
},
"page": {
"type": "integer",
"minimum": 1,
"description": "One-based result page."
},
"selectedIndex": {
"type": "integer",
"minimum": 0,
"description": "Optional zero-based row index to select."
},
"fit": {
"type": "boolean",
"description": "Fit the globe to the result when no row is selected."
}
},
"required": [
"resultId"
],
"additionalProperties": false
}
}