Flyto Core

Flyto Core

Deterministic execution engine for AI agents. 412 modules across 78 categories including browser automation, file I/O, Docker, data parsing, crypto, and scheduling. Supports STDIO and Streamable HTTP transport with execution trace, evidence snapshots, and replay from any step.

Category
访问服务器

README

flyto-core

PyPI version License Python 3.9+

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

A debuggable automation engine. Trace every step. Replay from any point.

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 32 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>


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

412 Modules, 78 Categories

Category Count Examples
browser.* 38 launch, goto, click, extract, screenshot, fill forms, wait
flow.* 24 switch, loop, branch, parallel, retry, circuit breaker, rate limit
array.* 15 filter, sort, map, reduce, unique, chunk, flatten
string.* 11 reverse, uppercase, split, replace, trim, slugify, template
api.* 11 OpenAI, Anthropic, Gemini, Notion, Slack, Telegram
object.* 10 keys, values, merge, pick, omit, get, set, flatten
image.* 9 resize, convert, crop, rotate, watermark, OCR, compress
data.* 8 json/xml/yaml/csv parse and generate
file.* 8 read, write, copy, move, delete, exists, edit, diff
stats.* 8 mean, median, percentile, correlation, standard deviation
validate.* 7 email, url, json, phone, credit card
docker.* 6 run, ps, logs, stop, build, inspect
archive.* 6 zip create/extract, tar create/extract, gzip, gunzip
math.* 6 calculate, round, ceil, floor, power, abs
k8s.* 5 get_pods, apply, logs, scale, describe
crypto.* 4 AES encrypt/decrypt, JWT create/verify
network.* 4 ping, traceroute, whois, port scan
pdf.* 4 parse, extract text, merge, compress
aws.s3.* 4 upload, download, list, delete
google.* 4 Gmail send/search, Calendar create/list events
cache.* 4 get, set, delete, clear (memory + Redis)
ssh.* 3 remote exec, SFTP upload, SFTP download
git.* 3 clone, commit, diff
sandbox.* 3 execute Python, Shell, JavaScript
dns.* 1 DNS lookup (A, AAAA, MX, CNAME, TXT, NS)
monitor.* 1 HTTP health check with SSL cert verification

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

How to Use

<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:

{
  "mcpServers": {
    "flyto-core": {
      "command": "python",
      "args": ["-m", "core.mcp_server"]
    }
  }
}

Your AI gets all 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>


30+ 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 login-test       --url https://myapp.com/login --username user --password pass --success_selector .dashboard
flyto recipe form-fill        --url https://myapp.com/form --data '{"email":"test@example.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.

Security

Report security vulnerabilities via security@flyto.dev. See SECURITY.md for our security policy.

License

Apache License 2.0 — free for personal and commercial use.


Desktop GUI available at flyto2.com

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选