BundleUp logo
MCPWorks with your agent SDK

One protocol.
Any agent.

Give your agent a provider's own MCP tools with one connection ID. Tokens are stored and refreshed per end user, so a single agent serves all of them.

Acting as
linearslack
What issues are assigned to me? Post a summary in #standup.
bundleup.mcp('conn_abc123') Claude Agent SDK
linear.list_issues ✓
slack.search_channels ✓
slack.post_message ✓
SlackHubSpotLinearJiraAsanaAttioApolloAirtableGitHub OAuthGitLabGmailIntercomGongGoogle DocsGoogle SheetsGoogle SlidesGoogle DriveBoxDropboxNotionPipedriveSalesforceZendeskGoogle CalendarConfluenceZoomStripemonday.comClickUpTrelloCalendlyFigmaSentryDatadogPagerDutyAircallCanvaCloseCloudflareGoogle AnalyticsGorgiasGreenhouseHelp ScoutKlaviyoMeta AdsMicrosoft Dynamics 365MiroNeonPayPalPostHogRampSquareSupabaseTodoistTypeformVercelWebflowWrikeZoomInfo
Bring your framework

Drop into the agent SDK you already use.

OpenAI Agents, the Claude Agent SDK, Vercel AI SDK, or a raw MCP client. One line hands it a provider's tools for a specific user.

MCP reference →
import { Agent, run, hostedMcpTool } from '@openai/agents';

const { url, token } = bundleup.mcp('conn_abc123').hosted();

const agent = new Agent({
  name: 'Assistant',
  tools: [
    hostedMcpTool({
      serverLabel: 'linear',
      serverUrl: url,
      authorization: token
    })
  ],
});
Per-user by design

One agent. Every user. The right token each time.

Each connection is one person's account at one provider. Agents act with exactly the access that person granted.

Your agent
Any MCP client
BundleUp MCP
conn_456 · Anarefreshed
conn_789 · Anavalid
conn_012 · Benvalid
SlackSlackMCP
LinearLinearMCP
NotionNotionMCP
Built for agents

Agents that act for real people.
Safely.

The provider's own tools

Agents get the MCP tools each provider publishes, not a wrapper we wrote over them. BundleUp sits in front and handles auth.

linear.list_issueslinear.create_issueslack.search_channelsslack.post_messagenotion.searchgithub.list_pull_requests+ more
No tokens in prompts
model sees → tools
model never sees → ****

Credentials stay with BundleUp.

Scoped access
read:issueswrite:commentsadmin

Only what the connected user granted.

One connection ID, everywhere
bundleup.proxy('conn_456')
bundleup.mcp('conn_456')

Connect once. Use it from code or from agents.

Fast agent loops

Tool calls run on the edge network, close to your users.

01
User connects an account

Through BundleUp's authorization page. You receive a connection ID.

02
Hand it to your agent

bundleup.mcp(id) for whichever user it's serving.

03
Let it call tools

Scoped to what the user granted. Tokens refresh in the background.

PROXYOne Endpoint. Every API.Call any provider endpoint from your code with auth handled at the edge.Explore Proxy →UNIFIED APIOne API. Many Providers.Common resources across services through one normalized interface.Explore Unified API →

Ship the agent.
Skip the OAuth.

250,000 free requests every month. Pay only for usage after that.

We use cookies to understand how you use our site and to improve your experience. Analytics cookies are only set once you accept. See our Privacy Policy for details.