All docs

Letting an agent deploy

Fund the wallet, mint a capped credential, point your assistant at it. Four commands, then you stop being in the loop.

The point of Marina is that shipping does not need you at a keyboard. An assistant with a credential and a funded wallet can create an app, deploy it, attach a database and put a domain in front of it, without asking you for anything.

Four steps, once.

1. Put money in the wallet

marina wallet topup

Marina is prepaid, and an agent working at two in the morning has nobody to ask for a card. Whatever it creates is charged against this balance, and when the balance runs out it stops rather than billing you.

2. Mint it a credential

Not the one your terminal uses. Its own:

marina tokens create assistant --preset agent --spend 200

agent can build, deploy, manage config vars and databases, and spend the wallet. --spend 200 is a lifetime cap on that credential: two hundred cedis across its whole life, then it stops, whatever the balance says. That is the bound worth having for something unattended, because a wallet you keep topped up is a wallet a loop can keep draining.

If the assistant should only ship code to apps that already exist, --preset deploy cannot create anything and cannot grow your bill at all. It can still delete one, though, so it is a bound on spending rather than on damage. Tokens and scopes has the rest.

Add --scope wallet:read if you want the assistant to be able to check the balance: agent does not include it, so it learns about an empty wallet only when a purchase fails.

The token is printed once. It goes in MARINA_API_TOKEN.

3. Point the assistant at it

marina mcp

That serves the account over MCP on stdin and stdout, and your client starts it as a subprocess. The exact configuration depends on which client you use:

There is also a hosted server at https://mcp.marinahost.app/mcp, which needs no token and so replaces step 2 as well: your client sends you to Marina to sign in, and you approve the access there. Connect an agent compares the two.

4. Ask for something

Deploy the app in this repo to Marina, give it a Postgres database, and tell me the URL.

The assistant sees Marina as a set of tools rather than a CLI to guess at, so it calls them directly and reads structured results back.

What it can do without asking

Everything the credential allows, except one thing.

Buying a domain confirms first. It is the only purchase that cannot be undone: a registration is a year of a name, and no refund brings it back. Creating an app or a database is spending too, but both are reversible in a way a registration is not.

The confirmation travels through your assistant, so what you see depends on the client. Not every MCP client can relay a question; on one that cannot, the purchase goes ahead bounded by the balance and the credential’s cap. That is the case the cap is for.

When it runs out of money

Nothing is queued and nothing half-happens. The refusal carries the shortfall, your payment code, and the number to send Mobile Money to:

Your wallet is short GHS 187.42.
  This costs GHS 190.00, and the wallet holds GHS 2.58.

Top up with Mobile Money:
  Send to   0558863139  (ISAAC KWEKU BADU SMITH)
  Reference <your code>

The assistant can tell you exactly what it needs instead of only that it failed. Top up, and it runs the same tool again.

Narrowing it further

The tool list an assistant sees is filtered by the credential, so a token without db:credentials is never offered a tool that reads a database password. Give it the scopes the job needs and nothing else:

marina tokens create deployer --scope vessel:read --scope vessel:write --scope env:write