Add htmldrop's hosted MCP server, sign in once in your browser, and ask Cursor to publish — a live shareable URL comes back. No API keys, no build step, no deploy pipeline.
claude mcp add --transport http htmldrop https://htmldrop.app/mcp
https://htmldrop.app/mcp
{
"mcpServers": {
"htmldrop": {
"url": "https://htmldrop.app/mcp"
}
}
}
https://htmldrop.app/mcp
https://htmldrop.app/mcp
Paste the URL into your client's remote-server field (Claude Desktop: Settings → Connectors → Add custom connector). Sign-in happens in your browser on first use — no key is written to any config file.
Fastest path: click ➜ Add to Cursor above — it's a deep link that opens Cursor and adds the hosted htmldrop server with one click, no config file editing required.
https://htmldrop.app/mcp. Prefer editing config by hand? Put the block above in your project's .cursor/mcp.json, or the global one at ~/.cursor/mcp.json.mcp.json, so the file is safe to commit and share with your team.htmldrop_publish and hands back the live slug.htmldrop.app URL.If Cursor doesn't pick the server up right away, reload the window (Cmd+Shift+P → "Reload Window").
Open Cursor's chat and try any of these:
Cursor starts the sign-in on the first tool call, not when you add the server — so ask it to publish something and watch for the new browser tab. If none appears, check whether a pop-up blocker caught it, then try again.
The stored session has gone stale. Remove the htmldrop server in Cursor's MCP settings, add it again with the same https://htmldrop.app/mcp URL, and let the sign-in run fresh.
After editing .cursor/mcp.json, fully reload the window — Cursor caches the MCP tool list. Open Cursor's MCP settings panel to confirm htmldrop shows as connected.
You've hit your plan's site cap (3 active drops on Free). Delete a drop in the dashboard or upgrade.
In Cursor chat: "List my htmldrop sites." If the tool is wired up, Cursor calls htmldrop_list and replies with your drops.
A headless job can't complete a browser sign-in, so CI pipelines, cron scripts, and anything else running unattended use the stdio package with an API token instead. This is the one path where a static credential exists — everything above is OAuth.
HTMLDROP_API_TOKEN="<your token — from dashboard, store in a secret manager>" \
npx -y @htmldrop.app/mcp
Create the token at htmldrop.app/dashboard/settings → API tokens; it's shown once. Inject it from your CI's encrypted secrets or your OS keychain — never commit the literal value, since the token carries full access to your account. You can revoke it from that same page the moment one may have leaked.
If a run fails with a "no API token" error, the variable didn't reach the process: confirm your secret store exports HTMLDROP_API_TOKEN, and that the value is the token string itself rather than the friendly name you gave it in the dashboard.