Create ChatGPT App
A CLI tool for quickly scaffolding ChatGPT applications using the OpenAI Apps SDK and Model Context Protocol (MCP).
Features
- Quick Start: Generate a complete ChatGPT app in seconds
- Widget Templates: Support for CDN, inline, and local widget types
- Extensible: Easy to add new widgets and tools
- Docker Ready: Includes Dockerfile and Docker configuration
- Testing: Pre-configured test structure with pytest
- Well Documented: Comprehensive documentation and code comments
- Interactive CLI: Guided prompts for setup
Installation
pip install create-chatgpt-app
From Source
git clone https://github.com/hemanth/create-chatgpt-app.git
cd create-chatgpt-app
pip install -e .
Quick Start
Create a New Project
create-chatgpt-app init my-app
This will:
- Create a new directory with your project
- Generate all necessary files (main.py, requirements.txt, Dockerfile, etc.)
- Set up a basic widget
- Provide next steps to get started
Interactive Mode
Run without arguments for an interactive experience:
create-chatgpt-app init
You'll be prompted for:
- Project name
- App description
- Initial widget configuration
- Port and host settings
Usage
Initialize a New Project
# Basic usage
create-chatgpt-app init my-app
# With options
create-chatgpt-app init my-app --name "My App" --description "My ChatGPT app"
# Custom port and host
create-chatgpt-app init my-app --port 3000 --host localhost
# Skip Docker files
create-chatgpt-app init my-app --no-docker
# Skip test files
create-chatgpt-app init my-app --no-tests
Add a Widget
Navigate to your project directory and add widgets:
cd my-app
# Interactive mode
create-chatgpt-app add-widget
# With options
create-chatgpt-app add-widget --identifier my-widget --title "My Widget" --type inline
Widget Types
-
CDN: Load widget from external CDN
create-chatgpt-app add-widget --type cdn
-
Inline: Simple HTML inline widget
create-chatgpt-app add-widget --type inline
-
Local: Load from local static files
create-chatgpt-app add-widget --type local
Add a Tool
# Interactive mode
create-chatgpt-app add-tool
# With options
create-chatgpt-app add-tool --identifier my-tool --title "My Tool"
# Tool without widget
create-chatgpt-app add-tool --identifier data-processor --no-widget
List Available Templates
create-chatgpt-app list-templates
Project Structure
After running create-chatgpt-app init my-app, you'll get:
my-app/
├── main.py # Main MCP server implementation
├── requirements.txt # Python dependencies
├── README.md # Project documentation
├── .gitignore # Git ignore patterns
├── Dockerfile # Docker configuration
├── .dockerignore # Docker ignore patterns
└── tests/ # Test directory
├── __init__.py
└── test_main.py # Unit tests
Example Workflow
# Create a new project
create-chatgpt-app init my-app
# Navigate to the project
cd my-app
# Set up virtual environment
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Add more widgets
create-chatgpt-app add-widget --identifier map-widget --title "Map Widget" --type cdn
# Run the server
python main.py
# Test with MCP Inspector
npm install -g @modelcontextprotocol/inspector
mcp-inspector
# Connect to http://localhost:8000/mcp
Generated Code Structure
Main Components
The generated main.py includes:
- Widget Definitions: Data structures for your widgets
- MCP Protocol Handlers:
list_tools(): Register available toolslist_resources(): Expose widgets as resourceslist_resource_templates(): Define resource templates_handle_read_resource(): Serve widget HTML_call_tool_request(): Execute tool logic
- Input Validation: Pydantic models for type-safe inputs
- FastAPI App: HTTP/SSE transport layer
- CORS Configuration: For local development
Customization Points
Edit the generated main.py to:
- Add Business Logic: Implement your tool's functionality in
_call_tool_request() - Modify Input Schema: Update
ToolInputclass andTOOL_INPUT_SCHEMA - Customize Widgets: Edit widget HTML, CSS, and JavaScript
- Add Middleware: Include authentication, rate limiting, etc.
- Connect to Services: Add database, API calls, file processing
Widget Development
CDN Widget Example
AppWidget(
identifier="my-dashboard",
title="Analytics Dashboard",
template_uri="ui://widget/dashboard.html",
invoking="Loading dashboard",
invoked="Dashboard loaded",
html=(
"<div id=\"dashboard-root\"></div>\n"
"<link rel=\"stylesheet\" href=\"https://cdn.example.com/dashboard.css\">\n"
"<script type=\"module\" src=\"https://cdn.example.com/dashboard.js\"></script>"
),
response_text="Dashboard rendered successfully!",
)
Inline Widget Example
AppWidget(
identifier="simple-card",
title="Info Card",
template_uri="ui://widget/card.html",
invoking="Creating card",
invoked="Card created",
html=(
"<div style='padding: 20px; border: 1px solid #ccc; border-radius: 8px;'>"
" <h2>Hello from MCP!</h2>"
" <p>This is a simple inline widget.</p>"
"</div>"
),
response_text="Info card displayed",
)
Testing
The generated project includes a test structure:
# Install test dependencies
pip install pytest pytest-asyncio httpx
# Run tests
pytest
# Run with coverage
pip install pytest-cov
pytest --cov=. --cov-report=html
Docker Support
Build and Run
# Build the image
docker build -t my-app .
# Run the container
docker run -p 8000:8000 my-app
# Run with environment variables
docker run -p 8000:8000 -e PORT=3000 my-app
Docker Compose
Create a docker-compose.yml:
version: '3.8'
services:
app:
build: .
ports:
- "8000:8000"
environment:
- PORT=8000
- HOST=0.0.0.0
restart: unless-stopped
Troubleshooting
Widget Not Rendering
Check:
template_urimatches between widget and metadata- HTML is valid and includes root element
- External CSS/JS URLs are accessible (for CDN widgets)
- MIME type is
text/html+skybridge - Metadata includes
openai/widgetAccessible: true
Input Validation Errors
Verify:
- Field names match between schema and Pydantic model
- Required fields are marked correctly
- Test validation independently
Server Won't Start
Check:
- Port is not already in use:
lsof -i :8000(macOS/Linux) - All dependencies are installed:
pip list - Virtual environment is activated
- Python version is 3.10+:
python --version
Contributing
Contributions are welcome. Please feel free to submit a Pull Request.
Metadata
Release files for create-chatgpt-app 0.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| create_chatgpt_app-0.1.4.tar.gz | 17.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| create_chatgpt_app-0.1.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 35.6 kB
Release files / create_chatgpt_app-0.1.4.tar.gz
| Download URL | create_chatgpt_app-0.1.4.tar.gz |
|---|---|
| Size | 17.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9f3302aa389ac9b28ec7c178694441a3bb97eddc087e24501407e86bd3ab6d59
|
|
BLAKE2b-256 checksum How to use checksums |
144635e094e8ef1e8de363f153dfafcc2b4cf39493a5e38359029d6b05a3936e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / create_chatgpt_app-0.1.4-py3-none-any.whl
| Download URL | create_chatgpt_app-0.1.4-py3-none-any.whl |
|---|---|
| Size | 18.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
169aaebd3652e67505947530f2ddaba517eb56c535d853feebff53e88dff7278
|
|
BLAKE2b-256 checksum How to use checksums |
282397ff0cbb66dbb235c36263cb0ae1e58da2925dfec5d8dd4a4b22ac69b4eb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|