Zum Inhalt springen

Skills

Skills sind instruktive mehrstufige Workflows, die in ein Schema eingebettet sind. Im Gegensatz zu Prompts (die Kontext erklaeren) instruieren Skills — sie sagen einem LLM genau, was zu tun ist, Schritt fuer Schritt. Jeder Skill deklariert seine Tool-Abhaengigkeiten, definiert typisierte Eingabeparameter und erfasst das Modell, mit dem er getestet wurde.

Wie ein Skill zur Laufzeit aufgeloest und ausgefuehrt wird:

Der content des Skills ist ein Template. Platzhalter wie {{input:tokenSymbol}} werden durch User-bereitgestellte Werte ersetzt, und {{tool:computeRSI}}-Referenzen sagen dem LLM, welches Tool bei jedem Schritt aufzurufen ist.

Skills werden im skills-Key des main Exports deklariert. Jeder Eintrag zeigt auf eine separate .mjs-Datei:

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' }
}
}

Jeder Key in main.skills ist der Skill-Name (muss ^[a-z][a-z0-9-]*$ entsprechen). Der Wert ist ein Objekt:

FeldTypErforderlichBeschreibung
filestringJaPfad zur .mjs-Skill-Datei, relativ zum Schema. Muss auf .mjs enden.

Jede Skill-Datei exportiert ein skill-Objekt mit der vollstaendigen 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
}
FeldTypErforderlichBeschreibung
namestringJaMuss mit dem name im skills-Array-Eintrag des Schemas uebereinstimmen.
versionstringJaMuss 'flowmcp-skill/1.0.0' sein.
descriptionstringJaWas dieser Skill tut.
testedWithstringJaModell-ID, mit der der Skill getestet wurde (z.B. anthropic/claude-sonnet-4-5-20250929).
requiresobjectJaAbhaengigkeiten: tools, resources und external Arrays.
inputarrayNeinUser-bereitgestellte Eingabeparameter.
outputstringNeinBeschreibung dessen, was der Skill produziert.
contentstringJaDer Anweisungstext mit Platzhaltern.
FeldTypBeschreibung
toolsstring[]Tool-Referenzen, die dieser Skill nutzt. Verwendet das vollstaendige ID-Format (namespace/tool/name) fuer schema-uebergreifende Referenzen, oder einfache Namen fuer Tools im selben Schema.
resourcesstring[]Resource-Namen, die dieser Skill liest. Muessen mit Namen in main.resources uebereinstimmen.
externalstring[]Externe Faehigkeiten, die nicht vom Schema bereitgestellt werden (z.B. playwright, puppeteer). Zu Dokumentationszwecken.

Jeder Eingabeparameter:

FeldTypBeschreibung
keystringParametername (camelCase). Im Content als {{input:key}} referenziert.
typestringEiner von string, number, boolean oder enum.
descriptionstringWofuer dieser Eingabeparameter ist.
requiredbooleanOb der User diesen Wert bereitstellen muss.

Das content-Feld unterstuetzt vier Platzhaltertypen, identisch zum Prompts-Platzhaltersystem:

PlatzhalterSyntaxLoest auf zuBeispiel
Tool-Referenz{{tool:name}}Tool-Name aus requires.tools{{tool:computeRSI}}
Resource-Referenz{{resource:name}}Resource-Name aus requires.resources{{resource:verifiedContracts}}
Skill-Referenz{{skill:name}}Anderer Skill im selben Schema{{skill:quick-check}}
Input-Referenz{{input:key}}User-bereitgestellter Eingabewert{{input:tokenSymbol}}
  1. {{tool:x}}x sollte in requires.tools aufgefuehrt sein
  2. {{resource:x}}x sollte in requires.resources aufgefuehrt sein
  3. {{skill:x}} — muss einen anderen Skill im selben Schema referenzieren (keine Zirkelbezuege)
  4. {{input:x}} — sollte mit einem input[].key uebereinstimmen

Nicht aufgeloeste Platzhalter erzeugen Validierungswarnungen (keine Fehler), ausser {{skill:x}}, das aufgeloest werden muss.

EinschraenkungWertBegruendung
Max Skills pro Schema4Schemas fokussiert halten
testedWithErforderlichVerantwortlichkeit fuer nicht-deterministische Workflows
requires.externalNur fuer SkillsPrompts unterstuetzen dieses Feld nicht
Skill-Namensmuster^[a-z][a-z0-9-]*$Kleinbuchstaben mit Bindestrichen
Skill-Dateiendung.mjsES-Module-Format
Versionflowmcp-skill/1.0.0Fest fuer v3.0.0
ContentNicht-leerer StringMuss Anweisungen enthalten
Keine ZirkelbezuegeVia {{skill:x}}Verhindert Endlosschleifen
AspektPromptSkill
ZweckKontext erklaerenSchritt-fuer-Schritt instruieren
testedWithOptionalErforderlich
requires.externalNicht verfuegbarVerfuegbar
PlatzhaltersystemGleichGleich
Max pro Schema44
Dateiformat.mjs.mjs
MCP-PrimitivPromptsPrompts