PineForge-Codegen
This server enables fully local PineScript v6 strategy development, transpilation, and backtesting against real Binance market data — no API key required.
Transpile PineScript to C++ (
transpile_pine): Convert PineScript v6 source code into a C++ translation unit without running a backtest.Run a single backtest (
backtest_pine): Transpile and execute a PineScript v6 strategy against an OHLCV CSV file, with optional overrides for strategy parameters (initial capital, commission, slippage, pyramiding, etc.), input values, and runtime engine settings. Returns a detailed report including trade summaries and P&L.Run a parameter sweep / grid search (
backtest_pine_grid): Transpile once and run the strategy across the full Cartesian product of input and override combinations, returning ranked results sorted by net P&L, win rate, max drawdown, or trade count.Fetch Binance market data (
fetch_binance_ohlcv): Download historical OHLCV candlestick data from Binance's public API (spot or USDT-margined perpetual futures) and save it as a backtest-ready CSV, with automatic pagination for large requests.Discover Binance symbols (
binance_symbols): List and filter available Binance trading symbols by market, quote/base asset, status, or contract type; results cached in-process for 5 minutes.List engine parameters (
list_engine_params): Retrieve a full catalog of all strategy override knobs and runtime arguments accepted by the backtest engine, including types, enums, and descriptions.Manage the engine Docker image (
pull_engine_image,check_engine_image): Pull the pineforge-engine Docker image or check whether the local copy is up to date with the registry, with an optional auto-pull if stale.
@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.

Tools
name | runs on | purpose |
| in-process | Pine v6 → C++ translation unit (transpile-only) |
| local (no I/O) | Catalog of every |
| in-process | Single backtest of a Pine source against an OHLCV CSV |
| in-process | Cartesian sweep of |
| Binance public API | Write a backtest-ready CSV from Binance spot or USDT-perp klines |
| Binance public API | List / filter Binance symbols (5-min in-process cache) |
| local (no I/O) | Every Pine v6 coverage topic with a one-line status + summary |
| local (no I/O) | Look up whether a Pine identifier/namespace is supported in PineForge |
| local (no I/O) | Full detail + supported/unsupported feature lists for one coverage topic |
| 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:latestOnly 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/mcpTradeoff 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:latestFor 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 9strategy(...)header fields the runtime reads viaPINEFORGE_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 torun_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=1Other env vars
var | default | purpose |
|
| Image (engine runtime + bundled codegen) used for transpile + backtest |
|
| Allow OHLCV paths outside cwd |
|
| Hard kill for |
Available Tools
11 toolsbacktest_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.
| Name | Required | Description | Default |
|---|---|---|---|
| image | No | Docker image override. Defaults to ghcr.io/pineforge-4pass/pineforge-engine:latest. | |
| inputs | No | Map of Pine input.*() names → value (string/number/bool). Sent as PINEFORGE_INPUTS env var to the runtime. | |
| source | Yes | PineScript v6 source. | |
| runtime | No | Engine 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. | |
| overrides | No | strategy(...) 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_path | No | 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. | |
| ohlcv_csv_path | Yes | Absolute or cwd-relative path to OHLCV CSV with header 'timestamp,open,high,low,close,volume' (timestamp = UNIX ms UTC). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| image | No | Docker image override. Defaults to ghcr.io/pineforge-4pass/pineforge-engine:latest. | |
| inputs | No | Grid of input.*() names → list of values to sweep. Example: {"Fast Length": [8, 12, 19], "Slow Length": [21, 26, 39]} | |
| source | Yes | PineScript v6 source. | |
| runtime | No | Engine 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_by | No | summary.* field to rank by, descending. Default net_pnl. | |
| overrides | No | Grid 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. | |
| concurrency | No | Parallel backtests. Default 1. | |
| report_path | No | 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. | |
| fixed_inputs | No | Inputs applied to every combo (overridden by per-combo `inputs` keys). | |
| include_trades | No | Include the per-trade list in each result. Default false (saves tokens). | |
| ohlcv_csv_path | Yes | Path to OHLCV CSV (same format as backtest_pine). | |
| fixed_overrides | No | Overrides applied to every combo (overridden by per-combo `overrides` keys). | |
| max_combinations | No | Hard cap on combinations. Default 64. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max symbols to return. Default 200. | |
| query | No | Case-insensitive substring of the symbol. | |
| market | Yes | 'spot' or 'usdt_perp'. | |
| status | No | Filter by status. 'TRADING' returns active only. | |
| base_asset | No | Filter by base asset (e.g. 'BTC'). | |
| quote_asset | No | Filter by quote asset (e.g. 'USDT'). | |
| contract_type | No | Futures only. 'PERPETUAL' for usdt_perp swaps. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| image | No | Image to check. Defaults to ghcr.io/pineforge-4pass/pineforge-engine:latest. | |
| auto_pull | No | If true and the image is stale or missing, run `docker pull` in the same call. Default false (report only). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| feature | Yes | Pine identifier or namespace to look up, e.g. 'ta.supertrend', 'alert', 'array.new', 'strategy.entry', 'request.dividends'. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Total bars to fetch. Default 1000. Paginated above 1000. | |
| market | No | 'spot' (default) or 'usdt_perp'. | |
| symbol | Yes | Binance symbol, e.g. 'BTCUSDT'. Use binance_symbols to validate. | |
| end_time | No | UNIX ms UTC. Defaults to now. | |
| interval | Yes | Kline interval. Spot supports 1s + 1m..1M; usdt_perp supports 1m..1M (no 1s). | |
| start_time | No | UNIX ms UTC. If unset, derived from end_time/now and limit. | |
| output_path | Yes | Path to write the CSV (will create parent dirs as needed). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | Coverage topic id from list_coverage_topics (e.g. 'ta', 'strategy_orders', 'request_security', 'drawing_plotting_alerts'). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| image | No | Image to pull. Defaults to ghcr.io/pineforge-4pass/pineforge-engine:latest. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| image | No | Docker image override. Defaults to ghcr.io/pineforge-4pass/pineforge-engine:latest. | |
| source | Yes | PineScript v6 source (must include //@version=6). |
TDQS
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.
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.
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.
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.
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.
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.
5 tool updates
v0.9.0- Changed
backtest_pine1 field changed- added
Input schema / properties / report_pathAdded 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" +}
- Changed
backtest_pine_grid1 field changed- added
Input schema / properties / report_pathAdded 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" +}
- Added
check_pine_feature - Added
get_coverage_topic - Added
list_coverage_topics
8 tool updates
v0.8.4- First observed
backtest_pine - First observed
backtest_pine_grid - First observed
binance_symbols - First observed
check_engine_image - First observed
fetch_binance_ohlcv - First observed
list_engine_params - First observed
pull_engine_image - First observed
transpile_pine
TDQS
Each tool has a distinct purpose: backtesting single vs. grid, data fetching, symbol listing, engine management, transpilation. No overlap in functionality.
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.
8 tools cover the core workflow of PineScript backtesting (transpile, run, sweep, fetch data, manage engine) without redundancy or missing essentials.
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
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
- CPZAIOAuthcom.cpz-lab.mcp
Build, backtest, and deploy quantitative trading strategies from your AI agent.
Verifiable backtests for AI-built trading strategies: deterministic engine, reproducible results.
AI trading bots: generate strategies, backtest, deploy live to 10+ brokers. No coding required.
Polymarket + Hyperliquid + macro for AI agents. 38 tools, signal backtest, SSE streaming. Free tier.
Related MCP Servers
- AlicenseAqualityAmaintenanceProvides 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.109MIT
- FlicenseNot gradedqualityDmaintenanceexposes 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 per5-
- AlicenseNot gradedqualityCmaintenanceLocal-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.4Apache 2.0
- AlicenseAqualityCmaintenanceA 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.115521MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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