Tofu for your coding agent
Take your product live, from the chat you build in.
Connect the agent you already use and ask it to go live. It uploads the app, checks it, publishes it and sends every update to the same app on Tofu, and Tofu’s instructions tell it to ask you before it puts your app online, adds a database, changes a domain, spends money, puts back an earlier version or deletes something.
Set Tofu up in your agent.
Pick the agent you use and copy its setup message.
Pasting asks your agent to install the Tofu client and skill, connect it to your Tofu account, and then wait for you (if the folder it works in holds an app, it first asks whether to put that app online). It authorizes nothing more: Tofu’s instructions tell your agent to ask you before it puts your app online, adds a database, changes a domain, spends money, puts back an earlier version or deletes something.
Choose the agent you use and its setup message appears — copy it, then paste it into that agent.
One matching code.
Your agent opens Tofu sign-in. Approve only the code from the request you just started. The connection lasts 30 days, and you can disconnect it whenever you want.
See it on the Coding agent page →Keep the conversation going.
Once it is connected, ask your agent in your own words to take an app live, or to update one already on Tofu. It checks the code, checks with you before it deploys as Tofu’s instructions tell it to, reports the result and updates the same app when a fix is needed.
What you approve, and what your agent installs
This connection can upload your app’s source or import it from a public GitHub repository, download your app’s code into a new folder on your computer when the agent runs there, get the link that opens your app in Tofu’s builder, which you open yourself, run the safety check, deploy it — its build runs any migration step it has — once you have a hosting plan, save and remove your app’s public settings — an address, a feature flag, a key meant to be public — when the agent runs on your computer, but never a hidden value, which you type yourself in Keys & settings, create the app’s managed database, on its own or in the same call as a deploy, which Tofu runs and pays for as part of your plan, read the app’s build and runtime diagnostics, restore a previous deployment, connect, verify, release or withdraw the authorization for a domain you already own, read domain quotes and prepare a dashboard link for you to review a fresh price, agreements and payment when the agent runs on your computer — it cannot place an order or submit payment, read the stored status of domains you bought through Tofu and ask the registrar to send its confirmation email again to the registrant, without seeing your owner details or changing renewal settings, read and add DNS records on a domain you bought through Tofu, and delete one of yours — never its mail (MX) or verification (TXT) records, which stay with you, read your app’s own traffic — the first read for an app that has no counter yet issues its key — and turn that counter on or off, read whether your app is answering its visitors, and turn Tofu’s emails about it on or off, change how your app’s users sign in and how its sign-in email is sent, see who has an account in your app, add a person by email or remove one — which signs them out — choose whether anyone can sign up or only the people you add, and make the app private — only people with a link can open it — or open to everyone again, send a short message to up to ten of your app’s users, from your app’s own email address, get an invite link that lets one person into your private app — you hand the link out yourself, and the first person who opens it gets in for up to 30 days — list the links you made and turn one off again, choose who can open your app — anyone with the link, only people you list by email, or anyone with a code you share, which puts a sign-in page in front of the whole app — add or remove those people, make a new code, sign everyone out, and keep exact paths open for services like webhooks, connect your app to your own Stripe account when the agent runs on your computer — you install Tofu’s app on Stripe’s own page — then create payment links there, pass their payment events to the app or disconnect it, with the money going straight to you and nothing in its reach that moves money out of your account, set up email your app sends from its own address, pause it, give it a new key or remove it, when the agent runs on your computer — Tofu writes the app’s sending key into its settings, and nothing is sent until the app sends email itself, connect your app to Tofu AI or disconnect it, when the agent runs on your computer — Tofu makes the app its own key, which spends your account’s AI balance up to a monthly limit you can change, and writes it into the app’s settings without the agent ever seeing it, see your sandboxes and choose what model each one’s agent runs on — Tofu AI, which spends your account’s AI balance, or your own endpoint — and which agent its chat talks to, putting your own API key into that sandbox, when the agent runs on your computer, make your sandboxes, wake them, put them to sleep or delete them — which ends everything in one for good — and run commands in them and talk to their agents, which spends each one’s model budget, when the agent runs on your computer, make a new token for your own code to call a sandbox with, when the agent runs on your computer — it stops the token made before, the connection receives it (Tofu’s own tool on your computer keeps it in a private file, never in the chat), and it keeps working after you remove the connection, make a private test copy of one of your server apps to try a change on, put the version you tested there on the live app, or remove the copy and its database for good, when the agent runs on your computer — the copy takes test payments only, restore an archived database into a new one Tofu runs and pays for as part of your plan, and hand you a short-lived link to download its archive, keep a database Tofu warned you about from being archived for going unused, list your database’s daily backups and ask a person at Tofu to put it back to one, which loses what was saved after it, see which of your app’s database setup steps are done, choose whether Tofu runs them for an app, and mark one as done so it never runs, when the agent runs on your computer, delete an app — which also deletes its managed database, permanently, and the delete itself keeps no copy (a copy Tofu already holds of a running database, such as the archive it was restored from, is untouched) — or just its database; the source you uploaded is kept until you ask Tofu to erase it, send Tofu’s team a problem report you approved word for word, with your app’s status attached, sign in to Tofu, read the account’s id and email address, report the plan and the account’s GitHub state, and turn automatic updates off.
It cannot buy, renew or transfer a domain, submit a payment, read domain owner details, an environment value or a database password or connection string, change your plan or billing, or import a private repository from GitHub. Those stay with you.
A saved credential alone is not proof of connection: the client checks with Tofu. When a host has not picked up a new MCP server in the session it is already in, the installed client’s own command line does the same work without one — see the skill’s *Installation and CLI fallback* — and the connection is there the next time that host starts.
The client runs locally over stdio. This release is downloaded directly from Tofu; no npm package installation or Tofu repository checkout is required. The browser cannot inspect your local MCP settings.
In a chat app
Using a chat app instead?
Claude and ChatGPT connect to Tofu with nothing to install and no token or key to paste. In Claude, add Tofu from Claude’s connector directory. In ChatGPT, or any chat app that adds a connector by its address, add the address below. Your chat app then opens Tofu’s own page, and you approve the connection there.
Opens Tofu’s listing in Claude’s connector directory, where you connect it.
Tofu’s address
https://app.trytofu.ai/mcpCan’t add Tofu from Claude’s directory? Add it to Claude by its address instead: the link opens claude.ai’s add-connector dialog with Tofu’s name and address filled in (except on iPhone).
Say what you want. Your agent calls the tools.
The same Tofu tools in every agent that speaks MCP. Where a step is yours — approving once at your DNS provider, agreeing to a rollback — your agent stops and asks.
Things you can say
Example session, sped up. Pick a sentence to play it.
One connection, the whole dashboard.
Every capability the dashboard offers is reachable by your agent — through its tools, or the same commands on the installed client’s command line — unless a written decision says why not.
Everything an approved connection can do
upload your app’s source or import it from a public GitHub repository
ingestingestFilesingestAttachmentingestPublicRepositorygalleryAppsgalleryCopy
download your app’s code into a new folder on your computer when the agent runs there
pullSource
get the link that opens your app in Tofu’s builder, which you open yourself
builderLink
run the safety check
detectsetFrameworkscan
deploy it — its build runs any migration step it has — once you have a hosting plan
deployprojectsstatuslistDeploymentslistEnvmanageEnvironmentrenameProject
save and remove your app’s public settings — an address, a feature flag, a key meant to be public — when the agent runs on your computer, but never a hidden value, which you type yourself in Keys & settings
setPublicEnvdeletePublicEnv
create the app’s managed database, on its own or in the same call as a deploy, which Tofu runs and pays for as part of your plan
databaseCreatedatabaseStatusdatabaseReconcile
read the app’s build and runtime diagnostics
getBuildLogsgetRuntimeLogsrepairContext
restore a previous deployment
rollback
connect, verify, release or withdraw the authorization for a domain you already own
domainsdomainConnectdomainVerifydomainAuthorizedomainAuthorizationStatusdomainAuthorizationRevokedomainReleasedomainGuidance
read domain quotes and prepare a dashboard link for you to review a fresh price, agreements and payment when the agent runs on your computer — it cannot place an order or submit payment
domainShopdomainBuy
read the stored status of domains you bought through Tofu and ask the registrar to send its confirmation email again to the registrant, without seeing your owner details or changing renewal settings
domainOwneddomainVerificationResend
read and add DNS records on a domain you bought through Tofu, and delete one of yours — never its mail (MX) or verification (TXT) records, which stay with you
domainRecordsdomainRecordAdddomainRecordDelete
read your app’s own traffic — the first read for an app that has no counter yet issues its key — and turn that counter on or off
siteAnalyticssetSiteAutoInject
read whether your app is answering its visitors, and turn Tofu’s emails about it on or off
siteCheckssetSiteCheckEmails
change how your app’s users sign in and how its sign-in email is sent
appAuthStatusappAuthConfigureappAuthEmailStatusappAuthEmailConnectappAuthEmailDisconnect
see who has an account in your app, add a person by email or remove one — which signs them out — choose whether anyone can sign up or only the people you add, and make the app private — only people with a link can open it — or open to everyone again
appUsersListappUsersAddappUsersRemoveappUsersSetSignupModeappUsersSetPrivate
send a short message to up to ten of your app’s users, from your app’s own email address
appUsersSendEmail
get an invite link that lets one person into your private app — you hand the link out yourself, and the first person who opens it gets in for up to 30 days — list the links you made and turn one off again
appInvitesListappInvitesCreateappInvitesRevoke
choose who can open your app — anyone with the link, only people you list by email, or anyone with a code you share, which puts a sign-in page in front of the whole app — add or remove those people, make a new code, sign everyone out, and keep exact paths open for services like webhooks
appSharingGetappSharingSetModeappSharingAddPeopleappSharingRemovePeopleappSharingNewCodeappSharingSignOutEveryoneappSharingSetOpenPaths
connect your app to your own Stripe account when the agent runs on your computer — you install Tofu’s app on Stripe’s own page — then create payment links there, pass their payment events to the app or disconnect it, with the money going straight to you and nothing in its reach that moves money out of your account
appPaymentsStatusappPaymentsConnectappPaymentsSetupappPaymentsLinkCreateappPaymentsDisconnect
set up email your app sends from its own address, pause it, give it a new key or remove it, when the agent runs on your computer — Tofu writes the app’s sending key into its settings, and nothing is sent until the app sends email itself
appEmailStatusappEmailSetupappEmailSetSendingappEmailNewKeyappEmailRemove
connect your app to Tofu AI or disconnect it, when the agent runs on your computer — Tofu makes the app its own key, which spends your account’s AI balance up to a monthly limit you can change, and writes it into the app’s settings without the agent ever seeing it
appAiStatusappAiSetupappAiDisconnect
see your sandboxes and choose what model each one’s agent runs on — Tofu AI, which spends your account’s AI balance, or your own endpoint — and which agent its chat talks to, putting your own API key into that sandbox, when the agent runs on your computer
sandboxListsandboxModelStatussandboxSetModelsandboxSetAgent
make your sandboxes, wake them, put them to sleep or delete them — which ends everything in one for good — and run commands in them and talk to their agents, which spends each one’s model budget, when the agent runs on your computer
sandboxCreatesandboxDeletesandboxStartsandboxSleepsandboxExecsandboxChat
make a new token for your own code to call a sandbox with, when the agent runs on your computer — it stops the token made before, the connection receives it (Tofu’s own tool on your computer keeps it in a private file, never in the chat), and it keeps working after you remove the connection
sandboxNewToken
make a private test copy of one of your server apps to try a change on, put the version you tested there on the live app, or remove the copy and its database for good, when the agent runs on your computer — the copy takes test payments only
createTestCopyremoveTestCopymakeLive
restore an archived database into a new one Tofu runs and pays for as part of your plan, and hand you a short-lived link to download its archive
databaseRestoredatabaseArchiveDownload
keep a database Tofu warned you about from being archived for going unused
databaseKeep
list your database’s daily backups and ask a person at Tofu to put it back to one, which loses what was saved after it
databaseBackupsdatabaseRestoreRequest
see which of your app’s database setup steps are done, choose whether Tofu runs them for an app, and mark one as done so it never runs, when the agent runs on your computer
databaseMigrationsdatabaseMigrationsSwitchdatabaseMigrationsSkip
delete an app — which also deletes its managed database, permanently, and the delete itself keeps no copy (a copy Tofu already holds of a running database, such as the archive it was restored from, is untouched) — or just its database; the source you uploaded is kept until you ask Tofu to erase it
databaseDeleteprojectDelete
send Tofu’s team a problem report you approved word for word, with your app’s status attached
reportProblem
sign in to Tofu, read the account’s id and email address, report the plan and the account’s GitHub state, and turn automatic updates off
loginfinishLoginconnectionStatusaccounthostingStatusgithubStatusgithubSyncDisable
How to recognize a real approval
A real Tofu approval happens only at /dashboard/agent?code=, on the same Tofu address you signed in to, and only when a code arrives as XXXX-XXXX-XXXX printed by a coding agent you started yourself — or at /oauth/consent, on that same address, when an app you are connecting to Tofu sends you there and the page names where the sign-in returns. Refuse anything else. Nobody from Tofu, and no other site, needs an approval code, a password, a provider key or a token — and Tofu never asks for one.
Whichever agent you build in. Same tools, same apps.
Claude Code
Codex
Cursor
Gemini
GitHub Copilot
Windsurf
Kimi
Devin
Cline
OpenCode
Warp
Kiro
Antigravity
Qwen
DeepSeek
Trae
Claude Code, Codex, Cursor and Kimi Code each get setup steps of their own; any other agent that speaks MCP gets the same client and configuration.
Before you paste.
Which agents work, what you never have to paste, and what happens when your agent can’t load new tools.
Something else? Write to hello@trytofu.ai
Which agents work?
Any agent that speaks MCP, or that can run a command: the Tofu client it installs needs Node.js 22+. For one that is not in the list above, choose “Another agent”.
Claude Code, Codex and Cursor have been checked inside the agent itself. Kimi Code and other MCP agents get the same client and setup, not yet verified inside each one.
A chat app that adds a connector by its address, such as Claude or ChatGPT, connects to Tofu without installing anything: Use Tofu in Claude or ChatGPT.
Do I paste keys anywhere?
No. The setup message you copy carries no key or token, and you approve the connection with a matching code in your browser. Tofu writes the settings for your app’s database, sign-in and email itself.
When your app needs a secret of its own — a third-party API key, say — you type it into your app’s Keys & settings page in Tofu, in your browser, with Hide this value after saving on. Your agent sees the names, never the values.
What if my agent can’t load new tools mid-session?
Keep going in the same conversation. The client your agent installed has its own command line, and it does the same work at once — your agent runs it as a command, on the same account and apps. The Tofu tools are there the next time the agent starts.
By design.
Fix in builder from the agent. The dashboard’s Fix in builder opens the Tofu builder in your browser, so it is not reachable over the connection;
repairContextgives your agent a brief to fix it in your code instead.A per-app or read-only grant. A connection covers your apps and the operations above; it is not narrowed to one app or to reading only.
Importing a private repository from GitHub. That needs your own GitHub grant in a browser session. Your agent can read the GitHub state and turn automatic updates off.
Paste one message. Online in 10 minutes.
Your app, its database, your domain and your sign-in — from the agent you already use.