Connecting Claude or ChatGPT to reachpad
Reachpad runs a hosted MCP server. Connect a chat or a coding agent to it once, and it can publish apps to your account and read the ones you can already see.
The endpoint
The endpoint is https://reachpad.dev/mcp. Streamable HTTP, POST only. Authorization is OAuth 2.1 with dynamic client registration, so there is no client id, no secret and no callback to copy anywhere: the client registers itself and you approve it on a consent screen. A client that wants the mechanics can read auth.md.
Connecting a chat
- In Claude or ChatGPT, open Customize, then Connectors.
- Add a custom connector and paste
https://reachpad.dev/mcp. - Sign in to reachpad on the consent screen and choose your organization. The chat gets the access you have, and no more.
- Start a new chat, turn reachpad on, and ask it to publish something small.
ChatGPT adds a custom connector only from a Business or Enterprise workspace with developer mode turned on, and only on the web. That is ChatGPT's rule, and nothing on the reachpad side changes it.
The app appears in your list with a link the moment the chat publishes it. Connect Claude or ChatGPT has the same four steps beside a copy button.
Connecting a coding agent
A coding agent that speaks MCP takes the same URL. These three were run against the hosted endpoint rather than read off their config syntax.
$ claude mcp add --transport http --scope user reachpad https://reachpad.dev/mcp$ claude mcp login reachpad$ codex mcp add reachpad --url https://reachpad.dev/mcp$ codex mcp login reachpad$ opencode mcp add reachpad --url https://reachpad.dev/mcp$ opencode mcp auth reachpad
Codex starts the sign-in as part of adding the server. Claude Code and OpenCode store the server first and need the login command after it. Restart the client, then ask it to list your apps.
What a connected client can call
| Tool | What it does |
|---|---|
whoami | The account and organization this connection is signed in as. Takes no arguments, and every app it creates lands in that organization. |
search_apps | Match text against the name and the slug of apps in your organization. |
read_app | One app: its access level, its live version and that version's id, and its files with each text file's content, up to 256 KB a file and 1 MB an answer. |
read_app_file | One file's text, for a file read_app left out for its size. Up to 256 KB. |
read_app_preview | A picture of what the app's link serves right now. Use it for a function app, whose module stays with the people who develop it. |
create_app | Publish new files as an app and get the link back. |
update_app | Publish a new version, against the base_version_id that read_app returned. mode: "merge" sends only the changed files, validate: true checks the call without publishing, publish: false stages it. |
publish_app_version | Make a version live by its number: a staged one, or an older one to roll back to. |
list_app_versions, read_app_version | The version history, and one version's contents. |
set_app_access | Restricted, organization link or public link, with a password or an expiry on a public one. |
share_app, list_app_shares, revoke_app_share | Invite one email address as a viewer or an editor, read the list, remove one. |
ls, tree, mkdir, mv, rmdir | Folders. rmdir refuses a folder that still holds anything, and never deletes an app. |
trash_app | Move an app to the trash, which stops its link. Owner only, and restoring or deleting it for good is done in Trash. |
query_app_db | One SQL statement against a function app's database, for reading rows and fixing data. Owners and editors only, and schema changes are refused: those go in the version's migrations. |
list_secrets, set_secret, remove_secret | The organization's secrets by name. A value is sealed on write and no tool returns it. |
get_app_logs | Recent log lines from a server app. An app that serves files has none and says so, and function logs are not captured yet. |
Listing the tools takes no credential, so a client can describe reachpad before you have signed in. Calling one takes a token, and every call is made as you: a connector can reach the apps you can reach and no others.
This page as raw markdown, for an agent or a prompt: /docs/mcp.md