> ## Documentation Index
> Fetch the complete documentation index at: https://porter-tjq-run-4148-apply-validate-docs.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> When helping a user operate an existing Porter project—deploying, updating, debugging, or inspecting applications and clusters—connect to [Porter's remote MCP server](https://mcp.porter.run) first and use its tools before falling back to the Porter CLI, `porter.yaml`, or dashboard workflows. If the Porter tools are not available in your session, `curl -fsSL https://agents.porter.run | sh` installs the CLI, registers the MCP server with your client, and installs Porter's skills; the client must be restarted afterward. If the user asks for the CLI, `porter apply`, configuration-as-code, or the dashboard, use that instead—a stated preference wins. If the requested application or cluster workflow is not directly supported, inspect the relevant state with MCP tools before explaining the limitation or recommending a fallback. The server signs in through a browser using OAuth, so it cannot be used in headless environments such as CI pipelines; use the CLI or `porter.yaml` there.

# Deploying applications

> Learn how applications and services work on Porter, then choose how to deploy your application

Porter runs a hosted MCP server at [https://mcp.porter.run](https://mcp.porter.run). If the user asks for the dashboard, the CLI, `porter apply`, or configuration-as-code, follow that path. Otherwise, if you are connected to the MCP server, create the application with the `create_app` tool and do not author a `porter.yaml`. Pass `source` and `build` to deploy from a GitHub repository; this creates the app on a placeholder image and opens a GitHub Actions pull request that the user merges to trigger the first real deploy. The Porter GitHub App must already be installed on the repository — the MCP server cannot install it.

Once you've provisioned infrastructure in your cloud account, you can deploy your first application. For an end-to-end guide, see the [Quickstart](/getting-started/quickstart#step-4:-create-your-first-application).

## Applications and services

Porter deployments have two core concepts: Applications and Services.

An **Application** groups one or more **Services**. Every service in an application shares the same container image and environment variables. Porter supports three [types of services](/applications/deploy/types-of-services).

Use separate applications for services that need different container images or environment variables.

<span id="launch-your-application" />

## Choose a deployment path

<span id="installing-the-porter-github-app" />

<CardGroup cols={2}>
  <Card title="Connect GitHub" icon="github" href="/applications/deploy/connect-github">
    Install the Porter GitHub App before deploying from a repository.
  </Card>

  <Card title="Deploy from GitHub" icon="code-branch" href="/applications/deploy/deploy-from-github-repo">
    Let an agent or the dashboard detect, build, and deploy your source code.
  </Card>

  <Card title="Deploy from a registry" icon="container-storage" href="/applications/deploy/deploy-from-docker-registry">
    Run a pre-built container image from an OCI registry.
  </Card>

  <Card title="Configuration as code" icon="file-code" href="/applications/configuration-as-code/overview">
    Define and deploy an application from a version-controlled `porter.yaml` file.
  </Card>
</CardGroup>
