Dual control: why every button is also a tool
A UI action and its MCP tool twin are built together, with identical effect. Automation is never a separate, less-tested path around the interface.

The short answer
- Dual control means every action in SalesCrew's UI has an MCP tool with the same effect, and every MCP tool has a UI equivalent. Neither path is a shortcut around the other.
- The alternative, an automation API bolted on beside a UI, drifts. The automation path gets fewer safeguards over time, because it is tested and reviewed less often than the interface people click through.
- Because the two paths have the same effect, the manual path never breaks when automation is turned off. An agent's actions face the same validation a person's clicks would.
- SalesCrew has 145 registered MCP tools, close to one for every UI action. That only stays manageable because the two surfaces were designed as one thing from the start.
The problem with a bolt-on automation API
A common pattern is to build the product for a human first, then add an API for automation later, often for different use cases than the UI. The API tends to lag the UI. It exposes whatever one integration needed at the time, not the full set of things the UI can do. Its validation rules drift out of sync with the UI's rules, because different people maintain the two at different times, for different reasons.
That drift is where problems show up. A UI action might enforce a business rule: a required field, a permission check, a rate limit. The bolt-on API never got the same rule, because nobody was thinking about the API when the UI rule was added. An automated call can then do something the UI would have blocked. Not because it was designed to bypass the rule, but because the rule only ever lived in one of the two places.
What building them together actually requires
Dual control is the discipline of building the UI action and its tool twin at the same time. One design decision with two entry points, rather than a UI decision and a separate API decision later. In practice, when a new action is added to SalesCrew, such as contact_create, cadence_advance or approval_approve, the MCP tool schema and the UI form are designed together. They share the same validation and the same access checks. They produce the same recorded effect, whether the caller is a person clicking a button or a token calling the tool.
This is more work up front than building a UI and letting the API catch up. Every new action means two entry points instead of one, tested against the same expectations. The payoff grows with the number of automated actions. There is no separate, less-scrutinized automation path. An agent calling a tool is held to exactly the rules a person using the interface would be. Not a looser set that happened to go unpatched.
It also means the access-control model is built once. SalesCrew's three-axis scope, channel, Upwork profile and area, and its default policy table, which decides what runs unattended and what waits for review, apply to a tool call the same way they apply to the matching UI click. The tool and the UI action are one permission check evaluated for two callers. They are not two systems that happen to agree today and might not tomorrow.
Why this matters more as the tool surface grows
With a handful of automated actions, keeping a bolt-on API in sync with the UI by hand is annoying but survivable. With 145 registered tools, close to one for every UI action, it would not be. Dual control has to be a rule, not a suggestion. At that scale, a gap between the two surfaces is not a rare edge case. It is near-certain across that many actions if the two are maintained separately.
The other benefit is that the manual path never breaks when automation is turned off. The UI action was never secondary to the tool. A customer who disables every agent and every token still has the full product through the interface, exactly as it worked before any automation existed. That guarantee, that turning automation off costs nothing in capability, only follows from building the two paths as one decision from the start.
Questions
- Does dual control mean the UI and the MCP tool share the same code?
- It means they produce the same effect and pass through the same validation and access checks, whether or not they share code underneath. What matters to a customer is that the outcome and the guardrails are identical whichever path was used, not how the code is organized.
- Why would a UI-only action ever be a problem?
- A UI-only action is invisible to automation and invisible to audit by tool call, because no tool records that it happened with specific arguments. It can still be tracked at the record-change level. But an agent cannot call it, and nobody can reason about it the way a tool call allows.
- Does dual control slow down building new features?
- It adds real work. A new action needs both the UI path and the tool schema built and tested together, not one added later. The trade is that automation never needs a special case, which pays off as the number of automated actions grows.