mcp.bundleup.io. BundleUp attaches the user’s token, so neither the model nor your code handles it.
Your backend tells the model provider to use mcp.bundleup.io as an MCP server, with your API key and the user’s connection ID as the credential. The model provider calls BundleUp, BundleUp swaps in the user’s Linear token and forwards to Linear’s MCP server, and the results flow back to the model.
Prerequisites
- A BundleUp workspace with a Linear integration (identifier
linear), an API key, and a registered redirect URI. Follow steps 1 to 3 of the Quickstart, choosing Linear instead of GitHub. - An OpenAI or Anthropic API key.
1. Connect the user’s account
Run the authorization flow for thelinear integration and store the resulting connection_id against your user. For a quick test, follow steps 4 and 5 of the Quickstart with integration_id=linear.
2. Check the connection works
Before involving a model, list the tools the connection can see:400 mcp_not_supported means the provider has no MCP server; use the Proxy for it instead.
3. Give the connection to a model
OpenAI and Anthropic can call an MCP server themselves. They accept a single credential, so BundleUp accepts the API key and connection ID joined with a dot:API_KEY.CONNECTION_ID. The SDK’s hosted() builds that for you.
4. Serve many users
The only per-user input is the connection ID. Look it up for whoever is chatting, and pass it in. Two users get two different Linear accounts from the same code. To give one agent several providers for the same user, add one MCP server entry per connection (for example, one for Linear and one for Slack). See Agents for many users.Next steps
- How Proxy MCP works: headers, sessions, streaming and errors.
- Using MCP clients: run the MCP client in your own backend, or connect from Claude Code.
- Choosing scopes: the OAuth scopes you grant decide which tools the agent can use.

