Deployment
Build and deploy your MCP App
This guide uses the MCP App starter at commit 3fc9bd15. An MCP App is a server and an HTML interface that you deploy, then connect to Studio.
Build
bun run buildThis runs two steps:
build:web— Vite builds the React app into a single-file HTML bundle (dist/client/index.html)build:server— Bun bundlesapi/main.bun.tsintodist/server/main.js
Deploy the server output and dist/client/index.html together on a host that runs Bun. From the project root, the built server can be started with:
NODE_ENV=production PORT=3001 bun dist/server/main.jsConfigure your host's public HTTPS URL and process lifecycle. The starter does not turn a Git push into a production deployment by itself.
app.json Configuration
Update app.json with your app's details before publishing:
{
"scopeName": "your-org",
"name": "your-app",
"friendlyName": "Your App Name",
"description": "What your app does.",
"connection": {
"type": "HTTP",
"url": "https://mcp.example.com/api/mcp",
"configSchema": {
"type": "object",
"properties": {},
"required": []
}
}
}scopeName+name— unique identifier in the deco platformconnection.url— your deployed MCP endpoint; the starter serves/api/mcpconfigSchema— JSON Schema for configuration options shown to users who install your app
Publishing to Deco Studio
- Build and deploy the app to a reachable HTTPS host.
- Open Studio, then Settings → Connections → Add connection → Custom Connection.
- Choose HTTP, paste the deployed
/api/mcpURL, and configure the credentials required by your server. - Attach that connection and its selected tools to an agent in Settings. Invoke a tool to open its linked MCP App interface.
app.json records the app's identity and connection details. Creating a custom connection makes it usable in your organization; publishing it to a catalog is a separate distribution workflow. See Connections.
CI/CD
GitHub Actions
The template includes a CI workflow (.github/workflows/ci.yml):
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 buildThis runs on every push and pull request:
bun run ci:check— Biome lint + format checkbun run check— TypeScript type checkingbun run build— Full production build
Testing After Deploy
- Connect the deployed endpoint in Studio using the steps above.
- Call
hello_worldwith a test name and confirm the structured greeting. - Verify that the linked resource serves
text/html;profile=mcp-appand the UI renders the tool result. - Check the server logs and Monitor for calls routed through the connection.
For local testing from hosted Studio, use the HTTPS tunnel workflow. A local MCP client can reach http://localhost:3001/api/mcp directly; /mcp is not the starter's public endpoint.