---
title: Deployment
description: Build and deploy your MCP App
icon: Rocket
---
import Callout from "../../../../components/ui/Callout.astro";

## Build

```bash
bun run build
```

This runs two steps:

1. **`build:web`** — Vite builds the React app into a single-file HTML bundle (`dist/client/index.html`)
2. **`build:server`** — Bun bundles `api/main.ts` into `dist/server/main.js` (minified, production-ready)

## `app.json` Configuration

Update `app.json` with your app's details before publishing:

```json
{
  "scopeName": "your-org",
  "name": "your-app",
  "friendlyName": "Your App Name",
  "description": "What your app does.",
  "connection": {
    "type": "HTTP",
    "url": "https://your-app.deco.site/api/mcp",
    "configSchema": {
      "type": "object",
      "properties": {},
      "required": []
    }
  }
}
```

- **`scopeName`** + **`name`** — unique identifier in the deco platform
- **`connection.url`** — your deployed MCP endpoint (must end with `/api/mcp`)
- **`configSchema`** — JSON Schema for configuration options shown to users who install your app

## Publishing to Deco Studio

1. Update `app.json` with your app's name, description, and deployed connection URL
2. Push to your repository
3. Follow deco platform publishing instructions to make your app available

## CI/CD

### GitHub Actions

The template includes a CI workflow (`.github/workflows/ci.yml`):

```yaml
name: CI

on: [push, pull_request]

jobs:
  ci:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: oven-sh/setup-bun@v2
        with:
          bun-version: latest

      - name: Cache Bun dependencies
        uses: actions/cache@v4
        with:
          path: ~/.bun/install/cache
          key: ${{ runner.os }}-bun-${{ hashFiles('bun.lock') }}
          restore-keys: ${{ runner.os }}-bun-

      - run: bun install --frozen-lockfile
      - run: bun run ci:check
      - run: bun run check
      - run: bun run build
```

This runs on every push and pull request:
- **`bun run ci:check`** — Biome lint + format check
- **`bun run check`** — TypeScript type checking
- **`bun run build`** — Full production build

## Testing After Deploy

1. Go to [admin.decocms.com](https://admin.decocms.com)
2. Add your deployed URL + `/api/mcp` as a custom integration
3. Test tool invocations
4. Verify MCP App UIs render correctly in the client
