FleetQ
FleetQ's MCP server gives any AI agent full programmatic control over a self-hosted multi-agent orchestration platform — building agents, crews, workflows, and experiments while governing budgets, approvals, and integrations.
Agents & crews — create/update/delete agents with roles, personality, provider/model, thinking budget, or tool profiles; browse templates, manage skill/tool wiring, view config history and roll back revisions, inspect runtime state, leave feedback, and review/apply AI-generated evolution proposals.
Workflows & experiments — surgically edit a workflow DAG (add/update/delete nodes and edges), validate, activate, duplicate, or generate workflows from natural language; run experiments through the 20-state lifecycle (start, pause, resume, retry from a step, kill) and inspect costs, steps, and valid transitions.
Projects — create one-shot or continuous projects linked to workflows or crews, schedule them via cron, presets, or natural-language parsing, trigger immediate runs, pause/resume/archive, and list run history.
Skills & tools — manage reusable skills (LLM, connector, rule, hybrid) with versioning, and run them directly (guardrail checks, multi-model consensus, sandboxed code execution, headless browser).
Signals & triggers — ingest signals, wire connectors (tickets, alerts, Slack, Telegram, HTTP monitors), configure event-driven trigger rules and dry-run test them, plus query/extend the team knowledge graph.
Knowledge & memory — create vector-indexed knowledge bases and ingest text/URLs/files for RAG; store and semantically search team-scoped agent memory.
Approvals & outbound — manage human-in-the-loop approvals and workflow human tasks, and configure/send through email, Slack, Telegram, Discord, Teams, and webhook channels plus HMAC-signed outbound webhooks.
Integrations, git & credentials — connect third-party services (GitHub, Slack, Notion, Airtable, Linear, Stripe) and execute their capabilities; browse/write git repos, branches, commits, and pull requests; store, rotate, and OAuth-manage encrypted credentials.
Artifacts, email & chatbots — read experiment/crew/project artifacts with signed download URLs, build email themes and templates (or AI-generate them), and deploy embeddable agent-backed chatbots with tokens and analytics.
Budget, team & platform ops — check balances, pre-flight cost guards, and spend forecasts; manage team members, BYOK keys, API tokens, and KMS keys; view health, KPIs, audit logs, and semantic cache stats; super-admin actions like tenant suspension, billing credits/refunds, and session revocation; bridge management and Boruna script execution.
Write and destructive actions are permission-gated (member/admin/owner/super-admin tiers), audit-logged, and often credit-metered or require explicit confirmation.
Connects to Airtable via a unified driver interface with OAuth 2.0 support, enabling agents to interact with records and databases.
Connects to GitHub using a unified driver interface and OAuth 2.0 to allow agents to perform repository and development-related operations.
Integrates Google's AI models into the platform for agent reasoning and execution via the unified AI Gateway.
Connects to Linear via OAuth 2.0, allowing agents to manage issues and track project milestones programmatically.
Integrates with Notion via a unified driver interface for agent-driven workspace management and documentation.
Supports local LLM execution through Ollama, featuring 17 preset models and SSRF protection for private AI agents.
Provides integration with OpenAI's models and OpenAI-compatible servers like LM Studio, vLLM, and llama.cpp.
Enables the use of Replicate as a pluggable compute provider for running AI models as reusable skills.
Supports multi-channel communication including inbound signal ingestion and outbound message delivery to Slack.
Connects to Stripe via a unified driver interface to enable agents to interact with financial data and workflows.
Enables outbound message delivery and experiment updates via Telegram.
FleetQ — Open-Source AI Agent Orchestration Platform
Self-hosted mission control for AI agents. Build, run, and monitor autonomous multi-agent systems with a visual DAG builder, human-in-the-loop approvals, MCP server integration, and full audit trail. Works with Claude, GPT-4o, Gemini, Ollama, Codex, Claude Code, and any OpenAI-compatible LLM.
Keywords: AI agents · agent orchestration · MCP server · Model Context Protocol · LangGraph alternative · CrewAI alternative · n8n for AI · Claude agents · LLM workflow · autonomous agents · agent framework · AI automation · self-hosted
☁️ Prefer managed? Try FleetQ Cloud — zero setup, free tier. ⭐ Like the project? Give it a star on GitHub — it helps others find FleetQ.
Table of Contents
Related MCP server: LangChain Agent MCP Server
Why FleetQ?
Most agent frameworks give you a Python notebook. FleetQ gives you a production platform.
🧩 670+ MCP tools across 60+ domains — every feature is exposed via Model Context Protocol, so any LLM (Claude Desktop, Cursor, ChatGPT, local agents) can drive the platform programmatically. New in 1.27: web UIs for previously headless capabilities (agent sessions, release signing keys, drift & eval monitors, broadcasts, test suites, CSV import); eight outbound chat channels as first-class drivers; the Agentic AI Flywheel (self-growing eval set + drift/production monitors); policy-governed autonomy (versioned per-agent policies + replay); cost-aware orchestration and Return on Cognitive Spend (ROCS) metrics.
🔁 Visual DAG workflows with 8 node types (agent, conditional, human-task, switch, dynamic-fork, do-while, compensation, sub-workflow) — no Python glue code.
👥 Multi-agent crews with coordinator/worker/reviewer roles, weighted QA scoring, and cross-validation.
🛡️ Real-World Action governance — assistant tool calls, integration writes, and git pushes route through a per-tier risk policy (auto / ask / reject for low / medium / high). Approvals auto-execute. Audit trail attached.
💰 Budget controls with a real credit ledger, pessimistic locking, and auto-pause on overspend — not just token counters.
🧠 Agent evolution — LLM analyzes execution history and proposes config changes you approve with one click.
⚙️ BYOK + Local LLMs — Anthropic, OpenAI, Google, plus Ollama, LM Studio, vLLM, Codex, Claude Code. Zero vendor lock-in.
🔒 Production-grade — tenant isolation, encrypted credential vault, HMAC webhooks, SSRF guards, circuit breakers, audit trail.
📊 OpenTelemetry observability — structured error codes (gRPC-canonical), deadline propagation, distributed tracing. Jaeger UI one-command away. Per-team OTLP collector endpoints for BYO observability.
📈 Live team graph — Cytoscape.js force-directed visualization of agents, humans, and crews. Real-time updates via Laravel Reverb WebSockets.
🏠 Self-host or cloud — MIT-friendly AGPLv3 license, runs on Docker Compose, or use FleetQ Cloud.
Key Concepts
Concept | What it is | When to use |
Agent | A configured AI personality with role, goal, backstory, skills, and tool access | The basic unit — one agent per specialized task |
Skill | A reusable LLM prompt, rule, connector, or GPU compute call | When multiple agents need the same capability |
Experiment | A stateful run through a 20-stage pipeline (scoring → planning → building → executing → evaluating) | Any non-trivial agent task with lifecycle |
Crew | A team of agents working on one goal (sequential, parallel, hierarchical, adversarial, fanout, chat-room) | Multi-perspective tasks or when you need review/QA |
Workflow | A visual DAG template (reusable across experiments) with branching, loops, human-tasks | Recurring processes — CI/CD, content pipelines, QA flows |
Project | A continuous (cron-scheduled) or one-shot container for experiments, with budget + milestones | Long-running initiatives, scheduled agent work |
Signal | An inbound event (webhook, RSS, email, bug report, GitHub issue) that can trigger agents | Event-driven automation |
MCP Tool | A programmatic action any LLM can call to query or mutate the platform | Expose FleetQ to external agents (Claude, Cursor, etc.) |
Screenshots
Dashboard KPI overview with active experiments, success rate, budget spend, and pending approvals.
Agent Template Gallery Browse 14 pre-built agent templates across 5 categories. Search, filter by category, and deploy with one click.
Agent LLM Configuration Per-agent provider and model selection with fallback chains. Supports Anthropic, OpenAI, Google, and local agents.
Agent Evolution AI-driven agent self-improvement. Analyze execution history, propose personality and config changes, and apply with one click.
Crew Execution Live progress tracking during multi-agent crew execution. Each task shows its assigned skill, provider, and elapsed time.
Task Output Expand any completed task to inspect the AI-generated output, including structured JSON responses.
Visual Workflow Builder DAG-based workflow editor with conditional branching, human tasks, switch nodes, and dynamic forks.
Tool Management Manage MCP servers, built-in tools, and external integrations with risk classification and per-agent assignment.
AI Assistant Sidebar Context-aware AI chat embedded in every page with 28 built-in tools for querying and managing the platform.
Experiment Detail Full experiment lifecycle view with timeline, tasks, transitions, artifacts, metrics, and outbound delivery.
Settings & Webhooks Global platform settings, AI provider keys (BYOK), outbound connectors, and webhook configuration.
Error Handling Failed tasks display detailed error information including provider, error type, and request IDs for debugging.
Features
Agents, crews, and workflows
AI Agents — role, goal, backstory, personality traits, skill assignments, per-agent provider/model fallback chains
Agent Templates — 14 pre-built templates across 5 categories (engineering, content, business, design, research)
Agent Evolution — LLM analyzes execution history, proposes config changes, one-click approval
Agent Crews — Multi-agent teams with coordinator/QA/worker roles, 7 process types (sequential, parallel, hierarchical, self-claim, adversarial, fanout, chat-room), weighted QA scoring
Pre-Execution Scout Phase — cheap LLM pre-call identifies what knowledge the agent needs → targeted semantic search instead of generic recall
Step Budget Awareness — agent system prompt targets 80% of allowed steps for core work, reserves the rest for synthesis
Experiment Pipeline — 20-state machine with automatic stage progression (scoring → planning → building → approval → executing → metrics → evaluating)
Visual Workflow DAG — 8 node types (agent, conditional, human-task, switch, dynamic-fork, do-while, compensation, sub-workflow). Pre-built Web Dev Cycle template. NL → workflow generator.
Projects — one-shot and continuous projects with cron scheduling, budget caps, milestones, overlap policies
LLMs and compute
BYOK — bring your own keys for Anthropic (Claude), OpenAI (GPT-4o), Google (Gemini)
Local LLMs — Ollama, LM Studio, vLLM, llama.cpp via OpenAI-compatible endpoints; 17 preset Ollama models; SSRF protection
Local Agents — Codex and Claude Code as execution backends (auto-detected, zero cost)
Portkey Gateway — optional drop-in that unlocks 250+ LLM providers with semantic caching and fallbacks
RunPod GPU Integration — invoke RunPod serverless endpoints or manage full GPU pod lifecycles as skills; BYOK API key; spot pricing
Pluggable Compute Providers —
gpu_computeskills backed by RunPod, Replicate, Fal.ai, Vast.aiAI Gateway — provider-agnostic via PrismPHP with 6-layer middleware (rate-limit, budget, idempotency, semantic-cache, schema-validation, usage-tracking), circuit breakers, fallback chains
Semantic Cache — pgvector-backed cosine similarity (threshold 0.92) cross-team cache — cuts LLM spend on repeat prompts
Signals, triggers, outbound
Signal connectors — 20+ drivers: webhook, RSS, IMAP, Slack, Discord, WhatsApp, GitHub, Linear, Jira, PagerDuty, Sentry, Datadog, ClearCue, Telegram, Matrix, Notion, Confluence, Screenpipe, Searxng, more
Bug Report signals — lightweight QA pipeline with public JS widget, screenshot + console + network + action log capture, threaded comments (reporter + agent + support), agent delegation, SLA escalation
Trigger rules — event-driven automation with condition evaluator, dry-run testing
Multi-Channel Outbound — Email (SMTP), Webhook, ntfy plus eight chat channels as first-class drivers (Telegram, Slack, Discord, Microsoft Teams, Google Chat, Matrix, Signal, Supabase Realtime), each with a config page, rate limiting and blacklist
Webhooks — inbound (HMAC-SHA256) + outbound (retry, event filtering)
Human-in-the-loop, budgets, security
Approvals — inbox with SLA enforcement + escalation
Human Tasks — embedded form schemas on workflow nodes
Credit Ledger — per-experiment and per-project with pessimistic locking and auto-pause on overspend
Credential Vault — encrypted external service credentials with rotation, OAuth2, expiry tracking, per-project injection
SSH tools — TOFU (Trust On First Use) fingerprint verification, per-tool allowed-commands whitelist, multi-layer command security policy
Audit Trail — full activity log (spatie/activitylog), searchable + filterable
Tenant Isolation — multi-layer
TeamScope+BelongsToTeam+withoutGlobalScopes()discipline
Integrations & web dev pipeline
Integrations — GitHub, Slack, Notion, Airtable, Linear, Stripe, Vercel, Netlify, generic webhook/polling with OAuth 2.0
Autonomous Web Dev Pipeline — agents can open PRs, merge, dispatch CI workflows, create releases, trigger Vercel/Netlify/SSH deploys through MCP tools
Website Builder — AI-generated static sites with 8 widget types, Vercel + ZIP deployment drivers, form submissions, blog/navigation/contact widgets
Founder Mode pack — marketplace bundle of 6 persona agents (Strategist, Product Lead, Growth Hacker, Finance Advisor, Ops Manager, Risk Officer), 20 framework skills (RICE, SPIN, BANT, MEDDIC, OKRs, Shape Up, Unit Economics, Kano, TAM-SAM-SOM, K-Factor, NPV-IRR, RACI, A/B Testing, OWASP), 5 pre-built workflows
Marketplace — browse, publish, install shared skills, agents, workflows, and bundles with AI risk scanning
API & MCP surface
REST API — 175+ endpoints under
/api/v1/with Sanctum auth, cursor pagination, auto-generated OpenAPI 3.1 at/docs/apiMCP Server — 670+ Model Context Protocol tools across 60+ domains (stdio + HTTP/SSE + OAuth2/PKCE)
Real-World Action governance —
ActionProposalflow gates assistant tool calls, integration writes, and git pushes through a per-tier risk policy with auto-execute on approvalPublic discovery endpoint —
GET /.well-known/fleetqreturns a config-gated capability manifest so external AI tools can auto-configureLive team graph —
/team-graphpage with real-time updates via Laravel Reverb WebSocketsStructured MCP errors — canonical gRPC-style error codes (
UNAVAILABLE,PERMISSION_DENIED,RESOURCE_EXHAUSTED,DEADLINE_EXCEEDED,INVALID_ARGUMENT,FAILED_PRECONDITION,NOT_FOUND,INTERNAL) with retryable hints — agents know when to retry vs. fail fastPer-tool deadlines — optional
deadline_msparameter on every MCP tool; agents can bound wall-clock time per callOpenTelemetry tracing — OTLP HTTP exporter, Jaeger all-in-one via
docker compose --profile observability up, spans for MCP tool → AI gateway → LLM providerTool Management — MCP servers (stdio/HTTP), built-in tools (bash/filesystem/browser), risk classification, per-agent assignment
MCP client compatibility — Claude Desktop, Claude.ai, ChatGPT Apps, Cursor, Codex, Claude Code, Gemini CLI, any OAuth2 client
Infrastructure
Queue Management — Laravel Horizon with 6 priority queues and auto-scaling
Testing — regression test suites for agent outputs with automated evaluation
Per-Call Working Directory — local/bridge agents can operate in a configured working directory per-agent, isolated project contexts
Use Cases
FleetQ is built for teams running AI agents in production, not toy demos.
Autonomous dev pipelines — agent opens PR → CI runs → reviewer agent approves → merge → deploy. Human approves only on risk signals.
Customer support triage — bug report widget → agent extracts reproduction steps from console/network log → experiment runs → notifies reporter with fix or agent-generated workaround.
Multi-agent research — crew of Strategist + Researcher + Writer with QA reviewer. Each step weighted by domain rubric.
Scheduled content ops — continuous project runs daily, each run executes a DAG: draft → review → SEO-check → publish → schedule social.
Incident response — PagerDuty/Sentry signal → trigger rule → diagnosis agent → human approval on runbook action → Slack notify.
GPU workloads — agent calls
gpu_computeskill on RunPod serverless (Whisper, FLUX, Bark) as part of a larger workflow, with cost accounting.Local-first agent dev — Ollama + Codex + Claude Code auto-detected, zero API cost for prototyping; switch to cloud providers for production.
Bring FleetQ into Claude — expose your internal data + tools as MCP server, Claude Desktop/ChatGPT/Cursor can drive the platform programmatically.
How FleetQ compares
FleetQ | n8n | CrewAI | LangGraph | Make.com | |
Open source | ✅ AGPLv3 | ✅ Sustainable Use | ✅ MIT | ✅ MIT | ❌ Proprietary |
Visual DAG builder | ✅ 8 node types | ✅ (not AI-first) | ❌ | ❌ | ✅ |
Multi-agent crews | ✅ 7 process types | ❌ | ✅ | ✅ (build-your-own) | ❌ |
MCP server (native) | ✅ 670+ tools | ❌ | ❌ | ❌ | ❌ |
Human-in-the-loop | ✅ native | ⚠️ workaround | ⚠️ code | ⚠️ code | ⚠️ approve-node |
Budget ledger + locks | ✅ pessimistic | ❌ | ❌ | ❌ | ❌ |
Audit trail | ✅ every action | ✅ | ❌ | ❌ | ✅ |
BYOK + local LLMs | ✅ both | ⚠️ BYOK only | ⚠️ depends | ⚠️ BYOK | ❌ |
Self-hosted | ✅ Docker Compose | ✅ | n/a (library) | n/a (library) | ❌ |
Agent evolution (self-improve) | ✅ | ❌ | ❌ | ❌ | ❌ |
OpenTelemetry tracing | ✅ native | ❌ | ❌ | ⚠️ partial | ❌ |
Credit/usage metering | ✅ per-team/project | ❌ | ❌ | ❌ | per-workspace |
TL;DR — if you're building production agent systems with LLMs and want visual workflows + MCP + human oversight, FleetQ is the only platform that bundles all of it.
Quick Start (Docker)
git clone https://github.com/escapeboy/agent-fleet-o.git
cd agent-fleet
make installThis will:
Copy
.env.exampleto.envBuild and start all Docker services
Run the interactive setup wizard (database, admin account, LLM provider)
Visit http://localhost:8080 when complete.
Quick Start (Manual — Web Setup)
Requirements: PHP 8.4+, PostgreSQL 17+, Redis 7+, Node.js 20+, Composer
git clone https://github.com/escapeboy/agent-fleet-o.git
cd agent-fleet
composer install
npm install && npm run build
cp .env.example .env
# Edit .env — set DB_HOST, DB_DATABASE, DB_USERNAME, DB_PASSWORD, REDIS_HOST
php artisan key:generate
php artisan migrate
php artisan horizon &
php artisan serveThen open http://localhost:8000 in your browser. The setup page will guide you through creating your admin account.
Alternative: Run
php artisan app:installfor an interactive CLI setup wizard that also seeds default agents and skills.
Authentication
No email verification — the self-hosted edition skips email verification entirely. Accounts are active immediately on registration.
Single user — all registered users join the default workspace automatically.
No-Password Mode (local installs)
If you're running FleetQ locally on your own machine and don't want to enter a password on every visit, set APP_AUTH_BYPASS=true in .env:
APP_AUTH_BYPASS=true # Auto-login as first user
APP_ENV=local # Required — bypass is disabled in productionWith bypass enabled, the app logs you in automatically on every request. A logout link is still shown but you'll be logged back in on the next page load — this is intentional.
Warning: Never set
APP_AUTH_BYPASS=trueon a server accessible from the internet.
Configuration
All configuration is in .env. Key variables:
# Database (PostgreSQL required)
DB_CONNECTION=pgsql
DB_HOST=postgres
DB_DATABASE=agent_fleet
# Redis (queues, cache, sessions, locks)
REDIS_HOST=redis
REDIS_DB=0 # Queues
REDIS_CACHE_DB=1 # Cache
REDIS_LOCK_DB=2 # Locks
# LLM Providers -- at least one required for AI features
ANTHROPIC_API_KEY=
OPENAI_API_KEY=
GOOGLE_AI_API_KEY=
# Auth bypass -- local no-password mode (never use in production)
APP_AUTH_BYPASS=falseAdditional LLM keys can be configured in Settings > AI Provider Keys after login.
To use local models (Ollama, LM Studio, vLLM):
LOCAL_LLM_ENABLED=true
LOCAL_LLM_SSRF_PROTECTION=false # set false if Ollama is on a LAN IP (192.168.x.x)
LOCAL_LLM_TIMEOUT=180Then configure endpoints in Settings > Local LLM Endpoints.
SSH Host Access
Agents can execute commands on the host machine (or any remote server) via SSH using the built-in SSH tool type. This is useful for running local scripts, interacting with the filesystem, or orchestrating host-level processes from an agent.
How it works
The platform stores SSH private keys encrypted in the Credential vault.
An SSH Tool is configured with
host,port,username,credential_id, and an optionalallowed_commandswhitelist.On the first connection to a host, the server's public key fingerprint is stored via TOFU (Trust On First Use). Subsequent connections verify the fingerprint — a mismatch raises an error to prevent MITM attacks.
Manage trusted fingerprints via Settings > SSH Fingerprints or the
tool_ssh_fingerprintsMCP tool.
Setup (Docker — connecting container to host)
The containers reach the host machine via host.docker.internal, which is pre-configured in docker-compose.yml via extra_hosts: host.docker.internal:host-gateway.
Step 1 — Enable SSH on the host
OS | Command |
macOS | System Settings → General → Sharing → Remote Login → On |
Ubuntu/Debian |
|
Fedora/RHEL |
|
Windows | Settings → System → Optional Features → OpenSSH Server, then |
Step 2 — Generate an SSH key pair
ssh-keygen -t ed25519 -C "fleetq-agent@local" -f ~/.ssh/fleetq_agent_key -N ""Step 3 — Authorize the key on the host
cat ~/.ssh/fleetq_agent_key.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keysStep 4 — Create a Credential in FleetQ
Navigate to Credentials → New Credential:
Type:
SSH KeyPaste the contents of
~/.ssh/fleetq_agent_key(private key)
Or via API:
curl -X POST http://localhost:8080/api/v1/credentials \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Host SSH Key",
"credential_type": "ssh_key",
"secret_data": {"private_key": "<contents of fleetq_agent_key>"}
}'Step 5 — Create an SSH Tool
Navigate to Tools → New Tool → Built-in → SSH Remote, or via API:
curl -X POST http://localhost:8080/api/v1/tools \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Host SSH",
"type": "built_in",
"risk_level": "destructive",
"transport_config": {
"kind": "ssh",
"host": "host.docker.internal",
"port": 22,
"username": "your-username",
"credential_id": "<credential-id>",
"allowed_commands": ["ls", "pwd", "whoami", "uname", "date", "df"]
},
"settings": {"timeout": 30}
}'Step 6 — Assign the tool to an agent
In the Agent detail page, go to Tools and assign the SSH tool. The agent will now have an ssh_execute function available during execution.
Command security policy
The platform enforces a multi-layer security hierarchy for bash and SSH commands:
Platform-level — always blocked:
rm -rf /,mkfs,shutdown,reboot, pipe-to-shell patternsOrganization-level — configure in Settings → Security Policy or via the
tool_bash_policyMCP toolTool-level —
allowed_commandswhitelist in the tool's transport configProject-level — additional restrictions in project settings
Agent-level — per-agent overrides on the tool pivot
More restrictive layers always win. A command blocked at the platform level cannot be unblocked by any other layer.
SSH fingerprint management
Trusted host fingerprints are viewable and removable via:
API:
GET /api/v1/ssh-fingerprints/DELETE /api/v1/ssh-fingerprints/{id}MCP:
tool_ssh_fingerprintswithlistordeleteaction
Remove a fingerprint when a host's SSH key is legitimately rotated — the next connection will re-verify via TOFU.
Architecture
flowchart LR
subgraph Clients["Operators & external agents"]
UI["Admin UI — Livewire 4 + Alpine"]
MCPCLI["MCP clients (Claude Desktop, Cursor, Codex, Claude Code)"]
APIC["REST clients — /api/v1/* (Sanctum)"]
SIG["Inbound signals (webhook / RSS / IMAP / Slack / Telegram)"]
end
UI --> WEB
APIC --> API
MCPCLI -->|HTTP/SSE or stdio| MCP
SIG --> INGEST
subgraph App["FleetQ app (Laravel 13 / PHP 8.4)"]
WEB["Web routes (auth:web)"] --> DOM
API["/api/v1/* — Sanctum tokens"] --> DOM
MCP["AgentFleetServer — 670+ MCP tools / 60+ domains"] --> DOM
INGEST["SignalWebhookController / IngestSignalAction"] --> TRIG["TriggerRule evaluator"]
TRIG --> DOM
DOM["Domain layer — Agent / Crew / Experiment / Workflow / Project / Approval / Budget / Tool / Credential / Skill / Outbound"]
DOM --> SM["ExperimentStateMachine (20 states)"]
SM --> EVT(("ExperimentTransitioned event"))
EVT --> STAGE["BaseStageJob + PlaybookExecutor"]
STAGE --> GATEWAY["AI Gateway (PrismPHP) — 6-layer middleware + circuit breakers"]
GATEWAY --> LLM["Providers: Anthropic / OpenAI / Google / Ollama / vLLM / Codex / Claude Code"]
STAGE --> TOOLS["ToolTranslator — MCP stdio/HTTP, bash, filesystem, browser, SSH (TOFU)"]
STAGE --> APPR["ApprovalRequest / HumanTask (auth:web inbox)"]
STAGE --> OUT["Outbound connectors — Email / Telegram / Slack / Webhook / ntfy"]
STAGE --> ARTI[("Artifact + ArtifactVersion")]
DOM --> DB[("Postgres 17 + pgvector — semantic cache, UUIDv7, JSONB+GIN")]
STAGE --> QUEUE[("Redis 7 — 6 Horizon queues, cache, locks")]
APPR --> DB
ARTI --> DB
end
subgraph Optional["Optional Docker profiles"]
REVERB["Reverb — WebSocket live team graph"]
BROWSER["browserless (Chromium)"]
SEARX["searxng"]
VOICE["voice-worker (LiveKit / Deepgram)"]
SANDBOX["bash_sidecar (sandboxed shell)"]
RELAY["fleetq-bridge relay"]
JAEGER["Jaeger — OTLP traces (--profile observability)"]
end
App -.OTLP spans.-> JAEGER
UI <-->|WebSocket| REVERB
TOOLS -.->|browser tools| BROWSER
TOOLS -.->|web search skill| SEARX
TOOLS -.->|bash skill| SANDBOX
App <-->|relay| RELAY
DOM <--> VOICEThe platform is a single Laravel 13 monolith that exposes three coequal control surfaces over the same domain layer: the Livewire admin UI, a Sanctum-authenticated REST API at /api/v1/* (~175 endpoints), and AgentFleetServer — an MCP server with 670+ tools across 60+ domains served over both HTTP/SSE and local stdio. Inbound signals (webhook, RSS, IMAP, Slack, Telegram, and the rest of the 20+ connectors) flow through IngestSignalAction and the TriggerRule evaluator into the domain layer, where the ExperimentStateMachine walks a 20-state pipeline by emitting ExperimentTransitioned events whose listeners dispatch the next BaseStageJob onto Horizon-managed Redis queues. Stage jobs talk to LLMs through the PrismPHP-backed AI Gateway (rate-limit, budget, idempotency, semantic-cache, schema-validation, usage-tracking middleware + circuit breakers + provider fallbacks), invoke Tool instances translated to PrismPHP tool calls (MCP stdio/HTTP, built-in bash/filesystem/browser, SSH with TOFU fingerprints), park ApprovalRequest/HumanTask records for the human-in-the-loop inbox, and persist Artifact versions plus deliver outbound messages over Email/Telegram/Slack/Webhook/ntfy. State and tenant data live in Postgres 17 with pgvector (semantic cache, UUIDv7 primary keys, JSONB+GIN indexes); Redis 7 carries the six Horizon queues, application cache, and pessimistic budget locks. Optional Docker Compose profiles add Reverb for the live team-graph WebSocket, browserless for browser tools, searxng for web search, a voice worker (LiveKit/Deepgram), a sandboxed bash sidecar, the fleetq-bridge relay, and Jaeger for OpenTelemetry tracing via --profile observability.
Built with Laravel 13, Livewire 4, and Tailwind CSS. Domain-driven design with 45 bounded contexts — table below shows the 17 primary domains:
Domain | Purpose |
Agent | AI agent configs, execution, personality, evolution |
Crew | Multi-agent teams with lead/member roles |
Experiment | Pipeline, state machine, playbooks |
Signal | Inbound data ingestion |
Outbound | Multi-channel delivery |
Approval | Human-in-the-loop reviews and human tasks |
Budget | Credit ledger, cost enforcement |
Metrics | Measurement, revenue attribution |
Audit | Activity logging |
Skill | Reusable AI skill definitions |
Tool | MCP servers, built-in tools, risk classification |
Credential | Encrypted external service credentials |
Workflow | Visual DAG builder, graph executor |
Project | Continuous/one-shot projects, scheduling |
Assistant | Context-aware AI chat with 28 tools |
Marketplace | Skill/agent/workflow sharing |
Integration | External service connectors (GitHub, Slack, Notion, Airtable, Linear, Stripe, Generic) |
Docker Services
Service | Purpose | Port |
app | PHP 8.4-fpm | -- |
nginx | Web server | 8080 |
postgres | PostgreSQL 17 | 5432 |
redis | Cache/Queue/Sessions | 6379 |
horizon | Queue workers | -- |
scheduler | Cron jobs | -- |
vite | Frontend dev server | 5173 |
Common Commands
make start # Start services
make stop # Stop services
make logs # Tail logs
make update # Pull latest + migrate
make test # Run tests
make shell # Open app container shellOr with Docker Compose directly:
docker compose exec app php artisan tinker # REPL
docker compose exec app php artisan test # Run tests
docker compose exec app php artisan migrate # Run migrationsDecision-Model Eval Harness
jev:eval scores a decision model — TypeSafe's Jev, a second System One
endpoint, or an ordinary chat LLM — against a JSONL dataset, and jev:report
turns the recorded answers into accuracy, calibration, coverage, latency, cost
and determinism numbers. Nothing in the request path calls it: it is a
measurement tool, not a production dependency.
The API key never touches the repo
TYPESAFE_API_KEY lives in 1Password and reaches the process only through
op run. .env.op (committed) holds the reference, never the value:
TYPESAFE_API_KEY="op://AI Agent/Jev API Key/credential"The baseline drivers follow the same rule — .env.op also carries references
for ANTHROPIC_API_KEY, GEMINI_API_KEY / GOOGLE_AI_API_KEY and
OPENAI_API_KEY, and each command passes only the names it needs through
docker compose run -e.
Every command that calls the API is run through op run, which resolves the
reference into the child process and masks it in the output. Do not pass
--no-masking, do not op read the item into a variable, and do not write the
value into .env, a compose file or a fixture.
Running an eval end to end
# 1. Build the datasets.
python3 base/scripts/jev-eval/export_next_tool_dataset.py # -> next-tool.jsonl
python3 base/scripts/jev-eval/export_routing_v2_dataset.py # -> routing-v2.jsonl + routing-v2-synth.jsonl
python3 base/scripts/jev-eval/export_domain_prefilter_dataset.py # -> domain-prefilter.jsonl
# both write into ~/jev-eval/datasets/fleetq/
# 2. Make them reachable from the container (storage/ is bind-mounted).
mkdir -p storage/app/jev-eval
cp ~/jev-eval/datasets/fleetq/*.jsonl storage/app/jev-eval/
# 3. Run the eval. The key is injected by op, by name, for this process only.
export OP_SERVICE_ACCOUNT_TOKEN=$(cat ~/.config/op/sa-token)
op run --env-file=.env.op -- docker compose run --rm -e TYPESAFE_API_KEY app \
php artisan jev:eval storage/app/jev-eval/routing-v2.jsonl --driver=jev --split=test --concurrency=8
# 4. Report on the run id the eval printed.
docker compose exec app php artisan jev:report <run-id> \
--dataset-path=storage/app/jev-eval/routing-v2.jsonlMeasuring determinism — the same requests sent N times:
op run --env-file=.env.op -- docker compose run --rm -e TYPESAFE_API_KEY app \
php artisan jev:eval storage/app/jev-eval/routing-v2.jsonl --driver=jev --split=dev --repeat=3Comparing Jev against a chat model on the same dataset — the LLM drivers use the platform AI gateway, so they need no TypeSafe key:
op run --env-file=.env.op -- docker compose run --rm -e ANTHROPIC_API_KEY app \
php artisan jev:eval storage/app/jev-eval/routing-v2.jsonl --driver=haiku --split=test --team=<team-id>--team is required: the gateway logs every call to the tenant-scoped
llm_request_logs, and an eval has no tenant of its own. The gateway also caps
Anthropic at 60 requests per minute across the whole process, so the LLM drivers
publish their own requests_per_minute and the eval throttles itself to it —
two of these running flat out in parallel will still starve each other.
gemini-flash and gpt-mini exist for one reason: on a dataset whose gold
labels were produced by Claude models, an Anthropic baseline is scoring its own
homework. A model family that had no hand in the labels is the only baseline
that means anything there.
When the metered Anthropic key is unavailable, claude_cli_haiku and
claude_cli_sonnet run the same prompts through the local Claude Code CLI on
its subscription credentials. They need no key, no --team and no gateway:
docker compose run --rm -v "$HOME/.claude/.credentials.json:/root/.claude/.credentials.json:ro" \
-e CLAUDE_CLI_CONCURRENCY=5 app \
php artisan jev:eval storage/app/jev-eval/topics-bg.jsonl --driver=claude_cli_sonnet --split=testWithout Docker, the same commands run directly:
op run --env-file=.env.op -- php artisan jev:eval ~/jev-eval/datasets/fleetq/routing-v2.jsonl --driver=jev --split=test
op run --env-file=.env.op -- php artisan jev:reportOptions
jev:eval:
Option | Default | Meaning |
|
| A key from |
|
|
|
|
| Send each case N times; feeds the determinism columns |
|
| Cases in flight at once, for drivers that support batching |
|
| Stop after N cases, taken in file order so two drivers stay comparable |
| — | Team the LLM drivers log their gateway calls under (required for |
jev:report:
Option | Meaning |
| One or more runs; several put different drivers in one table set |
| Split every table by a dataset meta key |
| Keep only cases matching a meta key (comma-separated values allowed) |
| Report only these question ids |
| Score each case as one label SET (Noul per label) instead of per question |
| The dataset file; required by |
Accuracy is printed with a 95% Wilson interval, which is what makes a per-source table readable when some sources have only a handful of cases.
Each question type also gets its own block under the headline table:
Type | Extra metrics |
Choice | top-2 accuracy (gold within the two highest-probability options), per-class precision / recall / F1, confusion pairs sorted by count |
Noul | precision, recall and F1 of the positive class at t=0.5, PR-AUC (average precision), and the gold positive rate printed next to accuracy |
Score | MAE on the level index, and binary accuracy for level 0 vs level > 0 |
The run stays under Jev's published ceilings (1,200 requests/minute and 250,000 tokens/second) on its own. A case whose state plus longest question is estimated over 32k tokens is rejected and logged by id, never truncated — a shortened state is a different case, and scoring it would move the accuracy number without saying so.
Datasets
JSONL, one case per line:
{"id":"routing-006cbe1f682e","state":{...},"questions":{"domain":{"type":"choice","instructions":"...","criteria":{...}}},"gold":{"domain":"filesystem"},"meta":{"lang":"en","source":"phoenix:local_agent.tool","split":"test"}}File | What it measures | Gold comes from |
| next-tool prediction inside a coding loop | the tool the agent in fact called next |
| which FleetQ MCP domain handles a request | configuration, or a human's recorded choice |
| the same question, on registry-phrased requests | the registry domain of the tool a description came from |
| which domains can be ruled out (multi-label) | every MCP domain the assistant drew a tool from in that turn |
next-tool.jsonl is one case per tool call an agent actually made inside a
session belonging to an experiment that reached completed. The state carries
the task brief and the steps already taken; the gold answer is the tool that was
in fact chosen next. The assistant's own narration is deliberately excluded — it
routinely names the next tool, which would turn routing into string extraction.
This is agent behaviour, not FleetQ routing.
routing-v2.jsonl never scores against what an agent decided. Each gold answer
is a configuration fact or an explicit human choice already in the database:
a user asked the assistant for something and it called tools from exactly one
MCP domain (turns spanning two domains are dropped, because the gold would be
ambiguous); a signal was routed into an experiment whose workflow template was
configured; a human created an experiment and assigned a specific agent to it.
meta.source records which, so a subset can be scored on its own. A single
source task contributes at most 15 cases.
routing-v2-synth.jsonl is generated from the tool registry's own descriptions
to cover the domains production data never exercises. Every case carries
meta.source = "synthetic" and it lives in its own file so it is never mixed
into headline numbers — score it separately or not at all.
domain-prefilter.jsonl asks a different question from routing-v2: not "which
one domain handles this" but "which domains can be ruled out" — the shape a
prefilter in front of a 700-tool MCP server needs. One Noul per domain, all 67
in a single request, gold true for every domain the turn drew a tool from.
Multi-domain turns are kept here, because a turn spanning two domains is a
correct multi-label answer rather than an ambiguous one. Score it with
jev:report --multi-label, which sweeps the threshold and reports the tightest
prefilter that still keeps essentially every true label.
On routing-v2 headline numbers: only the assistant_turn source belongs in
one. The signal_workflow and experiment_agent sources encode a
configuration fact that the request text cannot support — a Sentry bug report
reads like a signal whatever the tenant configured it to trigger — and
model_tier has a single value across every case where prod data can derive it.
Report those per source, never merged:
docker compose exec app php artisan jev:report <run-id> \
--dataset-path=storage/app/jev-eval/routing-v2.jsonl \
--where=meta.source=assistant_turn --questions=domainThe domain option list and its one-sentence descriptions are read out of the
registry by base/scripts/jev-eval/mcp_domain_registry.py; add a tool group and
the option appears on its own.
Upgrading
make updateThis pulls the latest code, rebuilds containers, runs migrations, and clears caches.
Tech Stack
Framework: Laravel 13 (PHP 8.4)
Database: PostgreSQL 17
Cache/Queue: Redis 7
Frontend: Livewire 4 + Tailwind CSS 4 + Alpine.js
AI Gateway: PrismPHP
Queue: Laravel Horizon
Auth: Laravel Fortify (2FA) + Sanctum (API tokens)
Audit: spatie/laravel-activitylog
API Docs: dedoc/scramble (OpenAPI 3.1)
MCP: laravel/mcp (Model Context Protocol)
Contributing
Contributions are welcome. Please open an issue first to discuss proposed changes.
Fork the repository
Create a feature branch (
git checkout -b feat/my-feature)Make your changes and add tests
Run
php artisan testto verifySubmit a pull request
See CONTRIBUTING.md for coding conventions, commit style, and PR checklist.
Community & Support
Issues — Bug reports + feature requests
Discussions — Ask a question or share what you built
Changelog — What changed in each release
Cloud version — fleetq.net (free tier, no credit card)
Star History
If FleetQ saves you time, a ⭐ helps others find it. GitHub ranks repos by star velocity.
License
FleetQ Community Edition is open-source software licensed under the GNU Affero General Public License v3.0.
TL;DR of AGPLv3: You can self-host, modify, and run FleetQ for free — including commercial use. If you offer FleetQ as a hosted service to others, you must open-source your modifications. Questions? See our AGPLv3 FAQ.
Available Tools
34 toolsadmin_manageCloud Admin Manage ToolA
Platform super-admin operations — suspend tenants, adjust billing, force-rotate user sessions, browse cross-team security signals. Restricted to users with is_super_admin=true (HTTP 403 for all other callers regardless of team role). Every write is audit-logged with the calling super-admin's id, target id, and reason.
When to use: incident response (suspend a compromised team, revoke leaked sessions), customer-success billing adjustments, or platform-wide security review. Do NOT use for routine tenant operations — those have team-scoped tools.
Actions (pass alongside action):
team_suspend (DESTRUCTIVE — disables tenant logins) — team_id (UUID), reason (string). Existing API tokens for the team are invalidated; users see a 403 on all API calls.
team_billing (read) — team_id. Returns current invoice + plan summary, including next-cycle estimate.
billing_credit (write — moves money) — team_id, amount (positive integer cents), reason (string). Adds to the team's CreditLedger; reflects in the next invoice.
billing_refund (DESTRUCTIVE — issues a real Stripe refund) — team_id, amount (cents). Refunds against the most recent successful charge; partial refunds supported.
security_overview (read) — recent suspicious activity across all teams: failed logins, token leaks, abuse signals.
user_revoke_sessions (DESTRUCTIVE) — user_id (UUID). Invalidates ALL sessions and Sanctum/Passport tokens for the user; they must re-authenticate everywhere.
user_send_password_reset (write) — user_id. Emails a password-reset link with a 60-minute one-time token.
Cloud note: feedback management (feedback_list/feedback_update) lives under platform support tooling, not exposed via MCP. Errors: 401, 403 (not super-admin), 404, 422, 429, 503 (Stripe down for billing actions).
Inputs: action (required), team_id (required), amount_cents (required), payment_intent_id (required), +4 more.
agent_advancedAgent Advanced ToolADestructive
Auxiliary agent operations beyond core CRUD: configuration history, rollback, live runtime inspection, skill/tool wiring, user feedback. For create/update/delete/toggle use agent_manage. Every action requires agent_id; remaining params depend on action.
Actions:
config_history (read) — agent_id. Past config snapshots with timestamps.
rollback (DESTRUCTIVE) — agent_id, version. Overwrites the current config with the named snapshot — current state is lost unless already snapshotted.
runtime_state (read) — agent_id. Last execution status, queue depth, error counters.
skill_sync (write) — agent_id, skill_ids[]. Replaces attached skills (full set semantics).
tool_sync (write) — agent_id, tool_ids[]. Replaces attached tools (full set semantics).
feedback_submit (write) — agent_id, rating (1-5), comment.
feedback_list (read) — agent_id. Recent feedback entries.
feedback_stats (read) — agent_id. Aggregate score + sentiment.
Inputs: action (required), agent_id (required), revision_id (required), skill_ids (required), +10 more.
agent_manageAgent Manage ToolADestructive
Core CRUD for AI agents in the caller's team. For runtime inspection, rollback, skill/tool wiring or feedback use agent_advanced. provider and model are validated against team-configured BYOK and local-LLM credentials at create/update time.
Actions:
list (read) — optional: status, limit (default 50), cursor.
get (read) — agent_id.
create (write) — name, role, goal; optional: backstory, provider, model, skill_ids[], tool_ids[].
update (write) — agent_id + any creatable field. Partial updates allowed.
delete (DESTRUCTIVE) — agent_id, confirm=true. Soft-deletes; recoverable for 30 days.
toggle_status (write) — agent_id. Flips active ↔ disabled.
templates (read) — pre-built agent templates from the platform catalog.
Inputs: action (required), agent_id (required), name (required), confirm (required), +24 more.
approval_manageApproval Manage ToolADestructive
Human-in-the-loop approvals and workflow human-task completion. Use this to unblock workflow steps gated on reviewer decisions or to submit form data for human_task DAG nodes. Each decision is audit-logged and emits a domain event the workflow runtime listens for.
Actions:
list (read) — optional: status (pending/approved/rejected/expired), assignee_id, limit.
approve (write) — approval_id, optional comment. Unblocks the dependent step.
reject (write) — approval_id, reason. Terminates the dependent step (workflow may branch on rejection).
complete_human_task (write) — approval_id, form_data (JSON matching the node's form_schema). Validates against the schema before commit.
webhook_config (write) — approval_id, webhook_url. Configures external notification when status changes.
Inputs: action (required), approval_id (required), reason (required), form_response (required), +6 more.
artifact_manageArtifact Manage ToolADestructive
Read-only access to artifacts produced by experiments, crew executions, and project runs (code, documents, data, media). Each artifact has 1..N ArtifactVersion entries; version defaults to latest when omitted. download returns a signed URL valid for ~5 minutes; content returns the body inline (base64 for binary MIMEs).
Actions:
list (read) — exactly one of: experiment_id, crew_execution_id, project_run_id; optional limit.
get (read) — artifact_id. Metadata only (size, mime, version count, created_by AiRun id).
content (read) — artifact_id; optional version. Returns raw or base64 body.
download (read) — artifact_id; optional version. Returns short-lived signed URL.
Inputs: action (required), artifact_id (required), deadline_ms, experiment_id, +5 more.
assistant_manageAssistant Manage ToolADestructive
FleetQ AI assistant conversations — the in-app chat panel that can call MCP tools on the user's behalf with role-gated authorization (read for all, write for Member+, destructive for Admin/Owner). Conversations bind to a context object (experiment, project, agent, crew, workflow) on first message.
Actions:
conversation_list (read) — optional: limit, context_type filter.
conversation_get (read) — conversation_id. Full history including
tool_calls/tool_results.send_message (write) — message; optional: conversation_id (omit to start new), context_type, context_id, attachments[]. Triggers a synchronous tool-loop LLM call; consumes team credits.
conversation_clear (DESTRUCTIVE) — conversation_id. Erases all messages, retains the conversation shell.
Inputs: action (required), conversation_id (required), message (required), deadline_ms, +3 more.
boruna_manageBoruna Manage ToolADestructive
Boruna deterministic capability-safe .ax script runtime (v1.x LTS) — execute, validate, and audit Boruna scripts. Side effects depend entirely on the script's declared capabilities. Requires an active mcp_stdio Tool record pointing to a working Boruna binary; otherwise every action returns dependency_unavailable.
Actions:
run (write — side effects per script capabilities) — inline
.axsource ORskill_idof a saved boruna_script skill; optional: timeout_ms, mem_limit_mb.validate (read) —
.axsource. Syntax + semantic check, no execution.policy_validate (read; v0.4.0+) — policy JSON. Strict schema validation.
evidence (read) — run_id. Capability/effect evidence record for an executed run.
capability_list (read) — registered capabilities and capability_set_hash.
skill_manage (write) — sub-actions list/get/create/update/delete on boruna_script-typed skills.
Inputs: action (required), mode (required), policy_json (required), execution_id (required), +11 more.
bridge_manageBridge Manage ToolADestructive
FleetQ Bridge — a WebSocket relay that lets cloud experiments reach private endpoints on a self-hosted runner (laptop, on-prem VPS): local Ollama instances, internal MCP servers, on-prem APIs. All actions operate on the team's currently-registered bridge.
Actions:
status (read) — connection state, last heartbeat, registered endpoint count.
endpoint_list (read) — local LLM agents + MCP servers announced by the bridge.
endpoint_toggle (write) — endpoint_id, enabled (bool). Flips visibility to cloud experiments without redeploying the bridge.
disconnect (DESTRUCTIVE) — terminates the active bridge session; the runner must re-register before agents can reach private endpoints again.
Inputs: action (required), endpoint_id (required), deadline_ms, type, +2 more.
budget_manageBudget Manage ToolBDestructive
Team-wide credit budget overview, pre-flight cost guards, and spend forecasting. Read-only — does not move money. 1 credit ≈ $0.001 USD; balances and reservations track LLM + outbound + compute spend with pessimistic locking. Use check before dispatching any expensive job to avoid mid-run pause-on-budget-exhausted events.
Actions:
summary (read) — current balance, pending reservations, MTD spend by category (llm/outbound/compute).
check (read) — estimated_cost (credits). Returns pass/fail without reserving funds.
forecast (read) — period (week|month|quarter), granularity (day|week). Projects spend by extrapolating recent ledger entries.
Inputs: action (required), deadline_ms, amount.
chatbot_manageChatbot Manage ToolADestructive
Embeddable chatbots backed by an existing FleetQ agent. Each instance issues per-widget tokens for embedding, tracks sessions, and exposes analytics + learning entries. Conversations consume team credits via the bound agent's provider.
Actions:
list / get (read) — list all or fetch one (chatbot_id).
create (write) — name, agent_id, config (theme, greeting, allowed_origins[]).
update (write) — chatbot_id + any creatable field.
delete (DESTRUCTIVE) — chatbot_id. Cascades — also revokes all widget tokens.
toggle_status (write) — chatbot_id. Flips active ↔ disabled.
token_create (write) — chatbot_id. Returns an embeddable widget token (display once).
token_revoke (DESTRUCTIVE) — chatbot_id, token_id. Invalidates a single widget instance.
session_list / analytics / learning_entries (read) — chatbot_id; optional date range.
Inputs: action (required), id (required), name (required), type (required), +19 more.
credential_manageCredential Manage ToolADestructive
Encrypted credential vault for external services (API keys, OAuth2 tokens, basic auth, bearer tokens). Secrets are encrypted at rest with the team's per-tenant key; secret_data is never returned by get — only metadata (name, type, expires_at, last_rotated_at).
Actions:
list (read) — optional: type, status filter.
get (read) — credential_id. Metadata only, secrets redacted.
create (write) — name, type (api_key/oauth2/basic_auth/bearer_token/custom), secret_data (object).
update (write) — credential_id + any creatable field.
delete (DESTRUCTIVE) — credential_id. Hard delete; not recoverable.
rotate (write) — credential_id, new_secret_data. Bumps
last_rotated_atand re-encrypts.oauth_initiate (write) — provider, scopes[]. Returns authorization URL.
oauth_finalize (write) — provider, code (from OAuth callback). Stores tokens, returns credential_id.
Inputs: action (required), credential_id (required), name (required), type (required), +12 more.
crew_manageCrew Manage ToolADestructive
Multi-agent crews — coordinated teams of agents that decompose a goal across roles (sequential, parallel, or hierarchical process). execute is async: it queues ExecuteCrewJob and returns immediately with an execution_id; poll execution_status for progress. Each crew member must be a real agent_id in the same team.
Actions:
list / get (read) — list all or fetch one (crew_id).
create (write) — name, process_type (sequential|parallel|hierarchical), agents[] (array of {agent_id, role}).
update (write) — crew_id + any creatable field.
delete (DESTRUCTIVE) — crew_id. Soft-deletes the crew.
execute (write — long-running) — crew_id, goal. Reserves budget, returns execution_id.
execution_status (read) — crew_id, execution_id. Status, current task, partial results.
executions_list (read) — crew_id; optional limit.
Inputs: action (required), crew_id (required), name (required), coordinator_agent_id (required), +11 more.
email_manageEmail Manage ToolADestructive
Email themes (visual styling) and templates (transactional + marketing copy). Templates can be hand-written MJML/HTML or AI-generated via template_generate (consumes credits). Deleting a theme used by templates is blocked unless those templates are deleted first.
Theme actions:
theme_list / theme_get (read).
theme_create (write) — name, styles (object: colors, fonts, spacing).
theme_update (write) — theme_id + any creatable field.
theme_delete (DESTRUCTIVE) — theme_id. Fails if any template references it.
Template actions:
template_list / template_get (read).
template_create (write) — name, subject, body (MJML/HTML); optional theme_id.
template_update (write) — template_id + any creatable field.
template_delete (DESTRUCTIVE) — template_id.
template_generate (write — costs credits) — prompt. Calls the team's default LLM to produce a template, returns draft for review.
Inputs: action (required), id (required), name (required), description (required), +30 more.
evolution_manageEvolution Manage ToolADestructive
AI-generated improvement proposals — the platform analyzes recent agent runs and suggests prompt tweaks, model swaps, skill additions. Proposals must be reviewed (analyze), then either apply (mutates the target agent/skill) or reject. apply is irreversible without a manual rollback through agent_advanced.rollback.
Actions:
list (read) — optional: status (pending/applied/rejected), target_type, limit.
analyze (read) — proposal_id. Returns LLM-generated rationale, confidence score, diff preview.
approve (write) — proposal_id. Marks as approved without applying (queue for batch apply).
apply (DESTRUCTIVE) — proposal_id. Mutates the target entity in place; rollback only via config_history snapshot.
reject (write) — proposal_id, reason. Closes the proposal.
Inputs: action (required), agent_id (required), proposal_id (required), deadline_ms, +3 more.
experiment_manageExperiment Manage ToolADestructive
Experiments — the platform's core unit of work. Each experiment runs a workflow (DAG) through a 20-state machine: Draft → Scoring → Planning → Building → AwaitingApproval → Approved → Executing → CollectingMetrics → Evaluating → (Iterating | Completed). Lifecycle transitions are validated by ExperimentTransitionMap; use valid_transitions to discover what's currently allowed.
Actions:
list (read) — optional: status, workflow_id, limit.
get (read) — experiment_id.
create (write) — name, hypothesis; optional workflow_id (else uses default workflow).
start (write) — experiment_id. Transitions Draft → Scoring; reserves budget.
pause / resume (write) — experiment_id. Pause holds at the current stage.
retry (write) — experiment_id. Re-runs the failed stage.
retry_from_step (write) — experiment_id, step_id. Graph-aware BFS reset of step + downstream.
kill (DESTRUCTIVE) — experiment_id. Terminal; cannot resume.
valid_transitions (read) — experiment_id. Allowed next states for current state.
cost / steps / share (read) — experiment_id. Cost breakdown / step list / public share token.
Inputs: action (required), experiment_id (required), title (required), step_id (required), +11 more.
git_manageGit Manage ToolADestructive
Connect, browse, and modify external git repositories (GitHub, GitLab, Bitbucket, generic SSH). Repo connections store encrypted credentials and use phpseclib for SSH. File and commit ops happen through the platform's AtomicCommittingGitClient so concurrent agent edits don't corrupt working trees.
Repo actions:
repo_list / repo_get (read).
repo_create (write) — name, url, credentials (object).
repo_update (write) — repo_id + any creatable field.
repo_delete (DESTRUCTIVE) — repo_id. Drops connection; does not delete the remote repo.
repo_test (read) — repo_id. Verifies connectivity + auth.
File / branch / commit actions:
file_read (read) — repo_id, path, optional branch.
file_write (write — pushes to remote) — repo_id, path, content, branch, message.
file_list (read) — repo_id, optional path, branch.
branch_create (write) — repo_id, name, source branch.
commit (write — pushes to remote) — repo_id, message, files[].
pr_create (write) — repo_id, title, body, source branch, target branch. Returns PR URL.
pr_list (read) — repo_id; optional state filter.
Inputs: action (required), id (required), name (required), url (required), +21 more.
integration_executeIntegration Execute ToolADestructive
Execute an action on a connected integration, e.g. create_issue on GitHub, send_message on Slack.
Inputs: integration_id (required), integration_action (required), params.
integration_manageIntegration Manage ToolBDestructive
Third-party service integrations (Airtable, Notion, Linear, Stripe, Slack, GitHub via OAuth2 + driver interface). Each integration declares typed capabilities (action endpoints) discoverable at runtime. execute invokes one capability with params validated against the driver's schema; output is normalized to JSON.
Actions:
list (read) — optional: driver, status filter.
connect (write) — driver, name, credentials (object — driver-specific). Initiates OAuth or stores API keys.
disconnect (DESTRUCTIVE) — integration_id. Revokes tokens and deletes the connection.
ping (read) — integration_id. Health-check the upstream API.
execute (write — side effects on upstream) — integration_id, integration_action (capability name), params (object).
capabilities (read) — integration_id. Available actions + parameter schemas.
Inputs: action (required), name (required), integration_id (required), integration_action (required), +6 more.
knowledge_manageKnowledge Manage ToolADestructive
Per-team knowledge bases — vector-indexed document collections agents can search at runtime. Ingestion runs an embedding job (consumes credits via the team's embedding provider). search is hybrid: cosine similarity over pgvector + keyword fallback.
Actions:
list (read) — all knowledge bases for the team.
create (write) — name, description.
ingest (write — costs embedding credits) — knowledge_base_id; one of: content (raw text), url (fetched + extracted), file_id.
search (read) — knowledge_base_id, query; optional limit (default 10), threshold.
delete (DESTRUCTIVE) — knowledge_base_id. Drops all ingested chunks and embeddings.
Inputs: action (required), name (required), knowledge_base_id (required), content (required), +10 more.
marketplace_manageCloud Marketplace Manage ToolA
Cross-team marketplace for shared skills, agents, and workflows. browse and categories are public (no auth scope); publish, install, review operate within the caller's team. Installing a listing copies the artifact into the team and increments the listing's install count.
Actions:
browse (read) — optional: query, category, sort. Public.
categories (read) — taxonomy of available categories. Public.
publish (write) — listing data: target_type (skill/agent/workflow), target_id, name, description, visibility (public/private/team).
install (write) — listing_slug. Copies the listed entity into your team.
review (write) — listing_slug, rating (1-5), comment. One review per user per listing.
analytics (read) — listing_slug. Install counts, ratings (publisher only).
Inputs: action (required), entity_type (required), listing_slug (required), rating (required), +10 more.
memory_manageCloud Memory Manage ToolA
Team-scoped semantic memory — short notes agents store and retrieve across conversations (preferences, constraints, prior decisions). Backed by pgvector with HNSW indexing; cross-team isolation enforced by TeamScope. Distinct from knowledge_manage: this stores unstructured short notes (1-2 paragraphs), knowledge_manage stores document corpora.
When to use: an agent needs to recall a stable fact about the user/team across runs, or wants to remember a decision so the next conversation starts with that context. Do NOT use for transient run-state — use the experiment artifact system instead.
Actions:
search (read; semantic) — query (string), optional limit (default 20, max 100). Returns ranked entries with similarity score 0..1; entries below threshold 0.6 are filtered.
list_recent (read) — optional limit (default 50). Reverse-chronological by created_at.
stats (read) — returns { total_entries, embedding_dim, last_write_at, storage_bytes }.
add (write — costs ~1 credit per ~1k tokens for embedding) — content (string, max 4000 chars), optional metadata (object).
delete (DESTRUCTIVE) — memory_id (UUID). Hard delete; not recoverable.
upload_knowledge (write — costs embedding credits, async) — one of: file content (string), url. Bulk-ingests into memory; returns job_id. Up to 50 MB per call.
Cloud note: supabase_provision not available in cloud (provisioning happens at platform level). Errors: 401, 403, 404 if memory_id missing, 413 on oversized payload, 422 validation, 429 rate limit, 503 if budget exhausted.
Inputs: action (required), query (required), content (required), memory_ids (required), +12 more.
outbound_manageCloud Outbound Manage ToolA
Outbound delivery connectors — channels through which agents send messages: email (SMTP), Slack, Telegram, generic webhook. One connector per channel per team (save uses upsert semantics). All sends pass through ChannelRateLimit and TargetRateLimit middleware and are recorded as OutboundActions.
Actions:
list / get (read).
save (write — upsert) — channel (email/slack/telegram/webhook), config (channel-specific). Replaces any existing connector for the channel.
delete (DESTRUCTIVE) — connector_id. Pending outbound actions on this connector are cancelled.
test (write — sends a real test payload) — connector_id, test_payload (object). Counts against rate limits and budgets.
Inputs: action (required), credentials (required), deadline_ms, channel, +2 more.
profile_manageCloud Profile Manage ToolA
Caller's own profile and account settings (name, email, password, 2FA, OAuth links). Operates on the authenticated user — there is no user_id parameter; super-admins managing other users use admin_manage instead. All actions are rate-limited per user (60/min) and audit-logged.
When to use: agent or assistant needs to read/update the current user's profile, list linked OAuth providers, or unlink a social provider. Do NOT use to create accounts (that's a self-service signup flow only).
Actions:
get (read) — returns profile object: name, email, locale, timezone, current_team_id, last_login_at, email_verified_at.
update (write) — optional fields: name, email, locale, timezone. Email change re-issues the verification mail and clears
email_verified_atuntil confirmed.password_update (DESTRUCTIVE; rotates session) — current_password, password, password_confirmation. Verifies current password then bcrypts the new one; revokes all OTHER active sessions of this user.
2fa_status (read) — returns { enabled: bool, recovery_codes_remaining: int }.
connected_accounts (read) — list of linked OAuth provider records (provider, provider_user_id, linked_at).
social_list (read) — duplicate of connected_accounts kept for backward client compatibility.
social_unlink (DESTRUCTIVE) — provider. Removes the OAuth link; rejected with 422 if it would leave the user with no remaining auth method.
Errors: 401 unauthenticated; 403 if Sanctum token lacks team:{id} ability; 422 for validation; 429 on rate limit.
Inputs: action (required), deadline_ms, name, email, +4 more.
project_manageProject Manage ToolADestructive
Projects — recurring (continuous) or one-shot containers that schedule workflow runs against goals. Continuous projects spawn ProjectRuns on the configured cadence (cron-style or natural language); one-shot projects fire once on trigger_run. Lifecycle states: draft → active → (paused | archived). Each run reserves budget independently.
Actions:
list / get (read).
create (write) — name, type (one_shot | continuous), workflow_id.
update (write) — project_id + any creatable field.
activate / pause / resume / restart (write) — project_id. Lifecycle transitions.
trigger_run (write — costs credits) — project_id. Dispatches a single run immediately.
archive (write) — project_id. Stops scheduling and hides from default lists; reversible via
restart.schedule (write) — project_id, frequency or cron expression.
schedule_nlp (write) — project_id, natural language schedule (e.g. "every weekday at 9am"). Calls LLM, costs credits.
run_list (read) — project_id; optional limit, status filter.
run_get (read) — project_id, run_id.
Inputs: action (required), project_id (required), title (required), operation (required), +13 more.
signal_connectorsCloud Signal Connectors ToolA
Inbound signal SOURCES (ticketing, alerts, Slack, HTTP monitors, ClearCue, Telegram bots) plus the team's knowledge graph (KG) read/write surface. Distinct from signal_manage: this tool wires up connector configurations; signal_manage operates on already-ingested signals.
When to use: bind a new external system to FleetQ so its events become signals (which trigger rules → projects → agents), or query/extend the team's knowledge graph that agents reason over. Do NOT use to send outbound messages — use outbound_manage for that.
Connector actions (each accepts a config object specific to that channel; idempotent — re-call to update):
ticket (write — upsert) — config (Jira/Linear/Zendesk fields). Polls every 5 min.
alert (write — upsert) — config (PagerDuty/Opsgenie webhook). Pushes signals on incident events.
slack (write — upsert) — config (workspace_id, channel_ids[], event filters).
http_monitor (write — upsert) — config: url, interval_seconds (min 60), expected_status. Emits a signal when status flips.
clearcue (write — upsert) — config (ClearCue API key, query).
inbound_connector (write) — sub-actions: create, update, delete on generic connectors.
subscription (write) — sub-actions: list, create, delete on per-connector subscriptions.
telegram (write — upsert) — config: bot_token, allowed_chat_ids[]. Webhook auto-registered.
Knowledge graph actions:
kg_search (read — hybrid semantic+symbolic) — query (string), optional types (array). Returns ranked entities with relevance score.
kg_facts (read) — entity_id (UUID). All facts attached, paginated.
kg_add_fact (write) — entity_id, fact: { predicate (string), object (string), source (string), confidence (0..1) }.
intent_score (read — costs ~1-2 LLM credits) — company (string), query (string). Returns intent classification + confidence.
Cloud note: supabase connector not exposed in cloud (TeamProviderCredential handles per-team Supabase access through integration_manage).
Side effects: writes update KG and trigger downstream rule evaluation (may dispatch agent runs and consume budget).
Errors: 401, 403, 404, 422 (config validation), 429, 503 (upstream connector down).
Inputs: action (required), query (required), entity_name (required), source_entity (required), +24 more.
signal_manageSignal Manage ToolADestructive
Inbound signals — events from connectors (webhooks, RSS, email, Slack, ticketing) the platform processes through trigger rules into agent actions. Operates on already-ingested signals; for connector setup use signal_connectors.
Actions:
list (read) — optional: status, source, channel, limit.
get (read) — signal_id. Full payload + processing trail.
ingest (write) — source, payload (object). Manually emits a signal as if from a connector; runs trigger evaluation.
assign (write) — signal_id, assignee_user_id, reason.
connector_binding (write) — connector_id, channel_id. Links a connector to a logical channel.
connector_binding_delete (DESTRUCTIVE) — binding_id. Severs the link; future signals from that connector go unrouted.
contact (write) — sub-actions on Contact (action, contact data).
imap (write) — mailbox config object. Sets/updates IMAP poller settings.
email_reply (write — sends email) — signal_id, body. Replies to the originating email signal via the team's outbound email connector.
Inputs: action (required), signal_id (required), source (required), payload (required), +20 more.
skill_manageCloud Skill Manage ToolA
AI skills — reusable units agents invoke (LLM prompt templates, connector calls, rules, hybrid pipelines, guardrails). Skill executions are versioned (SkillVersion) and metered against the team budget. Direct execution actions (guardrail, multi_model, code_exec, browser) bypass the agent layer for ad-hoc invocation by humans/assistants.
When to use: build reusable prompt or workflow primitives that multiple agents share, or run a one-off skill (e.g. code_exec to evaluate Python in a sandbox). Do NOT use for raw LLM calls — use assistant_manage instead.
CRUD actions:
list (read) — optional: type (llm|connector|rule|hybrid|guardrail), status, limit (default 50).
get (read) — skill_id. Returns full config + latest version.
create (write) — name, type, config (type-specific JSON). Returns skill_id.
update (write) — skill_id + any creatable field. Bumps version; old version retained.
delete (DESTRUCTIVE) — skill_id. Soft-deletes; existing version history retained for 30 days.
versions (read) — skill_id. Version log with diffs and created_by AiRun id.
Direct execution (each costs credits; rate-limited per skill):
guardrail (read — costs ~1-3 LLM credits) — input (string), rules (array). Returns { passed: bool, violations: [...] }.
multi_model (write — costs ~N × LLM credits where N=models[].length) — prompt, models[]. Runs same prompt across providers and returns consensus.
code_exec (DESTRUCTIVE — runs in sandboxed Docker, costs sandbox-minute credits) — code, language (python|node|bash). Network-disabled by default; max 60s wall-clock; max 256 MB memory.
browser (write — costs browser-minute credits) — url, actions (array of {type, selector, value}). Headless Chromium with SSRF guards.
Cloud note: supabase_edge_function not exposed in cloud (use integration_execute with a Supabase integration instead).
Errors: 401, 403, 404, 422, 429, 503 (sandbox/browser worker pool exhausted).
Inputs: action (required), skill_id (required), name (required), deadline_ms, +12 more.
system_manageCloud System Manage ToolA
Platform system administration, monitoring, and infrastructure control — KPIs, health checks, audit log, semantic cache, GPU compute providers, browser-relay bridge. Mixed permission tiers: read actions (dashboard_kpis, health, version_check, audit_log, cache_stats) need any authenticated user; write actions marked PLATFORM ADMIN require the user's is_super_admin=true flag (HTTP 403 otherwise). Every write is audit-logged.
When to use: agent monitoring platform health, on-call investigating an incident via audit log, super-admin adjusting platform-wide settings or purging the semantic cache after a model swap. Do NOT use for tenant-level operations — those have dedicated tools (e.g. team_manage).
Read actions:
dashboard_kpis — { active_users, runs_today, spend_today_credits, ... }.
health — { status: ok|degraded|down, db, cache, queue, providers[] }.
version_check — { current, latest, update_available }.
audit_log — optional: actor_id, action, entity_type, since, limit (max 100). Cursor-paginated.
cache_stats — semantic cache hit/miss/savings since last purge.
Write actions:
global_settings (write — PLATFORM ADMIN) — settings object. Replaces platform-wide settings.
blacklist (write — PLATFORM ADMIN) — sub-actions: list, add, remove. Affects email/domain blocklists for sign-ups.
security_policy (write — PLATFORM ADMIN) — sub-actions: list, save, delete on security policies.
cache_purge (DESTRUCTIVE — PLATFORM ADMIN) — purges semantic cache CROSS-TEAM. All teams lose cached LLM responses; first calls after purge will be slower and more expensive.
compute (write — PLATFORM ADMIN) — sub-actions on compute provider records (Replicate, Fal.ai, Vast.ai, RunPod).
runpod (write — PLATFORM ADMIN, costs real $) — sub-actions on RunPod GPU pods. Spinning up a pod bills the platform Stripe account immediately at the pod's per-minute rate.
browser_relay (write — relays through local bridge) — sub-actions for browser automation through the team's connected FleetQ Bridge runner. Requires an active bridge.
Errors: 401, 403 (insufficient role for PLATFORM ADMIN action), 404, 422, 429, 503 (provider down).
Inputs: action (required), settings (required), operation (required), deadline_ms, +21 more.
team_manageCloud Team Manage ToolA
Caller's team — settings, membership, BYOK provider credentials, API tokens, notifications, and KMS-managed encryption keys. Most write actions require team role owner or admin (HTTP 403 otherwise); viewer and member are limited to read + their own profile-level toggles (notifications). Every write is audit-logged.
When to use: agent or assistant managing the current team's configuration — invite a member, mint an API token, register a BYOK Anthropic key, etc. Do NOT use for cross-team operations — those require admin_manage (super-admin only).
Core team actions:
get (read) — returns team object (name, slug, plan, settings, owner_id, member_count).
update (write — admin/owner) — optional: name, settings (object). Plan changes happen via Stripe webhook only.
members (write — admin/owner) — sub-actions: list, invite (email, role), remove (user_id). Invitations expire after 7 days.
LLM provider config (admin/owner):
local_llm (read) — bridge-discovered local LLM agents (Ollama, LM Studio, Codex, Claude Code).
byok_credential (write) — sub-actions on BYOK keys (Anthropic, OpenAI, Google, Mistral, Perplexity). Keys encrypted at rest; never echoed back.
custom_endpoint (write — plan-enforced; pro/enterprise only) — sub-actions on custom OpenAI-compatible LLM endpoints (vLLM, LiteLLM, custom proxies).
Tokens & access (admin/owner):
api_token (write) — sub-actions: create (returns token once), list, revoke. Tokens are team-scoped and inherit the user's role; rotate on suspected leak.
Notifications & system:
notification (write — any role) — sub-actions: list, dismiss, dismiss_all on the user's notification inbox.
join_request (write — admin/owner) — sub-actions: list, approve, reject pending team join requests.
kms (DESTRUCTIVE — owner only) — sub-actions on KMS encryption keys: list, rotate (re-encrypts all team credentials with new key — cannot be undone), revoke.
Errors: 401, 403 (insufficient role), 404, 409 (cannot remove self if last owner), 422, 429.
Inputs: action (required), deadline_ms, name, settings, +16 more.
tool_manageCloud Tool Manage ToolA
LLM tool management — registers MCP servers (stdio, HTTP, bridge) and built-in tools (bash, filesystem, browser, SSH) that agents can call at inference time. Tool execution may have any side effect declared by the underlying tool; the platform constrains bash/filesystem/SSH only via the agent's bash_policy. Tool credentials are encrypted at rest with the team's per-tenant key.
When to use: connect a new external MCP server (e.g. GitHub, Slack, Notion) so agents can call its tools, toggle a tool's availability without deleting it, or test a remote MCP server's reachability before wiring it to an agent. Do NOT use to invoke tools — agents call them automatically based on attached configuration.
CRUD actions:
list (read) — optional: type (mcp_stdio|mcp_http|mcp_bridge|built_in), status, limit (default 50).
get (read) — tool_id (UUID). Metadata only; credentials redacted in response.
create (write) — name, type, config (type-specific JSON: command for stdio, url+headers for http, kind for built_in).
update (write) — tool_id + any creatable field. Re-encrypts credentials if provided.
delete (DESTRUCTIVE) — tool_id. Soft-deletes; agents lose access on next ResolveAgentTools call (cached up to 5 minutes).
activate / deactivate (write) — tool_id. Flips active flag without deletion; affects all agents that reference the tool.
Discovery (cloud restricts these to safe operations):
probe_remote (read — calls the remote URL, no registration) — url. Sends an MCP
initializerequest; returns server name, version, declared capabilities.
Cloud note: discover_mcp and import_mcp (which auto-register all tools from a remote server) are NOT available in cloud — they require explicit per-tool review under cloud's security policy. Use probe_remote then create per tool instead.
Errors: 401, 403, 404, 422 (config validation), 429, 503 (remote MCP server unreachable for probe_remote).
Inputs: action (required), tool_id (required), name (required), deadline_ms, +11 more.
trigger_manageTrigger Manage ToolADestructive
Event-driven trigger rules — when-this-then-that automations that fire on signals or domain events. Rules evaluate conditions (expression-based) against the event payload and execute actions (start_experiment, send_outbound, etc.). test is a dry-run that returns whether the rule would have matched without executing actions.
Actions:
list (read) — optional: event filter, status filter.
get (read) — trigger_id.
create (write) — name, event (e.g. "signal.ingested"), conditions (array of expressions), actions (array of action specs).
update (write) — trigger_id + any creatable field.
delete (DESTRUCTIVE) — trigger_id. Future events stop matching this rule.
test (read — costs no credits) — trigger_id, sample payload. Returns matched (bool), action_preview (what would have run).
Inputs: action (required), name (required), rule_id (required), deadline_ms, +10 more.
webhook_manageCloud Webhook Manage ToolA
Outbound webhook endpoints — URLs the platform POSTs to when subscribed events fire (experiment.completed, signal.ingested, approval.decided, etc.). Each delivery is HMAC-signed with the configured secret (header: X-FleetQ-Signature). Failed deliveries retry with exponential backoff up to 24h.
Actions:
list (read) — all webhooks for the team.
get (read) — webhook_id. Includes recent delivery stats.
create (write) — url, events[] (array of event names), secret (used for HMAC signing; show once).
update (write) — webhook_id + any creatable field. Updating
secretinvalidates the old one immediately.delete (DESTRUCTIVE) — webhook_id. In-flight deliveries are cancelled.
Inputs: action (required), name (required), url (required), events (required), +5 more.
workflow_graphWorkflow Graph ToolADestructive
Surgical edits to a workflow's DAG (nodes + edges). For metadata changes (name, description, status, validation, AI generation) use workflow_manage. Every edit re-validates the graph; an edit that would create a cycle, an unreachable node, or an invalid edge type is rejected before commit.
Actions:
save_graph (write — full replace) — workflow_id, nodes[], edges[]. Atomically replaces the entire graph; existing in-flight runs continue on the old graph.
node_add (write) — workflow_id, type (start|end|agent|conditional|human_task|switch|dynamic_fork|do_while), config (type-specific).
node_update (write) — workflow_id, node_id, config (partial).
node_delete (DESTRUCTIVE) — workflow_id, node_id. Cascade-deletes incident edges; rejected if it would orphan nodes.
edge_add (write) — workflow_id, source_id, target_id; optional condition / case_value for switch nodes.
edge_delete (DESTRUCTIVE) — workflow_id, edge_id. Rejected if it would disconnect the graph.
Inputs: action (required), workflow_id (required), nodes (required), node_id (required), +19 more.
workflow_manageWorkflow Manage ToolADestructive
Workflow templates — reusable DAGs that experiments and project runs execute. This tool covers metadata and lifecycle; for graph editing use workflow_graph. Lifecycle states: draft → active → archived. Activation is gated on validate passing.
Core actions:
list / get (read) — optional: status filter.
create (write) — name, description.
update (write) — workflow_id + any creatable field.
delete (DESTRUCTIVE) — workflow_id. Soft-deletes; running experiments continue on cached graph.
validate (read) — workflow_id. Returns errors[] (cycles, orphans, invalid types) and warnings[].
activate (write) — workflow_id. Requires validation to pass.
duplicate (write) — workflow_id. Creates a draft copy with the same graph.
AI / cost:
generate (write — costs LLM credits) — prompt. Decomposes natural language into a workflow graph and saves as draft.
estimate_cost (read) — workflow_id. Projected per-run credit cost.
suggestion (read — costs LLM credits) — context (object). Recommends improvements.
Advanced:
time_gate (write) — workflow_id, config (delay/window). Adds time-based gating around step execution.
execution_chain (write) — workflow_id, chain config. Configures sequential workflow chaining.
Inputs: action (required), workflow_id (required), name (required), prompt (required), +10 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 34 tools
Each tool targets a distinct domain or entity (e.g., agents, approvals, credentials, experiments, signals). Even related tools like signal_connectors and signal_manage have clearly separated responsibilities (setup vs. operation). Descriptions and action lists further clarify boundaries, leaving no ambiguity.
Most tools follow a consistent <noun>_manage pattern (e.g., agent_manage, credential_manage). Minor deviations exist: integration_execute, signal_connectors, and workflow_graph break the pattern but remain descriptive and predictable.
With 34 tools, the server feels overloaded. While the platform is broad, many tools (e.g., boruna_manage, evolution_manage) are niche. The count exceeds the 'well-scoped' range and may overwhelm agents, though each tool serves a distinct purpose.
The tool surface covers the platform's major domains comprehensively: CRUD for core entities, lifecycle management, actions for special operations, and many auxiliary features. Minor gaps exist (e.g., no dedicated reporting tool), but overall the surface is robust.
Maintenance
Related MCP Connectors
Free public MCP for AI agents — 193 tools, 44 workflows. No API key.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
214 tools for AI agents over one MCP endpoint: image, video, audio, 3D, data, storage, mail, GPUs.
Orbit is an MCP server that gives your AI agents a 4000+ tools, a shared memory brain and a live dashboard OS. Every agent reads active decisions, logs outputs to a searchable vault, and reports status in real time. 2-minute setup via MCP; works across Claude, ChatGPT, Codex, Cursor, Gemini, and Manus. Finally Agents work, agents that grow your business and bring you customers. https://orbitagents.xyz
Related MCP Servers
- MIT
- FlicenseNot gradedqualityDmaintenanceExposes LangChain agent capabilities through the Model Context Protocol, enabling multi-step reasoning tasks with ReAct pattern execution via a production-ready FastAPI service deployed on Google Cloud Run.11 npm4-
- AlicenseNot gradedqualityDmaintenanceA control plane for AI agents and human supervisors. Persistent task registry with scoped permissions, inter-agent delegation, and full provenance — all accessible via MCP. Deploy on Supabase free tier in 3 commands.43 npm11Apache 2.0

SideButtonofficial
AlicenseNot gradedqualityBmaintenanceOpen source AI agent platform with MCP server, browser automation, knowledge packs, and workflow engine. Works with Claude Code, ChatGPT, Cursor, and any MCP client.20 npm6Apache 2.0