A connector for Claude and ChatGPT

Apps inside your chat

Ask your chat for an app. It builds it right there, on your own accounts. Then it keeps it, so you can open it again tomorrow.

Add it as a custom connector. That is the whole setup.

Morning command center

Ask for the screen you want. It runs on your own accounts.

Give me one screen for this morning: my next meetings, the unread emails that need me, and what came in on Stripe since yesterday.
Open sourceThe code behind blocks.forkable.dev

Run your own MCP

Fork it and you have an MCP server on your own domain, under your own brand, with Sign in with One as its login. Every tool call runs on that person's own accounts, not a shared key.

forkable/mcpMIT
  1. 1

    Run it on the sample

    The Acme Inc sample on :52290. No account, no keys.

    $ git clone https://github.com/withoneai/forkable.git
    $ cd forkable/mcp && pnpm install
    $ cp .dev.vars.example .dev.vars
    $ pnpm dev
  2. 2

    Make one Connect app

    In the One dashboard, Developers, Connect, New app. It is your login.

    redirect https://mcp.acme.com/api/one/callback
  3. 3

    Deploy the Worker

    The client id, secret and Connect key go in as Worker secrets.

    $ npx wrangler secret put ONE_CONNECT_KEY
    $ pnpm deploy # wrangler deploy
  4. 4

    Add it to Claude or ChatGPT

    As a custom connector. Your users sign in with One.

    connector https://mcp.acme.com/mcp
What you runLive on your domain
Claude or ChatGPTAdds mcp.acme.com/mcp and registers itself.
OAuth, DCR and PKCE
A
mcp.acme.comYour MCP. One Cloudflare Worker, your brand.
Hands off to
Sign in with OneEach person picks their accounts and how far.
Every call on their grant
GmailGoogle CalendarStripeGitHub
Their own accountsAny of the 1,052 apps in One's catalog.

mcp.acme.com stands in for your host. A workers.dev URL works too.

Your domain, your brand

Fork it, swap the name and marks, put it on your own domain. The code is MIT.

Each user, their own accounts

Sign in with One is the login. Every person connects their own tools, from the 1,052 apps in One's catalog.

One Worker, its own OAuth

The MCP endpoint, an OAuth server with dynamic client registration and PKCE, and the website. Claude and ChatGPT add it directly.

A start for any MCP

Keep the UI tools or swap them. Add your own in src/tools.ts, each one called on the person's grant.

01How it works

One URL, then just ask

To use ours, there is no repo, no terminal and no deploy. It works in the chat app you already use.

01

Add one URL

In Claude or ChatGPT, add blocks.forkable.dev/mcp as a custom connector. Sign in with One and pick the accounts it may use.

02

Ask for a screen

Say what you want to see. The agent finds the actions on your accounts, writes the UI and runs it in the chat.

03

Keep it

Every UI is saved with its versions. Open it again in either chat app, or on the web at blocks.forkable.dev.

02Flows

Six apps worth asking for

Each one starts as a single prompt. What renders below is the real code the agent writes, running here on the Acme Inc sample.

GmailGoogle CalendarStripe
Google CalendarGmail
Gmail
StripeGmail
StripeGitHubGmail
Gmail
Meeting prep

Ask for the screen you want. It runs on your own accounts.

Prep me for my next meeting: who is in it, my last emails with each of them, and draft an agenda from anything I still owe them.
Try this prompt

Prep me for my next meeting: who is in it, my last emails with each of them, and draft an agenda from anything I still owe them.

Source: site/src/flows/meeting-prep.tsx, one TSX file on the kit the MCP gives every UI.

03Saved

It lives past the chat

A chat answer usually scrolls away. These stay. Each one is saved with its versions and opens again wherever you are.

blocks.forkable.dev, the list of saved UIs

Your blocks

Every UI you asked for, in one list at blocks.forkable.dev.

A saved UI open on the web with its version picker

Open it anywhere

On the web or in the other chat app, live on your accounts, any version.

Forkable blocksNot the generated UI
Send with Gmail: Send EmailOn your Gmail account. Only this exact request runs, once.
To
leo@vandelay.com
Subject
Pricing for the Vandelay rollout
The agent's code can't press this.

Writes ask first

A send or a change stops at the connector's Confirm, outside the generated UI. The UI itself cannot press it.

Open your blocks

Sign in with One on the web to see, rename or delete everything you made.

blocks.forkable.dev
04Why it's different

Software on request

A chat that answers with a working screen, wired to the tools you already use.

Nothing to install

One URL in the chat app people already use. No repo, no terminal, no deploy.

Your accounts, not a demo

Gmail, Calendar, Stripe, GitHub, any of the 1,052 apps in One's catalog, each signed in by you.

Made to fit the ask

Not a fixed widget. The agent writes the exact screen you asked for on a shared kit, so it still looks designed.

Yours after the chat

Saved, versioned and reopened anywhere. A chat answer becomes a small app you keep.

The screen runs in a sandbox inside the connector's frame. A write stops at the frame's own Confirm, and only that exact request runs, once.

05Under the hood

11 tools, one kit

The agent sees these tools. The screens it writes import one small React kit, so every UI looks right in light and dark.

  • list_connectionswhat you connected
  • find_actionssearch the catalog
  • action_docsread one action
  • ui_guidethe kit and its rules
  • render_uiwrite and run a screen
  • update_uisave a new version
  • list_my_uisyour saved screens
  • show_uiopen one again
  • rename_uiname it
  • delete_uiremove it
  • run_actionthe screen calls your tools

Secured by One. You connect your own accounts and can revoke them any time.

Add it to your chat

Paste the URL, sign in with One, ask for your first screen. Want the whole app in your own repo instead? Fork the business it came from.