Skip to content
Bifrost Docs

Publishing agents as MCP tool providers

Expose a single agent's tool surface as its own MCP endpoint so external chat services can use Bifrost agents as tools

The root Bifrost MCP server is a discovery and dispatch gateway: it exposes four stable tools that find an agent, load its instructions, inspect a tool schema, and execute the selected capability. Sometimes you want a fixed native tool list instead. Bifrost supports that through per-agent MCP endpoints.

A per-agent MCP endpoint scopes tool visibility to exactly one agent’s tool list. From the client’s perspective, the endpoint is a single coherent capability — “Bifrost ticket-triage agent” — rather than the full platform surface.

Use it to:

  • Publish a domain-specific agent (a billing assistant, a Microsoft 365 inspector, a runbook executor) as a callable tool inside Claude Desktop, Copilot, or Cursor.
  • Hand a community user one URL that gives them exactly the tools you’ve curated, with no ability to enumerate the full platform.
  • Compose Bifrost agents inside another organization’s MCP-enabled chat service via OAuth.

The Bifrost MCP server handles requests to https://your-instance/mcp/{agent_id} as an agent-scoped native surface. It scopes the tool list to that agent’s configured workflow tools and system_tools, then applies the connecting user’s access on every request.

OAuth discovery is served per-agent at /.well-known/oauth-authorization-server/mcp/{agent_id} and /.well-known/oauth-protected-resource/mcp/{agent_id} — clients that perform path-aware discovery (Claude, Cursor) will use the correct endpoints automatically.

  1. Confirm the global MCP server is enabled in Settings → MCP. Per-agent endpoints share the same OAuth provider as the root endpoint.

  2. On the agent detail page, copy the agent’s UUID from the URL bar (/agents/{id}). This is the path component for the MCP URL.

  3. Build the per-agent URL: https://your-instance.com/mcp/{agent_id}. Share it with whoever is configuring the external client.

  1. Open Claude Desktop’s claude_desktop_config.json.

  2. Add an mcpServers entry for the agent endpoint:

    {
    "mcpServers": {
    "bifrost-ticket-triage": {
    "url": "https://your-instance.com/mcp/aaaa1111-bbbb-2222-cccc-333344445555"
    }
    }
    }
  3. Restart Claude. On first use, Claude opens the OAuth flow scoped to this agent. After login, only this agent’s tools appear in the tool tray.

Imagine you have ticket-triage-agent configured in Bifrost with three tools: lookup_customer, get_ticket, and update_ticket. Publishing it as MCP gives Claude exactly those three tools — not the full Bifrost surface.

A user in Claude can now say:

Look up customer alice@example.com and triage their open ticket.

Claude calls lookup_customer, then get_ticket, then update_ticket, all through the agent-scoped MCP endpoint. Each call is authenticated as the connecting user, runs through Bifrost’s normal permission checks, and is recorded as a regular tool execution in History.

Because the per-agent endpoint is just another MCP server from the client’s perspective, it sits alongside any other MCP server the client uses. A Claude Desktop config might look like:

{
"mcpServers": {
"bifrost-gateway": {
"url": "https://your-instance.com/mcp"
},
"bifrost-ticket-triage": {
"url": "https://your-instance.com/mcp/aaaa1111-bbbb-2222-cccc-333344445555"
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"]
}
}
}

Claude blends tools from all three. The agent-scoped endpoint keeps Bifrost’s surface narrow and predictable, while the root endpoint can discover and dispatch across every agent the user is allowed to access.