Zum Inhalt springen

MCP Server Integration

Dieser Inhalt ist noch nicht in deiner Sprache verfügbar.

Normative language (MUST/SHOULD/MAY) follows the conventions defined in Conformance Language.


When FlowMCP is used as an MCP Server, each Tool is registered with MCP-specific metadata. The meta block in every Tool definition provides this metadata.


Every Tool in v4.2.0 MUST have a meta block:

export const schema = {
main: { /* ... */ },
tools: {
getSmartContractAbi: {
description: 'Get the ABI for a verified smart contract',
parameters: { /* ... */ },
meta: {
isReadOnly: true,
isConcurrencySafe: true,
isDestructive: false,
searchHint: 'contract ABI ethereum smart contract',
aliases: [ 'getAbi' ],
alwaysLoad: false
}
}
}
}
FieldTypeRequiredDescription
isReadOnlybooleanYes (VAL101)Tool does not modify any state
isConcurrencySafebooleanYes (VAL102)Safe to call concurrently
isDestructivebooleanYes (VAL103)Tool can cause irreversible changes
searchHintstringYes (VAL104)Keywords for ToolSearch (not empty)
aliasesstring[]Yes (VAL105)Alternative names for ToolSearch
alwaysLoadbooleanYes (VAL106)Always register with MCP (bypass lazy loading)

When a Tool is registered with an MCP Server, meta fields are translated to MCP annotations:

FlowMCP FieldMCP Annotation
meta.alwaysLoad_meta['anthropic/alwaysLoad']
meta.searchHint_meta['anthropic/searchHint']

This translation happens at registration time in the FlowMCP CLI/Core.

alwaysLoad: true should be used sparingly. Guidelines:

  • true: Tool is almost always needed in any session (e.g., a core utility tool)
  • false (default): Tool is loaded on demand via ToolSearch

Excessive alwaysLoad: true pollutes the agent’s active tool list and degrades performance.

aliases enables ToolSearch to find a Tool by alternative names:

If an agent searches for getAbi, ToolSearch finds getSmartContractAbi because getAbi is in its aliases array.

Empty array [] is valid — means no aliases.

CodeSeverityRule
VAL100errorEvery Tool MUST have a meta block
VAL101errormeta.isReadOnly required (boolean)
VAL102errormeta.isConcurrencySafe required (boolean)
VAL103errormeta.isDestructive required (boolean)
VAL104errormeta.searchHint required (string, not empty)
VAL105errormeta.aliases required (string[])
VAL106errormeta.alwaysLoad required (boolean)