Build and run AI workflows, apps, toolkits and knowledge bases on FlowDot from any MCP client.
Connect Claude Desktop, Cursor, Windsurf, Claude Code, and any other MCP-compatible AI client to the entire FlowDot platform — workflows, recipes, custom nodes, apps, knowledge bases, agent toolkits, and the full community/sharing layer.
MCP (Model Context Protocol) is an open standard that lets AI models interact with external tools and services. The FlowDot MCP Server exposes 150 tools across 17 functional categories, plus 8 educational learn:// resources, giving an AI client a complete operational interface to FlowDot — no web UI required.
With this server, an AI client can:
Note: Recipes can be designed through MCP but must be executed via the FlowDot CLI (
@flowdot.ai/cli). Recipes are long-running agentic programs that exceed AI client timeouts and require local file/code/shell access.
Create a free FlowDot account. You land on the MCP Tokens tab: click Select all (or pick scopes, see Token Scopes), then Create Token. The token starts with fd_mcp_, and the page shows the ready-to-paste setup below with your token filled in.
The free plan includes 5 workflow runs a day and 10 toolkit calls a day. The Creator plan is $19 a month (500 runs a month, 200 toolkit calls a day). Details: flowdot.ai/mcp.
Claude Code (one command):
claude mcp add flowdot -e FLOWDOT_API_TOKEN=fd_mcp_your_token_here -- npx -y @flowdot.ai/mcp-server
Claude Desktop, Cursor and other clients: add the block below to the client's config file.
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"flowdot": {
"command": "npx",
"args": ["-y", "@flowdot.ai/mcp-server"],
"env": {
"FLOWDOT_API_TOKEN": "fd_mcp_your_token_here"
}
}
}
}
Restart Claude Desktop, Cursor or your MCP client so it loads the server. Claude Code picks it up on the next session.
Download the .mcpb extension bundle and double-click to install in Claude Desktop. The extension includes Node.js runtime and all dependencies — no separate installation needed.
npx @flowdot.ai/mcp-server
Or install globally:
npm install -g @flowdot.ai/mcp-server
flowdot-mcp
learn://)The server exposes 8 standalone concept guides via the MCP ReadResourceRequest interface. Read these before invoking tools to scaffold your understanding:
| Resource | Content |
|---|---|
learn://overview | FlowDot platform overview |
learn://workflows | Workflow creation guide |
learn://recipes | Agent recipe orchestration guide |
learn://custom-nodes | Custom node development guide |
learn://apps | App development guide |
learn://toolkits | Agent toolkit guide |
learn://knowledge-base | Knowledge base & RAG guide |
learn://characters | Agent character (voice call) setup guide |
The server exposes 150 tools organized into 17 categories.
list_workflows — List all workflows accessible to the authenticated userexecute_workflow — Execute a workflow with optional inputs (sync or async)get_execution_status — Get the status and results of a workflow executionagent_chat — Chat with the FlowDot AI agent for workflow assistanceget_workflow_metrics — Impressions, success/failure rates, average durationget_workflow_comments — Comments and ratings on workflowsget_execution_history — Past execution history with timestamps and statusget_workflow_details — Detailed workflow info including nodes, connections, signatureget_workflow_inputs_schema — Input schema with expected types and required fieldsduplicate_workflow — Create a copy of an existing workflowtoggle_workflow_public — Make a workflow public or privatefavorite_workflow — Add/remove workflow from favoritescancel_execution — Cancel running/pending workflow executionsretry_execution — Retry failed executions with the same inputsstream_execution — Real-time SSE streaming of workflow executionget_workflow_tags — Get tags associated with a workflowset_workflow_tags — Set/update workflow tagssearch_workflows — Search workflows by name, description, tagssearch — Unified search across workflows, apps, custom nodesget_public_workflows — Browse public workflows shared by other userscreate_workflow — Create a new empty workflowdelete_workflow — Permanently delete a workflowget_workflow_graph — Get complete graph structure (all nodes + connections)validate_workflow — Validate for missing connections, invalid config, disconnected nodeslist_available_nodes — List all node types organized by categoryget_node_schema — Full schema for a node type (inputs, outputs, properties)add_node — Add new node (built-in or custom via custom_node_{hash})update_node — Update node position or propertiesdelete_node — Delete node and all its connectionsadd_connection — Connect a node output to a node inputdelete_connection — Remove a connection between two nodesget_node_connections — Get all connections to/from a specific nodelist_custom_nodes — List your custom nodes with search/category filteringsearch_public_custom_nodes — Search public nodes shared by the communityget_custom_node — Detailed custom node info (inputs, outputs, script code)get_custom_node_comments — Comments and ratings on a custom nodeget_custom_node_template — Generate a working script template based on I/O definitionscreate_custom_node — Create new custom node with script, inputs, outputs (validated with AST parsing)update_custom_node — Update name, description, code, propertiesdelete_custom_node — Permanently delete a custom nodecopy_custom_node — Copy a public node to your librarytoggle_custom_node_visibility — Change visibility (private/public/unlisted)vote_custom_node — Upvote/downvote/remove votefavorite_custom_node — Add/remove from favoritesadd_custom_node_comment — Add comment or replylist_apps — List your React frontend appssearch_apps — Search the public app marketplaceget_app — Detailed app info including React code and linked workflowscreate_app — Create a new React app (Tailwind + React 18, sandboxed)update_app — Update name, description, code, config, mobile settingsdelete_app — Permanently delete apppublish_app — Publish to the public marketplaceunpublish_app — Make a published app privateclone_app — Clone a public app to your librarylink_app_workflow — Link a workflow to an app for invokeWorkflow() useunlink_app_workflow — Unlink a workflow from an applink_app_toolkit — Link a toolkit to an app for invokeTool() useunlink_app_toolkit — Unlink a toolkit from an appget_app_template — Get starter code templates (basic, chat, dashboard, form-builder, data-viewer)edit_app_code — Find/replace specific strings in app codeappend_app_code — Append content before the closing braceprepend_app_code — Prepend content to the startinsert_app_code — Insert content after a specific pattern matchlist_app_files — List all files in a multi-file appget_app_file — Get content of a specific filecreate_app_file — Create new file (jsx, js, ts, tsx, css, json, md)update_app_file — Update file content and typedelete_app_file — Delete a filerename_app_file — Rename or move a fileset_app_entry_file — Set a file as the app's entry pointget_workflow_public_url — Public shareable URL for a workflowlist_shared_results — Shared execution results for a workflowget_shared_result — Specific shared result with outputs/inputsget_shared_result_comments — Comments on a shared resultcreate_shared_result — Create a shareable link (with optional expiry)add_workflow_comment — Comment on a workflowadd_shared_result_comment — Comment on a shared resultvote_workflow — Upvote/downvote a workflowvote_shared_result — Upvote/downvote a shared resultlist_input_presets — Pre-configured input sets for a workflowget_input_preset — Specific preset with all valuescreate_input_preset — Create a shareable presetupdate_input_preset — Update preset description/valuesdelete_input_preset — Delete a presetvote_input_preset — Vote on a presettoggle_community_inputs — Enable/disable community inputs for a workflowlist_user_teams — List all teams the user belongs to (with role + member count)list_knowledge_categories — Document categories in your knowledge basecreate_knowledge_category — New category with name, description, colorupdate_knowledge_category — Update category propertiesdelete_knowledge_category — Delete a category (documents become uncategorized)list_knowledge_documents — Documents with category/team/status filtersget_knowledge_document — Document details by ID/hashupload_text_document — Upload text content directlyupload_document_from_url — Download and add a document from a URLmove_document_to_category — Move a document or make it uncategorizedtransfer_document_ownership — Transfer between personal and team knowledge basereprocess_document — Reprocess a failed/stuck documentdelete_knowledge_document — Permanently delete a documentquery_knowledge_base — Semantic + keyword RAG searchget_knowledge_storage — Storage usage and limitsAgent Toolkits let an AI client create new tools through the MCP interface — effectively MCP within MCP. Once installed, toolkit tools become callable via invoke_toolkit_tool.
list_agent_toolkits — Your toolkitssearch_agent_toolkits — Search public toolkit marketplaceget_agent_toolkit — Toolkit details (tools, credentials, metadata)get_toolkit_comments — Comments on a toolkitcreate_agent_toolkit — Create a new toolkit with credential requirementsupdate_agent_toolkit — Update title, description, category, credentialsdelete_agent_toolkit — Delete a toolkitcopy_agent_toolkit — Create a private copy of a public toolkittoggle_toolkit_visibility — Change visibility (private/public/unlisted)vote_toolkit — Vote on a toolkitfavorite_toolkit — Add/remove from favoritesadd_toolkit_comment — Add comment to a toolkitinstall_toolkit — Install a toolkit on your accountuninstall_toolkit — Uninstalllist_installed_toolkits — Installed toolkits with credential statustoggle_toolkit_active — Enable/disable an installationcheck_toolkit_credentials — Show which credentials are missingupdate_toolkit_installation — Map toolkit credentials to your API keysinvoke_toolkit_tool — Execute a tool from an installed toolkitlist_toolkit_tools — All tools in a toolkitget_toolkit_tool — Tool details with input/output schemascreate_toolkit_tool — Create an HTTP- or Workflow-backed tool inside a toolkitupdate_toolkit_tool — Update tool configuration, schema, endpointdelete_toolkit_tool — Delete a tool from a toolkitCredential types supported: api_key, oauth (with PKCE + scopes + refresh tokens), bearer, basic, custom
Tool types supported: http (REST API), workflow (invoke a FlowDot workflow)
Recipes are reusable agentic programs with multiple step types and persistent stores. MCP can DESIGN recipes; only the CLI can RUN them.
list_recipes — List recipes (with favorites_only filter)get_recipe — Recipe details with steps, stores, metadataget_recipe_definition — Full recipe in YAML or JSON formatbrowse_recipes — Public recipe browsing with pagination/sortingcreate_recipe — Create a new agent recipeupdate_recipe — Update metadata and entry_step_id (critical for execution)delete_recipe — Delete a recipefork_recipe — Create a private copy of a public recipelist_recipe_steps — All steps with types, connections, configadd_recipe_step — Add step (agent, parallel, loop, gate, branch, invoke)update_recipe_step — Update step name, description, config, connectionsdelete_recipe_step — Delete a steplist_recipe_stores — Stores (variables) in a recipeadd_recipe_store — Add a store for data flow between stepsupdate_recipe_store — Update key, label, type, default, I/O flagsdelete_recipe_store — Delete a storelink_recipe — Link recipe for CLI execution with an aliasvote_recipe — Vote on a public recipefavorite_recipe — Add/remove from favoritesStep types: agent (LLM with tools), parallel (concurrent), loop (iterate array), gate (approval checkpoint), branch (conditional), invoke (subroutine), output (emit coloured message to terminal)
Output step config:
message— template string (supports{{stores.x}}interpolation),color—green | red | yellow(defaultgreen). Executes instantly with no LLM call. Use it to emit progress updates, warnings, or final summaries during long-running recipes.
To execute a recipe, use the FlowDot CLI:
npx @flowdot.ai/cli recipes run <aliasOrHash> --input '{"key":"value"}'
Voice-call personas — name + persona prompt + complete provider stack (TTS / STT / LLM). The Hub server-side validates voice-config completeness against the same App\Support\AgentCharacterCompleteness helper the runtime uses, so every read of a character carries an is_complete flag plus a missing_fields[] list. Read learn://characters for the per-provider settings shapes.
list_agent_characters — List your characters with completeness badgesget_agent_character — Full detail with per-field Completeness sectioncreate_agent_character — Create a new character (rejects with CHARACTER_VOICE_CONFIG_INCOMPLETE 422 if any required field is missing)update_agent_character — Partial update with post-merge completeness validationdelete_agent_character — Hard delete (requires confirm: true)fork_agent_character — Copy a public character; LLM choice resets to defaultduplicate_agent_character — Copy your own character including LLM choicetoggle_agent_character_public — Flip public/private (auto-mints stable hash on first publish)Required fields: voice_provider, voice_id, tts_model, voice_settings, stt_provider, stt_model, llm_provider, llm_model, llm_temperature, personality_prompt. See learn://characters for recommended values per provider.
When creating an MCP token in FlowDot Settings, you can select exactly which scopes to grant. Restrict tokens to the minimum scope they need:
| Scope namespace | Tools it covers |
|---|---|
workflows:read | List, search, get, view public workflows |
workflows:execute | Execute workflows |
workflows:manage | Create, update, delete, validate, build workflow graphs |
executions:read | Status, history, stream |
executions:manage | Cancel, retry |
agent:chat | Agent chat |
custom_nodes:read | List, search, get, get template |
custom_nodes:manage | Create, update, delete, copy, toggle visibility, vote, comment |
apps:read | List, search, get apps and files |
apps:manage | Create, update, delete, publish, code editing, file management |
recipes:read | List, get, browse, get definition |
recipes:manage | Create, update, delete, fork, link, manage steps and stores |
agent_characters:read | List and view agent characters (with completeness state) |
agent_characters:manage | Create, edit, delete, fork, duplicate, and publish agent characters |
knowledge:read | List, get, query |
knowledge:manage | Upload, delete, categorize, transfer, reprocess |
agent_toolkits:read | List, search, get toolkits and tools |
agent_toolkits:manage | Create, update, delete, install, invoke |
sharing:read | Get shared results, public URLs |
sharing:manage | Create shared results, vote, comment |
input_presets:read | List, get presets |
input_presets:manage | Create, update, delete |
teams:read | List teams |
discovery:read | Search, tags, public browsing |
analytics:read | Metrics, comments, history |
| Variable | Required | Default | Description |
|---|---|---|---|
FLOWDOT_API_TOKEN | Yes | — | Your MCP token (must start with fd_mcp_) |
FLOWDOT_HUB_URL | No | https://flowdot.ai | FlowDot Hub URL (override for self-hosted) |
INTERNAL_API_SECRET | No | — | Optional shared secret for internal API calls |
Settings > MCP Servers > Add Server:
{
"flowdot": {
"command": "npx",
"args": ["@flowdot.ai/mcp-server"],
"env": {
"FLOWDOT_API_TOKEN": "fd_mcp_your_token_here"
}
}
}
Same configuration as Cursor — see the Windsurf documentation for the exact location of the MCP config file.
Add to your Claude Code MCP configuration (typically ~/.config/claude-code/mcp.json):
{
"mcpServers": {
"flowdot": {
"command": "npx",
"args": ["@flowdot.ai/mcp-server"],
"env": { "FLOWDOT_API_TOKEN": "fd_mcp_your_token_here" }
}
}
}
# Install dependencies
npm install
# Build
npm run build
# Run locally
FLOWDOT_API_TOKEN=fd_mcp_xxx npm start
# Watch mode
npm run dev
# Run tests
npm test
# Coverage report
npm run test:coverage
# Build the .mcpb Claude Desktop extension bundle
npm run build:mcpb
The MCP server is a thin protocol adapter. All HTTP communication with the FlowDot Hub is delegated to a shared @flowdot.ai/api package, which is also used by the FlowDot CLI and daemon. This means the same client logic, authentication, retry semantics, and pagination apply across every FlowDot surface.
mcp-server/
├── bin/
│ └── flowdot-mcp.js # Executable wrapper
├── src/
│ ├── index.ts # Entry point
│ ├── server.ts # createServer() / startServer()
│ ├── api-client.ts # FlowDotApiClient re-export
│ ├── tools/
│ │ ├── index.ts # Central registry (one switch case per tool)
│ │ └── *.ts # 119 individual tool source files
│ └── utils/
│ └── script-validator.ts # AST-based custom node script validation
├── manifest.json # MCPB Claude Desktop bundle manifest
├── scripts/
│ └── build-mcpb.js # Builds the .mcpb extension archive
└── package.json
User-submitted custom node JavaScript is validated using acorn AST parsing, not regex. The validator checks:
processData(inputs, properties, llm) function existseval, process, global, require, etc.)The script validator has its own test suite with 100% coverage thresholds enforced via vitest.config.ts.
See LICENSE.
Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
npx -y @flowdot.ai/mcp-serverMerge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"ai-flowdot-mcp-server": {
"command": "npx",
"args": [
"-y",
"@flowdot.ai/mcp-server"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.
Claude Desktop setup reference@flowdot.ai/mcp-servernpmFlowDot works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.