tui-canvas
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@tui-canvasShow me this week's calendar with events."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
TUI Canvas
Framework-agnostic interactive terminal canvases for AI coding assistants.
Works with OpenCode, Claude Code, Cursor, Gemini CLI, Grok CLI, and any MCP-compatible AI harness.
Supports multiple TUI frameworks: OpenTUI (primary), Ink, and more.
Features
Protocol-first design - Any TUI framework can implement canvases
Multiple implementations - Same canvas in OpenTUI, Ink, Bubbletea, etc.
MCP integration - Works with any AI coding assistant via MCP
tmux integration - Canvases spawn in split panes
Built-in Canvases
Calendar - Weekly view with events, meeting time picker
Document - Markdown viewer/editor with text selection
Flight - Cyberpunk-themed flight booking with seatmaps
Related MCP server: Forge
Quick Start
Install
# Run without installing globally
bunx tui-canvas listMCP Configuration
OpenCode (opencode.json in this repo):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"tui-canvas": {
"type": "local",
"command": ["bun", "run", "packages/mcp/src/index.ts"],
"enabled": true
}
}
}Other MCP clients:
{
"mcpServers": {
"tui-canvas": {
"command": "bunx",
"args": ["tui-canvas"]
}
}
}CLI Usage
# List available canvases
bunx tui-canvas list
# Spawn a canvas (must be in tmux)
bunx tui-canvas spawn calendar --scenario display
bunx tui-canvas spawn document --scenario edit --config '{"content": "# Hello"}'
# Use specific implementation
bunx tui-canvas spawn calendar --implementation ink
bunx tui-canvas spawn calendar --implementation opentuiProject Structure
tui-canvas/
├── packages/
│ ├── protocol/ # Protocol specification & types
│ ├── cli/ # Unified CLI
│ ├── mcp/ # MCP server
│ └── runtime/ # Framework adapters
│ ├── opentui/ # OpenTUI runtime (primary)
│ └── ink/ # Ink runtime
│
├── canvases/ # Canvas implementations
│ ├── calendar/
│ │ ├── manifest.json # Canvas manifest
│ │ ├── opentui/ # OpenTUI implementation
│ │ └── ink/ # Ink implementation
│ ├── document/
│ └── flight/Supported Frameworks
Framework | Status | Description |
OpenTUI | Primary | TypeScript TUI framework (anomalyco/opentui) |
Ink | Secondary | React for terminals |
Bubbletea | Planned | Go TUI framework |
Textual | Planned | Python TUI framework |
Supported AI Harnesses
Harness | Detection |
OpenCode |
|
Claude Code |
|
Cursor |
|
Gemini CLI |
|
Grok CLI |
|
Generic | Fallback for any MCP client |
Creating Canvases
Canvas Manifest
Each canvas has a manifest.json:
{
"id": "my-canvas",
"name": "My Canvas",
"description": "A custom canvas",
"version": "1.0.0",
"scenarios": {
"default": {
"description": "Default scenario",
"configSchema": { ... },
"resultSchema": { ... }
}
},
"implementations": {
"opentui": {
"framework": "opentui",
"reconciler": "solid",
"entrypoint": "./opentui/index.ts"
},
"ink": {
"framework": "ink",
"entrypoint": "./ink/index.tsx"
}
},
"defaultImplementation": "opentui"
}Protocol
Canvases communicate via Unix sockets using the TUI Canvas Protocol:
Canvas → Controller:
{ type: "ready", scenario: string }
{ type: "selected", data: unknown }
{ type: "cancelled", reason?: string }Controller → Canvas:
{ type: "update", config: unknown }
{ type: "close" }Development
# Clone and install
git clone https://github.com/anomalyco/tui-canvas.git
cd tui-canvas
bun install
# Test CLI
bun run packages/cli/src/index.ts list
bun run packages/cli/src/index.ts spawn calendar
# Start MCP server
bun run packages/mcp/src/index.tsRequirements
License
MIT
Credits
Originally based on Claude Canvas. OpenTUI framework: github.com/anomalyco/opentui
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/Czaruno/tui-canvas'
If you have feedback or need assistance with the MCP directory API, please join our Discord server