How Tool Generation Works
Overview
Flowon Logic Conductor does not ship a fixed list of tools. Instead, at startup it reads your Flowon artifacts and emits a tool for each one into a dynamic in-memory assembly. Each generated tool is a normal MCP tool - it has a name, a title, a description, typed parameters, and a structured return value - but every part of it is derived from the Flowon artifact it represents.
Which Artifacts Become Tools
Conductor only generates tools for Logic Flows and Logic Blocks that are marked as actions in the configured projects.
| Requirement | Detail |
|---|---|
| Type | Logic Flow or Logic Block |
| Action flag | The artifact must be an action (isAction). Non-action artifacts are ignored. |
| Project | The artifact must belong to a project listed in the FLOWON_PROJECTS setting |
Artifacts are enumerated in pages of 50 across all configured projects, so every action artifact is included regardless of how many you have.
Tip: Marking an artifact as an action is the opt-in switch that exposes it as a tool. Keep internal helper blocks and flows as non-actions to keep them off the agentic surface.
Anatomy of a Generated Tool
| Tool aspect | Source in Flowon |
|---|---|
| Name | Derived from the artifact name (see Naming below) |
| Title | The artifact's metadata Title |
| Description | The artifact's metadata Description - this is what the agent reads to decide when to call the tool |
| Parameters | One parameter per Input argument, using the argument's name and description |
| Return value | One field per Output argument; Logic Flow tools also return a run status |
Because the description and parameter descriptions come straight from the artifact, the quality of your tool is the quality of your Flowon metadata. See Best Practices.
Tool Naming
The tool name depends on how many projects are exposed. Names are lower-cased and spaces are replaced with underscores.
| Configuration | Tool name | Example |
|---|---|---|
Single project (FLOWON_PROJECTS has one entry) | {action_name} | Approve Credit Limit → approve_credit_limit |
| Multiple projects | {project_name}_{action_name} | Project Sales, action Approve Credit Limit → sales_approve_credit_limit |
Prefixing with the project name when multiple projects are exposed keeps tool names unique across projects.
Input Type Mapping
Each Input argument becomes a typed tool parameter. Flowon argument types map to the parameter types the agent sees as follows:
| Flowon type | Tool parameter type | Notes |
|---|---|---|
| String, Unique Identifier | string | |
| Integer | int | |
| Decimal, Double, Float, Money | decimal | Numeric |
| Boolean | bool | |
| Option Set | int, or bool for two-option sets | Pass the option's integer value |
| Date/Time | DateTime | |
| Entity Reference | Guid | The record ID; the target entity is fixed by the argument definition |
| Image | string | Base64-encoded |
| Entity | structured object | A typed view of the entity's properties |
| List | array | An array of the item type above |
Inputs are normalized before execution - for example, an Entity Reference Guid is expanded to a Dataverse EntityReference against the argument's target entity, and images are decoded from Base64.
Output Type Mapping
Each Output argument becomes a field on the tool's structured result. Most types are returned as-is, with two conversions applied for AI-friendliness:
| Flowon output type | Returned as |
|---|---|
| Entity Reference | An object with Id and Name |
| Image | Base64-encoded string |
| All other types | Their natural JSON value |
Execution Semantics
Logic Flow tools
A Logic Flow tool runs the flow with the supplied parameters and returns its Output arguments plus a run status:
RunFlowStatusResult | Meaning |
|---|---|
Success | The flow completed successfully |
SuccessWithError | The flow completed, but reported an application error; the available output is still returned |
If a flow faults (an unhandled execution error), the tool call fails with an MCP error describing the flow, project, and underlying exception - so the agent can read the message and react.
Logic Block tools
A Logic Block tool evaluates the block with the supplied parameters and returns its Output arguments. Blocks are pure evaluations - they compute and return a result rather than orchestrating a multi-step workflow.
┌────────────────────────────────────────────────────────────────────────┐
│ A TOOL CALL, END TO END │
├────────────────────────────────────────────────────────────────────────┤
│ │
│ 1. Agent calls approve_credit_limit(customerId, requestedLimit) │
│ │
│ 2. Conductor normalizes inputs │
│ customerId (Guid) → EntityReference(account, <id>) │
│ │
│ 3. Runs the Logic Flow under the caller's Dynamics identity │
│ │
│ 4. Returns Output arguments + RunFlowStatusResult │
│ { approved: true, approvedLimit: 50000, │
│ runFlowStatusResult: "Success" } │
│ │
└────────────────────────────────────────────────────────────────────────┘
Refreshing the Tool Catalogue
Tools are generated at startup. When you add, remove, or change action artifacts in the exposed projects - including their titles, descriptions, inputs, or outputs - restart the server to regenerate the catalogue so MCP clients pick up the changes.