public-it

MCP server

public-it exposes an MCP (Model Context Protocol) server so AIs can create sites and publish artifacts directly, inside the conversation. Streamable HTTP transport with OAuth 2.1 or API-key authentication.

Connection

Endpointhttps://public-it.com/mcp
TransportStreamable HTTP (spec 2025-03-26+)
AuthHeader Authorization: Bearer pit_… — create the key at Dashboard → API & MCP — or OAuth 2.1 (ChatGPT/Claude.ai: automatic, no key)

Setup per tool

Claude Code / Cowork plugindocs ↗

The public-it plugin bundles the remote MCP connector and guided setup/publishing skills. After it is approved in the community directory, install it from Claude Code or Cowork and run /public-it:setup. OAuth opens in the browser; never paste an API key into chat.

# After community-directory approval /plugin install public-it@claude-plugins-community /public-it:setup # Local repository test claude --plugin-dir ./public-it-skill

Claude Desktop / claude.ai (custom connector)docs ↗

URL: https://public-it.com/mcp Authentication: OAuth 2.1 (browser)

ChatGPT plugin / Developer Modedocs ↗

After directory approval, find public-it under Plugins. For development, use Settings → Connectors → Advanced → Developer mode → Create and paste the endpoint URL above. No key is needed: ChatGPT self-registers and signs in via OAuth 2.1; you approve it once on a consent screen. Manage or revoke the connection later in Dashboard → API & MCP → Connected apps. Claude.ai's custom connector also works with just the URL (OAuth) if you skip the header.

https://public-it.com/mcp

Cursor / VS Code (mcp.json)docs ↗docs ↗

{ "mcpServers": { "public-it": { "url": "https://public-it.com/mcp", "headers": { "Authorization": "Bearer YOUR_KEY" } } } }

Gemini CLIdocs ↗

~/.gemini/settings.json

{ "mcpServers": { "public-it": { "httpUrl": "https://public-it.com/mcp", "headers": { "Authorization": "Bearer YOUR_KEY" } } } }

Windsurfdocs ↗

~/.codeium/windsurf/mcp_config.json

{ "mcpServers": { "public-it": { "serverUrl": "https://public-it.com/mcp", "headers": { "Authorization": "Bearer YOUR_KEY" } } } }

Cline (VS Code)docs ↗

cline_mcp_settings.json

{ "mcpServers": { "public-it": { "type": "streamableHttp", "url": "https://public-it.com/mcp", "headers": { "Authorization": "Bearer YOUR_KEY" } } } }

JetBrains AI Assistantdocs ↗

Settings → Tools → AI Assistant → MCP → Add

{ "mcpServers": { "public-it": { "url": "https://public-it.com/mcp", "headers": { "Authorization": "Bearer YOUR_KEY" } } } }

Zeddocs ↗

settings.json (bridge via mcp-remote)

{ "context_servers": { "public-it": { "command": { "path": "npx", "args": [ "-y", "mcp-remote", "https://public-it.com/mcp", "--header", "Authorization: Bearer YOUR_KEY" ] } } } }

OpenCodedocs ↗

opencode.json

{ "mcp": { "public-it": { "type": "remote", "url": "https://public-it.com/mcp", "enabled": true, "headers": { "Authorization": "Bearer YOUR_KEY" } } } }

Kirodocs ↗

.kiro/settings/mcp.json

{ "mcpServers": { "public-it": { "url": "https://public-it.com/mcp", "headers": { "Authorization": "Bearer YOUR_KEY" } } } }

Traedocs ↗

.trae/mcp.json

{ "mcpServers": { "public-it": { "url": "https://public-it.com/mcp", "headers": { "Authorization": "Bearer YOUR_KEY" } } } }

Replit (Agent)docs ↗

Settings → MCP Servers (UI)

+ Add MCP server → URL: https://public-it.com/mcp Advanced → Header: Authorization = Bearer YOUR_KEY

ZCode (Z.ai)docs ↗

MCP Servers page (UI) — or import your Claude Code config

{ "mcpServers": { "public-it": { "url": "https://public-it.com/mcp", "headers": { "Authorization": "Bearer YOUR_KEY" } } } }

GitHub Copilot (coding agent)docs ↗

Repo → Settings → Copilot → Coding agent → MCP

{ "mcpServers": { "public-it": { "type": "http", "url": "https://public-it.com/mcp", "headers": { "Authorization": "Bearer YOUR_KEY" } } } }

Tools like Lovable, Base44, Bolt and Bubble are app builders that expose their ownMCP servers (you connect Claude/Cursor to them) — they can't consume external MCP servers like public-it yet.

OAuth and revocation

Browser-based clients use Authorization Code + PKCE and refresh tokens. Authorization lets the app view, create, publish, roll back and delete your sites. Revoke a client at any time under Dashboard → API & MCP → Connected apps; access stops immediately.

Available tools

ToolDescriptionParameters
list_sitesList all sites of the authenticated user, with public URLs and status.—
create_siteCreate a new site. The subdomain becomes the public address. Use publish_html afterwards.
name · Human-friendly site name
subdomain · 3-63 chars, lowercase letters, numbers and hyphens
useWorkspaceSubdomain? · Optional opt-in to use the suggested site-workspace address; false by default
publish_filesPublish a multi-page site: several files (HTML/CSS/JS/SVG) with folders, up to ~5MB per call. Text by default, base64 per file for small binaries.
files · Up to 200 of { path, content, base64? } — e.g. path 'blog/post.html'
siteId? · Site id (or use subdomain)
subdomain? · Alternative to siteId
entryFile? · File served at '/' (default index.html)
publish_htmlPublish a complete HTML document as the new live version of a site. Returns the public URL. Prefer self-contained HTML (inline CSS/JS).
html · Complete HTML document
siteId? · Site id (or use subdomain)
subdomain? · Alternative to siteId
get_siteGet details of one site (status, live version, URL, storage).
siteId · Site id
list_versionsList the publication history of a site (for rollback).
siteId · Site id
rollback_siteRestore an archived version of a site (paid plans).
siteId · Site id
publicationId · Archived version id
delete_sitePermanently delete a site and its files. Confirm with the user first.
siteId · Site id
get_usageGet the user's plan, site count and storage usage.—

Typical flow

A common conversation between a user and an AI connected to public-it:

You: "Finish those last details on the presentation page and publish it on public-it" AI: … polishes the artifact (copy, spacing, colors) … → create_site(name: "Launch Deck", subdomain: "launch-deck") → publish_html(subdomain: "launch-deck", html: "<final version>") AI: "Done — details wrapped up and live at https://launch-deck.public-it.com"

Every publish_html puts a new version live — the history is available for rollback on paid plans (list_versions + rollback_site).

Errors

Without the authorization header the server responds 401. Business errors (quota exceeded, subdomain taken) come back as tool results with isError: true and a message explaining what to do:

quota_exceeded: Your Free plan allows up to 1 site(s) — upgrade to publish more.