Hosted AI agents and approval-gated workflows on Gmail, Slack, GitHub and 1,000+ apps via OAuth.
io.github.flowradev/mcp (Model Context Protocol) Server
This MCP server provides hosted AI agents and workflows. It supports app OAuth for authentication, includes human approval gates within execution flows, and maintains a run ledger. The server is identified by the slug io-github-flowradev-mcp and exposes the workflow and agent functionality described in its catalog entry.
๐ ๏ธ Key Features
Hosted AI agents and workflows
App OAuth authentication
Human approval gates
Run ledger
๐ Use Cases
Running AI agent workflows that require OAuth-authenticated access
Introducing human review/approval steps during workflow execution
Tracking and recording workflow runs via a run ledger
โก Developer Benefits
Clear execution governance via human approval gates
Auditable run history using a run ledger
OAuth-based integration for hosted usage
โ ๏ธ Limitations
No additional tool or capability details are provided in the available source data.
The all-in-one platform for AI agents, locked workflows, and 1,000+ app integrations.
Official TypeScript, Python, and CLI SDK. Call hosted AI agents and locked workflows from your backend โ Gmail, Slack, GitHub, Notion, Telegram, WhatsApp, Calendar, Linear, and 1,000+ apps, with OAuth, human approval, and a ledger of every tool call.
Flowra โ all-in-one AI agent and workflow platform
This repo is for your server. In Cursor / Claude / OpenClaw, install the agent skill and add https://mcp.flowra.dev/mcp with no headers (OAuth). Details: MCP.
Get a project API key: Dashboard โ Project settings โ API Keys.
import os
from flowra import Flowra
flowra = Flowra(api_key=os.environ["FLOWRA_API_KEY"])
Python is the same API in snake_case (create_link, as_user, ingest_url).
What is Flowra?
Flowra is an all-in-one AI agent and workflow platform. You describe a job; it runs against connected apps โ with OAuth, a human gate on send/delete/pay, and a ledger of every tool call. This repository is the official SDK for calling that platform from TypeScript, Python, or a terminal.
Use Flowra when the work needs a real Gmail or Slack account, a schedule, human approval, multiple end users, or an audit trail. Do not keep OAuth and cron on a laptop.
You need
Use
Same steps every run (cron recap, triage, alerts)
Workflow โ a locked graph
Next tool depends on the message
Agent โ open path, hosted
One action from your backend
SDKtools.execute
One action from a terminal agent
CLI discover โ connect โ execute
Cursor / Claude / OpenClaw
Skill + MCP
What you can do
Send Gmail or Slack from your app
Don't invent slugs โ take them from tools.list (often GMAIL_SEND_EMAIL, SLACK_SEND_MESSAGE).
ts
const tools = await flowra.tools.list({ q: 'gmail send email' });
const slug = tools.data[0].slug; // e.g. GMAIL_SEND_EMAILawait flowra.tools.execute(slug, {
arguments: {
recipient_email: 'you@example.com',
subject: 'Invoice paid',
body: 'Thanks โ you are all set.',
},
});
Connect an app (OAuth)
If the user isn't connected yet, you get a URL. Open it, they approve, you continue.
ts
const configs = await flowra.authConfigs.list({ q: 'gmail' });
const link = await flowra.connections.createLink({
authConfigId: configs.data[0].id,
});
if (link.redirectUrl) {
// send the user here, then retryconsole.log(link.redirectUrl);
}
Ship your own tool โ it lands in the cloud
Gmail is already in the catalog. Your billing API is not. Create a toolkit + tool on this project; Flowra hosts it. It does not join the public catalog, but discovery on this project will find it: MCP FLOWRA_DISCOVER_TOOLS, flowra discover "โฆ", or tools.list.
Flowra is an all-in-one hosted platform: agents, locked workflows, OAuth, approval, and a run ledger in one project. A canvas (n8n, Zapier, Make) is a visual graph you host or subscribe to. A tool-only SDK wires apps into an agent you still run yourself.
Flowra
Canvas (n8n / Zapier / Make)
Tool-only SDK
Call from your backend
TypeScript, Python, CLI
Usually webhooks / REST
Yes
Hosted AI agent
Yes
Add-on or none
You host the agent
Locked workflow + cron
Yes
Yes
You build it
Human approval that works on cron
Yes
Varies
You build it
Ledger of every tool call
Yes
Run history
You build it
MCP for Cursor / Claude / Codex
Yes
Rare
Rare
Best for
Product backends, AI agents, approved automations
Visual ops teams
Bring-your-own agent
FAQ
What is the Flowra SDK?
The Flowra SDK is the official TypeScript (@flowra/sdk) and Python (flowra-sdk) client for the Flowra API. Use it from your backend to execute tools, connect OAuth apps, run locked workflows, chat with hosted agents, and search project knowledge. The CLI (@flowra/cli) is the same API for a terminal.
Does Flowra work with Gmail, Slack, GitHub, and Notion?
Yes. Flowra ships a catalog of 1,000+ apps including Gmail, Slack, GitHub, Notion, Telegram, WhatsApp, Calendar, and Linear. Discover the exact slug with tools.list or flowra discover โ never invent it. Custom REST or script tools can be registered on your project if the catalog has no app for that job.
Is Flowra an n8n, Zapier, or Make alternative?
Flowra is an alternative when you want code and MCP, not a canvas: hosted agents, locked workflows, OAuth, human approval, and a ledger. Stay on n8n, Zapier, or Make if your team already lives in a visual builder and does not need an SDK or Cursor/Claude MCP.
Flowra agent vs workflow โ which should I use?
Use a workflow when the path is known and should not change (cron recap, triage, alerts). Use an agent when the next tool depends on the message. Both run on the same project, share connections, and write to the same ledger.
How do I install Flowra for Python?
Install flowra-sdk from PyPI (pip install flowra-sdk) and from flowra import Flowra. Do not pip install flowra โ that package is unrelated. TypeScript is pnpm add @flowra/sdk. Python 3.10+ and Node 18+ are required.
Where do I get a Flowra API key?
Create a project at flowra.dev, then open Project settings โ API Keys. Pass it as FLOWRA_API_KEY. Never commit the key. Default user is project_default_user; for end-customers of their product, use asUser / as_user with x-username.