---
summary: "socrata_dataframe_describe and socrata_dataframe_query: canvas_not_found error contract now fires when canvas.acquire throws NotFound on an unknown canvas_id"
breaking: false
security: false
---

# 0.1.7 — 2026-06-04

## Fixed

- **`socrata_dataframe_describe`** and **`socrata_dataframe_query`**: both tools declared a `canvas_not_found` error contract but never called `ctx.fail('canvas_not_found', ...)` — passing an unknown `canvas_id` produced a raw `NotFound` from `canvas.acquire()` with `data.reason` unset, making the contract unreachable by agents ([#8](https://github.com/cyanheads/socrata-mcp-server/issues/8)). Both handlers now wrap `canvas.acquire()` in a try/catch that catches `McpError` with `code === NotFound` and re-throws via `ctx.fail('canvas_not_found', ...)`. For `dataframe-describe`, the re-route only fires when `canvasIdInput !== undefined` — when `canvas_id` is omitted, `acquire` creates a fresh canvas and `NotFound` cannot occur there. Both changes are covered by new tests.
