Puter
Puter MCP enables AI tools to interact with Puter: manage files, websites, workers, and more
Connector by puter.comOfficial · Domain verified by the MCP Registry
Install
Works with Claude Code, VS Code, Cursor, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install connector/puter-com-mcp-server
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Remote endpoint
https://mcp.puter.com/Remote (HTTP)
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: file-management, cloud-management
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.
- Tools
- 14 read · 20 write · 6 delete · 6 not yet classified
- Secrets
- None asked for
- Install scripts
- Nothing to install (hosted)
- Runs as
- Hosted (remote endpoint)
Tools by what they do 46
Read from the source code; the running server may list different tools.
Read 14 · Look things up without changing anything.
apps_check_nameapps_getapps_listfs_read_filefs_readdirfs_stathosting_gethosting_listkv_getkv_listputer_docs_getwhoami
Show 2 more tools
workers_getworkers_list
Write 20 · Create, change, send or run things.
apps_createapps_updatefs_abort_uploadfs_complete_uploadfs_mkdirfs_movefs_renamefs_start_uploadfs_write_filehosting_createhosting_updatekv_add
Show 8 more tools
kv_decrkv_expirekv_expire_atkv_incrkv_setkv_updateworkers_createworkers_exec
Delete 6 · Delete, drop, revoke or wipe things.
apps_deletefs_deletehosting_deletekv_delkv_removeworkers_delete
Not yet classified 6 · We could not tell from the name and description.
fibofs_copyphotonputer_docs_indexsanasdxl
Network hosts it talks to 1
mcp.puter.com· found in remote endpoint, install command
Files it touches
- Any path the agent passes to its tools
Tools (46)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
apps_check_nameCheck whether a Puter app name is available (not already taken) before creating an app with it. Equivalent to PuterJS puter.apps.checkName(name).
apps_createRegister a new Puter app so it appears in the user's app list and can be launched in Puter. You MUST provide a unique name and an index_url (the URL Puter loads when the app runs). The index_url is typically a static site you published with hosting_create (https://<subdomain>.puter.site) or a serverless worker URL, but can be any allowed https URL. Typical flow: fs_write_file the app files -> hosting_create to publish them -> apps_create with index_url set to the resulting URL. Equivalent to PuterJS puter.apps.create(spec).
apps_deleteDelete a Puter app by name, removing it from the user's app list. This unregisters the app but does NOT delete the website/worker its index_url points to. Equivalent to PuterJS puter.apps.delete(name).
apps_getGet a single Puter app the user owns / can edit, by its app name, including its title, uid, index_url, icon, and usage stats. Pass stats_period for detailed open/user counts over a specific window. Equivalent to PuterJS puter.apps.get(name).
apps_listList the Puter apps the authenticated user owns / can edit. Each entry includes the app name, title, uid, index_url (the URL the app loads), icon, filetype associations, and aggregate usage stats (open_count, user_count). Use this to discover existing apps before creating or updating one. Equivalent to PuterJS puter.apps.list().
apps_updateUpdate an existing Puter app, found by its current name. Only the fields you pass are changed; omitted fields keep their current values. Pass new_name to rename the app. Equivalent to PuterJS puter.apps.update(name, spec).
fibofs_abort_uploadDiscard an upload started with fs_start_upload without creating a file. Use this when the PUT failed or you changed your mind, so the pending upload does not linger.
fs_complete_uploadFinalize an upload started with fs_start_upload, after the bytes have been PUT to the presigned URL. This is what actually creates the file in Puter — skip it and the upload is discarded. Returns the created file entry.
fs_copyCopy a file or directory in Puter to another location. If destination is an existing directory the item is copied into it under the same name; pass new_name to copy it under a different name. On a name conflict the copy is auto-renamed ("file (1).txt") unless you pass overwrite=true. Equivalent to PuterJS puter.fs.copy(source, destination).
fs_deleteDelete a file or directory in Puter. Directories are removed recursively by default. Equivalent to PuterJS puter.fs.delete(path).
fs_mkdirCreate a directory in Puter (optionally creating missing parents). Equivalent to PuterJS puter.fs.mkdir(path).
fs_moveMove a file or directory in Puter to another location. If destination is an existing directory the item is moved into it under the same name; otherwise destination is treated as the item's new full path (so this also renames). The destination directory must already exist unless you pass create_missing_parents. Equivalent to PuterJS puter.fs.move(source, destination).
fs_read_fileRead the contents of a file in Puter. Returns UTF-8 text by default; pass encoding="base64" for binary files. Pass offset/length to get back only that byte window — useful for sampling a large file instead of pulling all of it. When a window is returned, _meta reports total_bytes so you can page through the rest. Equivalent to PuterJS puter.fs.read(path).
fs_readdirList the entries (files and subdirectories) of a directory in Puter. Equivalent to PuterJS puter.fs.readdir(path).
Show 31 more tools
fs_renameRename a file or directory in Puter in place, keeping it in the same parent directory. To move an item to a different directory use fs_move instead. Equivalent to PuterJS puter.fs.rename(path, new_name).
fs_start_uploadBegin an out-of-band file upload and get back a presigned URL to PUT the bytes to. PREFER THIS OVER fs_write_file for any file you already have on disk, and for anything large or binary: the bytes go straight from your machine to storage instead of being base64-encoded through this conversation. Three steps: (1) call this with the destination path and the file's exact byte size, (2) run the returned `upload_command` in a shell, (3) call fs_complete_upload with the returned upload_id — the file does not exist in Puter until you do. Get the exact size with `wc -c < file` and pass it verbatim; a …
fs_statGet metadata (name, size, type, timestamps, uid) for a file or directory in Puter. Equivalent to PuterJS puter.fs.stat(path).
fs_write_fileWrite (create or overwrite) a file in Puter from content you supply inline. Provide content as UTF-8 text, or set encoding="base64" to write binary data. Best for text you are generating anyway; for a file that already exists on disk — especially a large or binary one — use fs_start_upload instead, which moves the bytes out of band. Equivalent to PuterJS puter.fs.write(path, data).
hosting_createPublish a new static website by creating a hosting subdomain. The site goes live at https://<subdomain>.puter.site. Point it at a Puter directory (root_dir) to serve that directory's files (e.g. an index.html) as a website; omit root_dir to reserve the subdomain and attach a directory later with hosting_update. Typical flow: fs_mkdir a directory, fs_write_file your index.html into it, then hosting_create with that root_dir. Equivalent to PuterJS puter.hosting.create(subdomain, root_dir).
hosting_deleteUnpublish a website by deleting its hosting subdomain. This takes https://<subdomain>.puter.site offline but does NOT delete the underlying Puter directory or its files. Equivalent to PuterJS puter.hosting.delete(subdomain).
hosting_getGet a single published website (hosting subdomain) by its subdomain label, including the Puter directory it serves from. The live site is reachable at https://<subdomain>.puter.site. Equivalent to PuterJS puter.hosting.get(subdomain).
hosting_listList all websites (hosting subdomains) the authenticated Puter user has published. Each entry includes the subdomain (served at https://<subdomain>.puter.site) and the Puter directory it is hosted from. Use this to discover existing sites before creating or updating one. Equivalent to PuterJS puter.hosting.list().
hosting_updateRe-point an existing website (hosting subdomain) at a different Puter directory, changing which files https://<subdomain>.puter.site serves. Use this to attach content to a bare subdomain or to swap the served directory. Equivalent to PuterJS puter.hosting.update(subdomain, root_dir).
kv_addAdd to the value already stored at a key and return the updated value — numbers are summed and arrays are appended to. Pass a plain value to add to the value itself, or an object mapping dot paths to the values to add at each path. To add an object as a value rather than as a path map, use kv_update. Equivalent to PuterJS puter.kv.add(key, value).
kv_decrDecrement a numeric value in the Puter key-value store and return the new value. A key that does not exist starts at 0. Pass a number to decrement the value itself, or an object mapping dot paths to amounts. Equivalent to PuterJS puter.kv.decr(key, amount).
kv_delDelete a key from the Puter key-value store. Succeeds whether or not the key existed. Equivalent to PuterJS puter.kv.del(key).
kv_expireSet how long a key lives, in seconds from now, after which it is removed. Equivalent to PuterJS puter.kv.expire(key, ttlSeconds).
kv_expire_atSet the exact time a key is removed, as a Unix timestamp in seconds. Equivalent to PuterJS puter.kv.expireAt(key, timestampSeconds).
kv_getRead a key from the authenticated user's Puter key-value store. Returns { key, value }, where value is null when the key is not in the store — a stored null reads the same way, so use kv_list when you need to tell those apart. Equivalent to PuterJS puter.kv.get(key).
kv_incrIncrement a numeric value in the Puter key-value store and return the new value. A key that does not exist starts at 0. Pass a number to increment the value itself, or an object mapping dot paths to amounts to bump fields inside a stored object. Equivalent to PuterJS puter.kv.incr(key, amount).
kv_listList keys in the Puter key-value store, sorted by key. Returns keys only unless return_values is true. Every page is metered and a full listing reads the whole store, so narrow it with pattern and/or limit rather than listing everything. Equivalent to PuterJS puter.kv.list(options).
kv_removeRemove one or more fields from the object stored at a key by dot path, returning the updated value. To delete the key itself use kv_del. Equivalent to PuterJS puter.kv.remove(key, ...paths).
kv_setCreate or overwrite a key in the Puter key-value store. The value is stored as JSON (string, number, boolean, null, object, or array; max 400 KB). Pass expire_at to have the key removed at a given time. Equivalent to PuterJS puter.kv.set(key, value).
kv_updateUpdate fields inside the object stored at a key without overwriting the whole value, returning the updated value. Equivalent to PuterJS puter.kv.update(key, pathAndValueMap).
photonputer_docs_getFetch a specific Puter / puter.js documentation page as Markdown by the topic path listed in puter_docs_index. Examples: "Workers/router" (the Worker router guide + canonical examples — read this before writing a worker), "Workers/create", "AI/chat", "KV/set", "FS/write", "Hosting/create". Use it to read the exact API and copy working examples before writing worker or puter.js code.
puter_docs_indexLoad the index of Puter / puter.js documentation (from docs.puter.com/llms.txt): a list of every topic and its doc path, spanning the whole puter.js SDK — Workers (serverless functions), Hosting, FS, KV, AI (500+ models), Auth, and more. Call this FIRST to discover which doc to read, then fetch the page with puter_docs_get. Puter Workers and the tools in this server are designed to be used WITH puter.js and Puter authentication, so consult these docs before writing any worker or SDK code.
sanasdxlwhoamiGet the authenticated Puter user's account info — including username, uuid, and the home_directory (/<username>) that ALL filesystem paths must live under. Call this first to learn your username so you can build valid absolute paths (e.g. "/<username>/portfolio/index.html") instead of invalid bare root paths. Equivalent to PuterJS puter.auth.getUser().
workers_createDeploy a serverless Puter Worker from a JavaScript file in the Puter filesystem and return its public URL. The worker file MUST define handlers on the global `router` object (router.get/router.post/router.put/router.delete) and may use the global puter.js SDK (`puter`) for storage, KV, AI, and more — authenticated as you, the deployer. Puter Workers are designed to be used WITH puter.js and Puter authentication, so BEFORE writing worker code load the router guide and examples via puter_docs_get with path "Workers/router". Typical flow: fs_write_file the worker code to a path (e.g. "~/workers/a…
workers_deleteDelete (undeploy) a Puter Worker by name, stopping its execution and releasing its URL. Does NOT delete the worker's source file in the filesystem. Equivalent to PuterJS puter.workers.delete(worker_name).
workers_execCall a deployed Puter Worker over HTTP as the authenticated user, automatically attaching the Puter auth header so the worker can act on the caller's resources via `user.puter`. Use this to invoke or test a worker endpoint. Equivalent to PuterJS puter.workers.exec(url, options).
workers_getGet a single deployed Worker by name, including its public URL and the source file path it serves (write new code to that file with fs_write_file to update it). Equivalent to PuterJS puter.workers.get(worker_name).
workers_listList all serverless Workers deployed by the authenticated Puter user, including each worker's name, public URL, and the source file it is deployed from (write to that file to update the worker). Equivalent to PuterJS puter.workers.list().
Compare and alternatives
Featured in
Signals
- Stars
- 43,874
- Forks
- 4,111
- Open issues
- 17
- Contributors
- 431
- Last commit
- Oct 24, 2026 (3 days ago)
- Last release
- Oct 5, 2026 (23 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- Registry name
com.puter/mcp-server- Version
- 1.0.1
- Auth
- Auth not stated
- License
- AGPL-3.0
- Repository
- github.com/HeyPuter/puter
- Website
- puter.com
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
Cite this page
Puter MCP server. Agent Mart. https://agentmart.dev/connectors/puter-com-mcp-server (last updated 2026-10-24)