Birta
← Back to blog

· Max Krou, Founder Birta

How to Deploy a Website with Claude Code (No GitHub)

Use this step-by-step guide to deploy a static website from Claude Code to a live URL without GitHub. Build, publish, add a domain, and update it safely.

How to Deploy a Website with Claude Code (No GitHub)

The short answer

Build the site, connect Birta as a remote MCP server, authorize it with /mcp, then ask Claude Code to publish the built files. A static website reaches a live URL without a GitHub handoff or a second hosting dashboard.

  1. Step 1BuildCreate index.html
  2. Step 2ConnectAuthorize the Birta MCP
  3. Step 3DeployPublish and check the URL

Before you deploy: is it a static site?

Claude Code is a coding agent, not a host, and the tool does not decide the hosting model. The output does. A landing page, portfolio, documentation site or client-side calculator is static. An application with authentication, a database, server routes, background jobs or private API keys needs application hosting; the simple-site-versus-application rule has the full test. A page built in a Claude conversation is a different case again: a Claude artifact is not a website. A folder of notes and images with no index.html needs the agent to build the pages first.

Ask Claude Code to classify the project before it changes anything:

Inspect this project without changing it. Tell me whether it can run entirely as a static site after a production build. Check for server routes, a database, background jobs, authentication logic, and private server-side environment variables. Also list any local video or PDF the built site needs. End with either "Ready for the Birta static publish workflow" or a clear explanation of what blocks it.

Step 1: Build the static site

Birta receives finished browser files, not the dev server or the repository. Run the production build and find the folder it writes into (dist, build, out). That folder needs index.html at its root, with CSS, JavaScript, images and fonts beside it under their relative paths. The folder's name means nothing to Birta: files are addressed from the site root. If the site does not exist yet, start from a website prompt.

Prepare this project for a Birta deployment. First inspect the existing package scripts and framework configuration. Run the correct production build without changing frameworks. Tell me which folder the build writes into and make sure it has index.html at its root. Check that asset and internal-link paths will work from a hosted URL, not only the local dev server. Do not publish yet. Report the build command, the files in the build folder, and any static-hosting blocker.

A working dev server is not proof that the production bundle exists. Check the folder.

Step 2: Connect Birta to Claude Code

Add the connector as a remote HTTP MCP server, project-only or for every project:

claude mcp add --transport http birta https://birta.dev/mcp
claude mcp add --transport http --scope user birta https://birta.dev/mcp

Start claude, run /mcp, choose birta, select Authenticate. OAuth opens in a browser; sign in with the emailed one-time code. There is no key to paste anywhere. Verify with claude mcp list. Birta's Claude Code guide is the current command reference; Anthropic's MCP documentation covers remote HTTP and OAuth.

Step 3: Publish the Claude Code website

Create a project in the dashboard if needed, then:

Use the connected Birta tools to list my projects. Ask me to choose if there is more than one plausible project. Re-check that the build folder has index.html at its root. Publish the built files to the chosen project, images and fonts included, with the version description "Initial website publish", addressing every path from the site root: index.html at the root, nested CSS or JavaScript under the same relative paths as in the build folder. Do not send the build folder name as part of the paths. Return the live URL, version number, preview URL, and every warning exactly as Birta reports them.

Birta validates the package before touching the live site: a missing entry point rejects the files and leaves the current version unchanged. Success returns a public URL, a version number and a preview. Every later publish is a new version at the same address.

Check the live site before sharing it

In a private window, without your local files or sessions:

  1. Hard-refresh the home page and every internal route, desktop and mobile.
  2. Click navigation, buttons, mail links, external links.
  3. Confirm CSS, JavaScript, images and fonts load without 404s; check the console and network panel.
  4. Make sure no private key appears in the built files.

A missing image or font is almost always a path or filename-case problem. A missing video or PDF is expected.

Add a custom domain

Share the standard project address immediately, or connect a domain in the project dashboard: enter example.com or www.example.com, add the DNS record shown (A for a root domain, CNAME for a subdomain; with Cloudflare, DNS only), click Verify. The custom-domain guide has the steps and what each DNS record does, and why Verify fails has the part that goes wrong.

Update, stage, or roll back

Edit in the same folder, build again, publish to the same project with a description of what changed. For a one-file fix, the connected agent can update a live site without redeploying it.

To stage first: a draft version has its own preview URL, and the live address keeps serving the last published version until you publish the draft.

Create a new draft version of my Birta project from the live version, write the rebuilt files into it, and return the draft's preview URL. Do not publish until I say so.

Every version is kept, so a bad release is undone by rollback, not by rebuilding:

List the versions of my Birta project, including which one is live. Do not roll back until you show me the choices. After I choose a version, roll back to it and return the live URL and restored version number.

Where the official documentation stops

Anthropic's Claude Code documentation covers the agent and its connections, not hosting. Deployment is documented by the host. Two questions it leaves open:

Credentials. The /mcp sign-in is OAuth, so nothing is stored in the repository. The only credential that matters is the one you must not ship: anything in the built JavaScript is public, so a site that needs a private key in the browser is not static.

Internal audience. Set the project to restricted access: only the owner and the people it is shared with can open its versions, signed in. That limits who can open the site, not which network it is on.

GitHub, Vercel, Netlify and Cloudflare Pages are not required for this path. They fit when you want source history, pull requests or repository-based continuous deployment; on why the repository path became the default answer, see I just want to push index.html.

Common problems

  • Missing entry point. No index.html at the site root: publish the files from inside the build folder, without the folder name in front of the paths.
  • Dev server works, build fails. Local development hid a server-only route or a broken production import. Ask Claude Code to fix the build; if it still needs a runtime, use application hosting.
  • Images or fonts missing. Path or filename case.
  • Claude cannot see the Birta tools. claude mcp list; if birta is disconnected, /mcp and authenticate again; check the scope includes this project.
  • Wrong project. Stop before publishing, list_projects, pass the exact project address, not the name.

Deploy your site from Claude Code with Birta

One claude mcp add, one /mcp sign-in, and the same agent that built the site publishes it to a stable URL, keeps every version, and rolls back on request. Or skip the setup and describe the site in Birta's chat.

Connect Claude Code to Birta

Frequently asked questions