HaveTML
Publish AI-generated HTML as hosted, shareable pages. Connect Claude, ChatGPT or Cursor to upload artifacts, organise folders and projects, and collect comments on shared links.
Hosted MCP Server
npx add-mcp 'https://havetml.com/mcp/mcpservers'Installs into Claude Code, Codex, Cursor and more
Documentation
Publish HTML, Markdown, YAML and JSON artifacts as permanent, commentable share links. Connect HaveTML over MCP and your assistant can publish what it built, hand you the share link, and read the comments that come back.
The MCP server is free for everyone. 60 tools — 21 of them read-only — over Streamable HTTP at https://havetml.com/api/mcp.
01
What your assistant can do
- Publish the HTML, Markdown, YAML or JSON your assistant just wrote, and get a link you can send to anyone.
- Re-publish the same artifact and it becomes a new version behind the same link, with the old ones still readable.
- Read the comments people pinned on the rendered page, and the JSON state they changed by using it.
- Group work into projects, lay it out on a canvas, and record the decisions made about it.
02
Install it in your tool
Each config below is complete except for the token. Create an account and the connect wizard hands you the same block with a live token already in it — or paste a token from Dashboard → API access over havetml_your_token_here.
Claude connector
Name: HaveTML
Remote MCP server URL: https://havetml.com/api/mcp
OAuth Client ID: (leave blank)
OAuth Client Secret: (leave blank)
Claude → Customize → Connectors → Add custom connector. Paste the URL, leave OAuth Client ID/Secret blank, then approve access on HaveTML.
Claude Code
claude mcp add --transport http havetml https://havetml.com/api/mcp \
--header "Authorization: Bearer havetml_your_token_here"
Run in any terminal, then type /mcp in Claude Code to confirm it connected.
Codex
# ~/.codex/config.toml
[mcp_servers.havetml]
url = "https://havetml.com/api/mcp"
bearer_token_env_var = "HAVETML_TOKEN"
# then, in your shell profile:
export HAVETML_TOKEN="havetml_your_token_here"
Add to ~/.codex/config.toml. ChatGPT desktop, Codex CLI, and the Codex IDE extension share this config.
Cursor
{
"mcpServers": {
"havetml": {
"url": "https://havetml.com/api/mcp",
"headers": {
"Authorization": "Bearer havetml_your_token_here"
}
}
}
}
Global: ~/.cursor/mcp.json — or.cursor/mcp.json inside a project.
Windsurf
{
"mcpServers": {
"havetml": {
"serverUrl": "https://havetml.com/api/mcp",
"headers": {
"Authorization": "Bearer havetml_your_token_here"
}
}
}
}
Add to ~/.codeium/windsurf/mcp_config.json, or paste it under Settings → Cascade → Manage MCPs → View raw config. Remote servers need serverUrl, not url; hit Refresh afterwards.
Claude Desktop
{
"mcpServers": {
"havetml": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://havetml.com/api/mcp",
"--header",
"Authorization:${AUTH_HEADER}"
],
"env": {
"AUTH_HEADER": "Bearer havetml_your_token_here"
}
}
}
}
Use Desktop app → Developer → Edit Config, not Customize → Connectors. This uses mcp-remote as a local bridge; restart Claude Desktop after saving.
Other MCP clients
{
"mcpServers": {
"havetml": {
"url": "https://havetml.com/api/mcp",
"headers": {
"Authorization": "Bearer havetml_your_token_here"
}
}
}
}
Use this for tools that support Streamable HTTP remote servers. For stdio-only clients, use the Claude Desktop bridge pattern.
03
How it signs in
Claude connectors
Sign in, no token
Paste the server URL into Claude’s Add custom connector form and leave both OAuth fields empty. Claude discovers HaveTML’s authorization server on its own and sends you here to approve access. Deny it and Claude simply gets no tools.
Everything else
A bearer token
Claude Code, Cursor, Codex, Windsurf and Claude Desktop read a config file. They send Authorization: Bearer havetml_… with every call. Tokens are per-account, named, and revocable from the dashboard.
04
The 60 tools
21 read, 27 write, 12 that remove or replace something. Every one of them is annotated, so a client can tell them apart before it calls one.
upload_artifact write
Upload HTML, Markdown, YAML or JSON and get a permanent share link; re-uploading versions it.
list_artifacts read
List your artifacts, optionally scoped to one project.
set_artifact_visibility write
Move an existing artifact between private, circle, unlisted and public.
create_encrypted_artifact write
Store an envelope encrypted on your own machine, so HaveTML holds only ciphertext.
create_project write
Create a project — a shareable folder of artifacts with its own page.
list_projects read
List your projects with their slugs, names and artifact counts.
set_project_default_visibility write
Choose what new artifacts filed into a project inherit; moves nothing already in it.
add_comment write
Add a comment to an artifact, optionally pinned to a spot or threaded.
list_comments read
List every comment on an artifact, including threaded replies.
invite_collaborator write
Invite someone by email to view or edit one artifact.
list_collaborators read
List the people with access to an artifact.
revoke_collaborator destructive
Revoke a collaborator's access to an artifact.
invite_project_member write
Invite someone by email to a project; editors inherit edit access to its artifacts.
list_project_members read
List the people with access to a project.
revoke_project_member destructive
Revoke a member's access to a project.
create_canvas write
Create a canvas: a board of cards, stickies and the connections between them.
get_canvas read
Read a canvas board: its nodes, edges, notes and comment threads.
update_canvas destructive
Rename a board, rewrite its notes, or replace the nodes and edges on it.
add_canvas_node write
Add one node to a canvas without touching what is already on it.
add_canvas_edge write
Draw an edge between two nodes already on a canvas.
list_events read
Poll for JSON-state updates and new comments on your artifacts.
register_webhook write
Register an HTTPS endpoint to receive signed artifact, comment and decision events.
list_webhooks read
List your webhooks with their scope, events and last delivery status.
delete_webhook destructive
Stop delivering to a webhook and drop its pending deliveries.
create_decision write
Open a decision on an artifact: a question that needs resolving.
list_decisions read
List the decisions on an artifact, with their assignees.
get_decision read
Read one decision by id, with its full detail and assignees.
assign_decision write
Record who should decide an open decision, by user id or email.
revoke_assignment destructive
Remove an assignee from a decision; the decision stays open.
decide_decision write
Set a decision's outcome and rationale, locking the record permanently.
supersede_decision destructive
Replace a decided decision with a new one; the original stays readable and locked.
update_decision write
Change an open decision's title or context.
delete_decision destructive
Delete a decision that has not been decided yet.
list_templates read
Browse ready-to-copy templates: working artifacts with their state and starter prompt.
get_template read
Read one template's starter prompt, demo state and demo link before building from it.
use_template write
Copy a template's demo into your account as a private artifact you can edit.
set_artifact_custom_slug write
Give a public artifact a readable /f/ path, or release one, without renaming it.
add_relation write
Draw a typed link between two artifacts, such as supersedes or depends on.
list_relations read
List the typed links between your artifacts, for one artifact or one project.
remove_relation destructive
Delete one artifact relation by id; neither artifact is touched.
get_artifact_content read
Read an artifact's source for the current version or an earlier one.
update_artifact_json destructive
Change an artifact's live JSON state without a new version; replace mode drops keys.
list_media read
List the images, fonts and stylesheets stored with an artifact, and media quota used.
remove_media destructive
Delete one stored media file from an artifact and free its quota.
list_notes read
Read the notes written beside an artifact.
add_note write
Append a note to an artifact's notes, keeping what is already there.
update_notes destructive
Replace an artifact's notes with new markdown, discarding what was there.
propose_canvas_layout read
Work out a tidier layout for a board and return it without moving anything.
create_folder write
Create a folder inside a project to group artifacts; visibility is unchanged.
list_folders read
List every folder in a project with its path and artifact count.
move_artifact write
Move an artifact into a folder or back to the project root.
rename_folder write
Rename a folder; artifact URLs are unaffected.
move_folder write
Move a folder, with its contents, under another folder or to the top level.
delete_folder destructive
Delete a folder; its artifacts and subfolders move up one level.
get_project read
Read a project's name, description, counts and pinned design system.
set_project_design_system write
Pin an artifact as a project's design system, or unpin it.
propose_folder_organise read
Work out a folder structure for a project and return it for approval; writes nothing.
apply_folder_organise write
Apply an approved folder proposal; refuses if the project changed since.
undo_folder_organise write
Reverse an applied folder organise using the undo plan from its reply.
Parameters and full descriptions are in the MCP README, and in server-card.json if you would rather read it as JSON.
05
Limits, and what stays private
- Private by default. A new artifact opens for you and the people you invite, and for nobody else — the link alone does nothing. Your assistant has to be asked before it makes one link-readable.
- 50 MB per artifact on HaveTML, but this MCP endpoint runs on Vercel, which rejects request bodies over 4.5 MB. Anything bigger goes up from the dashboard.
- Encrypted files stay encrypted. A remote tool cannot do zero-knowledge encryption, so the encrypted path encrypts on your machine and sends HaveTML only ciphertext. It holds no key.
- Free for everyone. MCP is not a paid feature and nothing here consults billing.
06
Read the detail
- Full MCP README — Every tool, its read or write label, and the connect config for each client.
- server-card.json — The machine-readable card: endpoint, transport, auth and tool list.
- HaveTML docs — The REST API, tokens and the Chrome extension alongside MCP.
Get your token
Create an account and you land back here, on a wizard that mints the token, fills in the config for the tool you picked, and tests the connection.