mcp-app-demo
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
MCP App Template
Official starter for building MCP Apps on deco — interactive UIs powered by the Model Context Protocol.
Quick Start
# Clone the template
git clone https://github.com/decocms/mcp-app.git my-mcp-app
cd my-mcp-app
# Install dependencies
bun install
# Start development
bun run devRelated MCP server: MCP App Workers Template
Project Structure
├── api/ # MCP server (platform-agnostic)
│ ├── app.ts # App core — tools, resources, middleware
│ ├── main.bun.ts # Bun entrypoint (local dev)
│ ├── tools/
│ │ ├── index.ts # Tool registry
│ │ └── hello.ts # Example tool (hello_world)
│ ├── resources/
│ │ └── hello.ts # MCP App resource (serves HTML)
│ └── types/
│ └── env.ts # StateSchema + Env type
├── web/ # React UI (MCP App)
│ ├── tools/ # One folder per tool UI (folder-based routing)
│ │ └── hello/ # hello_world tool UI
│ │ ├── main.tsx # React entry point
│ │ ├── bridge.ts # MCP App SDK integration
│ │ ├── context.tsx # React context for MCP state
│ │ ├── router.tsx # TanStack Router with UI
│ │ └── types.ts # UI state types
│ ├── entry.tsx # Build entry (imports @tool/main.tsx)
│ ├── components/ui/ # shadcn/ui components
│ ├── lib/utils.ts # cn() helper
│ └── globals.css # Tailwind base styles
├── index.html # Single Vite entry (shared by all tools)
├── package.json
├── tsconfig.json
├── biome.json
├── vite.config.ts
├── components.json # shadcn/ui config
├── app.json # Deco mesh config
└── .mcp.json # Local MCP server configDevelopment
# Run API server + web build concurrently
bun run dev
# API server only (port 3001)
bun run dev:api
# Web build only (watch mode)
bun run dev:webConnecting to deco Studio
To test your MCP App in deco Studio, expose your local server through a tunnel:
bun start
# Tunnel started -> 🌐 Preview: https://<your-id>.deco.hostThen connect in Studio using the MCP URL:
https://<your-id>.deco.host/api/mcpAdding a New Tool with UI
Each tool UI lives in web/tools/<name>/. The TOOL env var tells Vite which folder to build — one build per tool, output as dist/client/<name>.html.
Create the tool —
api/tools/my-tool.tsusingcreateToolRegister it — add to the
toolsarray inapi/tools/index.tsCreate the UI —
web/tools/my-tool/withmain.tsx,bridge.ts,context.tsx,router.tsx,types.tsCreate the resource —
api/resources/my-tool.tsservingdist/client/my-tool.htmlUpdate build scripts:
"build:web": "TOOL=hello vite build && TOOL=my-tool vite build", "dev:web": "concurrently \"TOOL=hello vite build --watch\" \"TOOL=my-tool vite build --watch\""
How the Tool Router Works
TOOL=hello vite build
→ resolves @tool/* → web/tools/hello/*
→ index.html imports web/entry.tsx imports @tool/main.tsx
→ outputs dist/client/hello.html (single-file bundle)Tech Stack
Runtime: Bun (default), deployable to any Web Standard runtime
Server: @decocms/runtime MCP server
UI: React 19 + TanStack Router (hash-based) + TanStack Query
Styling: Tailwind CSS v4 + shadcn/ui
MCP Apps: @modelcontextprotocol/ext-apps SDK
Build: Vite + vite-plugin-singlefile
Linting: Biome
How It Works
The app core (
api/app.ts) defines tools, resources, and middleware as a platform-agnosticfetchhandlerA platform entrypoint (
api/main.bun.ts) starts the server using the platform's APITools perform actions and can link to a UI via
_meta.ui.resourceUriResources serve single-file HTML bundles with
mimeType: "text/html;profile=mcp-app"The MCP App UI connects to the host via
@modelcontextprotocol/ext-apps, receives tool input/results, and renders an interactive displayVite builds each tool UI into a self-contained HTML file (CSS + JS inlined) using the
TOOLenv var to select whichweb/tools/<name>/folder to bundle
Deployment
Multi-Platform
The app uses a factory pattern that separates business logic (api/app.ts) from platform wiring. To deploy to a new platform, add a thin entrypoint file — see the add-deploy-target skill for step-by-step instructions.
Supported targets out of the box:
Bun —
api/main.bun.ts(default, used for local dev)
Easy to add:
Cloudflare Workers — ~5 lines +
wrangler.tomlDeno — ~5 lines
Node.js — ~5 lines +
@hono/node-serverAWS Lambda — ~5 lines +
hono/aws-lambda
Publish to deco
Update
app.jsonwith your app's name, description, and connection URLPush to your repository — CI will validate the build
Follow deco mesh publishing instructions to deploy
CI
GitHub Actions runs on every push and pull request:
bun run ci:check— Biome lint + format checkbun run check— TypeScript type checkingbun test— Unit testsbun run build— Production build
This server cannot be deployed
Maintenance
Related MCP Connectors
Build, deploy, and host full-stack web apps from any MCP client. DB, auth, storage, cron included.
Create, edit, preview, and deploy full-stack web apps to a live URL from any MCP client.
Deploy full-stack apps with databases, storage, backups, logs, scaling, and rollback. 74 MCP tools.
Our free Marketgenius investment tools as live, interactive React MCP Apps.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA full-stack template for building Model Context Protocol (MCP) servers with a modern React frontend, allowing developers to create AI agent tools and workflows while providing a beautiful web interface.7 npmISC
- FlicenseNot gradedqualityDmaintenanceA production-ready template for building MCP servers on Cloudflare Workers that expose server-side tools with rich, interactive React-based UI widgets using the MCP Extensions Apps API.13-
- AlicenseNot gradedqualityDmaintenanceAn MCP server template for building ChatGPT-compatible React widgets using the OpenAI Apps SDK. It automatically registers UI components as MCP tools and resources, featuring built-in support for theme detection and ecommerce-focused interactive elements.MIT
- AlicenseNot gradedqualityBmaintenanceA starter template for building MCP apps with React widgets, featuring tool execution, UI capability negotiation, and host integration.21Apache 2.0