You've probably had this moment: you ask Claude Code or Cursor to build a landing page, it writes clean HTML, CSS, and a bit of JS, and then... it stops. It hands you a folder.
Now you open a browser. You log into a hosting dashboard. You create a project, connect a repo, wait for a build, and paste a URL back to the client.
The agent did the work. You did the deployment. That's a weird division of labour, and it's the part that hasn't been automated yet, not because deploying is hard, but because almost every host assumes a human with a browser session, an OAuth token, and a credit card on file.
This post walks through closing that gap: giving your agent a hosting surface it can drive end to end. I'll use Novence because it's built for exactly this, but the general shape applies to any host that exposes an MCP server.
Disclosure: I build Novence. I've tried to keep the "here's when this is the wrong tool" section honest, skip to it if you want the caveats first.
What we're building
By the end you'll be able to type this into Claude Code:
Build a 3-page static site for a coffee roaster called Fern & Ash then deploy it and give me the live URL.
And get back a working https://something.novence.ai/ URL. No dashboard, no git push, no build config.
The pieces
Three things make this work:
- Self-service account creation over HTTP. One POST gets an API key. There's no signup form the agent has to fill in.
- MCP tools for the deploy loop. Create project → get upload URLs → deploy → read check results. Your agent calls these like any other tool.
- Quality gates before promotion. Lighthouse, axe, and link checks run on every deploy. Fail them and the deploy never reaches the live URL.
That third one matters more than it sounds. Agents generate broken markup constantly. Images without alt, links to pages they meant to create and didn't, contrast ratios that fail on the accent colour they picked. If the checks return structured issues, the agent can read them and fix them. Without gates, "deployed" and "actually works" drift apart fast.
Step 1: Bootstrap a key.
Give your agent your email address, and tell it to connect to novence.ai, (or copy the prompt from the homepage).
Or you can run your own command:
curl -s -X POST https://api.novence.ai/v1/bootstrap \
-H 'content-type: application/json' \
-d '{"email":"you@example.com"}'
Response:
{ "apiKey": "nv_live_…", "emailVerificationRequired": true }
The key works immediately. A one-time code lands in your inbox, verify it to unlock the full free tier and billing:
curl -s -X POST https://api.novence.ai/v1/auth/verify-email \
-H 'content-type: application/json' \
-d '{"email":"you@example.com","code":"123456"}'
Lost the key later? Resend the OTP and hit POST /v1/auth/reissue-key.
Step 2: Wire up MCP
The server speaks streamable HTTP at https://api.novence.ai/mcp.
Claude Code:
claude mcp add --transport http novence https://api.novence.ai/mcp \
--header "Authorization: Bearer nv_…"
Cursor - add to ~/.cursor/mcp.json:
{
"mcpServers": {
"novence": {
"url": "https://api.novence.ai/mcp",
"headers": {
"Authorization": "Bearer nv_live_…"
}
}
}
}
Restart the client and you should see four tools available: create_project, get_upload_url, deploy, and get_checks_results.
Step 3: Ask for a site
That's genuinely it. Now you can prompt:
Build a 3-page site for a coffee roaster called Fern & Ash. Homepage, services page, and a contact section. Then deploy it to Novence and give me the live URL.
What happens under the hood:
| Tool | What it does |
|---|---|
create_project |
Opens a project with a unique suffix, returns a project ID |
get_upload_url |
Returns presigned URLs; agent pushes HTML/CSS/JS, then confirms |
deploy |
Validates index.html, snapshots the files, queues the check worker |
get_checks_results |
Returns structured Lighthouse / axe / link issues |
Pass the checks and the deploy promotes to https://{suffix}.novence.ai/.
Fail them and you get something the agent can act on:
{
"status": "failed",
"issues": [
{ "type": "axe", "rule": "image-alt", "selector": "img.hero", "impact": "critical" },
{ "type": "link", "href": "/about", "status": 404 }
]
}
In practice this turns into a nice self-correcting loop: the agent reads the failures, patches the markup, redeploys. You watch. The first deploy of a generated site fails these checks more often than not, which is the point.
Prefer code to prompts?
There's an SDK if you'd rather drive it from a script or a CI step:
import { Novence, bootstrapAccount, verifyEmail } from "@novence/sdk";
const { apiKey } = await bootstrapAccount("you@example.com");
await verifyEmail("you@example.com", process.env.VERIFY_CODE!);
const client = new Novence({ apiKey });
const { project, url } = await client.projects.create({ name: "fern-and-ash" });
await client.files.uploadDir(project.id, "./site");
await client.deployments.create(project.id);
console.log(url); // https://{suffix}.novence.ai/
Same control plane behind REST, GraphQL, MCP, and the SDK - pick whichever fits the context you are calling from.
Custom domains
Preview URLs are fine internally, but clients want their own domain. Point www at Novence with a CNAME, then redirect the apex at your registrar:
| Type | Host | Value |
|---|---|---|
| CNAME | www |
fallback.novence.ai |
| URL redirect | @ |
https://www.example.com/ |
The www-first approach keeps SSL simple. Apex CNAMEs are technically non-standard and every host works around them differently; a registrar-level redirect avoids the whole category of problem.
The part nobody automates: paying
Here's the bit I find genuinely interesting about agent-driven infra.
If an agent can create an account and deploy but can't pay, you've still got a human botttleneck, it just moved to the billing page. So there are two paths:
Tell your AI assistant to open up the dashboard (console-kit).
You then get access to the dashboard (Unique - you have to try it.) select 'manage billing' tab.
or
# Human with a card
curl -s -X POST https://api.novence.ai/v1/billing/checkout \
-H "authorization: Bearer $KEY" -H 'content-type: application/json' \
-d '{"plan":"pro"}'
# → Stripe Checkout URL
# Agent, via Machine Payments Protocol
curl -i -X POST https://api.novence.ai/v1/billing/mpp \
-H "authorization: Bearer $KEY" -H 'content-type: application/json' \
-d '{"plan":"pro"}'
# → 402, then settle with a Payment credential
Same subscription either way. The MPP path means an agent operating on a budget can provision its own hosting without a human in the loop at all. Whether you want that is a separate question, but the plumbing exists now, and I suspect a lot of infra will grow this shape over the next year.
When this is the wrong tool
Being straight with you, because the comments section will be anyway:
- Static only. HTML, CSS, JS. No server-side rendering, no API routes, no edge functions. Marketing sites, landing pages, docs, portfolios. If you need Next.js SSR, this isn't it.
- Netlify, Vercel, Cloudflare Pages and GitHub Pages all have generous free tiers, and some have MCP servers now. If you're happy with a git-push workflow and don't mind creating projects by hand, they're excellent and you should use them.
- The real differences are that there's no human signup step, no git dependency, and checks gate promotion rather than reporting after the fact. If none of those three are pain points for you, stick with what you've got.
The free tier is one project, 20 deploys a month, and one custom domain, enough to try the loop end to end. Pro is $29/mo for 20 projects and 10 domains, which is the tier that makes sense once you're running client work.
Try it
Fastest possible test - one command, no reading:
point your agent at the machine-readable brief and let it figure the rest out:
- Agent brief:
https://novence.ai/llms-full.txt - OpenAPI spec:
https://novence.ai/openapi.yaml - Docs: novence.ai/docs
If you try it and the deploy loop breaks in an interesting way, I'd rather hear about it than not, drop it in the comments.
Top comments (0)