Skip to content
Conduit

mcp server

mcp-hub

Interactive micro-tools for humans and AI agents — a reference implementation of MCP Apps (SEP-1865) UI cards over Streamable HTTP MCP.

Gholls/mcp-hubcommunitylistedunreviewed

Set up

Runs on your computer. Pick your agent and operating system.

This project does not publish an install method we can turn into a config. Follow the README instead.

README

synced Oct 27, 2026

English | 中文

mcp-hub

CI License: MIT mcp-ui MCP connector – tool definition quality and endpoint health on Glama

mcp-hub — interactive micro-tools for humans and AI agents

Interactive micro-tools for humans and AI agents, served from mcp.gholl.com.

  • For humans — a login-free playground of fast, single-purpose widgets.
  • For AI agents — the same widgets exposed as MCP tools that render as sandboxed iframe apps (MCP Apps).

Reference implementation. mcp-hub is a working reference for the MCP Apps interactive-UI pattern (SEP-1865): every tool ships a self-contained UI card over resources/read, side by side with the pure-data MCP path.

One tool definition (shared/tools.ts) powers four surfaces: the gallery, the SEO landing page, the sandboxed embed, and the MCP server + discovery document.

Live
Sitehttps://mcp.gholl.com
MCP endpointhttps://mcp.gholl.com/mcp (Streamable HTTP, no auth)
Discoveryhttps://mcp.gholl.com/.well-known/mcp.json
Agent indexhttps://mcp.gholl.com/llms.txt

Tools

The live catalogue has 42 cards across 13 categories (Culture, Data, Design, Developer, Education, Everyday, Finance, Games, Infrastructure, Math, Monitoring, Security, Text). See the gallery at https://mcp.gholl.com or the machine-readable list at https://mcp.gholl.com/.well-known/mcp.json. Full list:

idToolCategoryWhat it does
chrono-energyBaZi Chrono-Energy WheelCultureCompute the Four Pillars (BaZi) from a birth date/time and explore the five-element energy wheel and luck cycles.
csv-chartCSV to ChartDataChart a CSV instantly (bar or line).
echartsECharts Data VisualizationDataRender interactive Apache ECharts charts from an ECharts option — line, bar, pie, radar, scatter, sankey and more.
schema-viewerJSON-LD / Schema ViewerDataInspect, validate and explore structured JSON / JSON-LD with a collapsible tree, syntax checks and JSON-LD detection.
statisticsStatisticsDataMean, median, standard deviation and a histogram for a data set.
color-blindnessColor Blindness SimulatorDesignPreview a color under different color-vision deficiencies.
color-paletteColor PaletteDesignGenerate a harmonious palette from a base color.
color-studioColor Studio & ContrastDesignConvert between hex/RGB/HSL, generate tints and shades, and check WCAG contrast against black and white.
css-effectsCSS Effects StudioDesignDesign gradients, box-shadows and border-radius with live previews and copy-ready CSS.
icon-generatorIcon Logo GeneratorDesignUpload a logo once and export ready-to-use icons for web, PWA, iOS, macOS, Android, Windows and Linux — all generated locally.
favicon-generatorFavicon GeneratorDesignTurn text or an emoji into a favicon.
image-compressorImage CompressorDesignCompress an image in the browser.
image-to-base64Image to Base64DesignConvert an image to a data URI / Base64.
qr-generatorQR Code GeneratorDesignGenerate a QR code from text or a URL.
bit-visualizerBit VisualizerDeveloperSee an integer as a grid of bits, with binary/octal/hex.
cron-debuggerCron & Regex DebuggerDeveloperTranslate a cron schedule into plain language, preview the next runs, and test regular expressions with live highlighting.
hash-generatorHash GeneratorDeveloperCompute SHA-1 / SHA-256 / SHA-512 digests of text as hex and base64, entirely in your browser.
jwt-decoderJWT DecoderDeveloperDecode a JWT into its header, payload and claims, and check whether it is expired.
quizQuizEducationA universal quiz card. The AI defines the questions, the options, each option’s score and how many to show per page; the card renders them and reports the answers back.
resistor-colorResistor Color CodeEverydayDecode a 4-band resistor into ohms.
unit-converterUnit ConverterEverydayConvert length, mass, area, volume, temperature, speed, data and time units.
world-clockWorld ClockEverydayLive times across major cities with a day/night indicator.
chinese-moneyAmount in ChineseFinanceRender an amount in Chinese capital numerals, like a receipt.
compound-interestCompound InterestFinanceProject compound growth over time.
loan-calculatorLoan CalculatorFinanceMonthly payment, total interest and a balance chart.
dice-rollerDice RollerGamesRoll cryptographically-random dice and read the total.
gomokuGomoku · Play vs AIGamesPlay Gomoku (five-in-a-row) against your host AI. The card provides the board, move rules and win detection.
random-pickerRandom PickerGamesSpin a wheel to fairly pick from a list.
reaction-testReaction TestGamesInteractive reaction-time measurement.
typing-testTyping TestGamesMeasure typing speed and accuracy.
vram-calcGPU VRAM & Deployment EstimatorInfrastructureEstimate the VRAM required to serve an LLM and get GPU recommendations with ready-to-copy vLLM / Ollama commands.
conic-sectionsConic SectionsMathPlot circles, ellipses, parabolas and hyperbolas with live sliders, showing foci, eccentricity and asymptotes.
function-grapherFunction GrapherMathPlot common functions with live parameter sliders (linear, inverse, quadratic, power, exponential, logarithmic) and read off key features.
geometry-labGeometry LabMathDrag triangles, quadrilaterals and circles to explore sides, angles, area and the Pythagorean / sine / cosine theorems.
matrix-calculatorMatrix CalculatorMathMultiply, transpose and take determinants of matrices.
trig-labTrigonometry LabMathExplore the unit circle and trigonometric functions y = A·sin(ωx+φ)+k with live sliders for amplitude, period and phase.
api-uptimeAPI Health & LatencyMonitoringProbe an API endpoint, measure live latency, and view a 24h uptime and latency dashboard.
dns-lookupDNS LookupMonitoringResolve DNS records over DNS-over-HTTPS.
http-inspectorHTTP InspectorMonitoringFetch a URL and inspect status, redirects and headers.
password-strengthPassword StrengthSecurityEstimate password strength and entropy.
totp-generatorTOTP GeneratorSecurityGenerate time-based one-time codes (2FA).
text-diffText DiffTextLine-by-line diff between two texts.

Routes

PathPurpose
/Tool gallery + playground (prerendered)
/tools/:idSEO landing page for one tool (prerendered + SPA)
/:categoryCategory landing page, e.g. /math, /developer (prerendered)
/embed/:idSandboxed, per-widget single-file app (iframe / MCP Apps)
/app/:id/index.htmlRaw per-widget bundle (used internally)
/mcp, /mcp/sseMCP endpoint (Streamable HTTP / JSON-RPC)
/.well-known/mcp.jsonAgent discovery document
/llms.txt, /sitemap.xml, /robots.txtSEO / GEO surfaces
/og/:name.pngGenerated Open Graph images

GET /mcp (no text/event-stream) returns the discovery document; a browser gets a help page. POST /mcp is the JSON-RPC transport. See docs/host-integration.md for the full matrix.

Stack

Vite · React 19 · TypeScript · Tailwind CSS v4 · @mcp-ui/* · @modelcontextprotocol/ext-apps · Apache ECharts · KaTeX · Cloudflare Workers + static assets · Vitest · GitHub Actions.

ECharts and KaTeX are imported lazily inside the widgets that need them, so they never affect the first paint of the site or other cards.

Architecture

shared/
  tools.ts            Single source of truth (ToolMeta: schema, i18n, examples)
  calc/               Pure logic reused by widgets AND the MCP server
  mcp/                MCP server, HTTP handler, discovery builders
worker/index.ts       Cloudflare Worker: /mcp, /.well-known, /embed, /tools, SPA
src/
  pages/              Home, ToolPage, EmbedPage
  components/         Layout, ToolCard, ParamTable, WidgetHost, ui, ...
  widgets/<id>/       Interactive widget components (lazy-loaded)
scripts/
  build-embeds.mjs    One self-contained HTML per widget -> dist/app/<id>
  build-og.mjs        Open Graph PNGs -> dist/og
  prerender.mjs       Crawler-visible HTML for / and /tools/<id> -> dist/tools
docs/                 integrations.md (clients), host-integration.md (hosts)

How the UI cards are delivered

Each tool returns a small result (text + structuredContent) plus _meta.ui.resourceUri = ui://gholl/<id>. Hosts fetch the card HTML via resources/read and get a self-contained single-file app (text/html;profile=mcp-app, no external requests). The same widgets are also served as regular pages (/tools/:id) and iframes (/embed/:id).

Performance & SEO/GEO

  • The main site is code-split (lazy routes + lazy widgets); first paint is ~2 KB HTML + ~100 KB gzip total. Widgets load only when opened.
  • Prerendered content is emitted for / and every /tools/:id, so AI crawlers that don't run JS still see full content, parameter tables and links.
  • Rich structured data: WebSite, ItemList, SoftwareApplication, BreadcrumbList, FAQPage, Organization. Per-tool OG images.

Scripts

CommandDescription
pnpm devVite dev server (UI only; no Worker/MCP)
pnpm dev:workerServe dist + Worker locally via wrangler dev (needs pnpm build first)
pnpm buildType-check, build web, per-widget embeds, OG images, prerender
pnpm build:webFast path: type-check + web build only
pnpm previewPreview the built site with vite preview
pnpm test / test:watchVitest unit + MCP integration tests
pnpm lintESLint
pnpm typecheckApp TypeScript
pnpm typecheck:functionsWorker TypeScript
pnpm deploypnpm build && wrangler deploy

Development

pnpm install
pnpm dev            # http://localhost:5173 (UI only)
pnpm build && pnpm dev:worker   # full stack incl. /mcp on http://localhost:8787
pnpm test

Deployment (Cloudflare)

Deploys as a Worker with static assets (wrangler.jsonc):

  • main → worker/index.ts handles /mcp, /mcp/sse, /.well-known/mcp.json, /embed/:id, /tools/:id and the SPA fallback.
  • assets.directory → ./dist, html_handling: none, not_found_handling: single-page-application.

Build command pnpm build, deploy command pnpm exec wrangler deploy (or connect the repo in the Cloudflare dashboard). Bind the custom domain mcp.gholl.com. Generated files (llms.txt, sitemap.xml, robots.txt, dist/app/*, dist/og/*, dist/tools/*) come from shared/tools.ts.

GEO note: Cloudflare's managed robots.txt / Content Signals policy can block AI crawlers (GPTBot, ClaudeBot, Perplexity, …). If you want AI engines to cite the site, allow those crawlers in the Cloudflare dashboard for this zone.

Connect a client

See docs/integrations.md for Claude Desktop / Code, Cursor, VS Code, LibreChat, Dify and FastGPT. Building a host? Use docs/host-integration.md. Registry metadata lives in server.json.

Adding a tool

  1. Add a ToolMeta entry in shared/tools.ts (id, i18n, inputSchema, examples).
  2. Add the widget in src/widgets/<id>/ and register it in src/widgets/registry.ts.
  3. Optionally add a server-side result in shared/mcp/server.ts (runTool).

Everything else — gallery card, landing page, per-widget embed, prerendered HTML, MCP tool listing, discovery document, OG image and sitemap entry — is generated automatically.

License

MIT

↑↓ navigate openesc close