Skip to main content
Builds package hosted Python MCP and FastMCP servers into deployable artifacts. A build belongs to one server and one source revision. Successful builds can be served as live deployments or preview deployments. For the hosted-server contract across source, builds, deployments, gateway access, and runtime behavior, start with Hosted servers. For the full lifecycle, defaults, and failure modes, see Build system.

Build contract

A build is an immutable attempt to turn one repository commit and one set of server settings into one deployable artifact. After the build starts, changing a branch, editing an environment variable, or updating server settings does not change that build. Those changes apply to the next build that uses them.
PropertyContract
Source revisionResolved to an exact commit before build work begins.
Server configurationEntrypoint, dependency file, build-relevant settings, and environment scope are captured at build start.
OutputA successful build produces a new artifact and manifest. A failed build does not modify the live deployment.
MutabilityBuild records and artifacts are historical. Rebuild instead of editing an existing build.
PromotionBuild success makes an artifact eligible for deployment; it does not always change live traffic.
Debug build problems from the build record, not from the current branch tip. The current branch may have moved since the failed build started.

Build states

StateMeaning
queuedHorizon has accepted the build request and is waiting to start work.
buildingHorizon is installing dependencies, packaging the server, inspecting the manifest, or publishing the artifact.
succeededThe artifact is ready to deploy.
failedThe build did not produce a deployable artifact. Open build logs for the failing step.
canceledThe build was stopped before completion.

What starts a build

Default branch push

A push to the configured default branch can create a production build.

Pull request

A pull request can create a preview build with preview-scoped environment variables.

Manual build

A user with server edit access can start a build from the dashboard.

Configuration change

Changes to build-relevant settings, such as the entrypoint or dependency file, take effect on the next build.

What does not start a build

Not every server change produces a new artifact. Some changes affect gateway or dashboard state without rebuilding Python code.
ChangeUsually requires a new build?Why
Source code changeYesThe artifact must include the new code.
Entrypoint or dependency file changeYesHorizon must package and inspect with the new build configuration.
Environment variable value changeYes, for hosted server runtime behaviorExisting artifacts keep the values they were built with.
Server access grant changeNoAccess metadata is evaluated by Horizon and can update without changing Python code.
Server display name or descriptionNoDashboard metadata does not affect the artifact.
Capability policy changeRedeploy may be required for hosted capability enforcementThe deployed endpoint must use the updated policy metadata.

Build inputs

InputContract
Repository revisionHorizon builds from the selected commit. Builds are immutable once started.
EntrypointDefaults to main.py unless the server is configured with another entrypoint.
DependenciesHorizon installs dependencies from the configured dependency file or discovered Python project files.
Environment variablesProduction builds use production variables. Preview builds use preview variables plus branch overrides.
Access settingsAuthentication and authorization metadata are packaged with the deployment path used by the gateway.

Source resolution

Horizon records the repository, branch context, and exact commit for every hosted build. Branch names are useful for starting builds, previews, and promotion workflows, but the artifact is tied to the commit that was resolved at build start. This matters when a pull request receives several pushes quickly. An older build may finish after a newer build. Use the deployment page to confirm which artifact is selected before assuming the latest completed build is live.

Build output

A successful build produces:
  • A deployable artifact.
  • A discovered MCP manifest for tools, resources, prompts, and templates.
  • Build logs for audit and debugging.
  • Metadata that Horizon uses for deployment, routing, and observability.
Do not put required setup work behind a code path that only runs after a tool call. Horizon inspects the server during the build, so import-time and startup failures can prevent deployment.

Concurrency and ordering

Horizon prevents conflicting deployment updates for the same deployment target, but build completion order can still differ from commit order. Treat promotion as the moment a deployment changes, not build completion.
ScenarioExpected behavior
Two preview builds run for the same branchThe deployment should serve the artifact selected by the preview workflow, not simply whichever build logs you opened last.
A default-branch build succeeds while a preview build failsThe production artifact can still be healthy; preview failure is scoped to its branch context.
A build fails after a previous build succeededThe previous successful artifact remains available for deployment or rollback.

Manifest inspection

Build inspection loads the server entrypoint and records the MCP capabilities Horizon can see. The dashboard, Inspector, ChatMCP, remix composition, and capability policies all depend on that manifest. If a capability is missing after a successful build, check whether the server registers the tool, resource, prompt, or template during import or startup. Conditional registration can make local behavior differ from build inspection, especially when it depends on environment variables.

Troubleshooting

Check the dependency file path, Python version requirements, private package credentials, and any build-time environment variables.
Confirm the configured file exists in the repository revision and can be imported without running interactive code.
Make sure tools, resources, and prompts are registered before the server is inspected. Build logs usually show whether inspection succeeded.
Start a new build after saving the variable. Existing artifacts keep the environment available when they were built.
Confirm whether the build was for a preview deployment, whether automatic promotion is enabled, and which artifact the live deployment currently selects.
Compare the manifest on the previous successful build with the new build. Then check registration code and environment-dependent imports.

Hosted servers

Start with the hosted-server contract across source, deployments, access, runtime, and observability.

Deployments

Serve successful builds as live or preview deployments.

Environment variables

Manage production, preview, and branch-scoped variables.

Compute model

Understand how artifacts run after deployment.