Skip to main content

What is FastApps?

FastApps is a zero-boilerplate framework for building ChatGPT apps powered by OpenAI’s Apps SDK and FastMCP.

Quick Start

Get your first widget running in 5 minutes!

Why FastApps?

Building with the raw Apps SDK requires extensive boilerplate - protocol handlers, tool registration, resource management, and build configuration. FastApps eliminates all of that.

Zero Boilerplate

Just 2 files per widget - a Python tool and a React component. That’s it!

Auto-Discovery

Drop files in server/tools/ and FastApps automatically discovers and registers them.

Type Safety

Full Pydantic validation on backend and TypeScript support on frontend.

Built-in Authentication

OAuth 2.0 support with Auth0, Clerk, and custom providers out of the box.

Quick Example

MCP Tool (Backend)

from fastapps import BaseWidget, Field, ConfigDict
from pydantic import BaseModel
from typing import Dict, Any

class MyWidgetInput(BaseModel):
    model_config = ConfigDict(populate_by_name=True)
    name: str = Field(default="World")

class MyWidgetTool(BaseWidget):
    identifier = "my-widget"
    title = "My Widget"
    input_schema = MyWidgetInput
    invoking = "Processing..."
    invoked = "Done!"
    
    async def execute(self, input_data: MyWidgetInput) -> Dict[str, Any]:
        return {"message": f"Hello, {input_data.name}!"}

React Widget (Frontend)

import React from 'react';
import { useWidgetProps } from 'fastapps';

export default function MyWidget() {
  const props = useWidgetProps();
  return <h1>{props.message}</h1>;
}
That’s all you need! FastApps handles everything else automatically.

Core Features

What You’ll Build

With FastApps, you can create:
  • Interactive dashboards with real-time data
  • Form widgets with validation and submission
  • Data visualizations with charts and graphs
  • API integrations that connect to external services
  • Authenticated widgets with user-specific data

Ready to Get Started?


“You should write your widget logic and UI, not MCP boilerplate.”
Need help? Join our Discord community or check out the GitHub repository.
I