Pydantic v2 schemas and FastMCP decorators for chuk-mcp-ui Views
Project description
chuk-view-schemas
Pydantic v2 schemas and FastMCP decorators for chuk-mcp-ui Views.
Build MCP Apps with interactive UI — charts, maps, tables, dashboards — from Python, with zero JavaScript.
Install
# Schemas only
pip install chuk-view-schemas
# With FastMCP decorator support
pip install chuk-view-schemas[fastmcp]
Quick Start
from mcp.server.fastmcp import FastMCP
from chuk_view_schemas.fastmcp import chart_tool
from chuk_view_schemas.chart import ChartContent, ChartDataset
mcp = FastMCP("my-server")
@chart_tool(mcp, "show_popularity")
async def show_popularity(chart_type: str = "bar") -> ChartContent:
"""Show programming language popularity as an interactive chart."""
return ChartContent(
chartType=chart_type,
title="Language Popularity",
data=[
ChartDataset(
label="Usage %",
values=[
{"label": "Python", "value": 31.0},
{"label": "JavaScript", "value": 25.2},
{"label": "Rust", "value": 18.1},
],
)
],
)
The @chart_tool decorator handles:
- Registering the
ui://resource URI pointing to the hosted chart view - Wrapping the return in a
CallToolResultwithcontent+structuredContent - Generating a text fallback for the LLM
Available Decorators
from chuk_view_schemas.fastmcp import (
map_tool, # Interactive Leaflet map
chart_tool, # Bar, line, pie, scatter, etc.
datatable_tool, # Sortable, filterable table
form_tool, # JSON Schema driven form
markdown_tool, # Rich markdown rendering
video_tool, # HTML5 video player
pdf_tool, # PDF viewer
dashboard_tool, # Multi-panel layout
split_tool, # Two-panel side-by-side
tabs_tool, # Tabbed panels
detail_tool, # Single record display
counter_tool, # Big number with delta
code_tool, # Syntax highlighted code
progress_tool, # Progress bars
confirm_tool, # Confirmation dialog
json_tool, # JSON tree viewer
status_tool, # Traffic light status
view_tool, # Generic (any view type)
)
Schemas
All schemas are Pydantic v2 models with camelCase aliases for JSON serialization:
from chuk_view_schemas import (
ChartContent, ChartDataset,
MapContent, MapLayer,
DataTableContent, Column,
FormContent,
DashboardContent, Panel,
SplitContent, SplitPanel,
TabsContent, Tab,
MarkdownContent,
VideoContent,
PdfContent,
)
View Inference
Automatically suggest the best view for your data:
from chuk_view_schemas import infer_view
suggestion = infer_view([{"lat": 51.5, "lon": -0.1, "name": "London"}])
# ViewSuggestion(view="map", confidence=0.80, reason="Objects contain lat/lon fields")
Hosted Views
All views are pre-built and hosted at versioned URLs on Fly.io:
https://mcp-views.chukai.io/chart/v1
https://mcp-views.chukai.io/map/v1
https://mcp-views.chukai.io/datatable/v1
...
The decorators point at these URLs automatically. Your Python server never serves HTML.
Links
- chuk-mcp-ui repo — 66 pre-built views
- Demo server — 88-tool live demo
- Storybook — Browse all views
- Playground — Try views with your data
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file chuk_view_schemas-0.1.3.tar.gz.
File metadata
- Download URL: chuk_view_schemas-0.1.3.tar.gz
- Upload date:
- Size: 20.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0c8411ed04f58c87374f95345ba84ebe0b76ea45c34ad534fd1049c1c7de2073
|
|
| MD5 |
521f1af0ed2b98f3d20ab9105706fc80
|
|
| BLAKE2b-256 |
b1fc390a7a6518613b10334e109b9b10b08741bdfac100ea1779ed3f2771692f
|
File details
Details for the file chuk_view_schemas-0.1.3-py3-none-any.whl.
File metadata
- Download URL: chuk_view_schemas-0.1.3-py3-none-any.whl
- Upload date:
- Size: 19.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b51846ec83c25567643699062359a88c5797cfc3067ab0ae636a82bd78e945a0
|
|
| MD5 |
f4b082df6009feefa0316e02bd0eceab
|
|
| BLAKE2b-256 |
4f59c8b373df0f75d4ca2ae8aa1ee80442fc0840cca1a4aee0057cbeb38c7c26
|