Skip to content

Skills

Skills are instructional multi-step workflows embedded in a schema. Unlike Prompts (which explain context), Skills instruct — they tell an LLM exactly what to do, step by step. Each skill declares its tool dependencies, defines typed input parameters, and records the model it was tested with.

How a skill is resolved and executed at runtime:

The skill’s content is a template. Placeholders like {{input:tokenSymbol}} are replaced with user-provided values, and {{tool:computeRSI}} references tell the LLM which tool to call at each step.

Skills are declared in the main export’s skills key. Each entry points to a separate .mjs file:

export const main = {
namespace: 'tradingsignals',
name: 'TradingSignals',
version: '3.0.0',
root: 'https://api.example.com',
tools: {
computeRSI: { /* ... */ },
computeMACD: { /* ... */ }
},
skills: {
'token-technical-analysis': { file: './skills/token-technical-analysis.mjs' }
}
}

Each key in main.skills is the skill name (must match ^[a-z][a-z0-9-]*$). The value is an object:

FieldTypeRequiredDescription
filestringYesPath to the .mjs skill file, relative to the schema. Must end in .mjs.

Each skill file exports a skill object with the full workflow definition:

const content = `Perform technical analysis of {{input:tokenSymbol}} on {{input:chain}}.
## Step 1: Token Discovery
Use {{tool:searchBySymbol}} to find {{input:tokenSymbol}} on {{input:chain}}.
## Step 2: OHLCV Data
Use {{tool:getRecursiveOhlcvEVM}} for {{input:timeframeDays}}-day candles.
## Step 3: Indicators
Use {{tool:computeRSI}} with period 14.
Use {{tool:computeMACD}} with fast 12, slow 26, signal 9.
## Step 4: Synthesis
Compile findings into BULLISH / BEARISH / NEUTRAL signal.`
export const skill = {
name: 'token-technical-analysis',
version: 'flowmcp-skill/1.0.0',
description: 'Full technical analysis: discovery, OHLCV, indicators, chart, signal summary',
testedWith: 'anthropic/claude-sonnet-4-5-20250929',
requires: {
tools: [
'indicators/tool/searchBySymbol',
'ohlcv/tool/getRecursiveOhlcvEVM',
'tradingsignals/tool/computeRSI',
'tradingsignals/tool/computeMACD'
],
resources: [],
external: [ 'playwright' ]
},
input: [
{ key: 'tokenSymbol', type: 'string', description: 'Token symbol (e.g. WETH)', required: true },
{ key: 'chain', type: 'string', description: 'Blockchain (e.g. ethereum)', required: true },
{ key: 'timeframeDays', type: 'number', description: 'Days of history', required: false }
],
output: 'Structured report with trend, momentum, volatility, chart, and signal summary',
content
}
FieldTypeRequiredDescription
namestringYesMust match the name in the schema’s skills array entry.
versionstringYesMust be 'flowmcp-skill/1.0.0'.
descriptionstringYesWhat this skill does.
testedWithstringYesModel ID the skill was tested with (e.g. anthropic/claude-sonnet-4-5-20250929).
requiresobjectYesDependencies: tools, resources, and external arrays.
inputarrayNoUser-provided input parameters.
outputstringNoDescription of what the skill produces.
contentstringYesThe instruction text with placeholders.
FieldTypeDescription
toolsstring[]Tool references this skill uses. Uses the full ID format (namespace/tool/name) for cross-schema references, or plain names for same-schema tools.
resourcesstring[]Resource names this skill reads. Must match names in main.resources.
externalstring[]External capabilities not provided by the schema (e.g. playwright, puppeteer). For documentation purposes.

Each input parameter:

FieldTypeDescription
keystringParameter name (camelCase). Referenced in content as {{input:key}}.
typestringOne of string, number, boolean, or enum.
descriptionstringWhat this input parameter is for.
requiredbooleanWhether the user must provide this value.

The content field supports four placeholder types, identical to the Prompts placeholder system:

PlaceholderSyntaxResolves ToExample
Tool reference{{tool:name}}Tool name from requires.tools{{tool:computeRSI}}
Resource reference{{resource:name}}Resource name from requires.resources{{resource:verifiedContracts}}
Skill reference{{skill:name}}Another skill in the same schema{{skill:quick-check}}
Input reference{{input:key}}User-provided input value{{input:tokenSymbol}}
  1. {{tool:x}}x should be listed in requires.tools
  2. {{resource:x}}x should be listed in requires.resources
  3. {{skill:x}} — must reference another skill in the same schema (no circular references)
  4. {{input:x}} — should match an input[].key

Unresolved placeholders produce validation warnings (not errors), except for {{skill:x}} which must resolve.

ConstraintValueRationale
Max skills per schema4Keep schemas focused
testedWithRequiredAccountability for non-deterministic workflows
requires.externalSkills-onlyPrompts do not support this field
Skill name pattern^[a-z][a-z0-9-]*$Lowercase with hyphens
Skill file extension.mjsES module format
Versionflowmcp-skill/1.0.0Fixed for v3.0.0
ContentNon-empty stringMust contain instructions
No circular referencesVia {{skill:x}}Prevents infinite loops
AspectPromptSkill
PurposeExplain contextInstruct step-by-step
testedWithOptionalRequired
requires.externalNot availableAvailable
Placeholder systemSameSame
Max per schema44
File format.mjs.mjs
MCP primitivePromptsPrompts