mcp-app-demo
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-app-demoshow me the hello_world tool"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityDmaintenanceA 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.Last updated11ISC
- Flicense-qualityDmaintenanceA 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.Last updated13
- Flicense-qualityDmaintenanceAn 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.Last updated
- Flicense-qualityCmaintenanceAn MCP server template integrated with the OpenAI Apps SDK for building ChatGPT-compatible widgets with automatic tool registration. It provides a suite of interactive UI components and ecommerce examples for creating type-safe, theme-aware widgets.Last updated
Related MCP Connectors
Build, deploy, and operate hosted web apps on VibeKit (vibekit.bot) from any MCP client.
Generate, edit, and deploy immersive 3D/WebGL web projects from any MCP assistant.
MCP server for Appcircle mobile CI/CD platform.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/thomhenriq/mcp-app-demo'
If you have feedback or need assistance with the MCP directory API, please join our Discord server