← Notes
Why MCP and not more buttons
mcp·ux·claude

Why MCP and not more buttons

We replaced six dashboard pages with one chat window. The cost was an hour of engineering; the saving was the entire long tail of UI we never had to build.

· Mikhail Savchenko · Updated

A trading control plane is a tree of small decisions. Pause this strategy. Approve that rebalance. Move 50k from cash into balanced. Show me yesterday’s drawdown for paper_levels_bob. Each one a button somewhere. After a year you have ninety pages, twelve dropdowns, and an operator who clicks the wrong one at 3am.

We tried the obvious thing first: better information architecture. Tabs. Search. Keyboard shortcuts. Helped. Didn’t fix the underlying issue, which is that no fixed UI fits the long tail of one-shot questions. “Show me trades over $10k this week from sleeves that flipped phase” doesn’t earn its own page. So you don’t ask. So you don’t see.

What MCP actually changes

The Model Context Protocol exposes server-side tools to Claude. We wrote 14 of them — get_state, set_mode, approve_trade, allocate_to_long, and so on. Each one wraps an existing service in our codebase. Each one is role-gated (viewer / operator / admin) by the same RBAC the web UI uses.

You install once, generate a bearer token, and paste a 4-line config into Claude Desktop. After that the tree of decisions becomes a chat:

show me current state of balanced

Claude detects the strateg-overview skill, calls get_state, surfaces equity / drawdown / regime / mode / pending approvals. One sentence in. Five lines out.

set balanced to CAUTIOUS

Claude detects the strateg-set-mode skill, asks you to confirm, calls set_mode(strategy="balanced", mode="CAUTIOUS"), reads back the new state to verify. Two messages, one tool call, idempotent audit log.

move 50k from cash into trading on paper_levels_bob

Claude calls get_my_balance to fetch your capital tree, formats the proposed move (“cash $100,000 → $50,000; trading paper_levels_bob $0 → $50,000”), waits for “yes”, calls allocate_to_trading. The tool returns {ok: true, audit_ref, balance} and Claude reads back the new totals.

What we didn’t have to build

  • A “search by date range and sleeve and side” page.
  • A “move money between buckets with safety checks and balance preview” wizard.
  • A “compare strategies side by side” view.
  • 14 modal dialogs for confirmation flows.

Claude does all of that for free. Skills tell it which tool to use and what to confirm before writing. The skills are markdown files in your config — you can edit them, fork them, ban us from updating them.

What we did keep

The dashboard isn’t going anywhere. There are still seven UI pages: cockpit, strategies grid, trades, control panel, approvals queue, settings, account. Cards-and-charts beat chat for monitoring — your eye picks up regime shifts faster than any LLM. Chat wins for editing — typing a sentence beats hunting a menu.

We just stopped trying to design a UI for every possible action. We designed seven monitoring pages and let MCP handle the rest.

The audit-grade part

Every tool call writes an audit_log row with the operator id, action, old + new value, and idempotency key. Capital flows have an audit_ref so retries don’t double-spend. Mode changes append to mode_history with “via mcp:user#7” tagged. The chat is convenient; the trail is the same as clicking buttons.

If a regulator asks “who paused trading at 03:14 on April 22nd”, the answer is in audit_log, not in your Slack history.

Try it

curl -fsSL https://inite.fund/install.sh | sh

Generate a token at /account, paste the MCP config into Claude Desktop, and ask: show me current state of balanced. Three minutes from zero.

Related notes
All notes →