bun verify.ts
The verifier speaks real MCP over stdio to your server, exactly the way
VoiceOS does — no mocks. It re-reads your manifest every run and checks that:
- the manifest and preview fixture are
schemaVersion: 1; - the MCP handshake succeeds;
- the tools your server registers match the manifest exactly, both directions — a drifted name is the classic silent failure;
- every tool has a model-facing description worth routing on;
- every tool, called with its preview-fixture args, returns text and 1–3 glance blocks.
AGENTS.md in your folder tells them to run it after every change.
Preview fixtures
voiceos.integration.preview.json holds safe sample inputs per tool:
verify.ts calls your tools with, and what the Integration Studio
uses to preview cards.
In the Studio, fixtures self-heal: every real test-drive run overwrites them
with what the tool actually returned.
Validating pieces in isolation
From the command line:path: message strings — e.g.
tools.0.name: tool name must be snake_case starting with a letter.
Testing in the app
1
Install from folder
Settings → Agent Mode → Integrations → Install from folder, then talk to the
agent.
2
Reload after edits
Hit the integration’s Reload — it re-reads the manifest and restarts your
server. Tools update on the next turn.
3
Read the logs
Your server’s
stderr is the diagnostic channel. VoiceOS captures it and the
integration’s log view shows it. console.error freely — but never log secrets.4
Test-drive in the Studio
For anything opened in the Studio: real scoped
agent turns against your draft. Click any tool row to stage its card, and fill
Required fields to test key-gated paths.

