floom

mcp
Guvenlik Denetimi
Uyari
Health Uyari
  • License — License: MIT
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Low visibility — Only 5 GitHub stars
Code Gecti
  • Code scan — Scanned 12 files during light audit, no dangerous patterns found
Permissions Gecti
  • Permissions — No dangerous permissions requested

Bu listing icin henuz AI raporu yok.

SUMMARY

AI wrote it. floom ships it. Paste Python, get a live app with UI, API, and shareable link. Open source.

README.md

floom

One @app.action → live form, REST API, share link, and MCP.

Cloud (default for most users): deploy and runs happen on Floom’s servers. Paste in the browser or use MCP against your cloud API. No Docker on your machine for that path. Self-host: run Docker (or your stack) when you want Floom on your infra. Agents always target whatever FLOOM_URL is set to (cloud API origin or http://localhost:3001).

License: MIT
CI
Security

Website · Docs · Examples · llms.txt · OSS hub (target): oss.floom.dev (live when DNS and deploy are wired; until then use Docker in this README)


Demo

floom quick start UI
floom deploy flow

What it does

Deploy vs run (ICP): Deploy means “send your app to a Floom control plane” (hosted cloud or your self-host). Run executes in Floom’s sandbox on that side, not on the user’s laptop. Same low-friction idea as paste-to-publish tools (for example static aired.sh), but floom ships runnable Python, REST, generated forms, and secrets, not only static HTML.

The aha in one beat: you write one Python function with type hints. floom gives one live app: a generated form, a REST surface, a share link, and MCP tools that call the same actions. No duplicate logic between browser and IDE.

Who uses what: Cursor and Claude Code (and similar) integrate via MCP (deploy, run, secrets). Functionality is agent- and API-first: behavior lives in the control plane and is exposed through REST, MCP, and CLI. The web UI is a thin wrapper on that same API: paste a script, use generated forms, run, and share. OpenAPI is generated from your Python; you do not hand-author it for Floom apps.

You write a Python function with type hints:

# main.py
from floom import app

@app.action
def generate_invoice(client: str, amount: float, due_date: str):
    pdf = create_pdf(client, amount)
    return {"url": pdf.url}
# floom.yaml (optional - floom auto-detects from type hints)
name: invoicer
version: 1
endpoints:
  POST /generate_invoice:
    summary: Create an invoice PDF
    inputs:
      type: object
      required: [client, amount, due_date]
      properties:
        client: { type: string, example: "Acme Corp" }
        amount: { type: number, example: 1500 }
        due_date: { type: string, example: "2026-05-01" }

floom gives you:

  • A web form with fields auto-generated from your type hints
  • A REST API with OpenAPI spec
  • A permanent share link anyone can use (no expiry)
  • MCP tools for AI agent integration
  • Docker sandboxing for isolated execution

No Dockerfile. No frontend code. No deploy config. See BUILDING.md for the full protocol.

Quick Start

Using Floom cloud: create an account on floom.dev, paste or deploy from the UI, or configure MCP with your cloud API base URL as FLOOM_URL and your API key (see Agent guide). You do not need the Docker command below.

Self-host (Docker):

docker run -p 3000:3000 -p 3001:3001 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /tmp/floom-workspaces:/tmp/floom-workspaces \
  -v /tmp/floom-storage:/tmp/floom-storage \
  -v floom-data:/data \
  ghcr.io/floomhq/floom

Open localhost:3000. Paste a Python function. Hit "Go Live."

How type hints become UI

Python type Generated UI
str Text input
int Number input
float Number input (decimal)
bool Checkbox
Literal["a","b"] Dropdown select
dict JSON editor
Default values Pre-filled placeholders

Built-in storage

Your app can remember things across runs. No database setup.

from floom import app, remember

@app.action
def count_visits(name: str) -> dict:
    visits = (remember("visits") or 0) + 1
    remember("visits", visits)
    return {"message": f"Hello {name}! Visit #{visits}"}

Paste raw scripts

Got code from ChatGPT with no functions or type hints? floom can handle it.

import requests
city = "Berlin"
response = requests.get(f"https://wttr.in/{city}?format=j1")
data = response.json()
print(f"Temperature in {city}: {data['current_condition'][0]['temp_C']}°C")

With FLOOM_AI_ENHANCE_INGEST=1 and GEMINI_API_KEY set, floom can use Google Gemini after mechanical extraction to detect city as a form input, identify requests as a dependency, and wrap the script in a callable function. By default ingest is mechanical only. Get a free key.

Examples

Example What it does
Invoice Generator Create invoices with automatic tax calculation
Text Analyzer Count words, find common phrases, detect sentiment
Unit Converter Convert temperatures and distances between units
Visit Counter Greet visitors and track counts with remember()

For AI agents

floom is built for AI-assisted workflows. Every app gets an OpenAPI spec, and the MCP server gives agents direct access.

MCP setup (Claude Code, Cursor, Windsurf)

One command adds floom to your MCP config:

npx @floomhq/cli setup-mcp

Or add manually to your MCP config:

{
  "mcpServers": {
    "floom": {
      "command": "npx",
      "args": ["-y", "@floomhq/mcp-server"],
      "env": { "FLOOM_URL": "http://localhost:3001" }
    }
  }
}

CLI

npm install -g @floomhq/cli
floom deploy app.py --name "My App"
floom run greet name=world
floom doctor    # verify setup

Common patterns

  • Deploy with HTTP calls: set config: { network: true } in deploy, or RUNNER_NETWORK=bridge on the server
  • Deploy with secrets: use the manage_secrets tool (persistent), or pass secrets in run (one-time)
  • Discover actions: curl http://localhost:3001/v1/apps/my-app
  • Call directly: curl -X POST http://localhost:3001/v1/apps/my-app/greet -H 'Content-Type: application/json' -d '{"name": "world"}'

Resources

Self-hosting

Docker (recommended)

The Quick Start command above runs the all-in-one container. Encryption key is auto-generated and persisted in the floom-data volume.

From source

git clone https://github.com/floomhq/floom
cd floom
npm run setup:local    # generates encryption key + .env
npm install
docker-compose up --build
  • Web UI: http://localhost:3000
  • API: http://localhost:3001
  • Health: http://localhost:3001/health
Environment variables
Variable Required Default Description
MASTER_ENCRYPTION_KEY No Auto-generated 32-byte base64 key for secrets encryption
COMPUTE_BACKEND No docker docker for self-hosted
PORT No 3001 Server port
API_KEY No Bearer token to protect API
RUNNER_IMAGE No floom-runner:latest Docker image for code execution
RUNNER_MEMORY No 512m Memory limit per container
RUNNER_CPUS No 1 CPU limit per container
RUNNER_NETWORK No none Network mode (none for isolation)
FLOOM_AI_ENHANCE_INGEST No (off) Set to 1 or true to opt in to Gemini post-extract ingest
GEMINI_API_KEY No Required only if FLOOM_AI_ENHANCE_INGEST is enabled

See .env.example for the full list.

CLI

npm install -g @floomhq/cli

floom init my-app                          # scaffold main.py + floom.yaml + requirements.txt
floom deploy .                             # deploy current directory
floom validate                             # check floom.yaml + main.py consistency
floom run greet name=world                 # run an action
floom list                                 # list apps
floom logs                                 # view run logs
floom doctor                               # verify setup
floom secrets set API_KEY sk-...           # manage API keys
floom storage list                         # persistent storage
floom share create <endpoint_id>           # create share link
floom setup-mcp                            # MCP config for Claude/Cursor

Architecture

High-level flow:

Python function (type hints)
        |
   OpenAPI schema extraction
        |
   +----+----+
   |         |
 Web form   REST API
   |         |
   Docker sandbox (isolated execution)
        |
     SQLite (state + storage)

Details (single sources of truth, so this README does not duplicate them):

Development

npm install
npm run build   # Build all packages
npm test        # Run all tests

Known Limitations

  • Single instance only: The control plane uses in-memory state for run progress and deploy tracking. Running multiple control plane instances will cause state to be lost between them. A Redis-backed implementation is planned for multi-instance deployments.
  • Artifact serving: Artifacts larger than 1MB are not served inline. S3-backed artifact storage is planned for production use.

Support

Contributing

See CONTRIBUTING.md.

License

MIT. See LICENSE.

Yorumlar (0)

Sonuc bulunamadi