Your agents, outside the app.

Valv runs a local MCP server for the agents you use in a terminal or editor. Connect Claude Code, Codex or Cursor and it can do what Valv's own agent does. It knows your team's definitions, queries your data under the same rules, builds dashboards that open in Valv, and sets up flows.

Book a demo

Connecting PostgreSQL? Read the Postgres MCP server guide.

Everything the Valv agent can do.

Outside agents get the same instructions, tools and memory as the agent inside Valv. Ask Claude Code in your terminal for a dashboard and it opens in the app.

Claude Code · ~/acme

> dashboard of MRR by plan, and warn me if it drops

⏺ valv-desktop - query (Stripe)

⎿ active subscriptions by plan · 3 rows

⏺ valv-desktop - write_file (mrr.html)

⎿ Wrote 2.4 KB

⏺ valv-desktop - open_file (mrr.html)

⎿ Opened in Valv

⏺ valv-desktop - write_file (mrr-watch.flow.json)

⎿ Wrote flow and script

⏺ valv-desktop - set_flow_enabled (mrr-watch)

⎿ On, weekdays at 08:00

⏺ mrr.html is open in Valv. A flow checks MRR every weekday and notifies you on a drop.

What valv-desktop gives your agent

Context Valv's instructionsworkspace memoryremember
Data describequeryrun_code
Dashboards list_filesread_filewrite_fileedit_fileopen_fileshare_file
Alerts notifyrun_flowset_flow_enabled

Works where you work.

One command connects Claude Code or Codex. Cursor, VS Code, and everything else that speaks MCP take a short JSON config. Your agent works in whatever workspace is active in the app.

http://127.0.0.1:4319/mcp Running
Claude Code claude mcp add
Codex codex mcp add
Cursor JSON config
VS Code JSON config

Your definitions come along.

The server hands your agent the workspace memory, so "MRR" means the same thing in the terminal as in Valv. When the agent learns something new, it suggests a memory and you confirm it in the app.

memory · MRR counts active subscriptions only, trials excluded
memory · Enterprise is billed yearly, MRR uses the monthly share
Suggested: churn excludes paused accounts Confirm

Policies follow the data.

Every MCP call goes through the same access layer as the app's own agent. A hidden column stays invisible whether the question comes from Valv's chat or from Claude Code in a terminal.

claude · describe customers
id, name, plan, seats
email, phone not in the response

Loopback only.

The server binds to 127.0.0.1 and rejects DNS-rebinding tricks. The app's own runs authenticate with per-turn tokens, so an external client can't impersonate them.

127.0.0.1:4319 Local connections only
evil.example rebind attempt Rejected
App runs Per-turn tokens

One difference: the queries behind an answer are clickable only in Valv's own chat. In a terminal you see them as tool calls. See dashboards and flows for what the agent can build.

Connect your agent.

Free for personal use, every feature included. Commercial use needs a seat at beta pricing. See pricing.

All downloads Other platforms and builds