Connect your LLM to Just Publish.
Just Publish exposes one MCP (Model Context Protocol) tool: deploy.
Any MCP-capable LLM — Claude Desktop, Cursor, ChatGPT — can publish a folder of
static files to a live URL with a single call. No git, no CLI, no build, no login.
Quick start
Add the MCP endpoint to your client, then ask the model to publish your files.
Edit claude_desktop_config.json (Settings → Developer → Edit Config), add the server, and restart Claude.
{
"mcpServers": {
"just-publish": {
"url": "https://mcp.justpublish.ai/"
}
}
}
Cursor → Settings → MCP → Add new server. Paste the JSON below or enter the URL directly.
{
"mcpServers": {
"just-publish": {
"url": "https://mcp.justpublish.ai/"
}
}
}
Add a custom connector. Available on plans that support remote MCP servers (currently Team / Enterprise / Pro tiers).
Server URL: https://mcp.justpublish.ai/
Authentication: None
Once connected, ask the model something like: "Publish this HTML to Just Publish and give me the URL." The model calls deploy, returns the URL plus a site_id and edit_token for future updates.
Tool reference — deploy
Publishes a static site. First call (no site_id) creates a new site and returns its credentials. Later calls with the same site_id + edit_token update the site in place.
Parameters
| Name | Type | Req. | Description |
|---|---|---|---|
| files | Array<File> | required | Files to publish. Each item: { path, content, encoding? }. Must include an index.html at the root. On update, the array fully replaces the prior site — paths you omit are removed. |
| string | required | Captured unverified at first deploy. Verification only happens later, for custom domains or recovery. A 6-digit code is emailed for dashboard access. | |
| site_id | string | optional | Existing site id to update. Omit to create a new site. |
| edit_token | string | optional | Edit token returned at create time. Required iff site_id is given. |
File object
| Name | Type | Req. | Description |
|---|---|---|---|
| path | string | required | Path under the site root, e.g. index.html, assets/logo.png. No leading /, no .., no backslashes, no null bytes. |
| content | string | required | File body. Text by default; binary must be base64. |
| encoding | "utf-8" | "base64" | optional | Defaults to utf-8 for text extensions, base64 otherwise. |
Response (success)
{
"url": "https://xK3p9wnA2b.just-web-hosting.com/",
"site_id": "xK3p9wnA2b",
"edit_token": "...", // only on create
"created": true, // false on update
"files_uploaded": 4,
"total_bytes": 12842
}
Errors
Errors come back as a tool-call result with isError: true and a human-readable message — not as a JSON-RPC error. The model surfaces the message to the user.
JSON-RPC examples
Create a new site
POST https://mcp.justpublish.ai/
Accept: application/json, text/event-stream
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "deploy",
"arguments": {
"email": "you@example.com",
"files": [
{ "path": "index.html", "content": "<h1>hello world</h1>" }
]
}
}
}
Update an existing site
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "deploy",
"arguments": {
"email": "you@example.com",
"site_id": "xK3p9wnA2b",
"edit_token": "the token you saved at create time",
"files": [
{ "path": "index.html", "content": "<h1>hello v2</h1>" }
]
}
}
}
Constraints
index.htmlat the root of the file map is required. A site without it is rejected at deploy.- Max site size: 50 MB. Max single file: 5 MB. Max 500 files per site.
- Path rules: no
.., no leading/, no backslash, no null bytes. The deploy is rejected at validation time, not silently truncated. - Per-IP rate limits on both site creation and deploys per rolling hour.
- Static files only. No server-side execution, no build step, no environment-variable injection.
- Sites with no traffic for an extended period may be archived (TTL policy).
Edit token & persistence
The edit_token is the only credential needed to update a site over MCP. It's returned once, at create time, and never again — the server stores only a hash. Store it alongside the site_id in your LLM's conversation context, in a saved note, or wherever your client keeps state across sessions.
Losing the token orphans the site from MCP updates. Recovery: sign in at /login with the email you used at deploy time. The dashboard lists your sites and uses session-authenticated HTTP endpoints (not the edit_token) to update or delete them.
Developer FAQ
How do I update a site I deployed?
Call deploy again with the same site_id and edit_token you got from the first deploy. The files array replaces the previous deploy in place — paths not included are removed.
I lost my edit_token — what now?
The token cannot be recovered (we only store its hash). Sign in to the dashboard with the email you used at deploy time. You'll see the site listed and can update or delete it via the session-authenticated HTTP API, which doesn't require the edit_token.
Can I host a Next.js, SvelteKit, or SPA build?
Yes if the framework produces a fully static export — Next.js export, Astro, Eleventy, Hugo, Vite static builds, SvelteKit static adapter, or a SPA with client-side routing. Deploy the build output, not the source. No if the framework requires a Node runtime for SSR or API routes — there is no server-side execution.
Is there a CLI?
No standalone CLI. The MCP server is the deploy interface — your LLM client (Claude Desktop, Cursor, ChatGPT) is the CLI. If you want to deploy from a script without an LLM, send a JSON-RPC tools/call POST to https://mcp.justpublish.ai/ directly.
How is content moderated and rate-limited?
Per-IP rate limits cap site creation and deploys per rolling hour. Each deploy is scanned for known phishing signatures. Cloudflare WAF handles broader bot and abuse mitigation upstream. Repeated abuse can lead to slug bans.