Connect it to what you already use.

The difference is how your tool talks rather than whose tool it is. Run a local process and you get the MCP server over stdio. Add remote MCP servers and there is one at a URL. Speak plain HTTP and there is an API with a document describing it. Same tools underneath, same tokens.

Run it locally

For Claude Code, Codex and other coding agents, and worth doing where you can: a local server works offline, reads and writes .passalong/ in the repo you are standing in, and knows which repo that is. passalong setup wires Claude Code for you, and Codex takes one command. Anything else runs the command passalong with the argument mcp.

npm i -g passalong
passalong login

# Claude Code: skill, MCP server, hooks
passalong setup

# Codex
codex mcp add passalong -- passalong mcp

Step by step: Claude Code, Codex.

Point it at a URL

Claude, ChatGPT and any assistant with MCP connectors add outside tools as MCP servers reached over a URL. Paste this as the server URL. You get every tool that does not need a working directory: take work, report progress, hand it in or pass it, see your work as a live board where the app can draw one, search and read guides, your inbox, board and log, publish a guide, and file a set of bugs with their screenshots.

https://passalong.dev/v1/mcp

In the assistant you use, open its connector settings, add a custom connector and paste that address. If it asks how to sign in, choose OAuth. It opens Passalong and asks you to approve, and that is the whole setup — unless the app asks for a client ID, as ChatGPT does. Make that in your hub, without a secret, and paste it back.

Step by step: ChatGPT, Claude.

You can see every app you have approved, and disconnect it, under Connectors in your hub's settings.

Apps that send a header can skip approving and use a token from your hub — the same named, revocable token the CLI and the API use.

Set up a connector manually

Only for an app that asks you for a client ID instead of taking the address. In your hub's settings, open "Set up a connector manually", give it the app's callback address, and paste the client ID it gives you back into the app. Leave "This app keeps a secret" off unless the app demands one.

Claude's callback address, if you set Claude up this way, is:

https://claude.ai/api/mcp/auth_callback

Attach the screenshot

Attach the image in your chat and ask for the bug to be filed with it. The screenshot goes into the guide itself, under Problem, so whoever opens the link sees it. How the file gets there depends on the assistant.

ChatGPT hands the file to Passalong itself. Attach it in ChatGPT on the web; the mobile apps send a reference the server cannot download.

Claude sends the file from its code sandbox to a one-time upload link. Allow passalong.dev in the network settings for Claude's code execution, or the sandbox cannot reach it and the upload fails.

Claude Code, Codex and other local setups read the image from disk: give the agent the file's path.

Scripts send the raw bytes with a token, or ask for an upload link and send them there with no token at all. The link works once and expires in ten minutes.

curl -H "authorization: Bearer $TOKEN" \
  -H "content-type: image/png" --data-binary @shot.png \
  https://passalong.dev/v1/shots

Either way the answer includes the markdown line that points at the image. Put it in the guide, and publishing keeps the file for as long as the guide exists.

Call the API

/v1/openapi.json describes the API for function calling, an internal script, or anything that speaks HTTP and a bearer token. Mint one in your hub; they are named and revocable.

curl -H "authorization: Bearer $TOKEN" \
  https://passalong.dev/v1/inbox

Reading a guide someone shared needs no account at all — the key in the share link is the authorisation, and appending .md gives you the document.

curl https://passalong.dev/g/<id>/<key>.md

A task says do this. A bug says fix this.

Whatever you connect, tell it to read kind before acting — each asks for something different, and an agent that confuses them will carefully reproduce a defect and report success. Every kind is worked with the same four calls: take it, progress at each milestone, hand_in when done, or pass with the reason.

task
Work nobody has done yet, and the default. Reach its Goal within its Constraints, leave Out of scope alone, and hand in a write-up of how each line of Acceptance was checked. Its author approves it or sends it back.
transfer
Finished work to repeat here. Follow its Steps, run its Verification, and hand in whether it held up.
bug
A defect to fix. Reproduce shows you the problem and is not a procedure to apply; Verification is the behaviour that should have happened. A bug report is not broken because you reproduced it.

Agents that pull a guide through MCP are told this before they see the document, and the document says it too — so a tool that fetched a share link over plain HTTP is not left guessing.

Every field and heading, and what a receiving agent does with each, is in the guide format.

Everything here is one document and one key.

Open your hubor read the API document

A guide is markdown with frontmatter, and a share key is what makes a link work. No plugin directory, no integration to wait for.