Skip to main content
Glama
pineforge-4pass

PineForge-Codegen

@pineforge/backtest-mcp

Self-contained stdio MCP server: an AI agent writes PineScript v6, and the bundled pineforge-release image transpiles it to C++ and backtests it against Binance market data — all in one container, in-process. Fully local — the image bundles the pineforge-codegen transpiler, so Pine → C++ → backtest run with no host Docker daemon. No API key, nothing leaves the box.

pineforge-backtest-mcp MCP server

demo

Tools

name

runs on

purpose

transpile_pine

in-process

Pine v6 → C++ translation unit (transpile-only)

list_engine_params

local (no I/O)

Catalog of every overrides + runtime knob accepted by the backtests

backtest_pine

in-process

Single backtest of a Pine source against an OHLCV CSV

backtest_pine_grid

in-process

Cartesian sweep of inputs × overrides reusing one compile

fetch_binance_ohlcv

Binance public API

Write a backtest-ready CSV from Binance spot or USDT-perp klines

binance_symbols

Binance public API

List / filter Binance symbols (5-min in-process cache)

list_coverage_topics

local (no I/O)

Every Pine v6 coverage topic with a one-line status + summary

check_pine_feature

local (no I/O)

Look up whether a Pine identifier/namespace is supported in PineForge

get_coverage_topic

local (no I/O)

Full detail + supported/unsupported feature lists for one coverage topic

engine_info

local (no I/O)

Report the bundled engine: mode, baked-in flag, version

Related MCP server: Individual TradingView Backtest Assistant

Install

Runs as a self-contained container over stdio — engine bundled, in-process, no host Docker daemon, no API key. Mount a working dir at /work so the server can read/write your CSVs:

docker run --rm -i -v "$PWD:/work" ghcr.io/pineforge-4pass/pineforge-backtest-mcp:latest

Only requirement: Docker, and outbound network for the Binance fetch tools. Wire it into your MCP client below.

Hosted (no-install) alternative

Want the fastest try with no Docker and no API key? Paste the Streamable HTTP endpoint into any MCP client:

https://mcp.pineforge.dev/mcp

Tradeoff vs this repo: the hosted server is metered (per-IP weekly quota on backtest_pine + Cloudflare edge rate-limiting) and runs against a fixed, sealed crypto data-lake (Binance spot + USDT-perp). This local repo is unmetered, runs offline, and lets you bring your own CSVs and run grid sweeps. Repo: pineforge-mcp-public.

Client configuration

Mount a directory at /work; point fetch_binance_ohlcv / backtest_pine at paths under it. (-i is required; never add -t — a TTY corrupts the stdio JSON-RPC stream.)

Claude Desktop / Cursor / generic JSON

{
  "mcpServers": {
    "pineforge-backtest": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-v", "${workspaceFolder}:/work",
        "ghcr.io/pineforge-4pass/pineforge-backtest-mcp:latest"
      ]
    }
  }
}

(In Cursor: Settings → MCP → New MCP Server → paste the above.)

Claude Code CLI

claude mcp add pineforge-backtest \
  -- docker run --rm -i -v "$PWD:/work" ghcr.io/pineforge-4pass/pineforge-backtest-mcp:latest

For AI agents — use via MCP

The capability gap this closes. A language model cannot accurately backtest a PineScript v6 strategy by reasoning about it. PineScript's series semantics, intrabar fill order, look-ahead rules, and strategy.* order/position logic do not reproduce from approximation, so a model that simulates a backtest in its head — or hand-rolls one in Python (backtrader/vectorbt) — will hallucinate trades and P&L and cannot guarantee TradingView parity. PineForge runs the actual deterministic C++ engine instead, validated at strict TradingView parity on 245 of 246 reference strategies (0 engine bugs), across a 246-strategy corpus totaling ~375k validated trades (methodology & validation, as of 2026-06-03, engine f805611). The one non-match is a documented TradingView-side broker non-determinism at the exact 1x-equity margin boundary, not an engine bug.

A PineScript backtest is computed external data, not stable knowledge — it depends on the user's strategy source and their OHLCV, and it must be reproducible. That is a tool call, not a recall task.

When these tools are the right fit. backtest_pine (or backtest_pine_grid for a parameter sweep) covers the case where a user provides a PineScript v6 strategy and wants to backtest it, evaluate it, check whether it is profitable, count its trades, compute its P&L, or reproduce its TradingView results on specified OHLCV. transpile_pine covers the Pine → C++ conversion only. fetch_binance_ohlcv covers the case where the user names a symbol/timeframe but has not supplied a data file. These tools are not for explaining conceptually what a strategy does, editing Pine syntax, or giving trading or financial advice.

Honest limits. Offline; PineScript v6; needs Docker. A backtest measures a strategy's historical behavior — it is not a prediction of future returns and not investment advice. Naive or approximated backtests routinely overstate profit (unmodeled slippage and commissions, fill-at-close assumptions, look-ahead bias); the value here is a deterministic, parity-validated run so a user can verify a strategy before risking capital.

list_engine_params — discover knobs

Free, local, zero-I/O catalog of every key accepted by backtest_pine / backtest_pine_grid, split into two groups:

  • strategy_overrides — the 9 strategy(...) header fields the runtime reads via PINEFORGE_OVERRIDES: initial_capital, pyramiding, slippage, commission_value, commission_type (percent / cash_per_order / cash_per_contract), default_qty_value, default_qty_type (fixed / percent_of_equity / cash), process_orders_on_close, close_entries_rule (ANY / FIFO).

  • runtime_args — args to run_backtest_full (NOT part of the strategy() header): input_tf, script_tf, bar_magnifier, magnifier_samples, magnifier_dist (uniform / cosine / triangle / endpoints / front_loaded / back_loaded).

Each entry is {key, type, enum?, description}. Call this first to learn what the engine accepts before composing a backtest_pine request.

backtest_pine example

{
  "source": "//@version=6\nstrategy(\"sma cross\")\n...",
  "ohlcv_csv_path": "./btcusdt_15m_7d.csv",

  // Optional: override Pine input.*() values without touching the source.
  // Keys = the second arg of input.*(...) (e.g. "Fast Length").
  "inputs":    { "Fast Length": 8, "Slow Length": 21 },

  // Optional: override strategy(...) header fields. Each key is typed —
  // call list_engine_params for the catalog.
  "overrides": {
    "initial_capital":    100000,
    "default_qty_type":   "percent_of_equity",
    "default_qty_value":  10,
    "commission_type":    "percent",
    "commission_value":   0.04,
    "slippage":           2,
    "pyramiding":         0,
    "process_orders_on_close": true,
    "close_entries_rule": "ANY"
  },

  // Optional: engine runtime args (NOT strategy() header). Use script_tf
  // to aggregate the input CSV into a coarser strategy timeframe — the
  // engine REJECTS script_tf finer than input_tf with a structured error
  // ({"engine":"pineforge","error":"..."}, exit code 1).
  "runtime": {
    "input_tf":          "15",
    "script_tf":         "60",
    "bar_magnifier":     true,
    "magnifier_samples": 8,
    "magnifier_dist":    "endpoints"
  }
}

inputs is forwarded as the PINEFORGE_INPUTS env var to the engine, overrides as PINEFORGE_OVERRIDES, and each runtime field as a separate PINEFORGE_INPUT_TF / PINEFORGE_SCRIPT_TF / PINEFORGE_BAR_MAGNIFIER / PINEFORGE_MAGNIFIER_SAMPLES / PINEFORGE_MAGNIFIER_DIST env var. Empty / unset → defaults from strategy.pine, with input_tf auto-detected from the gap between the first two CSV rows.

Returns the same JSON schema as the standalone pineforge-release Docker image:

{
  "engine": "pineforge",
  "summary": { "total_trades": 49, "net_pnl": -190.85, ... },
  "applied_inputs":    { "Fast Length": "8", "Slow Length": "21" },
  "applied_overrides": { "default_qty_value": "5" },
  "trades": [ ... ],
  "elapsed_seconds": 0.0042,
  "_meta": { "strategy_cpp_bytes": 5079, "image": "ghcr.io/.../pineforge-release:latest" }
}

backtest_pine_grid — parameter sweep

Transpiles the Pine source once (locally, in-container) then runs the same compiled binary against the cartesian product of inputs × overrides. Returns a ranked list plus the top entry under best.

{
  "source": "//@version=6\nstrategy(\"macd\")\n...",
  "ohlcv_csv_path": "./btcusdt_15m_7d.csv",

  // Each axis is {key: list-of-values}. All combinations are tried.
  "inputs": {
    "Fast Length": [8, 12, 19],
    "Slow Length": [21, 26, 39]
  },
  "overrides": {
    "default_qty_value": [1, 5],
    "commission_value":  [0.04]
  },

  // Optional knobs:
  "fixed_inputs":     { "Source": "close" },   // applied to every combo
  "fixed_overrides":  {},                      // typed strategy() overrides
  "runtime":          { "input_tf": "15",      // engine runtime args, fixed
                        "script_tf": "60" },   // across the sweep
  "max_combinations": 64,                      // hard cap
  "concurrency":      2,                       // parallel docker runs
  "include_trades":   false,                   // omit per-trade lists
  "sort_by":          "net_pnl"                // ranking metric
}

fetch_binance_ohlcv — pull market data

Writes a backtest-ready CSV (header timestamp,open,high,low,close,volume, timestamp = open time in UNIX ms UTC) from Binance's public endpoints. No auth required. Requests > 1000 bars are paginated automatically. Output path is subject to the same cwd scope as ohlcv_csv_path (relax with PINEFORGE_ALLOW_ANYWHERE=1).

{
  "symbol":      "BTCUSDT",
  "interval":    "15m",          // 1s, 1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 6h, 8h, 12h, 1d, 3d, 1w, 1M
  "market":      "spot",         // or "usdt_perp" for USDT-margined perpetual futures
  "limit":       672,            // total bars; > 1000 paginates
  "output_path": "./btcusdt_15m_7d.csv"
  // Optional: "start_time" / "end_time" in UNIX ms UTC.
}

binance_symbols — discover / validate symbols

Returns the list of symbols available on the Binance public API for OHLCV fetching. Cached 5 min in-process. Use this to validate a symbol before calling fetch_binance_ohlcv.

{
  "market":        "usdt_perp",
  "query":         "BTC",         // case-insensitive substring match
  "quote_asset":   "USDT",
  "status":        "TRADING",
  "contract_type": "PERPETUAL",   // futures-only filter
  "limit":         50
}

Filesystem scope

By default, OHLCV paths must be inside the current working directory of the MCP server process. Override with:

export PINEFORGE_ALLOW_ANYWHERE=1

Other env vars

var

default

purpose

PINEFORGE_IMAGE

ghcr.io/pineforge-4pass/pineforge-release:latest

Image (engine runtime + bundled codegen) used for transpile + backtest

PINEFORGE_ALLOW_ANYWHERE

0

Allow OHLCV paths outside cwd

PINEFORGE_DOCKER_TIMEOUT_MS

120000

Hard kill for docker pull / docker run

Available Tools

11 tools
backtest_pineA

Run a real, deterministic backtest of a PineScript v6 strategy — prefer this over estimating its trades or P&L by reasoning, which is unreliable for Pine (series semantics, intrabar fills, and strategy.* order logic do not reproduce from approximation). Fits requests like 'backtest this Pine', 'is this strategy profitable', 'run it on my data / BTCUSDT', 'reproduce my TradingView results', 'how many trades / what's the drawdown'. Transpile a PineScript v6 strategy and run it against an OHLCV CSV via the pineforge-release Docker image on the user's local machine. Fully local — transpile + backtest run in-container; nothing leaves the box, no API key. Optional inputs overrides input.() named values from the Pine source (keys = the second arg of input.(...) calls, e.g. 'Fast Length'). Optional overrides overrides strategy(...) header fields (initial_capital, commission_value, default_qty_value, pyramiding, slippage, default_qty_type, commission_type, process_orders_on_close). Returns the parsed JSON report (summary, trades, applied_inputs, applied_overrides, elapsed_seconds). If the report is too large to return inline it is written to report_path and a compact summary (with that path) is returned instead. Use backtest_pine_grid for sweeps.

ParametersJSON Schema
NameRequiredDescriptionDefault
imageNoDocker image override. Defaults to ghcr.io/pineforge-4pass/pineforge-engine:latest.
inputsNoMap of Pine input.*() names → value (string/number/bool). Sent as PINEFORGE_INPUTS env var to the runtime.
sourceYesPineScript v6 source.
runtimeNoEngine runtime args (NOT strategy() header) controlling timeframe semantics and intra-bar fill simulation. input_tf / script_tf set the chart and strategy timeframes — script_tf must be coarser than or equal to input_tf or the engine rejects the run. bar_magnifier + magnifier_samples + magnifier_dist enable sub-bar price-path sampling for tighter stop / limit fills. Each field is optional and only forwarded to the engine when set. Call list_engine_params for the full catalog.
overridesNostrategy(...) header overrides. Each key maps to a single argument of the Pine `strategy()` call; only the keys you set are applied. Sent as PINEFORGE_OVERRIDES env var. Call list_engine_params for the full catalog with types and enum values.
report_pathNoWhere to write the full JSON report IF it is too large to return inline. Large backtests (long trade lists + equity curves) are offloaded to this file and the tool returns a compact summary + report_path instead; read the file for the complete trades/equity. Defaults to pineforge-backtest-<timestamp>.json in the working dir.
ohlcv_csv_pathYesAbsolute or cwd-relative path to OHLCV CSV with header 'timestamp,open,high,low,close,volume' (timestamp = UNIX ms UTC).

TDQS

A4.5/5.0
Behavior5/5

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

Since no annotations are provided, the description carries full burden. It fully discloses that the backtest is local, uses Docker, requires an OHLCV CSV with specific format, and explains optional parameters like inputs and overrides. It also details large report offloading and return format.

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?

The description is well-structured with the main purpose front-loaded and separate paragraphs for different aspects. While it is fairly long, every sentence contributes meaningful information, so it remains efficient.

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?

Given the tool's complexity (7 parameters, nested objects, no output schema), the description adequately covers the return format, large report handling, and links to sibling tools. It could briefly mention what happens if no trades or errors, but overall it is complete.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The main description adds some additional context (e.g., why to prefer this tool, explanation of overrides vs. runtime, env var usage), but does not substantially enhance understanding beyond the schema descriptions themselves.

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?

The description starts with a specific verb and resource ('Run a real, deterministic backtest of a PineScript v6 strategy') and clearly distinguishes itself from the sibling tool backtest_pine_grid, which is for sweeps. The purpose is unmistakable.

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?

Provides explicit guidance on when to use: 'prefer this over estimating...', lists example user requests, and directly states 'Use backtest_pine_grid for sweeps' to advise against misuse. This gives clear context for tool selection.

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

backtest_pine_gridA

Use when the user wants to optimize, sweep, tune, or compare PineScript parameter values (e.g. 'try fast length 8/12/19', 'find the best commission/qty settings') rather than test a single configuration — for one fixed configuration use backtest_pine. Run a parameter sweep: transpile the Pine source ONCE (locally, in-container), then re-run the same compiled strategy against the OHLCV CSV across the cartesian product of inputs × overrides grids. Returns a ranked list of {inputs, overrides, summary, elapsed_seconds} entries sorted by sort_by descending, plus the top entry under best. Cap: max_combinations (default 64). Set concurrency > 1 to run backtests in parallel — each docker container has its own startup overhead, so 2-4 is usually plenty.

ParametersJSON Schema
NameRequiredDescriptionDefault
imageNoDocker image override. Defaults to ghcr.io/pineforge-4pass/pineforge-engine:latest.
inputsNoGrid of input.*() names → list of values to sweep. Example: {"Fast Length": [8, 12, 19], "Slow Length": [21, 26, 39]}
sourceYesPineScript v6 source.
runtimeNoEngine runtime args applied to every combo in the sweep. Same shape as backtest_pine.runtime — input_tf / script_tf / bar_magnifier / magnifier_samples / magnifier_dist. Currently fixed across the grid (not swept); add to the grid axes through future versions if you need to vary them.
sort_byNosummary.* field to rank by, descending. Default net_pnl.
overridesNoGrid of strategy(...) header overrides → list of values, one axis per key. Example: {"default_qty_value": [1, 5], "commission_value": [0.04]}. Call list_engine_params for the full catalog with types and enum values.
concurrencyNoParallel backtests. Default 1.
report_pathNoWhere to write the full sweep JSON IF it is too large to return inline. Oversized sweeps are offloaded here and the tool returns the best + top-ranked combinations + report_path; read the file for all combinations. Defaults to pineforge-grid-<timestamp>.json in the working dir.
fixed_inputsNoInputs applied to every combo (overridden by per-combo `inputs` keys).
include_tradesNoInclude the per-trade list in each result. Default false (saves tokens).
ohlcv_csv_pathYesPath to OHLCV CSV (same format as backtest_pine).
fixed_overridesNoOverrides applied to every combo (overridden by per-combo `overrides` keys).
max_combinationsNoHard cap on combinations. Default 64.

TDQS

A4.4/5.0
Behavior4/5

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

Describes internal process (transpile once, re-run compiled strategy), output format (ranked list, best), and performance constraints (max_combinations, concurrency overhead). Lacks explicit statement on destructiveness or side effects, but overall clear.

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?

Well-structured paragraph, front-loaded with usage guidance, efficient sentences. Could be slightly more concise but appropriate for complexity.

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

Completeness5/5

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

Covers all key aspects: when to use, process, output, constraints, concurrency, and schema included. No output schema, but description sufficiently explains return structure.

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

Parameters3/5

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

Schema provides 100% coverage for all 13 parameters. Description adds general context (e.g., default max_combinations, concurrency advice) but does not significantly deepen meaning beyond what schema already offers.

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?

Clear verb 'optimize, sweep, tune, compare' and resource 'PineScript parameter values'. Explicitly distinguishes from sibling 'backtest_pine' by stating when to use each.

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?

Provides explicit when-to-use ('optimize, sweep, tune, or compare') and when-not-to-use ('for one fixed configuration use backtest_pine'). Also gives context on concurrency and max_combinations.

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

binance_symbolsA

List/validate symbols available on the Binance public API for OHLCV fetching. Filters: query (substring of the symbol), quote_asset (e.g. 'USDT'), base_asset (e.g. 'BTC'), status (e.g. 'TRADING'), contract_type (futures only, e.g. 'PERPETUAL'). Results are cached 5 min in process. Free.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax symbols to return. Default 200.
queryNoCase-insensitive substring of the symbol.
marketYes'spot' or 'usdt_perp'.
statusNoFilter by status. 'TRADING' returns active only.
base_assetNoFilter by base asset (e.g. 'BTC').
quote_assetNoFilter by quote asset (e.g. 'USDT').
contract_typeNoFutures only. 'PERPETUAL' for usdt_perp swaps.

TDQS

A4.5/5.0
Behavior4/5

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

No annotations provided; description fills gap by stating results are cached 5 min and free. It does not disclose rate limits or auth needs, but for a read-only tool this is sufficient. No contradictions.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose and filters. Every word earns its place, no redundancy.

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?

No output schema, but description covers purpose, filters, caching, and cost. For a listing tool, this is complete enough. Could mention return format but not essential.

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

Parameters5/5

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

Schema coverage is 100%, and description adds examples (e.g., 'USDT', 'BTC', 'TRADING', 'PERPETUAL') and explains query as substring. This goes beyond the schema, providing clear semantics.

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?

The description clearly states the tool lists/validates symbols for OHLCV fetching, distinguishing it from sibling tools like fetch_binance_ohlcv. It specifies the resource (symbols) and action (list/validate) with context.

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

Usage Guidelines4/5

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

The description implies usage for selecting symbols before fetching OHLCV data, with filters provided. It doesn't explicitly exclude alternatives, but the context with sibling tools makes it apparent. Could add when-not-to-use.

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

check_engine_imageA

Check whether the local pineforge-release Docker image is up to date with the registry. Compares per-platform manifest digests via docker manifest inspect --verbose (no image layers downloaded). Returns up_to_date + recommend_pull. With auto_pull=true, runs docker pull in the same call when the local image is stale or missing. Note: this is independent of the MCP server's own version (@pineforge/backtest-mcp); the MCP version and the engine image version evolve separately.

ParametersJSON Schema
NameRequiredDescriptionDefault
imageNoImage to check. Defaults to ghcr.io/pineforge-4pass/pineforge-engine:latest.
auto_pullNoIf true and the image is stale or missing, run `docker pull` in the same call. Default false (report only).

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries full burden and does well: it explains the mechanism (docker manifest inspect, no layers downloaded), the return values (up_to_date, recommend_pull), the auto_pull behavior, and notes version independence from the MCP server.

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

Conciseness5/5

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

The description is concise (5 sentences) with no fluff. Each sentence adds unique information, starting with the core purpose, then mechanism, returns, options, and an important caveat. Well structured and front-loaded.

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?

Given no output schema, the description returns what it provides ('up_to_date + recommend_pull') but lacks details on the format or error handling. It covers the main behavior well but is not fully detailed.

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% with descriptions, but the tool description adds default values for both parameters and clarifies auto_pull behavior beyond the schema, enhancing understanding.

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?

The description clearly states the verb 'check' and the specific resource 'pineforge-release Docker image', distinguishing it from sibling tools like 'pull_engine_image'. It says exactly what the tool does: checks if the local image is up to date.

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

Usage Guidelines4/5

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

The description implies the tool is for checking rather than pulling, and the auto_pull option allows pulling when needed. However, it does not explicitly mention the sibling 'pull_engine_image' as an alternative for pure pulling, leaving some ambiguity.

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

check_pine_featureA

Answer "does PineForge support X?" for a specific Pine v6 identifier or namespace (e.g. 'ta.supertrend', 'alert', 'array.new', 'request.financial'). Use it (a) BEFORE relying on any function you are unsure about while writing a strategy, and (b) to DIAGNOSE a backtest that compiled but behaved wrong or empty — visual & alert APIs (plot, label, line, box, table, alert) are parsed-and-skipped and produce NO effect. Resolves by exact feature match, then longest namespace prefix, then alias, returning {query, status, topic, note} where status is supported / partial / unsupported / via_transpiler / not_found (via_transpiler = works end-to-end; unsupported = skipped or rejected). Local, free, no engine run.

ParametersJSON Schema
NameRequiredDescriptionDefault
featureYesPine identifier or namespace to look up, e.g. 'ta.supertrend', 'alert', 'array.new', 'strategy.entry', 'request.dividends'.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description fully carries the burden. It discloses the resolution logic (exact match, then longest namespace prefix, then alias), the possible statuses and their meanings, and that the tool is local, free, and requires no engine run.

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?

The description is a single paragraph but efficiently conveys purpose, usage, behavior, and return structure. Every sentence adds value, though it could be slightly more structured. No redundancy.

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

Completeness5/5

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

Given one parameter, no output schema, and no annotations, the description provides all necessary context: purpose, usage cases, behavioral details, and the return fields. It fully equips an agent to select and invoke the tool correctly.

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

Parameters5/5

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

The schema covers the single parameter 'feature' with a clear description, but the tool description adds valuable context with examples and explains the resolution algorithm. This enhances understanding beyond the schema alone.

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?

The description clearly states the tool answers whether PineForge supports a given Pine v6 identifier or namespace, with explicit examples. It distinguishes itself from sibling tools like transpile_pine and backtest_pine by focusing on feature support checking.

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?

Provides explicit guidance on when to use: before relying on uncertain functions while writing strategies, and for diagnosing backtest issues. It also explains the behavior of visual/alert APIs being parsed-and-skipped, which informs when not to rely on them.

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

fetch_binance_ohlcvA

Fetch OHLCV candles from Binance public API and write a backtest-ready CSV (header: timestamp,open,high,low,close,volume; timestamp = open time in UNIX ms UTC). Supports spot and usdt_perp (USDT-margined perpetual futures). Requests larger than 1000 bars are paginated automatically. The output path must live inside the MCP cwd unless PINEFORGE_ALLOW_ANYWHERE=1.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoTotal bars to fetch. Default 1000. Paginated above 1000.
marketNo'spot' (default) or 'usdt_perp'.
symbolYesBinance symbol, e.g. 'BTCUSDT'. Use binance_symbols to validate.
end_timeNoUNIX ms UTC. Defaults to now.
intervalYesKline interval. Spot supports 1s + 1m..1M; usdt_perp supports 1m..1M (no 1s).
start_timeNoUNIX ms UTC. If unset, derived from end_time/now and limit.
output_pathYesPath to write the CSV (will create parent dirs as needed).

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavioral traits: pagination for >1000 bars, output path restrictions (cwd unless env var set), and exact CSV format, including timestamp interpretation.

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

Conciseness5/5

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

The description is concise (~150 words) and front-loaded with the core purpose. Each sentence adds value, covering format, pagination, path constraint, and market-specific interval support without redundancy.

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

Completeness5/5

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

Given the 7 parameters (3 required), schema coverage, and no output schema, the description provides complete context: it specifies the CSV output format, pagination, path constraints, and interval restrictions, making the tool self-contained.

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

Parameters5/5

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

The schema has 100% coverage, and the description adds extra context beyond schema descriptions, such as defaults for limit/start_time/end_time, interval restrictions per market, and the hint to use 'binance_symbols' for symbol validation.

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?

The description clearly specifies the verb 'Fetch' and the resource 'OHLCV candles from Binance public API', and details the output format and market types. It distinguishes itself from siblings like 'binance_symbols' by focusing on data retrieval rather than symbol validation.

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

Usage Guidelines4/5

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

The description implicitly guides usage by stating it fetches data for backtesting and suggests using 'binance_symbols' for symbol validation. It does not explicitly list alternatives or when-not-to-use, but the context is clear enough for the agent.

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

get_coverage_topicA

Returns the full detail plus the exact supported[] and unsupported[] feature lists for ONE coverage topic id (ids from list_coverage_topics, e.g. 'ta', 'strategy_orders', 'request_security', 'drawing_plotting_alerts'). Use when you are about to work in a feature area and need to know precisely which functions there are implemented vs skipped — e.g. before using request.security, the ta.* library, or strategy risk knobs. Unknown ids return an error marker listing the valid ids. Local, free, no engine run.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicYesCoverage topic id from list_coverage_topics (e.g. 'ta', 'strategy_orders', 'request_security', 'drawing_plotting_alerts').

TDQS

A4.5/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses the tool returns full detail and lists, error marker for unknown IDs, and states 'Local, free, no engine run' indicating low cost and non-destructive nature. Does not detail exact return structure but sufficient for agent to understand behavior.

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

Conciseness5/5

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

Three concise sentences with front-loaded purpose, no redundant words. Each sentence adds essential information: what it returns, when to use, and error behavior.

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

Completeness5/5

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

Fully adequate for a simple one-parameter tool with full schema coverage. Covers return content, usage examples, error handling, and cost characteristics. No output schema needed given clarity of description.

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 already describes the 'topic' parameter (100% coverage). Description adds value by listing example IDs and source (list_coverage_topics), and explains error behavior for unknown topics, providing beyond-schema context for parameter usage.

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?

The description clearly states the tool returns detailed supported/unsupported feature lists for one coverage topic ID, using specific verb 'Returns' and resource 'coverage topic detail'. It distinguishes from sibling list_coverage_topics by emphasizing it retrieves details for a single topic.

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

Usage Guidelines4/5

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

Explicit usage guidance: 'Use when you are about to work in a feature area and need to know precisely which functions there are implemented vs skipped' with concrete examples (request.security, ta.*). Also describes error behavior for unknown IDs. No explicit when-not-to-use, but context is clear.

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

list_coverage_topicsA

START HERE before writing, porting, or backtesting a Pine v6 strategy on PineForge. PineForge implements a SUBSET of Pine v6, so checking coverage first avoids a strategy that compiles but silently misbehaves vs TradingView. Lists every coverage topic with a one-line status (supported / partial / unsupported / via_transpiler) and summary, plus the legend (note: via_transpiler still works end-to-end; unsupported means parsed-and-skipped or rejected) and the coverage version. Cheap, free, local — no engine run, no I/O. Then drill in with get_coverage_topic for one area's full supported/unsupported lists, or check_pine_feature to look up a single identifier.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavior: output includes one-line status, summary, legend, and coverage version; statuses are defined (supported/partial/unsupported/via_transpiler); and it notes the tool is 'Cheap, free, local — no engine run, no I/O.' No contradictions exist.

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

Conciseness5/5

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

The description is front-loaded with the most critical instruction ('START HERE') and packs detailed information (status legend, behavior, sibling references) into a compact, well-structured paragraph. Every sentence adds value without redundancy.

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

Completeness5/5

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

Given no parameters, no output schema, and no annotations, the description thoroughly explains what the tool does, what it returns (list with status and summary), the meaning of each status, and why it should be used first. It covers all necessary context for correct invocation.

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?

The input schema has zero parameters, so the description need not add parameter meaning. The baseline for zero parameters is 4. The description does not introduce any ambiguity about parameters.

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?

The description states the tool lists coverage topics for Pine v6 strategies on PineForge, and explicitly distinguishes it from sibling tools get_coverage_topic and check_pine_feature. It uses the specific verb 'list' and clarifies the resource (coverage topics) and scope (Pine v6 subset).

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?

The description explicitly says 'START HERE before writing, porting, or backtesting a Pine v6 strategy on PineForge' and advises checking coverage first to avoid silent misbehavior. It also names alternatives for deeper drilling: 'drill in with get_coverage_topic' and 'check_pine_feature to look up a single identifier.'

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

list_engine_paramsA

Returns the full catalog of engine knobs accepted by backtest_pine / backtest_pine_grid in two groups: strategy_overrides (the 9 strategy(...) header fields the runtime reads via PINEFORGE_OVERRIDES — initial_capital, pyramiding, slippage, commission_value, commission_type, default_qty_value, default_qty_type, process_orders_on_close, close_entries_rule) and runtime_args (input_tf, script_tf, bar_magnifier, magnifier_samples, magnifier_dist — args to run_backtest_full, NOT part of the strategy() header). Each entry is {key, type, enum?, description}. Does not run the engine. Use this to discover what knobs the engine exposes before issuing a backtest.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. Clearly states it is read-only ('Does not run the engine'), which is the key behavioral trait. No additional disclosure needed for a listing tool.

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

Conciseness5/5

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

Single paragraph is well-structured, front-loaded with purpose, and contains all necessary details without extraneous information.

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

Completeness5/5

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

Given no output schema, description fully specifies return structure: two groups with keys, types, enum?, description. Complete for a discovery tool with no parameters.

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?

Tool has 0 parameters; schema coverage 100%. Description adds value by explaining the structure of the returned catalog, which compensates for lack of params. Baseline for 0 params is 4.

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?

The description clearly states it returns a catalog of engine knobs for backtest_pine/backtest_pine_grid and explicitly says 'Does not run the engine', distinguishing it from sibling tools that execute backtests.

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

Usage Guidelines4/5

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

The description explicitly advises using this tool before issuing a backtest to discover knobs. It doesn't explicitly state when not to use it, but the context of sibling tools makes the usage clear.

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

pull_engine_imageB

Run docker pull for the pineforge-release runtime image on the user's machine. Useful before the first backtest_pine call.

ParametersJSON Schema
NameRequiredDescriptionDefault
imageNoImage to pull. Defaults to ghcr.io/pineforge-4pass/pineforge-engine:latest.

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It discloses that the tool runs docker pull, which is a network operation that may be slow and requires Docker installed. However, it does not mention potential failures (e.g., network issues, authentication), side effects (modifying local Docker images), or prerequisites.

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

Conciseness5/5

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

Two sentences with no wasted words. The first sentence clearly states the action, and the second provides usage context. Excellent front-loading and conciseness.

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

Completeness3/5

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

For a simple tool with one optional parameter and no output schema, the description is adequate but lacks context about prerequisites (e.g., Docker installation), return value or outcome after pull, and error handling. Given the sibling tool check_engine_image, more detail on postconditions would help.

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

Parameters3/5

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

Schema coverage is 100% for the single parameter. The description adds meaning by stating the default value and noting the image is the runtime image, but the schema already has a description. Baseline 3 is appropriate.

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

Purpose4/5

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

The description clearly states the action ('run docker pull') and the specific resource ('pineforge-release runtime image'). It also mentions the context (on user's machine) and hints at sibling differentiation by noting usefulness before backtest_pine, though it does not explicitly distinguish from check_engine_image.

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

Usage Guidelines3/5

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

The description provides implied usage: 'Useful before the first backtest_pine call.' However, it does not specify when not to use this tool (e.g., if image already exists) or mention alternatives like check_engine_image. No explicit exclusions or comparative guidance.

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

transpile_pineA

Transpile PineScript v6 source to a C++ translation unit locally, using the pineforge-codegen transpiler bundled in the pineforge-release Docker image. No API key, no network — source never leaves the machine. Returns the generated C++ as text. Use backtest_pine if you also want to run the strategy.

ParametersJSON Schema
NameRequiredDescriptionDefault
imageNoDocker image override. Defaults to ghcr.io/pineforge-4pass/pineforge-engine:latest.
sourceYesPineScript v6 source (must include //@version=6).

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so description carries burden. It discloses no network, local execution, returns text as C++. No hidden behavioral traits omitted.

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

Conciseness5/5

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

Two sentences, no wasted words. All information is front-loaded and essential.

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?

Low complexity with 2 params, no output schema. Description covers return type and primary use case. Could mention Docker requirement, but still adequate.

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 100%, description adds value by specifying source must include '//@version=6' and explaining image default. Adds meaning beyond schema.

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?

Description clearly states verb 'transpile', resource 'PineScript v6 source to C++', and distinguishes from sibling 'backtest_pine'.

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

Usage Guidelines4/5

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

Explicitly says 'use backtest_pine if you also want to run the strategy', providing clear context for when to use this tool. Could mention Docker dependency but overall strong.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 5 tool updatesv0.9.0
    • Changedbacktest_pine1 field changed
      • addedInput schema / properties / report_path
        Added value: +{
        +  "description": "Where to write the full JSON report IF it is too large to return inline. Large backtests (long trade lists + equity curves) are offloaded to this file and the tool returns a compact summary + report_path instead; read the file for the complete trades/equity. Defaults to pineforge-backtest-<timestamp>.json in the working dir.",
        +  "type": "string"
        +}
    • Changedbacktest_pine_grid1 field changed
      • addedInput schema / properties / report_path
        Added value: +{
        +  "description": "Where to write the full sweep JSON IF it is too large to return inline. Oversized sweeps are offloaded here and the tool returns the best + top-ranked combinations + report_path; read the file for all combinations. Defaults to pineforge-grid-<timestamp>.json in the working dir.",
        +  "type": "string"
        +}
    • Addedcheck_pine_feature
    • Addedget_coverage_topic
    • Addedlist_coverage_topics
  2. 8 tool updatesv0.8.4
    • First observedbacktest_pine
    • First observedbacktest_pine_grid
    • First observedbinance_symbols
    • First observedcheck_engine_image
    • First observedfetch_binance_ohlcv
    • First observedlist_engine_params
    • First observedpull_engine_image
    • First observedtranspile_pine

TDQS

A4.4/5.0
Disambiguation5/5

Each tool has a distinct purpose: backtesting single vs. grid, data fetching, symbol listing, engine management, transpilation. No overlap in functionality.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., backtest_pine, fetch_binance_ohlcv), making them predictable and easy to understand.

Tool Count5/5

8 tools cover the core workflow of PineScript backtesting (transpile, run, sweep, fetch data, manage engine) without redundancy or missing essentials.

Completeness4/5

The set covers transpilation, single backtest, parameter sweeps, data fetching, symbol validation, and engine updates. Minor gaps like multi-exchange support or visualization exist but do not hinder the primary use case.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Provides comprehensive Pine Script v6 documentation and tools to help AI assistants look up functions, validate syntax, and generate accurate code. It enables linting, version conversion from v5 to v6, and deep conceptual analysis to prevent code hallucinations.
    10
    9
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    exposes a remote MCP endpoint so agents can: run strategy backtests by symbol/timeframe/date range, pass strategy inputs programmatically, receive structured backtest results (trades, win rate, profit, drawdown), keep long-running runs observable via progress notifications, support Binance Futures tickers only, enforce a maximum of 1440 candles per backtest, apply a rate limit of 3 backtests per
    5
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Local-first backtesting engine with built-in overfitting detection (PBO, deflated Sharpe, bootstrap CI, walk-forward) and a native MCP server for AI agents to validate trading strategies.
    4
    Apache 2.0
  • A
    license
    A
    quality
    C
    maintenance
    A type-safe MCP server that enables AI agents to control TradingView Desktop via Chrome DevTools Protocol, allowing chart state reading, symbol/timeframe changes, and OHLCV data fetching.
    11
    552
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/pineforge-4pass/pineforge-backtest-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server