Blog · 2026-05-14

Ship a backend from Claude Code

Install the DenkOps plugin, approve one login in the browser, then deploy, read logs and roll back by typing a sentence in Claude Code.

You can ship a backend without leaving Claude Code. Install the DenkOps plugin, say "log in to DenkOps" and approve it once in the browser, then say "deploy on DenkOps": Claude packs, builds and ships the current project and hands you back a live URL and an API key, in the conversation. There is no CLI to learn, no API key to generate first, and no dashboard you have to visit before your first deploy.

That works because DenkOps is not a tool Claude shells out to. It is an MCP server that Claude Code talks to directly, so deploying, reading logs and rolling back are all tool calls Claude can make on your behalf.

How do I install the plugin?

Two slash commands inside Claude Code:

/plugin marketplace add DenkOpsAI/denkops-mcp
/plugin install denkops

That adds the DenkOps marketplace and installs the plugin. From this point Claude Code knows the DenkOps tools exist; it just cannot use them on your behalf until you log in.

What does logging in look like?

Say "log in to DenkOps". A browser tab opens, you click Approve, and you are done. This is a one-time browser approval, not a token you paste in: Claude Code stores the resulting scoped credential itself, and you can revoke it any time from the dashboard's Connect page. You never see, copy or manage an auth token, which also means there is no token sitting in a dotfile waiting to leak.

What happens when I say "deploy on DenkOps"?

From your project directory, that sentence is the whole deploy. Claude packs the project, builds it, ships it, and replies with the live URL and an API key for the app. The full exchange looks like this:

# 1. install the plugin
/plugin marketplace add DenkOpsAI/denkops-mcp
/plugin install denkops

# 2. one-time login
> log in to DenkOps        # browser opens, click Approve

# 3. ship it
> deploy on DenkOps
-> live at https://my-agent.denkops.host

If the project is an MCP server built with the SDK, the same flow applies: see deploying your first MCP server for what that project looks like inside.

What about everything after the first deploy?

The same session keeps working. Say "read the logs" and Claude fetches them. Say "status" to check on the app, or "rollback" to go back a version; each phrase maps to a matching MCP tool that Claude calls for you. When you have changed code and want it live, "deploy on DenkOps" again is the redeploy. Every deploy after setup is a sentence, and you only switch to a browser tab when something genuinely needs a human decision.

This is the shortest path for backends that agents build: the same assistant that wrote the code ships it and watches it run, in one conversation. The Deploy from Claude Code page has the condensed version, and Deploy an MCP server covers what the app runs on once it is live.

FAQ

How do I deploy from Claude Code without leaving the editor?

Add the DenkOps marketplace and install the plugin (`/plugin marketplace add DenkOpsAI/denkops-mcp`, then `/plugin install denkops`), say "log in to DenkOps" and click Approve in the browser tab that opens once, then say "deploy on DenkOps". Claude packs, builds and ships the current project and hands you back a live URL.

Do I need to copy an API token to connect Claude Code to DenkOps?

No. The login step is a one-time browser approval, not a token you paste in. Claude Code stores the resulting scoped credential itself, and you can revoke it any time from the dashboard's Connect page.

Can I manage the app from chat after deploying?

Yes. The same session keeps working after the deploy: say "read the logs", "rollback" or "status" and Claude calls the matching MCP tool. Saying "deploy on DenkOps" again ships your latest changes. There is no context switch to a browser unless something needs a human decision.

Ship it yourself: bunx denkops deploy or say "deploy on DenkOps" from your coding agent.

Start on DenkOps →

← Typed MCP tools with Zod · MCP needs a process, not a lambda →