Connect Claude, Cursor or OpenCode to Voroa over MCP
Connect Claude Code, Claude Desktop, Cursor or OpenCode to Voroa's hosted MCP server. One URL, a scoped token or a sign-in, and nothing to install or run.
Voroa publishes an MCP server for customers. Connect an AI client to it and the client can do a lot on your behalf. It can list your services, read a failing build log, redeploy, roll back, set an environment variable and create a database.
You create the token yourself, and you can revoke it at any time.
This page covers the connection. For what an agent does with it once connected, see Use Voroa with a coding agent. For what MCP is and why a platform publishes one, see The Voroa MCP server.
What you need
- A Voroa account with at least one workspace.
- An MCP client that can reach a server by URL. Claude Code, OpenCode and Cursor are the ones this page shows.
Step 1: create a token
Open API Tokens in the dashboard sidebar, under Access. Give the token a name, such as the client it is for, tick what it may do, and select Create token. These permissions decide what the client is allowed to do. They are the only security choice you make here, so take a moment over them.
The dashboard shows each permission by a plain name. The table gives the scope name behind it too.
| In the dashboard | Scope | What the client may do |
|---|---|---|
| Read | services:read |
See everything you can see: services, status, deploy history, build and runtime logs, domains, databases with their backups, metrics and slow queries, usage, autoscaling, edge caching, the repositories you can deploy from, workspace members (names and roles, never emails), your SSH public keys, support tickets, environment variable NAMES, and your billing - what you pay for, your invoices, the breakdown of the next charge, and what an upgrade would cost |
| Operate | services:act |
The above, plus redeploy, restart, stop, start, roll back, cancel a deploy, clear the edge cache and scan a service’s disk |
| Configure | services:write |
The above, plus set environment variables and secret files, add and verify a domain, create and edit scheduled tasks, projects and environment groups, change database settings, take a database backup, set alert emails, and open or answer support tickets |
| Propose changes | services:admin |
The above, plus propose anything that creates something, deletes something, costs money, cannot be undone, or removes someone’s access. It cannot perform any of them |
Start at Read. An agent that can only look is already useful. Raise the scope later, once you know what you want it to do.
A token belongs to one workspace. It expires after 90 days, or after 30 days if it includes Propose changes.
The token is shown once, when you create it. It starts with voroa_cat_. Copy it then. Voroa cannot
show it to you again, because Voroa does not store it in a form anyone can read back.
Two other things worth knowing: revoking a token stops it on the next request, and a password reset invalidates every token you hold, so you will need to create a new one afterwards.
Step 2: add the Voroa server to your client
Voroa hosts the MCP server for you. There is nothing to download or install. Your client needs two things:
- Server URL:
https://api.getvoroa.com/mcp - Header:
Authorization: Bearer <your token>
Claude Code
One line:
claude mcp add --transport http voroa https://api.getvoroa.com/mcp --header "Authorization: Bearer paste-your-token-here"
OpenCode
Add this to opencode.json:
{
"mcp": {
"voroa": {
"type": "remote",
"url": "https://api.getvoroa.com/mcp",
"headers": { "Authorization": "Bearer paste-your-token-here" },
"oauth": false
}
}
}
"oauth": false tells OpenCode to use the token you pasted instead of starting a sign-in.
Cursor
Add this to ~/.cursor/mcp.json and restart Cursor:
{
"mcpServers": {
"voroa": {
"url": "https://api.getvoroa.com/mcp",
"headers": { "Authorization": "Bearer paste-your-token-here" }
}
}
}
Claude on the web, Claude Desktop and the Claude mobile apps
These apps do not take a pasted token. You sign in instead, and you skip Step 1 because Voroa creates the token for you when you approve.
- In Claude on the web, open Settings, Connectors and choose Add custom connector.
- Enter
https://api.getvoroa.com/mcpas the server URL and continue. - Claude opens a Voroa page. Sign in if you are asked to. Check that it will send you back to
claude.ai, choose the workspace and the permissions, and select Allow. Only Read is ticked for you; tick Operate as well if you want Claude to redeploy or restart services.

Add the connector on the web. The Claude mobile apps then use it when you are signed in to the same Claude account.
The token Voroa creates this way appears on the API Tokens page under the client’s name. Revoke it there to disconnect.
For every other client, the token is the only secret here. Keep it in your client’s configuration and nowhere else. It is sent only to Voroa.
Step 3: check it worked
Ask the client something only Voroa can answer:
List my Voroa services and tell me which one deployed most recently.
If it answers with your real service names, the connection is live.
If it says it has no such tool, the client has not read the config yet. Restart it.
If it reports an authentication failure, check the token in the Authorization header first. The token may be wrong, expired,
or from a different workspace.
If the client cannot reach the server at all, check that the URL ends in /mcp and starts with
https://.
What the connection can reach, and what it cannot
The MCP surface is an allow-list, not the whole API. Three things are kept off it deliberately and no scope unlocks them:
- Database connection credentials. An agent can see that a database exists, its size and its settings; it cannot read the password.
- The live build-log stream. Completed build logs are readable; the streaming connection is not carried over this transport.
- Token management. A token cannot create or delete tokens, not even itself. If it could, it would be able to give itself a wider scope and a longer life.
Environment variables and secret files are readable as names only. The client can see that
DATABASE_URL is set. It cannot see what is in it. That is true everywhere in Voroa, not just here.
Billing: readable, never changeable
A services:read token can answer “what am I paying for”, “why did my bill go up”, “when is the next
charge” and “what would an upgrade cost”. It cannot change a plan, cancel a subscription, add or remove a
payment method, or move any money at all - those are absent from the surface, not merely restricted, and
they are done by a person in the dashboard.
Two things are held back from the client even on a read, because they belong in your dashboard rather than in an AI transcript: your billing identity (GSTIN, registered name and address, phone) and your saved payment method’s details (the card’s last four digits, or the UPI handle).
One caution worth passing on to whoever reads the answers. A next-charge DATE is when a charge is scheduled - it is worked out from your billing date and today, so it is always in the future and it is not evidence that the last charge went through. In the same way, “payment method is usable” means it is set up and not expired, not that charges are succeeding. Your invoice list is the honest record: a charge that did not happen leaves no invoice.
The eight actions that need a person
Creating or deleting something is not something an agent completes on its own, however high its scope:
- create a web service, static site, background worker or cron job
- create a database
- delete a service, delete a database, delete a domain
On services:admin the client proposes one of these instead of doing it. Voroa records the request
and returns a summary.
You then approve it in your dashboard: proposals wait at the top of the API Tokens page under Waiting for you, with Approve and Discard. The dashboard performs the action the normal way, exactly as if you had clicked the button yourself. A proposal expires after one hour.
The approval is in the dashboard on purpose, not in the chat.
If the agent were asked to type the database name to confirm, it would simply look the name up and type it. The same agent would be on both sides, and no person would be involved. Approving in the dashboard is what puts a second person in the loop.
Revoking access
Select Revoke next to the token on the API Tokens page. Access stops immediately, and there is nothing else to undo: the server holds no state about your connection.

To rotate a token: create the new one, put it in your client’s Authorization header, restart the
client, then delete the old token.
Frequently asked questions
Do I need to install anything to use the Voroa MCP server?
No. Voroa hosts the server at https://api.getvoroa.com/mcp. Your client connects to that URL, either
with a token in the Authorization header or, for Claude on the web and Claude Desktop, by signing in.
Which permissions should I give an AI client?
Start with Read. It already lets the client answer questions about deploys, logs and usage. Add Operate for redeploys and rollbacks, and Configure only if you want it to change settings.
Can I use one token in two clients?
It works, but create one token per client instead. Each token has its own name and its own Revoke button, so you can cut off one client without breaking the others.
What happens when a token expires?
The client starts getting authentication errors. Create a new token, put it in the client’s configuration and restart the client. Clients that signed in ask you to sign in again.
Can the AI client see my passwords or secret values?
No. Environment variables and secret files are readable as names only, and database passwords are not on the MCP surface at all.