Skip to content

io.github.Reachpad/reachpad-mcp

by Reachpad · remote · local (npm) · no sign-in to list tools · v0.4.2 · published by GitHub user Reachpad

Coding agents build full-stack apps in persistent workspaces and share them by link.

Deletes · 5Final · 3Changes · 5

25 tools: 5 can delete or cancel things, 3 do something that can't be undone, 5 change things and 12 only read.

Scanned Oct 21, 2026

No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http reachpad https://reachpad.dev/mcp

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

25 tools

Deletes or cancels 5Claude Code: deny
  • remove_secretRemove one organization secret and delete it from every published version that binds it.No findings

    Why it is in this group

    • The name "remove_secret" says "remove": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Remove one organization secret and delete it from every published version that binds it. A version the deletion did not reach keeps the name in the list with that version in failed, and running this again retries exactly those.

    Annotations the server declares

    • title: Remove a secret
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
  • revoke_app_shareRemove one share by its id, from list_app_shares.No findings

    Why it is in this group

    • The name "revoke_app_share" says "revoke": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Remove one share by its id, from list_app_shares. The app itself is untouched. The owner or an editor may use this when editor-managed sharing is enabled.

    Annotations the server declares

    • title: Remove a share
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
  • rmdirDelete an empty folder.No findings

    Why it is in this group

    • The description's first verb is "delete": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Delete an empty folder. This refuses while the folder still holds apps or subfolders, and it never deletes an app. Move the contents out first.

    Annotations the server declares

    • title: Delete an empty folder
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
  • set_secretSet one organization secret, so a function can bind it by name in its manifest secrets list.No findings

    Why it is in this group

    • The name "set_secret" says "set": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Set one organization secret, so a function can bind it by name in its manifest secrets list. Any member of the organization. Setting a name that already exists replaces the value and rotates it onto every published version that binds it. Answers the name, how many versions took the new value, and the ids of any that did not.

    Annotations the server declares

    • title: Set a secret
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
  • trash_appMove an app to the trash.No findings

    Why it is in this group

    • The description's first verb is "move": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Move an app to the trash. Its link stops opening at once. Owner only. The app and its versions are kept and can be restored from Trash at reachpad.dev/apps/trash, which is also the only place an app is deleted for good.

    Annotations the server declares

    • title: Move an app to the trash
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
Can't be undone 3Claude Code: ask
  • create_appPublish new files as an app and get its URL back.No findings

    Why it is in this group

    • The name "create_app" says "create": a word for a change.
    • The description's first verb is "publish": a word for a change that another call does not undo.
    Description, as the server wrote it
    Publish new files as an app and get its URL back. Version 1 goes live at once, so show the person the content and the destination before calling this. Access defaults to org_link, which lets anyone signed in to the same organization open the link.

    Annotations the server declares

    • title: Publish a new app
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
  • publish_app_versionMake one version of an app live by its number.No findings

    Why it is in this group

    • The name "publish_app_version" says "publish": a word for a change that another call does not undo.
    Description, as the server wrote it
    Make one version of an app live by its number. This is how a version staged with publish false goes on the link, and how an app is rolled back: name an older number and that version is what the link serves again. Nothing is rebuilt, the pointer moves.

    Annotations the server declares

    • title: Make a version live
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
  • update_appPublish a new version of an existing app.No findings

    Why it is in this group

    • The name "update_app" says "update": a word for a change.
    • The description's first verb is "publish": a word for a change that another call does not undo.
    Description, as the server wrote it
    Publish a new version of an existing app. Read the app first and pass the base_version_id read_app returns: it names the version this edit builds on, and a base that has moved is refused rather than overwritten. By default the new version replaces the whole file set and goes live immediately unless the app is set to review before publishing. Send mode merge to publish only the files that changed and keep the rest of that version's files, with remove for paths to drop. Two merges in a row build on each other, staged versions included. Send validate true to check the call without publishing, or publish false to stage the version and make it live later with publish_app_version.

    Annotations the server declares

    • title: Publish a new version
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
Changes things 5Claude Code: ask
  • mkdirCreate a folder, at the top level or inside another one.No findings

    Why it is in this group

    • The description's first verb is "create": a word for a change.
    Description, as the server wrote it
    Create a folder, at the top level or inside another one.

    Annotations the server declares

    • title: Create a folder
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
  • mvMove an app into a folder, or move a folder under another folder.No findings

    Why it is in this group

    • The description's first verb is "move": a word for a change.
    Description, as the server wrote it
    Move an app into a folder, or move a folder under another folder. Name exactly one of app_id or folder_id as the thing being moved, and to_folder_id as the destination, or null for the top level. Moving a folder also needs base_updated_at, the value read from ls or tree, so a move made against a stale reading is refused instead of undoing someone else's.

    Annotations the server declares

    • title: Move an app or folder
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
  • query_app_dbRun one SQL statement against a function app's own database, to read rows and to fix data.No findings

    Why it is in this group

    • The name "query_app_db" says "query": a word for reading.
    • The description's first verb is "run": a word for a change.
    • The input takes a statement or command to run (input.sql), which can change anything it can reach.
    Description, as the server wrote it
    Run one SQL statement against a function app's own database, to read rows and to fix data. Not for schema: a table or a column belongs in the version's migrations/NNNN_name.sql, and a statement that changes the schema is refused. Owners and editors only. Answers rows and rowCount for a select, and changes with lastInsertRowid for a write.

    Annotations the server declares

    • title: Run one SQL statement
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
  • set_app_accessChange who can open an app: restricted (only the owner and named people), org_link (anyone signed in to the organization), or public_link (anyone with the URL).No findings

    Why it is in this group

    • The name "set_app_access" says "set": a word for a change.
    Description, as the server wrote it
    Change who can open an app: restricted (only the owner and named people), org_link (anyone signed in to the organization), or public_link (anyone with the URL). A password and an expiry apply to a public link only. Owner only.

    Annotations the server declares

    • title: Set who can open an app
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
  • share_appGive one email address access to an app as a viewer or an editor.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Give one email address access to an app as a viewer or an editor. An address without an account gets a grant that starts working the first time they sign in. The owner or an editor may use this when the owner has enabled editor-managed sharing.

    Annotations the server declares

    • title: Share an app
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
Only reads 12Claude Code: allow
  • get_app_logsRead recent log lines from the live version of a function app.No findings

    Why it is in this group

    • The name "get_app_logs" says "get": a word for reading.
    Description, as the server wrote it
    Read recent log lines from the live version of a function app. An app that serves files has no process and answers that it has no logs. Function logs are not captured yet either, and the answer says so: until they are, have the function catch its own errors and return them in the response.

    Annotations the server declares

    • title: Read app logs
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • list_app_sharesList the people an app is shared with, their roles, and whether the grant has attached to an account yet.No findings

    Why it is in this group

    • The name "list_app_shares" says "list": a word for reading.
    Description, as the server wrote it
    List the people an app is shared with, their roles, and whether the grant has attached to an account yet. The owner and editors can read this list.

    Annotations the server declares

    • title: List shares
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • list_app_versionsList an app's versions, newest first.No findings

    Why it is in this group

    • The name "list_app_versions" says "list": a word for reading.
    Description, as the server wrote it
    List an app's versions, newest first. Versions are immutable and numbered from 1. Earlier versions open for the app's editors; the live link follows the app's access setting. Pass the next_cursor from a previous call to get the next page.

    Annotations the server declares

    • title: List versions
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • list_secretsList the organization's secrets: each name, who set it, when, and the apps whose versions bind it.No findings

    Why it is in this group

    • The name "list_secrets" says "list": a word for reading.
    Description, as the server wrote it
    List the organization's secrets: each name, who set it, when, and the apps whose versions bind it. Names only. No tool anywhere returns a secret value.

    Annotations the server declares

    • title: List secrets
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • lsList what is directly inside one folder: its subfolders and the apps filed in it.No findings

    Why it is in this group

    • The description's first verb is "list": a word for reading.
    Description, as the server wrote it
    List what is directly inside one folder: its subfolders and the apps filed in it. Omit folder_id for the top level. Each folder carries the updated_at that mv needs.

    Annotations the server declares

    • title: List a folder
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • read_appRead one app before update_app: its name, type, access level and publishing mode, plus base_version_id and its files, which both describe the version the next edit builds on.No findings

    Why it is in this group

    • The name "read_app" says "read": a word for reading.
    Description, as the server wrote it
    Read one app before update_app: its name, type, access level and publishing mode, plus base_version_id and its files, which both describe the version the next edit builds on. Each text file carries its content, so this is how you see what an app already contains before changing it. A file marked content_omitted answer budget did not fit in this answer and read_app_file fetches it; one marked too large is past what any tool answer carries. Pass that base_version_id to update_app. version is what the link serves now, and head_version is the version base_version_id names on the apps where that is not the live one, which is every app with a version staged by publish false. pending_version is the number of that staged version, and publish_app_version is what makes it live.

    Annotations the server declares

    • title: Read an app
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • read_app_fileRead one file out of an app as text, at most 256 KB.No findings

    Why it is in this group

    • The name "read_app_file" says "read": a word for reading.
    Description, as the server wrote it
    Read one file out of an app as text, at most 256 KB. Use it for a file that read_app left out with content_omitted: "answer budget", or to fetch a single file without the rest of the app. A file that is not text, and a text file over that size, are refused rather than truncated. Reads the newest version unless you name one, which is the same version read_app lists.

    Annotations the server declares

    • title: Read one file
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • read_app_previewLook at the picture of what an app's link serves right now, as an image.No findings

    Why it is in this group

    • The name "read_app_preview" says "read": a word for reading.
    Description, as the server wrote it
    Look at the picture of what an app's link serves right now, as an image. Use it for an app whose files you cannot read: a function app's module stays with the people who develop it, so this is how you see what the app actually shows. It is the live version only, and an app published before its picture was taken, or one whose capture has not run yet, answers that there is no picture rather than an error.

    Annotations the server declares

    • title: See an app
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • read_app_versionRead one version by its number, with its files and each text file's content.No findings

    Why it is in this group

    • The name "read_app_version" says "read": a word for reading.
    Description, as the server wrote it
    Read one version by its number, with its files and each text file's content. Use it to see what an earlier publish contained, and to copy a file back out of a version you want to return to. Earlier versions open for the app's editors; the live link follows the app's access setting.

    Annotations the server declares

    • title: Read a version
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • search_appsFind apps in the caller's organization by text.No findings

    Why it is in this group

    • The name "search_apps" says "search": a word for reading.
    Description, as the server wrote it
    Find apps in the caller's organization by text. This matches substrings of the name and the slug, and whole words on the live version's page, not meaning: search for a word that appears in the title or on the page rather than describing the app. Returns ids and live URLs.

    Annotations the server declares

    • title: Search apps
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • treeThe whole folder tree for the organization, nested, with the number of apps filed in each folder and the count sitting at the top level.No findings

    Why it is in this group

    • The name "tree" says "tree": a word for reading.
    Description, as the server wrote it
    The whole folder tree for the organization, nested, with the number of apps filed in each folder and the count sitting at the top level. Each node carries the updated_at that mv needs.

    Annotations the server declares

    • title: Read the folder tree
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • whoamiReport the account and the organization this connection is signed in as: user id, email and name, plus org id and name, and `orgs`, every organization the account is in with the cu…No findings

    Why it is in this group

    • The name "whoami" says "whoami": a word for reading.
    Description, as the server wrote it
    Report the account and the organization this connection is signed in as: user id, email and name, plus org id and name, and `orgs`, every organization the account is in with the current one marked. Takes no arguments. Every app is created in the current organization and nowhere else, so call this before publishing when the person named an organization to publish into, and stop if the org id is not the one they named: switching is done at reachpad.dev/apps, from the organization name at the top of the sidebar, and this connection follows it.

    Annotations the server declares

    • title: Who am I
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 0.4.2. Values in angle brackets are yours to fill in.

claude mcp add --transport http reachpad https://reachpad.dev/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__reachpad__whoami",
      "mcp__reachpad__search_apps",
      "mcp__reachpad__read_app",
      "mcp__reachpad__read_app_preview",
      "mcp__reachpad__list_app_versions",
      "mcp__reachpad__read_app_version",
      "mcp__reachpad__read_app_file",
      "mcp__reachpad__list_secrets",
      "mcp__reachpad__list_app_shares",
      "mcp__reachpad__ls",
      "mcp__reachpad__tree",
      "mcp__reachpad__get_app_logs"
    ],
    "ask": [
      "mcp__reachpad__query_app_db",
      "mcp__reachpad__create_app",
      "mcp__reachpad__update_app",
      "mcp__reachpad__publish_app_version",
      "mcp__reachpad__set_app_access",
      "mcp__reachpad__share_app",
      "mcp__reachpad__mkdir",
      "mcp__reachpad__mv"
    ],
    "deny": [
      "mcp__reachpad__set_secret",
      "mcp__reachpad__remove_secret",
      "mcp__reachpad__trash_app",
      "mcp__reachpad__revoke_app_share",
      "mcp__reachpad__rmdir"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as reachpad. Review it before you use it.