Skip to main content
Glama
Keel — Hyperliquid trading strategies

Keel — Hyperliquid trading strategies

by keel-trade

Fork Library Entry

keel_library_fork

Fork a verified Keel Library entry into your org as an editable strategy copy with its own history, then run your own backtests.

Instructions

Fork a verified Keel Library entry into the caller's org as an editable strategy — a copy of a Keel strategy or a share link is keel_strategy_fork. The fork is a full copy with its own history; its evidence comes from its own keel_backtest_run, not the entry's published metrics. A variant_id from keel_library_get selects a published preset; ma-crossover-crypto is the simple entry new web users start from.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "slug": "<slug>"
    },
    "name": "keel_library_fork"
  }
}

Input Schema

NameRequiredDescriptionDefault
nameNoOptional name for the forked strategy. It names the strategy — its market, thesis or method (e.g. `HYPE MACD trend`) — and is shown wherever the strategy is listed; the user's own name or account belongs to the account, not to a strategy name.
slugYesLibrary entry slug (kebab-case, from `keel_library_list`).
variant_idNoOptional variant preset from `keel_library_get`; omitted, the entry's default applies.

Output Schema

NameRequiredDescriptionDefault
codeNo
costNo
infoNo
modeNo
nameNo
nextNo
slugNo
viewNoOne strategy: its structure graph, change marks, evidence and the rendered markdown.
addedNo
errorNo
quotaNo
ref_aNo
ref_bNo
staleNo
detailNo
parentNo
reasonNo
resumeNo
run_idNo
sourceNo
changedNo
dry_runNo
exampleNo
messageNo
removedNo
versionNo
categoryNo
compiledNo
docs_urlNo
headlineNo
hero_urlNo
metadataNo
universeNo
url_lineNo
variantsNo
versionsNo
exit_codeNo
fork_noteNo
referenceNoBTC hold, price only, over the run's span (run 1's on a comparison).
reorderedNo
retryableNo
risk_bandNo
share_urlNo
sync_noteNo
unchangedNo
action_urlNo
data_as_ofNo
limit_viewNo
validationNo
variant_idNo
recent_runsNoThe strategy's newest backtest runs, newest first (up to 5): run_id, status, version, the version's commit message, window, completed_at and the headline metrics.
source_slugNo
strategy_idNo
declarationsNo
head_summaryNo
new_sequenceNo
quota_noticeNo
resource_uriNo
source_errorNo
summary_textNo
compile_errorNo
entry_versionNo
error_messageNo
library_factsNo
limit_detailsNo
new_commit_idNo
blocked_actionNo
required_actorNo
talking_pointsNo
versions_errorNo
workspace_syncNo
backtest_windowNo
missing_evidenceNo
ownership_statusNo
unavailable_codeNo
description_errorNo
restored_from_refNo
what_was_expectedNo
default_variant_idNo
is_default_variantNo
unavailable_reasonNo
projection_availableNo
suggested_next_actionNo
ownership_resource_uriNo
restored_from_sequenceNo
live_readiness_blockersNo
next_recommended_actionNo
component_version_changesNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed96 schema fields changedv0.9.0
    • changedInput schema / properties / name / description
      Previous value: -"Optional name for the forked strategy."New value: +"Optional name for the forked strategy. It names the strategy — its market, thesis or method (e.g. `HYPE MACD trend`) — and is shown wherever the strategy is listed; the user's own name or account belongs to the account, not to a strategy name."
    • addedInput schema / properties / name / maxLength
      Added value: +255
    • addedInput schema / properties / name / minLength
      Added value: +1
    • changedInput schema / properties / variant_id / description
      Previous value: -"Optional variant preset from `keel_library_get`; omit for the entry's default."New value: +"Optional variant preset from `keel_library_get`; omitted, the entry's default applies."
    • addedOutput schema / description
      Added value: +"A strategy result: `view` renders it; an error carries `code` and `message` instead."
    • addedOutput schema / properties / action_url
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / added
      Added value: +{
      +  "type": "array"
      +}
    • addedOutput schema / properties / backtest_window
      Added value: +{}
    • addedOutput schema / properties / blocked_action
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / category
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / changed
      Added value: +{
      +  "type": "array"
      +}
    • addedOutput schema / properties / code
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / compile_error
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / compiled
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / component_version_changes
      Added value: +{}
    • addedOutput schema / properties / cost
      Added value: +{
      +  "type": "object"
      +}
    • addedOutput schema / properties / data_as_of
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / declarations
      Added value: +{
      +  "type": "object"
      +}
    • addedOutput schema / properties / default_variant_id
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / description_error
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / detail
      Added value: +{
      +  "type": "object"
      +}
    • addedOutput schema / properties / docs_url
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / dry_run
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / entry_version
      Added value: +{}
    • addedOutput schema / properties / error
      Added value: +{}
    • addedOutput schema / properties / error_message
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / example
      Added value: +{}
    • addedOutput schema / properties / exit_code
      Added value: +{
      +  "type": "integer"
      +}
    • addedOutput schema / properties / fork_note
      Added value: +{
      +  "type": "object"
      +}
    • addedOutput schema / properties / head_summary
      Added value: +{
      +  "type": "object"
      +}
    • addedOutput schema / properties / headline
      Added value: +{}
    • addedOutput schema / properties / hero_url
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / info
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / is_default_variant
      Added value: +{
      +  "type": [
      +    "boolean",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / library_facts
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / limit_details
      Added value: +{
      +  "type": "object"
      +}
    • addedOutput schema / properties / limit_view
      Added value: +{
      +  "type": "object"
      +}
    • addedOutput schema / properties / live_readiness_blockers
      Added value: +{
      +  "type": "array"
      +}
    • addedOutput schema / properties / message
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / metadata
      Added value: +{
      +  "type": "object"
      +}
    • addedOutput schema / properties / missing_evidence
      Added value: +{
      +  "type": "array"
      +}
    • addedOutput schema / properties / mode
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / name
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / new_commit_id
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / new_sequence
      Added value: +{
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / next
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / next_recommended_action
      Added value: +{}
    • addedOutput schema / properties / ownership_resource_uri
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / ownership_status
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / parent
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / projection_available
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / quota
      Added value: +{
      +  "type": "array"
      +}
    • addedOutput schema / properties / quota_notice
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / reason
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / recent_runs
      Added value: +{
      +  "description": "The strategy's newest backtest runs, newest first (up to 5): run_id, status, version, the version's commit message, window, completed_at and the headline metrics.",
      +  "items": {
      +    "properties": {
      +      "completed_at": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "message": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "metrics": {
      +        "type": "object"
      +      },
      +      "run_id": {
      +        "type": "string"
      +      },
      +      "status": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "version": {
      +        "type": [
      +          "integer",
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "window": {
      +        "type": "object"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / ref_a
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / ref_b
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / reference
      Added value: +{
      +  "description": "BTC hold, price only, over the run's span (run 1's on a comparison).",
      +  "properties": {
      +    "basis": {
      +      "type": "string"
      +    },
      +    "dd_pct": {
      +      "maximum": 0,
      +      "type": "number"
      +    },
      +    "label": {
      +      "type": "string"
      +    },
      +    "ret_pct": {
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / removed
      Added value: +{
      +  "type": "array"
      +}
    • addedOutput schema / properties / reordered
      Added value: +{}
    • addedOutput schema / properties / required_actor
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / resource_uri
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / restored_from_ref
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / restored_from_sequence
      Added value: +{
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • removedOutput schema / properties / result
      Removed value: -{
      -  "type": "string"
      -}
    • addedOutput schema / properties / resume
      Added value: +{
      +  "type": "object"
      +}
    • addedOutput schema / properties / retryable
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / risk_band
      Added value: +{}
    • addedOutput schema / properties / run_id
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / share_url
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / slug
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / source
      Added value: +{}
    • addedOutput schema / properties / source_error
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / source_slug
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / stale
      Added value: +{
      +  "type": [
      +    "boolean",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / strategy_id
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / suggested_next_action
      Added value: +{
      +  "type": "object"
      +}
    • addedOutput schema / properties / summary_text
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / sync_note
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / talking_points
      Added value: +{
      +  "type": "array"
      +}
    • addedOutput schema / properties / unavailable_code
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / unavailable_reason
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / unchanged
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / universe
      Added value: +{
      +  "type": "object"
      +}
    • addedOutput schema / properties / url_line
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / validation
      Added value: +{
      +  "type": "object"
      +}
    • addedOutput schema / properties / variant_id
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / variants
      Added value: +{}
    • addedOutput schema / properties / version
      Added value: +{
      +  "type": [
      +    "integer",
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / versions
      Added value: +{}
    • addedOutput schema / properties / versions_error
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / view
      Added value: +{
      +  "description": "One strategy: its structure graph, change marks, evidence and the rendered markdown.",
      +  "properties": {
      +    "at": {
      +      "type": "string"
      +    },
      +    "categories": {},
      +    "change": {},
      +    "error": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "evidence": {},
      +    "head_version": {
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    },
      +    "header": {},
      +    "kind": {
      +      "const": "strategy"
      +    },
      +    "markdown": {
      +      "type": "string"
      +    },
      +    "marks": {
      +      "type": "boolean"
      +    },
      +    "name": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "object": {
      +      "type": "string"
      +    },
      +    "parse_error": {
      +      "type": "boolean"
      +    },
      +    "previous_version": {},
      +    "seq": {
      +      "type": "integer"
      +    },
      +    "size": {
      +      "type": "string"
      +    },
      +    "source": {},
      +    "status": {},
      +    "status_text": {},
      +    "structure": {},
      +    "url_line": {
      +      "type": "string"
      +    },
      +    "validation": {},
      +    "version": {
      +      "type": [
      +        "integer",
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "required": [
      +    "markdown"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / what_was_expected
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / workspace_sync
      Added value: +{
      +  "type": "object"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "result"
      -]
    • removedOutput schema / x-fastmcp-wrap-result
      Removed value: -true
  2. Addedv0.7.0

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false), so the bar is lower. The description adds real context beyond them: the fork is a full copy with its own history, and its evidence must come from its own keel_backtest_run rather than the entry's published metrics — an important expectation-setter. It does not state what happens on repeated calls or any entitlements required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then sibling differentiation, then behavioral caveats, then parameter hints — logical ordering in one dense paragraph. Slightly packed with clauses, but every sentence carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values needn't be described, and the description covers source, scope, sibling boundary, and the provenance of post-fork evidence. Minor gaps remain around whether the entry must be verified/entitled and whether forking is subject to plan limits.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds source and behavior for variant_id ('from keel_library_get', 'omitted, the entry's default applies') and an example of an entry slug. That is genuine meaning beyond the schema text for at least one parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource with scope: 'Fork a verified Keel Library entry into the caller's org as an editable strategy.' It immediately names the sibling it is NOT (keel_strategy_fork for strategy copies / share links), so an agent can distinguish the two fork tools without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: forking a library entry uses this tool, while forking a Keel strategy or share link uses keel_strategy_fork. It also states where the variant_id comes from (keel_library_get) and that it selects a published preset, plus an example entry ('ma-crossover-crypto') for the common new-user path.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.