By the end of this you will have an MCP server running under Statio, a permission granted to yourself, and an agent calling a tool through the gateway with the credential injected server-side.
The desktop app is how your machine gets connected. It:
You can configure a client by hand instead (see Connect a client), but the app is the supported path and it is the only one that tells you what was already there.
Note
Statio is a control plane, not an MCP client. The desktop app configures the clients you already use. It does not replace them.
In the dashboard, open Catalog and install one. Statio deploys it, discovers its tools, and registers each tool so it can be granted individually.
To bring your own instead, see Deploy your own MCP server.
Open the server, go to Credentials, and add the key it needs upstream: a GitHub token, a Stripe key, whatever that API expects.
Warning
This is the last time you handle that value. It is encrypted at rest and injected into the upstream request at proxy time; it is never returned by the API and never sent to your agent.
Nothing is permitted by default. A freshly installed server is reachable by nobody, including you.
Under Permissions, grant a tool to yourself or a team. Grants are per tool, so a server exposing twelve tools can expose exactly the two you meant.
In the desktop app, pick the clients to configure and let it write the config. It sets the gateway URL and the credential for you.
If you would rather do it by hand, the shape is in Connect a client.
Note
Start a new session after connecting or installing a server. AI clients
read their MCP servers once, when they start, so a session that was already
open won't see the new tools. In Claude Code, run a fresh claude (resuming an
old session keeps its old list); in Claude Desktop, Cursor and the others,
quit and reopen.
Ask your agent to use one of the granted tools. What happens:
Open Audit in the dashboard. The call is there, with the tool, the principal and the outcome.
Call a tool you did not grant. The gateway refuses it, and the refusal is recorded too. That is the whole product in one request: permission is checked per tool, not per server, and the answer is written down either way.