| Path | Caller | Target | Main question |
|---|---|---|---|
| Connecting to MCP servers | An MCP client, agent, or automation calling a server endpoint | A hosted, remix, or external MCP server served through Horizon | Who is trying to use this MCP server? |
| Signing in to Horizon | A user, script, CI job, service account, or Terraform run | The Horizon dashboard or REST API | Who is trying to manage Horizon resources? |
A Horizon API key can authenticate a REST API request or an MCP request. The
target URL determines which path applies: platform management for REST API
routes, server usage for MCP endpoint routes.
Authentication is enabled by default for hosted MCP server endpoints.
Disabling it for a hosted server is available on .
Connecting to MCP servers
Use this path when the caller is trying to use a server through its MCP endpoint. This includes agents, MCP clients, scripts, and tools that send requests to a Horizon deployment URL. Hosted server traffic passes through the Horizon gateway. The gateway identifies the deployment, reads the server’s authentication mode, verifies the caller when required, checks server access, and only then forwards the request to your MCP server. This layer protects the server endpoint. It is separate from the dashboard and REST API sign-in path used to manage that server. A hosted server’s authentication settings expose one control: Horizon Authentication, which is either enabled or disabled.| Horizon Authentication | What callers must provide | When to use it |
|---|---|---|
| Enabled | A valid Horizon bearer credential, such as a user token from an MCP client sign-in flow or a Horizon API key | Default for shared and production servers |
| Disabled | No Horizon bearer credential. Your server may still require its own credentials. | Public endpoints or servers that perform all authentication themselves |
When a server is protected by Horizon, the endpoint is scoped to the
server’s Horizon organization. A caller must authenticate as a user or service
account in that organization before the request can reach your server.
Authorization settings can then narrow access further. To share a protected
server with another person, invite them to the server’s organization and grant
the appropriate access.
MCP client sign-in tokens
MCP client sign-in tokens
MCP clients that support authenticated server connections can use the
Horizon deployment URL and complete sign-in in the client. Horizon accepts
the resulting bearer token as the signed-in user and checks that user
against organization and server access.If your client does not support interactive sign-in, use a Horizon API key
as the bearer token instead.
Horizon API keys
Horizon API keys
Non-interactive clients can send a Horizon API key as the bearer token.
Horizon API keys start with
fmcp_, are shown only when created, and can be
revoked independently. For key management, see API keys.The gateway runs before your server code. A rejected authentication request
stops before server compute starts or your Python handler runs.
Changing a hosted server’s authentication
Configure hosted server authentication from the server’s settings page.Enable or disable Horizon Authentication
Enabled means clients must prove identity to Horizon before the request
reaches the server. Disabled means Horizon passes requests through without a
Horizon authentication check.
External server authentication
External servers have two authentication layers:| Layer | Purpose |
|---|---|
| Client to Horizon-served endpoint | Horizon authenticates the MCP client before it can use the external server through Horizon. This layer is always enabled. |
| Horizon to remote server | Horizon authenticates to the remote MCP server using the connector configuration you choose. |
| Connector type | Configuration | Credential scope |
|---|---|---|
| OAuth | Discovered metadata when the remote server publishes it, or a manual authorization URL, token URL, client ID, client secret, and scopes. | Per the OAuth flow. |
| Token, per-user API key | Each user stores their own remote token, sent using the configured header details. | One token per user. |
| Token, shared API key | One stored token, sent using the configured header details. | One token for everyone in the organization. |
Common MCP endpoint outcomes
The request succeeds
The request succeeds
Horizon identified the deployment, accepted the caller’s credential, found
the caller in the expected organization, and authorization allowed the
request to continue.
The request returns 401
The request returns 401
The request omitted a bearer credential, used another
Authorization
scheme, sent an empty token, sent an expired user token, or used an API key
that is invalid, inactive, or revoked.The request returns 403
The request returns 403
Horizon authenticated the caller, but authorization denied access to the
organization, server, or requested capability. Check organization
membership, server access, custom server roles, and tool-level access
settings. For the role model, see
Authorization.
The request returns 404
The request returns 404
The deployment URL maps to no live server, or Horizon intentionally conceals
a server from an authenticated caller that lacks discovery access.
The request reaches the server and then fails
The request reaches the server and then fails
Authentication and gateway routing succeeded. Check your server logs,
request logs, and your server’s own application-level authentication or
authorization logic.
Signing in to Horizon
Use this path when the caller is managing Horizon itself: opening the dashboard, calling the REST API, creating API keys, deploying servers, inviting members, or changing access settings.Dashboard
Human users sign in to Horizon, choose an organization, and manage servers,
members, keys, builds, and settings according to their role.
REST API
API clients authenticate with a bearer credential or an active browser
session. API requests are checked against the authenticated user’s or
service account’s access.
Automation
Service accounts and user-owned API keys authenticate scripts, CI/CD, and
other machine workflows.
Actor identities
Every authenticated platform request resolves to an actor. An actor is the Horizon identity that can own API keys, belong to an organization, and receive access grants.| Actor type | Used for | Authentication methods |
|---|---|---|
| User | Humans using the dashboard, API, playground, or MCP clients | Horizon sign-in, user access tokens, user-owned API keys |
| Service account | Automation, CI/CD, Terraform, and other machine clients | Service-account API keys |
REST API authentication
Authenticated REST API routes accept the following credentials:| Credential | Header or source | Typical use |
|---|---|---|
| API key | Authorization: Bearer fmcp_... | Scripts, CI/CD, service accounts, Terraform |
| User access token | Authorization: Bearer <token> | User-scoped API calls from clients that already completed Horizon sign-in |
| Browser session | Horizon session cookie | Dashboard-originated API requests |
Authorization header and a browser cookie are present, the bearer
credential takes precedence. Invalid or missing credentials return 401.
For scripts, CI/CD, Terraform, and other direct API clients, use a bearer
credential. Browser sessions are intended for dashboard-originated API requests.
API keys inherit access from the user or service account that owns them. If the
owning actor loses organization or server access, requests made with that key
lose the same access. Revoked keys no longer authenticate.
All successful REST API authentication resolves to an actor identity. Horizon
uses that actor identity to check organization, server, and feature access.
Operational guidance
For production servers, keep Horizon authentication enabled and use server access controls to decide who can call the server. Prefer service accounts and API keys for automation, and user sign-in for interactive MCP clients. Rotate API keys by creating a new key, updating the client, and revoking the old key after traffic has moved. Because API keys are shown only at creation time, store them in your secret manager before closing the creation dialog. Disable Horizon authentication only when you have a clear public-access requirement or an independent authentication layer inside the server. When it is disabled, Horizon request logs can still show gateway traffic, but Horizon no longer identifies the caller before forwarding the request.Related docs
Authorization
Learn how roles and access grants decide what authenticated actors can do.
Gateway
Learn how requests move through routing, authentication, access checks, and
MCP session handling.
API keys
Create, rotate, and revoke keys for users and automation.
External servers
Register a remote MCP server and configure how Horizon authenticates to it.