Featured

Deploy OpenClaw in 60 seconds β€” 20% off logoDeploy OpenClaw in 60 seconds β€” 20% off

Launch OpenClaw on Hostinger in about 60 seconds and keep your agent live 24/7. Our referral link gives you 20% off, no coupon code needed.

Launch on Hostinger β†’
Run your Hermes agent on Hostinger, fully managed logoRun your Hermes agent on Hostinger, fully managed

Launch Hermes on Hostinger in one click, fully managed, no VPS knowledge needed. Use code ZACAARON10 for 10% off.

Launch on Hostinger β†’
Crawl and scrape any site into clean data, 10% off logoCrawl and scrape any site into clean data, 10% off

Firecrawl crawls and scrapes any site into clean markdown for your agent. Get 1,000 free credits, and new users get 10% off their first purchase.

Try Firecrawl free β†’
Your own AI agent, running 24/7 with QwikClaw logoYour own AI agent, running 24/7 with QwikClaw

QwikClaw sets up and runs an always-on OpenClaw agent for you. One click, no config files, no server setup.

Deploy now β†’
One API to scrape, enrich, and extract the internet. logoOne API to scrape, enrich, and extract the internet.

Context.dev gives your agents a single API to scrape, enrich, and extract live web data β€” no proxies, no parsers, no maintenance.

Start building free β†’
SetupClaw: done-for-you OpenClaw for founders & exec teams logoSetupClaw: done-for-you OpenClaw for founders & exec teams

White-glove OpenClaw for founders and exec teams (4–50+ employees): we install, harden, integrate your tools, and maintain it β€” secured from day one.

Get it set up for you β†’
SEO data APIs for your agent, $1 free credit logoSEO data APIs for your agent, $1 free credit

DataForSEO gives your agent live access to SERP results, keyword data, backlinks, and on-page SEO data through one API. New accounts get a $1 credit, good for up to 20,000 keyword or backlink lookups.

Try DataForSEO free β†’
Reach 47,000+ AI builders

A flat monthly placement in front of developers actively installing AI tools. No lock-in, cancel anytime.

Advertise here β†’

Works with

Claude CodeClaude DesktopCursorVS CodeClineCodex CLIOpenClaw+ any MCP client

Install to Claude Code

This server doesn't publish a one-line install command. Follow the setup in the source repository.

Summary

flyto-core MCP server](https://glama.ai/mcp/servers/@flytohub/flyto-core/badges/score.svg)](https://glama.ai/mcp/servers/@flytohub/flyto-core) 🐍 🏠 - Deterministic execution engine for AI agents with 412 modules across 78 categories (browser, file,...

README.md

![MseeP.ai Security Assessment Badge](https://mseep.ai/app/flytohub-flyto-core) ![Verified on MseeP](https://mseep.ai/app/9a708224-9666-46b6-8660-dad08fb16096)

Flyto2 Core - Open-Source AI Agent Framework and Workflow Automation Engine

![PyPI version](https://pypi.org/project/flyto-core/) ![License](https://opensource.org/licenses/Apache-2.0) ![Python 3.9+](https://www.python.org/downloads/)

<!-- mcp-name: io.github.flytohub/flyto-core -->

The open-source execution engine for AI agents. 468 modules, MCP-native, triggers, queue, versioning, metering. flyto2.com Β· Cloud Automation Β· Documentation Β· MCP Docs Β· YouTube

Flyto2 Core is the open-source runtime behind Flyto2. It is built for people who want an AI agent framework that actually runs work: browser automation, API integration, web scraping, MCP server automation, replayable YAML recipes, evidence capture, and deterministic tools that agents can call without inventing unreviewed code.

Use it when the question is simple but the job is annoying: "open this page, capture the proof, extract the data, check performance, and let me retry only the failed step." Flyto2 Core gives you a local execution engine for browser automation, workflow replay, AI-agent tool calls, Web Vitals checks, screenshot capture, structured extraction, and audit-ready evidence.

The current public inventory is 468 registry-backed modules across 85 catalog categories, including triggers, queue modules, workflow versioning, metering hooks, browser automation, API calls, data transforms, verification, files, and crypto.

Good fit if you searched for:

  • open source AI agent framework for production workflows
  • Python AI workflow automation with Playwright
  • MCP server automation with trace and replay
  • browser automation that can resume from a failed step

Try in 30 seconds

pip install flyto-core[browser] && playwright install chromium
flyto recipe competitor-intel --url https://github.com/pricing
  Step  1/12  browser.launch         βœ“      420ms
  Step  2/12  browser.goto           βœ“    1,203ms
  Step  3/12  browser.evaluate       βœ“       89ms
  Step  4/12  browser.screenshot     βœ“    1,847ms  β†’ saved intel-desktop.png
  Step  5/12  browser.viewport       βœ“       12ms  β†’ 390Γ—844
  Step  6/12  browser.screenshot     βœ“    1,621ms  β†’ saved intel-mobile.png
  Step  7/12  browser.viewport       βœ“        8ms  β†’ 1280Γ—720
  Step  8/12  browser.performance    βœ“    5,012ms  β†’ Web Vitals captured
  Step  9/12  browser.evaluate       βœ“       45ms
  Step 10/12  browser.evaluate       βœ“       11ms
  Step 11/12  file.write             βœ“        3ms  β†’ saved intel-report.json
  Step 12/12  browser.close          βœ“       67ms

  βœ“ Done in 10.3s β€” 12/12 steps passed

Screenshots captured. Performance metrics extracted. JSON report saved. Every step traced.

<p align="center"> <img src="demo/flyto-core-demo.gif" alt="flyto-core demo: API pipeline β†’ replay β†’ browser automation" width="720"> </p>

---

What happens when step 8 fails?

With a shell script you re-run the whole thing. With flyto-core:

flyto replay --from-step 8

Steps 1–7 are instant. Only step 8 re-executes. Full context preserved.

---

3 recipes to try now

# Competitive pricing: screenshots + Web Vitals + JSON report
flyto recipe competitor-intel --url https://competitor.com/pricing

# Full site audit: SEO + accessibility + performance
flyto recipe full-audit --url https://your-site.com

# Web scraping β†’ CSV export
flyto recipe scrape-to-csv --url https://news.ycombinator.com --selector ".titleline a"

Every recipe is traced. Every run is replayable. See all 41 recipes ->

---

Install

pip install flyto-core            # Core engine + CLI + MCP server
pip install flyto-core[browser]   # + browser automation (Playwright)
playwright install chromium        # one-time browser setup

---

The 85-line problem

Here's what competitive pricing analysis looks like in Python:

<table> <tr> <td width="50%">

Python β€” 85 lines

import asyncio, json, time
from playwright.async_api import async_playwright

async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        page = await browser.new_page()
        await page.goto("https://competitor.com/pricing")

        # Extract pricing
        prices = await page.evaluate("""() => {
            const cards = document.querySelectorAll(
              '[class*="price"]'
            );
            return Array.from(cards).map(
              c => c.textContent.trim()
            );
        }""")

        # Desktop screenshot
        await page.screenshot(
            path="desktop.png", full_page=True
        )

        # Mobile
        await page.set_viewport_size(
            {"width": 390, "height": 844}
        )
        await page.screenshot(
            path="mobile.png", full_page=True
        )

        # Performance
        perf = await page.evaluate("""() => {
            const nav = performance
              .getEntriesByType('navigation')[0];
            return {
              ttfb: nav.responseStart,
              loaded: nav.loadEventEnd
            };
        }""")

        # Save report
        report = {
            "prices": prices,
            "performance": perf,
        }
        with open("report.json", "w") as f:
            json.dump(report, f, indent=2)

        await browser.close()

asyncio.run(main())

</td> <td width="50%">

flyto-core β€” 12 steps

name: Competitor Intel
steps:
  - id: launch
    module: browser.launch
  - id: navigate
    module: browser.goto
    params: { url: "{{url}}" }
  - id: prices
    module: browser.evaluate
    params:
      script: |
        JSON.stringify([
          ...document.querySelectorAll(
            '[class*="price"]'
          )
        ].map(e => e.textContent.trim()))
  - id: desktop_shot
    module: browser.screenshot
    params: { path: desktop.png, full_page: true }
  - id: mobile
    module: browser.viewport
    params: { width: 390, height: 844 }
  - id: mobile_shot
    module: browser.screenshot
    params: { path: mobile.png, full_page: true }
  - id: perf
    module: browser.performance
  - id: save
    module: file.write
    params:
      path: report.json
      content: "${prices.result}"
  - id: close
    module: browser.close

</td> </tr> <tr> <td>

No trace. No replay. No timing. If step 5 fails, re-run everything.

</td> <td>

Full trace. Replay from any step. Per-step timing. Every run is debuggable.

</td> </tr> </table>

---

Current Platform Snapshot

  • Open-source AI agent framework boundary: MCP-compatible clients call reviewed flyto-core modules through schemas, not arbitrary generated production code.
  • AI workflow automation substrate for browser automation, API workflows, data/file operations, AI calls, notifications, verification, trace, evidence, and replay.
  • 468 registry-backed modules across 85 catalog categories. docs/TOOL_CATALOG.md is generated from ModuleRegistry, not hand-counted.
  • 41 built-in recipes for audit, browser automation, data/image work, DevOps, integrations, and deterministic verification.
  • Deterministic verification modules (verification. with warroom. compatibility aliases) support site graph discovery, replay scenario generation, run evidence, and report packs.
  • Hardened outbound and file access in the 2.26.x line: guarded HTTP clients prevent SSRF bypasses, and file/data writes are confined through the sandbox path guard.
  • Replayable browser and workflow execution remains the core contract: every step can produce trace data, evidence snapshots, and targeted replay from the failing point.

Public Naming Contract

  • Use Flyto2 for the product and company-facing brand. Do not use a

shortened legacy spelling in public docs, examples, or SEO copy.

  • Use flyto2.com, docs.flyto2.com, and blog.flyto2.com as the public citation surfaces.
  • Public example contact addresses should use registered @flyto2.com mailboxes such as support@flyto2.com, security@flyto2.com, privacy@flyto2.com, sales@flyto2.com, team@flyto2.com, dev@flyto2.com, alerts@flyto2.com, oncall@flyto2.com, reports@flyto2.com, noreply@flyto2.com, dmarc@flyto2.com, conduct@flyto2.com, admin@flyto2.com, pentest@flyto2.com, hello@flyto2.com, and info@flyto2.com.
  • Public docs, blog, and landing pages should cite the current core facts above instead of stale module counts.

Engine Features

  • Execution Trace β€” structured record of every step: input, output, timing, status
  • Replay β€” re-execute from any step with the original (or modified) context
  • Breakpoints β€” pause execution at any step, inspect state, resume
  • Evidence Snapshots β€” full state before and after each step boundary
  • Data Lineage β€” track data flow across steps, build dependency graphs
  • Timeout Guard β€” configurable workflow-level and per-step timeout protection

Architecture

CLI, MCP, HTTP, Python, and packaged recipes converge on the same workflow engine, module registry, policy, trace, evidence, and replay boundaries. Start with the Technical Whitepaper, then use the Architecture Map and exhaustive source reference for implementation detail.

Configuration

Core is configured through package extras, CLI arguments, workflow parameters, module policy, environment variables, and local run state. Security-sensitive network, filesystem, auth, callback, and permission switches are documented in Configuration; all 93 detected environment readers are linked to source in the generated configuration reference.

---

API / Module Reference

468 Modules, 85 Catalog Categories

| Category | Count | Examples | |----------|-------|----------| | browser. | 54 | launch, goto, click, evaluate, screenshot, performance, challenge | | flow. | 24 | switch, loop, branch, parallel, retry, circuit breaker, rate limit | | array. | 15 | filter, sort, map, reduce, unique, chunk, flatten | | api. | 13 | OpenAI, Anthropic, Gemini, Notion, Slack, Telegram | | data. | 13 | JSON, YAML, CSV, XML parse/generate/convert | | string. | 11 | reverse, uppercase, split, replace, trim, slugify, template | | ai. | 10 | chat, model calls, vision, embeddings, moderation | | object. | 10 | keys, values, merge, pick, omit, get, set, flatten | | testing. | 10 | assertions, scenarios, E2E steps, reports | | image. | 9 | resize, convert, crop, rotate, watermark, OCR, compress | | verify. | 9 | evidence, visual diff, rulesets, annotations | | file. | 8 | read, write, copy, move, delete, exists, edit, diff | | stats. | 8 | mean, median, percentile, correlation, standard deviation | | test. | 8 | API, browser, and visual checks | | check. | 7 | validation and guard checks | | crypto. | 7 | AES encrypt/decrypt, JWT create/verify, hashes | | http. | 7 | get, request, batch, paginate, session | | validate. | 7 | email, url, json, phone, credit card | | 66 more prefixes | 221 | Docker, archive, math, k8s, network, PDF, AWS, cache, git |

See the Full Module Catalog for every module, parameter, and description.

---

How is this different?

| | Playwright / Selenium | Shell scripts | flyto-core | |-|----------------------|---------------|------------| | Step 8 fails | Re-run everything | Re-run everything | flyto replay --from-step 8 | | What happened at step 3? | Add print(), re-run | Add echo, re-run | Full trace: input, output, timing | | Browser + API + file I/O | Write glue code | 3 languages | All built-in | | Share with team | "Clone my repo" | "Clone my repo" | pip install flyto-core | | Run in CI | Wrap in pytest/bash | Fragile | flyto run workflow.yaml |

---

Usage

<details> <summary><b>CLI</b> β€” run workflows from the terminal</summary>

# Run a built-in recipe
flyto recipe site-audit --url https://example.com

# Run your own YAML workflow
flyto run my-workflow.yaml

# List all recipes
flyto recipes

</details>

<details> <summary><b>MCP Server</b> β€” for Claude Code, Cursor, Windsurf</summary>

pip install flyto-core
claude mcp add flyto-core -- python -m core.mcp_server

Or add to your MCP config: ``json { "mcpServers": { "flyto-core": { "command": "python", "args": ["-m", "core.mcp_server"] } } } ``

Your AI gets all 468 modules as tools.

</details>

<details> <summary><b>HTTP API</b> β€” for integrations and remote execution</summary>

pip install flyto-core[api]
flyto serve
# βœ“ flyto-core running on 127.0.0.1:8333

| Endpoint | Purpose | |----------|---------| | POST /v1/workflow/run | Execute workflow with evidence + trace | | POST /v1/workflow/{id}/replay/{step} | Replay from any step | | POST /v1/execute | Execute a single module | | GET /v1/modules | Discover all modules | | POST /mcp | MCP Streamable HTTP transport |

</details>

<details> <summary><b>Python API</b> β€” for programmatic use</summary>

import asyncio
from core.modules.registry import ModuleRegistry

async def main():
    result = await ModuleRegistry.execute(
        "string.reverse",
        params={"text": "Hello"},
        context={}
    )
    print(result)  # {"ok": True, "data": {"result": "olleH"}}

asyncio.run(main())

</details>

---

41 Built-in Recipes

No code required β€” every recipe is a YAML workflow template:

flyto recipes                  # List all recipes

# Audit & Testing
flyto recipe full-audit       --url https://example.com
flyto recipe competitor-intel --url https://github.com/pricing
flyto recipe site-audit       --url https://example.com
flyto recipe web-perf         --url https://example.com
flyto recipe flyto2-ui-login-smoke --login_url https://myapp.com/login --page_url https://myapp.com/projects --username team@flyto2.com --password "$FLYTO_TEST_PASSWORD"
flyto recipe form-fill        --url https://myapp.com/form --data '{"email":"dev@flyto2.com"}'

# Browser Automation
flyto recipe screenshot        --url https://example.com
flyto recipe responsive-report --url https://example.com
flyto recipe page-to-pdf       --url https://example.com
flyto recipe visual-snapshot   --url https://example.com
flyto recipe webpage-archive   --url https://example.com
flyto recipe scrape-page       --url https://example.com --selector h1
flyto recipe scrape-links      --url https://example.com
flyto recipe scrape-table      --url https://en.wikipedia.org/wiki/YAML --selector .wikitable
flyto recipe stock-price       --symbol AAPL

# Data & Image
flyto recipe ocr               --input scan.png
flyto recipe csv-to-json       --input data.csv
flyto recipe image-resize      --input photo.jpg --width 800
flyto recipe image-convert     --input photo.png --format webp

# Network & DevOps
flyto recipe port-scan         --host example.com
flyto recipe whois             --domain example.com
flyto recipe monitor-site      --url https://myapp.com
flyto recipe docker-ps
flyto recipe git-changelog

# Integrations
flyto recipe scrape-to-slack   --url https://example.com --selector h1 --webhook $SLACK_URL
flyto recipe github-issue      --url https://example.com --owner me --repo my-app --title "Bug" --token $GITHUB_TOKEN

Each recipe is a YAML workflow template. Run flyto recipe <name> --help for full options. See docs/RECIPES.md for full documentation.

---

Write Your Own Workflows

Recipes are just YAML files. Write your own:

name: price-monitor
steps:
  - id: open
    module: browser.launch
    params: { headless: true }

  - id: page
    module: browser.goto
    params: { url: "https://competitor.com/pricing" }

  - id: prices
    module: browser.evaluate
    params:
      script: |
        JSON.stringify([...document.querySelectorAll('.price')].map(e => e.textContent))

  - id: save
    module: file.write
    params: { path: "prices.json", content: "${prices.result}" }

  - id: close
    module: browser.close
flyto run price-monitor.yaml

Every run produces an execution trace and state snapshots. If step 3 fails, replay from step 3 β€” no re-running the whole thing.

---

For Module Authors

from core.modules.registry import register_module
from core.modules.schema import compose, presets

@register_module(
    module_id='string.reverse',
    version='1.0.0',
    category='string',
    label='Reverse String',
    description='Reverse the characters in a string',
    params_schema=compose(presets.INPUT_TEXT(required=True)),
    output_schema={'result': {'type': 'string', 'description': 'Reversed string'}},
)
async def string_reverse(context):
    text = str(context['params']['text'])
    return {'ok': True, 'data': {'result': text[::-1]}}

See Module Specification for the complete guide.

---

Contributing

We welcome contributions! See CONTRIBUTING.md for guidelines.

Testing

python -m pytest
python -m ruff check .
flyto recipe full-audit --url https://example.com

Security

Report security vulnerabilities via security@flyto2.com. See SECURITY.md for our security policy.

License

Apache License 2.0 β€” free for personal and commercial use.

---

Cloud Automation Β· Pricing Β· flyto2.com

Hosted deployment

A hosted deployment is available on Frontier AI.

See related servers & alternatives β†’

Related MCP servers

Browse all β†’

Related guides

Hand-picked reading to help you choose and use Browser & Scraping servers.