ext-apps/examples/customer-segmentation-server
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Olivier Chafik 5bbf277882
chore: bump ext-apps to 1.1.0 (#485)
* chore: bump ext-apps to 1.1.0

Features:
- registerAppResource now returns the registered resource (#370)
- Accept UIResourceMeta in both resources/list and resources/read (#410)
- callServerTool throws helpful error when called with a string (#449)
- Add double-connect guard to prevent protocol message handling errors (#450)

Bug fixes:
- Only ignore messages that lack jsonrpc 2.0 in message-transport (#448)
- Align basic-host dark mode styles (#438)

Spec:
- Change Host <> Sandbox communication protocol to SHOULD (#435)
- Clarify UIResourceMeta in both list and read responses (#410)

* fix(debug-server): add missing npm package config (main, bin, types, exports)

Align debug-server package.json with all other server examples:
- main: dist/server.js (was server.ts)
- types: dist/server.d.ts
- bin: mcp-server-debug -> dist/index.js
- exports with types
- files: only dist (remove source server.ts)
2026-02-22 01:18:47 +00:00
..
src feat: compile example servers to JavaScript for npm consumption (#259) 2026-01-14 23:46:17 +00:00
.gitignore Improve consistency and organization of examples for AI learning 2026-01-13 20:48:02 -06:00
grid-cell.png feat(basic-host): URL params, fullscreen mode, unified layout (#266) 2026-01-14 22:09:41 +00:00
main.ts Refactor server startup functions 2026-01-24 09:27:54 -06:00
mcp-app.html Add color-scheme meta tag to all example apps 2025-12-15 11:42:18 -08:00
package.json chore: bump ext-apps to 1.1.0 (#485) 2026-02-22 01:18:47 +00:00
README.md chore: stable spec release 2026-01-26 and SDK v1.0.0 (#362) 2026-01-26 17:31:33 +00:00
screenshot.png feat(basic-host): URL params, fullscreen mode, unified layout (#266) 2026-01-14 22:09:41 +00:00
server.ts fix(examples): resolve DIST_DIR path for npm package execution (#277) 2026-01-15 12:23:13 +00:00
tsconfig.json Add customer-segmentation-server example 2025-12-04 14:32:47 -06:00
tsconfig.server.json feat: compile example servers to JavaScript for npm consumption (#259) 2026-01-14 23:46:17 +00:00
vite.config.ts Add customer-segmentation-server example 2025-12-04 14:32:47 -06:00

Example: Customer Segmentation Explorer

A demo MCP App that displays customer data as an interactive scatter/bubble chart with segment-based clustering. Users can explore different metrics, filter by segment, and click to see detailed customer information.

Account age vs revenue Tickets, NPS, engagement Age, engagement, revenue

MCP Client Configuration

Add to your MCP client configuration (stdio transport):

{
  "mcpServers": {
    "customer-segmentation": {
      "command": "npx",
      "args": [
        "-y",
        "--silent",
        "--registry=https://registry.npmjs.org/",
        "@modelcontextprotocol/server-customer-segmentation",
        "--stdio"
      ]
    }
  }
}

Local Development

To test local modifications, use this configuration (replace ~/code/ext-apps with your clone path):

{
  "mcpServers": {
    "customer-segmentation": {
      "command": "bash",
      "args": [
        "-c",
        "cd ~/code/ext-apps/examples/customer-segmentation-server && npm run build >&2 && node dist/index.js --stdio"
      ]
    }
  }
}

Features

  • Interactive Scatter Plot: Bubble chart visualization using Chart.js with configurable X/Y axes
  • Segment Clustering: 250 customers grouped into 4 segments (Enterprise, Mid-Market, SMB, Startup)
  • Axis Selection: Choose from 6 metrics for each axis (Revenue, Employees, Account Age, Engagement, Tickets, NPS)
  • Size Mapping: Optional bubble sizing by a third metric for additional data dimension
  • Legend Filtering: Click segment pills to show/hide customer groups
  • Detail Panel: Hover or click customers to see name, segment, revenue, engagement, and NPS
  • Theme Support: Adapts to light/dark mode preferences

Running

  1. Install dependencies:

    npm install
    
  2. Build and start the server:

    npm run start:http  # for Streamable HTTP transport
    # OR
    npm run start:stdio  # for stdio transport
    
  3. View using the basic-host example or another MCP Apps-compatible host.

Architecture

Server (server.ts)

Exposes a single get-customer-data tool that returns:

  • Array of 250 generated customer records with segment assignments
  • Segment summary with counts and colors for each group
  • Optional segment filter parameter

The tool is linked to a UI resource via _meta.ui.resourceUri.

App (src/mcp-app.ts)

  • Uses Chart.js bubble chart for the visualization
  • Fetches data once on connection
  • Dropdown controls update chart axes and bubble sizing
  • Custom legend with clickable segment toggles
  • Detail panel updates on hover/click interactions

Data Generator (src/data-generator.ts)

  • Generates realistic customer data with Gaussian clustering around segment centers
  • Each segment has characteristic ranges for revenue, employees, engagement, etc.
  • Company names generated from word-list combinations (e.g., "Apex Data Corp")
  • Data cached in memory for consistency across requests