Exposes Drift's transpile/check/run via the Model Context Protocol. Allows coding agents to register this server and gain tools for validating, transpiling, extracting schemas, and running Drift programs.
Four tools with explicit schemas and descriptions. All tools have clear, actionable descriptions (100-250 chars) explaining what they do and when to use them. Input schemas are present with type definitions and parameter descriptions. However, output schemas are underdocumented, drift_run returns a complex object with optional fields (ok, result, cost, outputs, error, stage, kind) but the response structure is not formally specified in the tool definition. drift_schema returns {ok, schemas} or {ok, schema} depending on the 'name' parameter, but this conditional output is not declared in a schema. Error handling is present but could be more prescriptive about recovery steps. No tool annotations (readOnlyHint/destructiveHint) despite clear risk profiles.
Validate syntax AND that it lowers to Python (codegen runs, output discarded), so constructs that parse but can't be compiled — e.g. `~>`/`|>` pipeline edges, `parallel step` — are caught here too.
Transpile + exec a Drift program against the runtime. Returns {ok, result?, cost?, outputs?, error?, stage?, kind?} — `cost` is a {total_cost, budget, currency, calls} snapshot and `outputs` is the list of `respond`-statement lines the agent printed, both present on success and on a "run"-stage failure (a run can spend real money and produce partial output before failing).
Transpile source, exec the generated module, and render each top-level `schema` block's generated dataclass to JSON Schema. Without `name`, returns every schema declared in `source` (in source order) as {ok: true, schemas: {name: json_schema, ...}}. With `name`, returns just that one as {ok: true, schema: json_schema}.
Transpile Drift source code to Python. Returns generated Python code or parse-error message.
Output schemas underdocumented. drift_run returns {ok, result?, cost?, outputs?, error?, stage?, kind?} but the response structure is not formally declared. drift_schema returns conditional output ({schemas} vs {schema}) depending on 'name' parameter, this branching is not captured in a schema definition.
Missing tool annotations. drift_run is marked Risk: WRITE but has no destructiveHint annotation. drift_check and drift_transpile are READ_ONLY but lack readOnlyHint. Annotations help LLMs reason about side effects and retry safety.
Error recovery guidance incomplete. drift_check returns {ok: false, kind, error, line, col} but does not suggest next steps (e.g., 'Fix the syntax error at line X, then retry'). drift_run error responses lack actionable guidance for LLM recovery.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Parameter 'input' in drift_run is described as 'Optional JSON string' but lacks format specification. Should clarify: is it a JSON string that will be parsed, or a pre-parsed object? What schema does the input object follow?
drift_schema's conditional output (with vs without 'name' parameter) is not formally declared. LLMs cannot predict the response shape without explicit schema branching or separate tool variants.