Upfling.host

Instant static website hosting

Documentation

MCP SETUP

Connect AI tools

Give Claude or ChatGPT a live Upfling deploy. Describe the site; the assistant publishes it. Coding tools like Claude Code, Cursor, Windsurf, and VS Code connect the same way.

Server

URL
https://mcp.upfling.host/mcp
Auth
Sign in with your Upfling account, or an API key

One endpoint for every client. Signing in through the client uses OAuth, so no secret ever touches a config file. An API key works anywhere you can set a header.

Deploying from a pipeline instead? You can call the REST API from CI with the same key.

1

Step 1

Connect your client

Start with Claude or ChatGPT: paste one URL, sign in, and you're connected. Nothing to install. The coding tools further down take a short config snippet instead.

Claude and Claude Desktop

Open Settings, then Connectors, then Add custom connector. Name it Upfling, paste the URL below, and sign in when Claude asks. Nothing else to fill in: Claude registers itself and Upfling issues the token.

Upfling is also listed in Claude's connector directory, which does the same setup without the URL. See what the connector does.

https://mcp.upfling.host/mcp

ChatGPT

Open Settings, then Connectors, then Create. Paste the URL below and sign in when ChatGPT asks. In a normal chat and in Deep Research, ChatGPT can read your sites: it searches them and fetches a page or a file. To publish and edit from ChatGPT, turn on Developer Mode under Settings, then Connectors; it asks before every write.

https://mcp.upfling.host/mcp

Coding tools

For people who work in a terminal or an editor. Signing in is still the default; the key form follows where the tool supports headers. Each one is configured with a JSON file. If a client will not start after you paste the block, check that the JSON parses before you look anywhere else.

Claude Code

One command adds the server; then type /mcp inside Claude Code, pick upfling, and sign in. If you'd rather not sign in, pass a key as a header, or commit the JSON as .mcp.json and keep the key in an UPFLING_API_KEY environment variable.

Terminal

claude mcp add --transport http upfling https://mcp.upfling.host/mcp

Terminal

claude mcp add --transport http upfling https://mcp.upfling.host/mcp \
  --header "Authorization: Bearer upf_YOUR_KEY_HERE"

.mcp.json

{
  "mcpServers": {
    "upfling": {
      "type": "http",
      "url": "https://mcp.upfling.host/mcp",
      "headers": {
        "Authorization": "Bearer ${UPFLING_API_KEY}"
      }
    }
  }
}

Cursor

Save as .cursor/mcp.json in your project, or ~/.cursor/mcp.json to use it everywhere. Cursor prompts you to sign in; add the headers block instead if you'd rather use a key.

.cursor/mcp.json

{
  "mcpServers": {
    "upfling": {
      "url": "https://mcp.upfling.host/mcp"
    }
  }
}

.cursor/mcp.json

{
  "mcpServers": {
    "upfling": {
      "url": "https://mcp.upfling.host/mcp",
      "headers": {
        "Authorization": "Bearer upf_YOUR_KEY_HERE"
      }
    }
  }
}

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json and put your API key in place of upf_YOUR_KEY_HERE; Windsurf's sign-in support isn't verified, so this one uses the key form. Windsurf calls the field serverUrl, not url.

~/.codeium/windsurf/mcp_config.json

{
  "mcpServers": {
    "upfling": {
      "serverUrl": "https://mcp.upfling.host/mcp",
      "headers": {
        "Authorization": "Bearer upf_YOUR_KEY_HERE"
      }
    }
  }
}

VS Code (Copilot)

Save as .vscode/mcp.json. VS Code prompts you to sign in. The second form uses an inputs block so VS Code asks for the key once and keeps it in its own secret store, and nothing lands in git.

.vscode/mcp.json

{
  "servers": {
    "upfling": {
      "type": "http",
      "url": "https://mcp.upfling.host/mcp"
    }
  }
}

.vscode/mcp.json

{
  "inputs": [
    {
      "type": "promptString",
      "id": "upfling-api-key",
      "description": "Upfling API key",
      "password": true
    }
  ],
  "servers": {
    "upfling": {
      "type": "http",
      "url": "https://mcp.upfling.host/mcp",
      "headers": {
        "Authorization": "Bearer ${input:upfling-api-key}"
      }
    }
  }
}

Other clients

Any client that speaks Streamable HTTP works with the URL at the top of this page, signing in through OAuth or sending an API key header. Clients that can do neither can go through mcp-remote.

Terminal

npx -y mcp-remote https://mcp.upfling.host/mcp \
  --header "Authorization: Bearer upf_YOUR_KEY_HERE"

2

Step 2

Or use an API key

For CI, scripts, or a client that can't open a browser. Create a key on the API keys page and copy it; you only see it once. Wherever a snippet shows the placeholder below, paste your key.

Open API keys →

upf_YOUR_KEY_HERE

3

Step 3

Try a prompt

Once the client lists the Upfling tools, ask for something concrete.

  • Deploy this HTML as a live site called portfolio.
  • List my Upfling sites and tell me which ones are still pending.
  • Fix the typo in index.html on my-portfolio and redeploy.
  • How much storage am I using, and how many sites can I still create?

What the assistant can do

Fifteen tools. The assistant picks them itself, so you never type a tool name, but knowing what exists helps you ask for the right thing.

Sites

list_sites
Every site on the account, with URL and status.
get_site
Details for one site: URL, status, and when it last changed.
create_site
Publish a new site from inline text files.
update_site
Rename a site, change its subdomain, set a password or homepage.
delete_site
Move a site to trash, or delete it for good.

Files

write_site_files
Add or overwrite specific files. Everything else stays.
replace_site_files
Swap the whole file set. Files not in the call are removed.
read_site_file
Read one file back, inline or as a short-lived link.
list_site_files
List the files on a site with size and type.
delete_site_files
Remove one file. The site stays live.

Large files

request_upload
Reserve upload URLs for binary files or anything over 1 MB.
confirm_upload
Publish an uploaded batch once every file is in place.

Search

search
Find your sites and files by name, title, description, domain, or path. ChatGPT starts here.
fetch
Read one search result: a site summary with its file list, or a file's content.

Account

get_account_info
Plan, site count, storage used, and what is left.

Limits and notes

  • Inline files: up to 200 files per call, 1 MB per file, text only (HTML, CSS, JS, SVG, JSON).
  • Images, fonts, PDFs, and anything over 1 MB go through request_upload and confirm_upload: the assistant asks for presigned upload URLs, uploads the bytes to them itself, then confirms the batch.
  • Plan limits apply exactly as in the dashboard: 2 sites and 25 MB on Free, more on paid plans.
  • Rate limits are shared with the REST API: 60 requests a minute on Free, 300 on Lite and Pro, 600 on Business.
  • Signing in grants the client sites:read and sites:write for your account only. API keys are the same upf_ keys the REST API uses; revoke one on the API keys page and every client using it stops within seconds.

If something fails

The sign-in page never opens
The client couldn't reach the server or is an older build without OAuth support. Check the URL ends in /mcp, update the client, or use the API key form for now.
401 Unauthorized
The sign-in expired or the key is wrong, revoked, or missing its upf_ prefix. Sign in again, or create a new key on the API keys page and update the config.
insufficient_scope on a write
You approved read access only. Remove the server from the client and add it again, then approve both scopes on the consent screen.
429 Too Many Requests
You hit the per-minute limit for your plan. Wait for the Retry-After header to pass, or move to a plan with a higher limit.
The assistant says it has no Upfling tools
Restart the client after editing its config. Most clients read MCP settings only on startup.

API keys are the same ones the REST API.

{"@context":"https://schema.org","@type":"Organization","@id":"https://upfling.host/#organization","name":"Upfling","legalName":"Upfling","url":"https://upfling.host/","logo":"https://upfling.host/logo512.png","contactPoint":[{"@type":"ContactPoint","contactType":"customer support","email":"support@upfling.host"}],"sameAs":["https://x.com/upflinghost"]}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://upfling.host/"},{"@type":"ListItem","position":2,"name":"MCP Setup","item":"https://upfling.host/docs/mcp"}]}