Legacy software vendors
A modern front end, without rewriting twenty years of business logic.
We use necessary cookies to make the site work. With your consent we also use optional cookies to understand how the site is used and to measure our marketing. You can accept, reject, or choose what to allow.
Read our Privacy Policy for the full list of cookies.
Your customers are moving their work into Claude, ChatGPT, Copilot and agents that run on their own. We build the MCP server that lets all of them use your product: designed for models, secured to spec, proven with evals.
Work that used to happen in your UI is now asked of an agent. If the agent can't reach your product, your user leaves the conversation, or leaves you.
Six agents and six systems used to mean 36 integrations. With MCP it's one server, and every client that speaks the protocol can use it.
The same tool answers a person in Claude, a developer in their IDE and an agent that runs at 7:00 with nobody watching.
A modern front end, without rewriting twenty years of business logic.
Your product inside ChatGPT, Claude and Copilot, not in another tab.
Staff agents on your ERP and CRM, under your auth, scopes and audit trail.
No dashboard to build. The conversation is the interface.
An API is read once, by a developer. An MCP server is read on every request, by a model deciding what to call.
REST APIA developer, once, while writing an integration
MCP serverA model, on every request, choosing between tools
REST APIResources and endpoints
MCP serverJobs the user wants done
REST APIA docs site for people
MCP serverNames, descriptions and schemas are the prompt
REST APIRequest, response
MCP serverThe server can stop and ask the user, then continue; long work runs as a task
REST APIBandwidth and rate limits
MCP serverTokens: every definition and every result spends the model's context
One tool per endpoint.
A generator turns 200 endpoints into 200 tools. The agent chains six calls to do one job and gets one of them wrong.
One tool per job.
We start from what users actually ask for and fold the whole chain into one call that does it.
Every tool, loaded on every turn.
Definitions eat tens of thousands of tokens before the user types a word. Past a few dozen tools, the model starts picking the wrong one.
A handful of tools. The rest on demand.
A small, deliberate surface. For large APIs, progressive discovery or code execution instead of a flat list.
Whatever the API returns.
48 KB of JSON, internal IDs, every field. The model loses the thread, and you pay for every byte of it.
The answer, not the database.
Filtered, paginated, readable names, structured output with a schema: only what the next decision needs.
Accept object. Reply “400 invalid”.
The model guesses the shape, fails, and guesses again. Three calls, no progress, and a user watching it flail.
Typed inputs. Errors that teach.
Typed schemas, introspection, and errors that state the valid input, so the model fixes itself in one turn.
Pass the user's token straight through.
One token, every scope, any audience: a confused deputy. And tool output the model reads as instructions.
Scope every tool. Confirm every write.
OAuth to the current spec, tokens bound to your server, confirmation before destructive writes, and a prompt-injection review of every data path.
Tried it once in Claude. Shipped it.
Nobody measures whether the agent picks the right tool with the right arguments, so every change is a guess.
Proven on every change.
An eval suite of real tasks, run across models before launch and on every change after it.
One request. The agent asks once, the server does the work across your system, and the model gets the answer, not the payload.
An MCP inspector replaying agent tasks. In the first, Claude asks the MCP server mcp.acme-erp.com to run the tool find_overdue_accounts. The server makes four REST calls to the company's ERP in parallel, receives 48 KB of raw JSON, and returns a compact result of under half a kilobyte to the model, about 99% less context. The agent then posts the summary to Slack through Slack's MCP server and answers in one line. Other tasks show n8n, Copilot, a headless agent, ChatGPT and Cursor calling other tools on the same server.
To learn where MCP breaks, we built Mailoo: a drip-email campaign engine with no dashboard and no login. You run it only through an AI assistant.
A schema is the only documentation an agent has.
Each one changed how a server is built. A server written in early 2025 is already on deprecated paths; we build to 2026-07-28 and migrate the ones that aren't.
Four steps, each ending in something you can check. The core of your product doesn't change.
We list what your users would ask an agent to do, and what data and permissions each job needs.
Tools, schemas, result shapes and risk levels, plus the eval tasks that will judge them, before any code.
Streamable HTTP, OAuth against your identity provider, deployed in your cloud. Gateway and tracing included.
Evals across models, a security review, and submission to the client directories you want to be in.
Short answers. The call is for the long ones.
Your API serves developers who write integrations. An MCP server serves the agent your customer already uses, and it works in every MCP client without anyone writing an integration. It usually sits on top of your API rather than replacing it.
You can, and it will work in a demo. Generated servers mirror endpoints, so the agent chains calls, burns context and picks the wrong tool. A generated list is a useful inventory to design from, not a design.
Any MCP client: Claude, ChatGPT (its apps are built on MCP), Microsoft Copilot Studio and Microsoft 365 Copilot, Cursor, VS Code and Gemini among them. Clients differ in which extensions they support, such as MCP Apps, and we test in the ones that matter to you.
Remote, over Streamable HTTP, for almost every product: one deployment, OAuth per user, and it works in web and mobile clients. Local (stdio) only when the server needs the user's machine, such as files or desktop apps.
Tokens are issued for your server and never passed through. Scopes are per tool, destructive tools ask for confirmation, and every call is traced. We also review where untrusted content meets private data, because tool output is input to a model. See the security best practices we build to.
It changes, but deliberately: 2026-07-28 made the protocol stateless and deprecated Dynamic Client Registration, with a twelve-month window before removal. We build to the current revision, and we migrate servers built on older ones.
Yes. We audit it against real tasks with evals, cut and reshape the tool surface, fix auth, and migrate it to the current spec.
Tell us about the product and the jobs your users would hand to an agent. You get an engineer, not a sales call.
Prefer email? Write to office@upheave.tech.