Puter MCP Server

Hosted MCP endpoint for a Puter account: cloud files, static sites, workers, apps and key-value data

Official · Puter JavaScript Remote (hosted) · Streamable HTTP Cloud platformsFiles and storage

64 popularity score ★ 44k

Connect your client

Remote (hosted)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude Codeterminal; then /mcp in Claude Code to sign in
claude mcp add --transport http --scope user puter https://mcp.puter.com/
Codexterminal
codex mcp add puter --url https://mcp.puter.com/
Cursor~/.cursor/mcp.json or .cursor/mcp.json; sign in via Settings → MCP
{
"mcpServers": {
"puter": {
"url": "https://mcp.puter.com/"
}
}
}
opencodeopencode.json or ~/.config/opencode/opencode.json
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"puter": {
"type": "remote",
"url": "https://mcp.puter.com/",
"enabled": true
}
}
}

What it does

Puter is a browser-based cloud desktop with its own storage, web hosting and serverless functions. This server, run by Puter at https://mcp.puter.com/, gives an assistant 42 tools that act on the signed-in user's Puter account. Each tool calls the matching Puter.js SDK method as that user; the server keeps no credentials of its own and holds no session state.

The tools cover six areas: reading, writing, copying, moving and deleting files in Puter cloud storage (with a presigned-URL upload path so large or binary files go straight to storage instead of through the conversation); publishing static websites at <subdomain>.puter.site from a folder; deploying, calling and removing serverless JavaScript workers; registering and editing Puter apps; a per-user or per-app key-value store; and fetching Puter.js documentation pages so generated code matches the current SDK. A whoami tool returns the username and home directory, which the other tools need because paths must sit under /<username> or start with ~.

The code is the src/mcp-connector folder of the Puter monorepo, a Cloudflare Worker. Anyone can deploy their own copy with wrangler and point it at a self-hosted Puter instance through the puter_endpoint and puter_gui_origin variables, which default to api.puter.com and puter.com. The connector README notes that kv flush is deliberately left out so an assistant cannot wipe a whole store in one call, and that hosting_delete removes the subdomain but keeps the files.

What it needs

A Puter account (puter.com or a self-hosted Puter instance). An MCP client that speaks Streamable HTTP and can complete an OAuth sign-in; in Claude Code run /mcp after adding it to sign in. Clients without OAuth can send a Puter auth token as an Authorization: Bearer header instead. Running your own copy needs Node, npm and a Cloudflare account with wrangler, plus a built puter.js (cd src/puter-js && npm run build) and an OAUTH_SECRET secret for the OAuth flow.

Limits

Uploads bigger than the storage service's single-PUT ceiling are refused: multipart upload is not implemented, and fs_start_upload reports that case. fs_start_upload needs the exact byte size and the same Content-Type on the PUT. Paths at the bare root (/portfolio/index.html) are invalid; they must be under the user's home folder. Workers have no update tool: new code is written to the worker's file. The KV tools have no flush. It reaches only Puter; Puter.js features such as AI calls, email and networking are not exposed as tools.

Who it suits

Suits people who already keep files, sites or small apps on Puter and want an assistant to publish a folder as a website, deploy a worker or edit stored data without leaving the editor. It is the official server and needs no install, only a Puter sign-in. Since most tools write or delete in the account, it is less fitting for read-only use. Those who want their data to stay off Puter's hosted endpoint can deploy the same connector to their own Cloudflare account and point it at a self-hosted Puter.

Tools 42

whoami
Returns the signed-in user's name, id and home folder
fs_read_file
Reads a file as text or base64, optionally a byte range
fs_stat
Shows size, type and timestamps of a file or folder
fs_write_file
Creates or replaces a file from content passed in the call
fs_start_upload
Issues a presigned URL and command for uploading a local file directly
fs_complete_upload
Finishes a started upload and creates the file
fs_abort_upload
Cancels a started upload without creating a file
fs_mkdir
Creates a folder, with missing parents if asked
fs_delete
Deletes a file or folder
fs_readdir
Lists what a folder contains
fs_copy
Copies a file or folder to another path
fs_move
Moves a file or folder, which can also rename it
fs_rename
Renames a file or folder where it is
hosting_list
Lists the user's published websites
hosting_get
Shows one website by subdomain and the folder it serves
hosting_create
Publishes a folder as a site on a puter.site subdomain
hosting_update
Points a website at a different folder
hosting_delete
Takes a site offline, keeping its files
workers_create
Deploys a JavaScript file as a serverless worker with a public URL
workers_list
Lists the user's workers
workers_get
Shows a worker's URL and source file
workers_exec
Sends an HTTP request to a worker as the signed-in user
workers_delete
Removes a deployed worker
apps_list
Lists apps the user owns, with usage totals
apps_get
Shows one app, with usage figures for a chosen period
apps_create
Registers a Puter app from a name and a launch URL
apps_update
Changes the given fields of an app or renames it
apps_delete
Unregisters an app, leaving its site or worker in place
apps_check_name
Tells whether an app name is still free
kv_get
Reads a key; a missing key gives null
kv_set
Writes a key, with an optional expiry time
kv_del
Deletes a key
kv_list
Lists keys or key-value pairs matching a pattern, page by page
kv_incr
Raises a number, or numbers at given dot paths
kv_decr
Lowers a number, or numbers at given dot paths
kv_add
Adds to a stored value: sums numbers, appends to arrays
kv_update
Sets chosen dot paths inside a stored object
kv_remove
Removes dot paths from a stored object
kv_expire
Makes a key expire after a number of seconds
kv_expire_at
Makes a key expire at a given timestamp
puter_docs_index
Loads the list of Puter.js documentation topics
puter_docs_get
Fetches one Puter.js docs page as Markdown

Similar servers