Skip to main content
Deployments decide which built server artifact receives MCP traffic. A build turns one repository commit into an immutable artifact. A deployment gives that artifact a Horizon URL, records the branch and commit it came from, and can make it the live production version for the server. In practice, clients call a Horizon MCP URL, usually ending in /mcp, and Horizon routes that request to the artifact selected by the relevant deployment. Production traffic uses the stable server URL. Pull requests and non-default branches can use preview deployment URLs so you can test changes before they become production. For the build step before deployment, see Build system. For request routing after deployment, see Gateway.
Open a server in Horizon, then select Deployments in the server sidebar. The page shows the stable MCP URL, current status, recent build activity, and a history of builds and deployments for that server.

Deployment model

Production URL

The server’s stable MCP URL always points clients at the artifact currently selected for production.

Preview URL

A pull request or branch build can expose an isolated preview URL for testing that branch’s artifact.

Build record

Every deployment is tied to the build, commit SHA, branch, and pull request metadata that produced it.

Promotion

Promotion changes which default-branch deployment receives production traffic without asking clients to change URLs.

What starts a deployment

A deployment starts after Horizon has a build request and a deployment target. The target determines whether the result is production-ready or preview-only.
1

Default branch push

A push to the server’s default branch creates a production build. If auto-promotion is enabled and the build succeeds, Horizon selects the new deployment for the stable production URL.
2

Pull request update

A pull request toward the default branch creates a preview build and preview deployment URL. The preview uses preview-scoped environment variables and can be tested without changing production traffic.
3

Manual redeploy

From a build row, you can start a new build from that row’s commit. Use this when current server settings, environment variables, access policy, or deployment metadata need to be applied to that commit again.
4

Manual promotion

If a successful default-branch deployment is not live, use Promote to live to select it for production. Promotion keeps the same stable server URL and changes the artifact behind it.
A successful build does not always mean production traffic changed. Preview builds stay preview. Default-branch builds can also remain ready-but-not-live when auto-promotion is disabled or when a newer deployment has already been selected.

Production and preview URLs

Production clients should use the stable server URL shown at the top of the Deployments page. That URL is based on the server name and remains the client configuration target through future promotions and rollbacks. Preview deployments use branch-scoped URLs. Horizon derives a deployment slug from the server name and branch name, lowercases it, replaces unsupported characters with hyphens, and truncates long values to fit URL and runtime naming limits. Pushes to the same preview branch reuse the branch deployment slug, so the preview URL can stay stable while its selected artifact changes.
URL typeTypical useWhat changes
Stable production URLClient, automation, and production trafficThe selected production artifact changes on promotion or rollback.
Preview deployment URLPull request review and branch testingThe preview artifact changes when that branch receives a new successful deployment.
Custom domainClient-facing hostname owned by your organizationIt routes to the same Horizon-served endpoint as the default URL.
Do not treat a deployment URL as an access control boundary. Use Horizon authentication, server access, and capability policies for access control.

Status labels

The Deployments page combines build and deployment state into labels that are meant to answer one question quickly: what is this row doing for traffic?
LabelMeaning
ProductionThis successful default-branch deployment is selected for the stable production URL.
PreviewThis successful non-default branch or pull request deployment has a preview URL and is not production.
ReadyThis successful default-branch deployment can be promoted, but it is not currently production.
BuildingThe build is queued or running. The selected production artifact has not changed yet.
FailedThe build did not produce a deployable artifact. Existing live traffic remains on the previously selected artifact, if one exists.
The page also shows a top-level server status:
  • Live means the server has a live production deployment.
  • Building means at least one build is queued or running.
  • Failed means the latest build failed.
  • No deployments means Horizon has not created a deployment for the server yet.

Auto-promotion

Hosted servers have an Auto-promote Deployments setting. When it is enabled, successful default-branch deployments become production automatically. Horizon demotes the previous production deployment for the same server and points the stable URL at the new successful artifact. When auto-promotion is disabled, successful default-branch builds appear as Ready. Review the commit, build logs, server logs, and preview behavior, then promote the deployment manually when it should receive production traffic.
Disable auto-promotion when you want a human approval step between a successful default-branch build and production traffic.

Repeat deployments and rollback

Starting another deployment from a commit and rolling back production create different operational outcomes.
Use a build row’s action menu to create a new build and deployment from that row’s commit. The new build captures current server settings that affect deployment, such as entrypoint, dependency file, environment values, authentication mode, and capability policy metadata.
To roll back, find an earlier successful default-branch deployment and promote it to live. The stable production URL stays the same, but Horizon selects the earlier artifact behind it.
Promoting to production is only available for successful default-branch deployments. Preview deployments are for branch testing and do not become production directly.
After redeploying or promoting, reconnect MCP clients that cache manifests or capability lists. Some clients do not refresh tools, resources, or prompts until they reconnect or list capabilities again.

What changes when

Deployment behavior depends on which boundary owns the change.
ChangeWhat to doWhen clients see it
Source code changesCreate a new build from the changed commit.After the resulting deployment is selected for the URL the client uses.
Environment variables changeCreate a new build for the relevant environment.After a new deployment uses the updated values.
Entrypoint or dependency file changesCreate a new build or wait for the next build trigger.After a successful deployment built with the new settings is selected.
Authentication mode changesCreate a new deployment for the hosted server.After a deployment uses the updated setting.
Server grants or default role changesSave the access change.After Horizon updates live access metadata. A code build is not required.
Capability policy changesSave the policy, then redeploy.After the deployed endpoint uses the updated policy metadata.
Custom domain changesComplete domain setup or migration.After DNS, activation, and client configuration all point to the intended endpoint.

Debug deployment behavior

Start from the row that matches the commit and URL you are testing. The Deployments page gives each row actions for build logs, server logs, copying the deployment URL, redeploying, and promoting when promotion is available.
Check whether the row is labeled Preview, Ready, or Production. Preview deployments do not change production. Ready deployments need manual promotion when auto-promotion is disabled.
Confirm the production row has the expected commit and manifest. Then reconnect the client or list capabilities again because some clients cache server metadata.
Confirm the branch and commit SHA on the deployment row. Branch names start builds, but each build is tied to the exact commit Horizon resolved when the build started.
Confirm the deployment belongs to the default branch, succeeded, and is not already production. If the row should be promotable but promotion fails, open build logs and server logs, then retry from the deployments table.
The request reached Horizon but did not pass the server’s access settings. Check Authentication, Authorization, server access, API keys, and request logs.
Gateway routing succeeded. Check your server logs for stdout, stderr, startup failures, handler errors, or upstream failures from the running Python server.

Operational checklist

Before sharing or promoting a deployment, confirm:
  • The row has the expected branch, pull request, commit SHA, and status.
  • The stable production URL or preview URL is the URL you are testing.
  • Build logs show a successful package and inspection step.
  • Server logs do not show startup or request-time failures for representative calls.
  • Environment variables are scoped correctly for production or preview.
  • Authentication mode, server access, and capability policy match the intended audience.
  • Clients have reconnected or refreshed capabilities after a manifest-changing deployment.

Hosted servers

Understand the hosted-server lifecycle across source, deployments, access, runtime, and observability.

Build system

Learn how Horizon produces deployable artifacts from Python MCP and FastMCP source code.

Environment variables

Configure production, preview, and branch-scoped values.