Skip to main content

Execution Modes (Direct vs Dynamic)

Every MCP server can run in one of two execution modes:

  • Direct: your AI client loads the full tool list up front and calls tools directly.
  • Dynamic: the MCP server starts with a small “meta” surface, discovers tools only when needed, and runs multi-step workflows without flooding the model’s context with tool definitions and intermediate results.

Same MCP URL. Same slug in /bundle/{slug}. Same credential bindings.

Just a different execution strategy.

Why Dynamic exists​

Dynamic mode solves two scaling problems:

  • Tool definition bloat: large tool libraries can be slow and brittle for AI clients to load and use.
  • Intermediate-result bloat: big tool outputs can pollute context and derail the rest of a workflow.

Dynamic mode keeps context small by:

  • discovering tools on-demand
  • executing workflows in a controlled code execution environment
  • returning only the final output to the conversation

The rule: Direct is limited to 100 tools​

Direct mode is still ideal for small, focused MCP servers.

But once an MCP server exceeds 100 tools, Direct becomes unreliable for many AI clients.

So we enforce a simple constraint:

  • MCP servers with more than 100 tools must use Dynamic mode.

The cap is settings.max_tools_for_direct_bundle (default 100 in backend config; exposed on GraphQL AppConfig for operators).

You can enable Dynamic at any size. Switching back to Direct is only allowed at 100 tools or fewer.

Dynamic is “Hub-style,” but MCP-server–scoped​

If you’ve used the Hub, Dynamic will feel familiar.

The key difference: Dynamic is scoped to one MCP server:

  • tool search only returns tools inside this MCP server
  • tool execution only uses this MCP server’s credential bindings

Where to learn more​