Skip to main content

Python library for building MCP App UIs — declarative components, themes, and MCP protocol client. Define an app in Python, get self-contained HTML.

Project description

mcpbundles-app-ui

Python library for building MCP App UIs. Define an app declaratively in Python, get self-contained HTML with built-in MCP protocol support and interactive charts.

Installation

pip install mcpbundles-app-ui

Quick Start

from mcpbundles_app_ui import App, LightTheme, Stats, Stat, Card

class MyApp(App):
    name = "My App"
    subtitle = "Analytics overview"
    theme = LightTheme(accent="#3b82f6")

    layout = [
        Stats(
            Stat("preview.total", "Total", primary=True),
            Stat("preview.thisWeek", "This Week"),
        ),
        Card(title="Select an option to explore"),
    ]

# Generate self-contained HTML
html = MyApp().render()

Features

  • Declarative components: Stats, Stat, Card, Grid, Chart.bar(), BarList, RecentList, and more
  • Theme system: LightTheme and DarkTheme with customizable accent colors, fonts, and all design tokens
  • Interactive charts: Built-in Frappe Charts (SVG, CSP-safe, zero dependencies) — bar, line, pie, donut, percentage, heatmap
  • MCP protocol client: Built-in JavaScript for initializeMCP(), callTool(), sendMessage(), askAI()
  • Navigation: Breadcrumb system with setBreadcrumbs(), pushBreadcrumb(), popBreadcrumb()
  • Loading states: showLoading(), hideLoading(), withLoading(), paginateAll()
  • Export utilities: copyToClipboard(), toCSV(), exportAsCSV()
  • Toast notifications: showToast() for success/error feedback
  • Path-based assets: custom_head and custom_scripts accept Path objects for file-based CSS/JS
  • Zero Python dependencies: Only stdlib. Produces standalone HTML with all CSS/JS inline.

Charts

Built-in Frappe Charts provides real interactive SVG charts. Available globally in custom_scripts:

// Bar chart
renderBarChart('container-id', ['Mon', 'Tue', 'Wed'], [10, 20, 15]);

// Line chart with area fill
renderLineChart('container-id', ['Jan', 'Feb', 'Mar'], [100, 150, 130]);

// Pie chart
renderPieChart('container-id', ['Chrome', 'Firefox', 'Safari'], [60, 25, 15]);

// Donut chart
renderPieChart('container-id', labels, values, { donut: true });

// Percentage chart (horizontal stacked bar)
renderPercentageChart('container-id', labels, values);

// Full control
renderChart('container-id', {
  type: 'bar',
  data: {
    labels: ['Q1', 'Q2', 'Q3', 'Q4'],
    datasets: [
      { name: 'Revenue', values: [100, 200, 150, 300] },
      { name: 'Costs', values: [80, 150, 120, 200] }
    ]
  },
  colors: ['#3b82f6', '#ef4444'],
  height: 300,
  barOptions: { stacked: true }
});

// Update existing chart data
updateChart('container-id', newData);

Charts automatically use the app's theme colors (--chart-1 through --chart-6).

Components

Component Description
App Base class for app definitions
Stats Row of statistic cards
Stat Single statistic with data binding
Card Container with optional title
Grid Grid layout (2-4 columns)
Chart.bar() Bar chart with data binding
Chart.comparison() Side-by-side comparison
Chart.funnel() Pipeline/funnel chart
BarList Horizontal bar ranking list
RecentList Recent items list
StageList Pipeline stage list
Raw Escape hatch for custom HTML

Themes

from mcpbundles_app_ui import LightTheme, DarkTheme

# Custom accent color
theme = LightTheme(accent="#8b5cf6")

# Custom fonts
theme = LightTheme(
    accent="#3b82f6",
    font_family="'Inter', system-ui, sans-serif",
    font_url="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap",
)

File-Based Assets

Load CSS/JS from files instead of inline strings:

from pathlib import Path
from mcpbundles_app_ui import App, LightTheme

class MyApp(App):
    name = "My App"
    theme = LightTheme()
    custom_head = Path(__file__).parent / "assets/styles.html"
    custom_scripts = Path(__file__).parent / "assets/app.js"

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcpbundles_app_ui-0.2.1.tar.gz (34.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcpbundles_app_ui-0.2.1-py3-none-any.whl (41.6 kB view details)

Uploaded Python 3

File details

Details for the file mcpbundles_app_ui-0.2.1.tar.gz.

File metadata

  • Download URL: mcpbundles_app_ui-0.2.1.tar.gz
  • Upload date:
  • Size: 34.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mcpbundles_app_ui-0.2.1.tar.gz
Algorithm Hash digest
SHA256 cb3531276602450d6298a6d5db1ad052aaec5de8e6abdaae63dabc40973154fb
MD5 325a0f725e30df3842ada1d826eda371
BLAKE2b-256 c9974833f7d6588cfb25384b7a0d121b8a12f8545adcda0ccaccc4e76c371a8e

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcpbundles_app_ui-0.2.1.tar.gz:

Publisher: publish.yml on thinkchainai/mcpbundles-app-ui

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mcpbundles_app_ui-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for mcpbundles_app_ui-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c2337ba033525b57a59b5250f9d5b55339be2ebff6f5bcd4a7af1b8c6e1a287e
MD5 c6ad7742232ac22cbe4f7d4604af8292
BLAKE2b-256 2e5f901a9d2e08a1c5320ec39eb860f0d8f7cf8f11875e77b4b947182c2ee0e3

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcpbundles_app_ui-0.2.1-py3-none-any.whl:

Publisher: publish.yml on thinkchainai/mcpbundles-app-ui

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page