Stoolap MCP provides 12 well-structured SQL tools with consistent naming (verb_noun pattern: query, execute, begin_transaction, etc.) and clear descriptions (avg ~80 chars, all present). All tools have explicit input schemas with type definitions and parameter descriptions. However, output schemas are not documented, callers cannot predict response structure. Error handling is basic (generic error messages like 'Error: ...' without recovery guidance). No tool annotations (readOnlyHint, destructiveHint) despite clear risk classifications. Parameter descriptions lack format constraints (e.g., savepoint name validation rules). Missing idempotency guidance for transaction tools.
Begin an explicit SQL transaction on the shared database handle
Commit the active transaction
Execute a SQL statement that modifies data or schema (INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, TRUNCATE, COPY, VACUUM, ANALYZE, PRAGMA, SET)
Explain the query plan for a SQL statement
Execute a read-only SQL query and return results as JSON
Release a named savepoint within the active transaction
Rollback to a named savepoint within the active transaction
Output schemas not documented. Tools return JSON but callers cannot predict field names, types, or structure. LLMs cannot plan downstream operations or extract required data reliably.
No tool annotations despite explicit risk classifications. Tools marked WRITE/READ_ONLY/REVERSIBLE in metadata but not exposed via readOnlyHint/destructiveHint in schema. LLMs cannot infer safety properties.
Error messages lack recovery guidance. Generic 'Error: <message>' format tells LLM nothing about retry eligibility, user-fixable vs fatal, or next steps. E.g., 'no active transaction' should suggest 'Call begin_transaction first.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
Rollback the active transaction
Create a named savepoint within the active transaction
Retrieve the database schema as a JSON object with tables, columns, indexes, and constraints
Execute a SQL statement that modifies data inside an active transaction
Execute a read-only SQL query inside an active transaction
Savepoint name parameter lacks format constraints. Description says 'must be a valid SQL identifier' but does not specify allowed characters, length limits, or regex pattern. LLMs cannot validate before calling.
No idempotency guidance for transaction tools. Agents retry on ambiguous failures, repeated begin_transaction or commit_transaction calls risk duplicate side effects. Descriptions should clarify idempotency or offer confirmation patterns.