---
title: "Safer hooks and managed MCP servers"
date: "2026-06-30"
---

<Warning>
**Hook interpolation now fails closed.** A missing or unavailable `{{ env.* }}` or `{{ secrets.* }}` token in a command, URL, header, prompt, or model blocks the hook instead of firing it with an empty or partially resolved value. Ensure every referenced value is available where the hook runs.
</Warning>

## Safer hook interpolation

Hook commands, URLs, headers, prompts, and models now carry typed interpolation through to execution instead of being flattened and reparsed. HTTP headers use the same narrow token syntax as other hook fields, and resolution failures consistently block command, HTTP, prompt, and agent hooks before they can act on incomplete data.

## More

<Accordion title="API">
- New `GET`, `POST`, `PUT`, and `DELETE /api/v1/mcp-servers` endpoints manage a shared MCP catalog with ETag concurrency; read responses expose configured key names without returning stored values
- Run configurations can reference a server-managed MCP definition with `id = "..."` instead of repeating its transport settings
</Accordion>

<Accordion title="Improvements">
- Workflow variables now live in SQLite; existing `variables.json` data is imported transactionally and renamed to a timestamped backup
</Accordion>
