What changed
| Aspect | V1 | V2 |
|---|---|---|
| Configuration | Single .hyperterse with inline adapters and queries | Root config + app/adapters/*.terse + app/tools/*/config.terse |
| Tool mapping | Query name from config keys | Filesystem: each tool directory = one tool |
| Scripts | None | TypeScript handlers, input/output transforms |
| Auth | None | Per-tool pluggable auth |
| Transport | HTTP query endpoints | MCP Streamable HTTP (/mcp) |
| Build | Runtime interprets config directly | build → model.bin → serve |
| Bundling | None | Scripts bundled + vendor deduplication |
| Caching | Global only | Global + per-tool override |
| Observability | Basic logging | OpenTelemetry tracing + metrics + structured logging |
Migration steps
Work through the following changes in order. Each step is independent — you can commit after each one.Keep the root config
Your.hyperterse retains name, version, and server. Remove adapters and queries — those move to dedicated files.
Before:
Extract adapters
For each v1adapters entry, create app/adapters/<name>.terse:
app/adapters/main-db.terse:
main_db). V2 uses the filename (main-db). Update tool use references, or add an explicit name field to preserve the old identifier:
Extract tools
For each v1queries entry, create app/tools/<name>/config.terse:
app/tools/get-user/config.terse:
Add authentication
V1 had no auth. V2 requires explicit auth per tool:allow_allfor public/health tools.api_keyfor key-protected tools.- Custom plugins for advanced flows.
auth unless intentionally unauthenticated.
Add scripts (optional)
If queries need validation or formatting that v1 handled client-side:Install dependencies
If scripts import npm packages:Validate
| Error | Resolution |
|---|---|
Tool has neither use nor handler | Add adapter reference or handler. |
Tool defines both use and handler | Choose one execution mode (DB-backed or script-backed). |
| Adapter name not found | Verify use matches filename or explicit name. |
| Unknown connector type | Use postgres, mysql, mongodb, or redis. |
| Script file not found | Verify paths are relative to tool directory. |
Test
tools/list:
Build for production
Update client integration
V1 clients using/query/{name} must migrate to MCP tools/call:
Before (V1):
Directory structure comparison
V1:my-api
.hyperterse
my-api
.hyperterse
package.json
app
adapters
main-db.terse
tools
get-user
config.terse
validate.ts
format.ts
list-orders
config.terse
Breaking changes
| Change | Impact | Action |
|---|---|---|
Inline adapters removed | Config will not parse | Extract to app/adapters/*.terse |
Inline queries removed | Config will not parse | Extract to app/tools/*/config.terse |
/query/{name} removed | HTTP clients break | Migrate to MCP tools/call |
| Auth now per-tool | Tools unauthenticated by default | Add auth blocks |
| DSL parser deprecated | Text-format blocks unsupported | Convert to YAML |
| Build step introduced | Direct interpretation replaced | Add build + serve to pipeline |