Follow-up from PR #107 (Codex review finding #5). tasks/cancel is currently cooperative: it cancels a queued task and marks a running one for cancellation, but cannot interrupt a SQL statement already executing — the query runs to completion (and a write tool may commit) before the task is marked cancelled.
To make cancellation preemptive, plumb a per-task DuckDB connection through the worker so tasks/cancel can call duckdb_interrupt on it. Until then, consider defaulting mcp-tool.async to read-only tools, or documenting that async write tools cannot be cancelled mid-statement (currently documented in MCP_REFERENCE §11.7).
Follow-up from PR #107 (Codex review finding #5). tasks/cancel is currently cooperative: it cancels a queued task and marks a running one for cancellation, but cannot interrupt a SQL statement already executing — the query runs to completion (and a write tool may commit) before the task is marked cancelled.
To make cancellation preemptive, plumb a per-task DuckDB connection through the worker so tasks/cancel can call
duckdb_interrupton it. Until then, consider defaultingmcp-tool.asyncto read-only tools, or documenting that async write tools cannot be cancelled mid-statement (currently documented in MCP_REFERENCE §11.7).