Skip to main content
Layer’s MCP server supports three Streamable HTTP URLs. The JWT proves who the caller is. Which URL you hit selects platform vs business mode and which capability groups are registered by default. Hosts: The environment is inferred from the token’s scope claim, so the token and the MCP host must be from the same environment. Layer remains the authorization boundary.

Platform: /mcp

Platform mode is for operators who move between businesses. The agent must call set_active_business with a Layer business UUID before business-scoped tools. Default groups are core and reporting. Extra groups can be set on the provisioned client (capabilityGroups) or with LAYER_MCP_GROUPS. Platform mode does not register accounting mutations. See Platform session.

Provisioned business: /mcp/:businessToken

The business is fixed at provisioning (layerBusinessId on the MCP server client entry). There is no set_active_business tool. Default groups are core, reporting, and accounting. Additional groups (banking_imports, ar_imports, ap_imports, loans_assets, qbo) are opt-in via capabilityGroups or LAYER_MCP_GROUPS. Use this when Layer (or the platform) has already issued a per-business MCP URL token for an interactive client.

Passthrough business: /mcp/b/{businessId}

Point an MCP client at a single Layer business using a Layer API access token. The MCP server validates that token the same way the Layer API does and forwards it verbatim to Layer.
{businessId} is the Layer business UUID. It must be a business owned by the token’s client. Passthrough registers all business capability groups (core, reporting, accounting, banking_imports, ar_imports, ap_imports, loans_assets, qbo) unless LAYER_MCP_GROUPS is set on the MCP server. This is the right fit when platform engineers already mint Layer API tokens and want to expose Layer MCP tools inside their own agents.

Authenticate for a given business (passthrough)

1

Mint a Layer API token

This is the same client credentials flow used for the Layer REST API. See Authentication for full details.
The authorization server responds with a short-lived access token:
2

Point the MCP client at the business

Use …/mcp/b/<businessId> as the server URL and send the token as Authorization: Bearer <access_token>.
3

Configure Claude Desktop for testing (optional)

Claude Desktop runs OAuth discovery on remote servers, so pass the static bearer through the mcp-remote proxy in ~/Library/Application Support/Claude/claude_desktop_config.json:
After making this change, restart Claude Desktop.
The ${AUTH_HEADER} env indirection avoids a Claude Desktop bug that splits --header "Authorization: Bearer ..." on the space.

Errors

Token lifetime

Platform customers building an MCP integration typically wrap passthrough in a refresher that re-mints via client_credentials, or run a local MCP process that manages token refresh. For a human’s Claude Desktop config, a pasted token stops working at expiry and must be re-pasted.

When to use which URL