Skip to main content
Glama
billy-yoyo

React MCP SPA

by billy-yoyo

React MCP SPA

Eine minimale React Single-Page-Anwendung, die in einen einzelnen HTML-Blob gebündelt und von einem MCP Apps-Server bereitgestellt wird. Die SPA verwendet kein URL-Pfad-Routing – sie wählt die zu rendernde Seite aus, indem sie den aktuellen Tool-Namen aus dem MCP-Host-Kontext liest.

Layout

  • packages/ui/ — React + Vite SPA, erstellt als ein einzelner HTML-Blob mittels vite-plugin-singlefile.

  • packages/mcp/ — MCP-Server unter Verwendung von @modelcontextprotocol/ext-apps/server. Registriert Tools (show-home, show-counter, show-profile), die alle auf dieselbe ui://-Ressource verweisen.

  • packages/playground/ — Entwicklungs-Tool, das die SPA innerhalb einer Mock-Chat-UI mit JSON-Eingaben für hostContext und toolResult rendert, sodass Seiten ohne einen MCP-Host getestet werden können.

Related MCP server: routine-mcp

Installation

Erfordert Node.js ≥ 20 und pnpm ≥ 9.

pnpm install

Entwicklung der UI in Isolation

pnpm run dev:ui

Öffnen Sie die ausgegebene URL (z. B. http://localhost:5173). Die SPA erkennt, dass kein MCP-Host vorhanden ist, und zeigt eine Routenauswahl an, damit Sie jede Seite in der Vorschau ansehen können.

Playground — Rendering ohne MCP testen

pnpm run dev:playground

Öffnet sich unter http://localhost:5174. Der Playground verwendet den echten Routen-Renderer der SPA (RouteRenderer aus packages/ui/src/Router.tsx) und bettet ihn in eine Mock-Chat-UI ein. Der Header verfügt über zwei JSON-Textbereiche – einen für den hostContext (steuert über toolInfo.tool.name, welche Seite gerendert wird) und einen für das toolResult, das an die Seite übergeben wird. Preset-Schaltflächen laden fertige Kontext-Ergebnis-Paare für jedes registrierte Tool; Änderungen an einem der Textbereiche rendern die Tool-Ausgabe-Sprechblase des Assistenten live neu.

MCP-Server erstellen und ausführen

pnpm run build       # builds packages/ui → dist/index.html, then packages/mcp
pnpm run serve:mcp   # starts Streamable HTTP server on http://localhost:3001/mcp

Für stdio-Transport:

pnpm --filter @react-mcp-spa/mcp run serve:stdio

Bereitstellung des Servers mit cloudflared

Einige MCP-Clients (einschließlich gehosteter) können localhost nicht erreichen. Verwenden Sie cloudflared, um einen schnellen Tunnel zu öffnen, der eine öffentliche HTTPS-URL zuweist.

Installieren Sie cloudflared über Ihren Betriebssystem-Paketmanager:

# macOS (Homebrew)
brew install cloudflared

# Linux (Debian/Ubuntu)
# See https://pkg.cloudflare.com/ for the apt repo, or grab the .deb from
# https://github.com/cloudflare/cloudflared/releases

# Windows (winget)
winget install --id Cloudflare.cloudflared

Starten Sie den Server lokal:

pnpm run serve:mcp

Führen Sie in einem anderen Terminal Folgendes aus:

cloudflared tunnel --url http://localhost:3001
# or: pnpm run tunnel

cloudflared gibt eine URL wie https://<random>.trycloudflare.com aus. Hängen Sie /mcp an und verwenden Sie diese als Ihre MCP-Server-URL:

https://<random>.trycloudflare.com/mcp

Der Tunnel bleibt bestehen, bis Sie cloudflared beenden. Für einen stabilen Hostnamen konfigurieren Sie einen benannten Cloudflare-Tunnel anstelle eines schnellen Tunnels.

Verpacken als Claude Desktop-Erweiterung (.mcpb)

Das Repo enthält einen Packer, der ein installierbares MCP Bundle für Claude Desktop erstellt. Die Erweiterung führt den Server über stdio aus – es ist kein Tunnel erforderlich.

pnpm run pack:mcpb

Dies erstellt beide Pakete, stellt den kompilierten Server + UI-HTML + Prod-node_modules unter build/mcpb-staging/ bereit und ruft mcpb pack auf, um Folgendes zu erzeugen:

build/react-mcp-spa.mcpb

Um es zu installieren, doppelklicken Sie auf die .mcpb im Finder/Explorer (oder ziehen Sie sie auf Claude Desktop). Claude validiert das Manifest und registriert den Server; nach der Installation sind die drei Tools (show-home, show-counter, show-profile) verfügbar und jedes rendert seine Seite als Inline-React-UI.

Das Bundle-Manifest befindet sich unter mcpb/manifest.json — erhöhen Sie dort (und in packages/mcp/package.json) die version, wenn Sie ein neues Erweiterungs-Release erstellen.

Funktionsweise des Routings

Die SPA liest niemals window.location. Stattdessen verwendet packages/ui/src/App.tsx useApp() aus @modelcontextprotocol/ext-apps/react und:

  1. Liest app.getHostContext().toolInfo.tool.name, um zu wissen, welches Tool der Host aufgerufen hat – dies ist die "Route".

  2. Abonniert app.ontoolresult, um das CallToolResult vom Server zu empfangen und es als Daten an die Seite zu übergeben.

  3. Überwacht app.onhostcontextchanged, damit Aktualisierungen von Design / Safe-Area / Gebietsschema korrekt neu gerendert werden.

Das Hinzufügen einer neuen Seite ist eine Änderung in zwei Schritten:

  1. Registrieren Sie ein Tool in packages/mcp/src/server.ts, wobei _meta.ui.resourceUri auf die gemeinsame ui://react-mcp-spa/app.html-Ressource verweist.

  2. Fügen Sie einen Fall für den Tool-Namen in renderRoute() innerhalb von packages/ui/src/App.tsx hinzu.

F
license - not found
-
quality - not tested
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    B
    quality
    D
    maintenance
    A framework for building interactive UI applications and React-based widgets for ChatGPT and Claude using the Model Context Protocol. It enables developers to create custom tools and visual components that facilitate rich, bidirectional interaction between AI models and users.
    3
    MIT
  • F
    license
    -
    quality
    D
    maintenance
    A Model Context Protocol (MCP) server built with the mcp-framework for developing and managing custom tools. It provides a structured foundation for building and integrating modular components like data processors and API clients into Claude Desktop.
    7
  • F
    license
    A
    quality
    D
    maintenance
    An MCP App that renders an interactive dashboard in Claude conversations to unify calendar events, emails, and documents into a single interface. It enables users to manage their daily schedule and perform actions like meeting preparation through bidirectional communication between the UI and the model.
    2
  • A
    license
    -
    quality
    D
    maintenance
    An MCP bridge server that allows AI tools to call functions and execute code directly within a web browser tab. It enables developers to register custom browser-side tools with full access to the DOM, web APIs, and local application state.
    11
    Apache 2.0

View all related MCP servers

Related MCP Connectors

  • Hosted Amazon Seller Central and Amazon Ads MCP server for Claude, ChatGPT, Cursor, and agents.

  • Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.

  • Build, deploy, and operate hosted web apps on VibeKit (vibekit.bot) from any MCP client.

View all MCP Connectors

Latest Blog Posts

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/billy-yoyo/McpReactSpa'

If you have feedback or need assistance with the MCP directory API, please join our Discord server