Skip to main content
Glama
romaco-labs

@romaco/mcp

Official
by romaco-labs

@romaco/mcp

MCP server for romaco-charts. Control your trading chart from Claude, Cursor, or any MCP-compatible AI agent.

npx @romaco/mcp

romaco-mcp — an AI agent draws code-computed technical analysis on a live chart


Philosophy

Romaco MCP is compression-first. Tools return features and decisions, not raw OHLCV. Most default tool payloads stay under 2 KB; romaco_analyze_market is the deliberate exception at 2.4–4.1 KB across the eight recorded 400-bar fixtures. Large payloads such as snapshots, visible-candle arrays, and all-bar indicator series are gated behind acknowledgeHighTokenCost: true. Full raw chart-state export is disabled until an explicitly authorized host contract exists.

The rule: code computes; the agent queries and interprets. RSI, levels, and last price come from structured tool output. This reduces unsupported numeric claims; it cannot prevent an agent from misquoting evidence or reaching a wrong thesis. Grounding data is not grounding the conclusion. Compression also preserves more context than returning a large raw OHLCV dump by default.

Cost table

Tool

Default

Gated raw (with acknowledgeHighTokenCost:true)

romaco_analyze_market

2.4–4.1 KB on recorded 400-bar fixtures

romaco_thesis

<2 KB computed bull/bear debate + verdict + setup

romaco_find_levels

<500 B

romaco_detect_patterns

<2 KB (trimmed hits)

full hits with anchor points[]

romaco_setup_chart

<5 KB (setup log + summary)

romaco_load_candles

<200 B ack

romaco_calculate_position_size

<1 KB

romaco_list_templates

~4.5 KB static catalog

romaco_list_panes

<1 KB

romaco_get_chart_context

~1 KB snapshot

disabled; returns ACTION_DENIED

romaco_get_visible_candles

<1 KB range summary

~70 KB raw OHLCV

romaco_get_indicator_values

<500 B last/prev/delta/state

~10 KB per-bar series

romaco_capture_snapshot

error (must ack)

300–800 KB base64 image

romaco_clear_drawings, romaco_open_paper_position

<2 KB structured preview/challenge or receipt

Other romaco_add_*, romaco_set_*, romaco_clear_*, romaco_go_to_*

<1 KB structured result or ack

Related MCP server: tradingview-mcp

30-second start

# 1. Install
npm install -g @romaco/mcp

# 2. Wire it into Claude Code (run from your project root)
cat > .mcp.json <<'EOF'
{ "mcpServers": { "romaco": { "command": "romaco-mcp" } } }
EOF

Then start Claude Code and prompt:

Use romaco_setup_chart to analyze AAPL daily with the trend_analysis preset.

That's it. The MCP server fetches yfinance data (with disk cache + cookie/crumb handshake), runs full technical analysis, and returns a compressed MarketSummary. No API key required; the cache reduces repeated upstream requests, but Yahoo can still rate-limit traffic and the server reports that failure explicitly.

Live chart control (optional)

To let Claude drive a real chart — drawings, indicators, alerts visible in your browser — mount <McpBridge /> next to your TradingTerminal:

import { TradingTerminal, McpBridge, type TradingTerminalRef } from 'romaco-charts/react';
import { useRef } from 'react';

function App() {
  const ref = useRef<TradingTerminalRef | null>(null);
  const bridgeToken = getBridgeTokenFromRuntime();
  return (
    <>
      <TradingTerminal ref={ref} data={candles} symbol="AAPL" />
      <McpBridge chartRef={ref} security={{ mode: 'paired', token: bridgeToken }} />
    </>
  );
}

See examples/pro-volatility-scanner for a complete setup. With <McpBridge /> mounted, the chart-bridge tools (add_indicator, add_drawing, add_alert, capture_snapshot, …) become available. Atomic thesis/pattern annotation additionally requires the host action documented in Chart bridge compatibility; older hosts fail closed instead of falling back to sequential drawing writes. romaco_annotate also uses a two-step, one-time confirmation challenge: its first call performs zero writes and returns APPROVAL_REQUIRED; retry only after the user approves the exact analysisId.

Data cache

Every successful yfinance fetch is cached to ~/.romaco/cache/ with per-timeframe TTL (1m→1min, 1h→1h, 1d→24h, …). A grid of N widgets requesting the same symbol triggers one upstream fetch. Wipe the cache anytime with rm -rf ~/.romaco/cache, or override the location with ROMACO_CACHE_DIR=/tmp/cache.

What it does

Exposes 20+ MCP tools in two categories:

Headless tools — work without a browser, load data and run analysis server-side:

  • romaco_setup_chart — one-command setup: load + preset + analyze (recommended first call)

  • romaco_load_candles — fetch OHLCV from Yahoo Finance (free) or pass your own array

  • romaco_analyze_market — full technical analysis: trend, S/R levels, RSI/MACD/divergences, volatility, patterns

  • romaco_thesis — computed bull/bear debate → verdict (long/short/stand_aside) + confidence + entry/stop/target setup; stands aside when R/R is poor (won't fake a signal)

  • romaco_find_levels — support/resistance via K-means + Volume Profile (POC/VAH/VAL)

  • romaco_detect_patterns — H&S, double top/bottom, triangles, flags

  • romaco_calculate_position_size — pure-math risk-based position sizing with R/R + breakeven win-rate

  • romaco_list_templates — catalog of drawing templates (trendline, fib, channels, …)

Chart-bridge tools — control a live Romaco chart in the browser:

  • romaco_add_indicator — EMA, RSI, MACD, Bollinger, ATR, 29+ indicators

  • romaco_add_drawing — agent-owned trendlines, Fibonacci, lines, channels, rectangles; omitted group defaults to romaco-mcp/manual

  • romaco_add_alert — price alerts with direction (above/below/cross)

  • romaco_clear_alerts — preview, approve, then remove exact alert IDs from one chart; never sends global clear

  • romaco_capture_snapshot — PNG/JPEG base64 for vision LLMs

  • romaco_open_paper_position — approval-gated simulated long/short with SL/TP and deterministic process-local idempotency

  • romaco_get_chart_context — concise live chart state; raw chart export is disabled

  • romaco_get_visible_candles — OHLCV in current viewport

  • romaco_set_zoom / romaco_reset_view — zoom control

  • romaco_clear_drawings — preview, approve, then remove only romaco-mcp/* groups; user drawings stay intact

  • romaco_list_panes — enumerate main + subpanel panes (e.g. RSI subpanel id)

  • romaco_get_indicator_values — read computed indicator series (by id or name)

  • romaco_go_to_timestamp — scrub viewport to a given timestamp

  • romaco_annotate — atomically draw one exact thesis after a scoped, one-time confirmation challenge


Install

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "romaco": {
      "command": "npx",
      "args": ["-y", "@romaco/mcp"]
    }
  }
}

Restart Claude Desktop.

Claude Code

claude mcp add romaco -- npx -y @romaco/mcp

Or add to your project's .mcp.json:

{
  "mcpServers": {
    "romaco": {
      "command": "npx",
      "args": ["-y", "@romaco/mcp"]
    }
  }
}

Cursor / other MCP clients

Any client that supports stdio MCP servers works. Point it at npx @romaco/mcp.


Usage

Headless analysis (no browser needed)

Load 500 candles of AAPL 1h from yfinance, then analyze the market.

Claude will call:

  1. romaco_load_candles → fetches from Yahoo Finance

  2. romaco_analyze_market → returns a compressed MarketSummary (2.4–4.1 KB on the recorded 400-bar fixture suite)

  3. romaco_find_levels → S/R zones, POC, VAH, VAL

  4. Reasons over the features → tells you what it sees

Live chart control (with browser)

Add <McpBridge /> to your chart app:

import { TradingTerminal, McpBridge } from 'romaco-charts/react';

function App() {
  const ref = useRef(null);
  const bridgeToken = getBridgeTokenFromRuntime();
  return (
    <>
      <TradingTerminal ref={ref} symbol="AAPL" timeframe="1h" datafeed={myDatafeed} />
      <McpBridge chartRef={ref} security={{ mode: 'paired', token: bridgeToken }} />
    </>
  );
}

Then from Claude:

Add EMA 20 and RSI 14 to the chart, draw a Fibonacci from the last swing low to swing high,
and capture a snapshot so I can see it.

romaco_annotate, romaco_clear_drawings, romaco_clear_alerts, and romaco_open_paper_position use two-step confirmation. First call returns a scoped token and performs zero chart writes. MCP rejects missing, expired, wrong-scope, and replayed tokens. Agent/client must send token only after explicit user approval. Token proves completion of protocol; by itself it cannot cryptographically prove human intent and never bypasses chart host's actionPolicy.

Drawing clear scope binds exact chart identity plus current Romaco-managed group plan. It never sends global clearDrawings; each reserved romaco-mcp/* group is replaced with empty desired state, leaving user and unrelated groups intact.

Alert clear scope binds exact chart identity plus current stable alert IDs. It never sends global clearAlerts; each approved alert is removed by ID with host identity policy. Alert-plan drift consumes the token and performs zero writes.

Paper positions are visual simulation only: no broker, real order, or money. Caller supplies stable idempotencyKey. Same completed key/payload returns same stored receipt without another chart write; changed payload gets IDEMPOTENCY_CONFLICT. Ambiguous bridge failure marks key indeterminate and blocks automatic retry until user inspects chart state, reconciles outcome, and uses a new key with fresh approval. Journal is memory-only for MCP process; restart/crash does not provide durable exactly-once execution.


Evaluation status

npm run eval:offline validates 28 declared scenarios and currently executes 24 deterministic MCP conformance workflows; 4 remain explicitly planned. Reported success rate uses executed runnable workflows as denominator and always reports planned work plus concrete blockers separately. Runnable failures or missing runnable workflow/grader implementations exit non-zero. Numeric agent-final-answer grading remains planned; current evidence-conformance checks structured tool evidence, not model prose.


Data sources

Source

Auth

Coverage

yfinance

None (default)

Stocks, ETFs, crypto, FX, indices — delayed data

raw

None

Pass your own OHLCV array inline

Bring your own key (BYOK) — Coming in v1.1: Alpaca, Polygon.io, FMP.


Configuration

Option

Default

How to set

WebSocket port

7399

--port 3200 or ROMACO_MCP_PORT=3200

ROMACO_MCP_BRIDGE_AUTH

auto

auto, required, or explicit legacy compatibility mode

ROMACO_MCP_BRIDGE_TOKEN

(none)

Canonical base64url encoding of exactly 32 random bytes

ROMACO_TOKEN

(empty)

Reserved. Does not authorize or trigger candle egress today.

ROMACO_API_URL

(unused)

Reserved for a future explicitly authorized remote-adapter contract.

ROMACO_MCP_ALLOWED_ORIGINS

(localhost + https://romaco.io)

Comma-separated exact HTTP(S) origins for <McpBridge /> pages on other domains

ROMACO_MCP_TELEMETRY

(off)

Set exactly jsonl for redacted local tool telemetry on stderr. Never sends telemetry over network.

Bridge security: paired v2 mutually authenticates server and browser with HMAC-SHA-256 before chart traffic. Token never crosses WebSocket. Generate one once, configure MCP process, inject same value into <McpBridge /> at runtime:

node -e "console.log(require('node:crypto').randomBytes(32).toString('base64url'))"

ROMACO_MCP_BRIDGE_AUTH=required \
ROMACO_MCP_BRIDGE_TOKEN="<generated-token>" \
ROMACO_MCP_ALLOWED_ORIGINS="https://myapp.com" \
npx @romaco/mcp

Never put token in source, public bundle, URL, logs, or browser storage. Use in-memory input for current page lifetime. auto selects paired v2 with valid token; no token keeps legacy v1 with warning. Malformed configured token disables only chart bridge. required never falls back to v1.

Legacy compatibility is unauthenticated and is not secure by default. Production deployments should use required plus paired McpBridge; enable legacy only as an explicit migration step.

Listener binds 127.0.0.1; exact origins add defense in depth. In paired mode, localhost pages still need pairing token. Browser-to-server frames above 8 MiB are rejected before JSON parsing, leaving more than 10x headroom over typical documented chart snapshots. Frames are not encrypted. Never expose listener remotely; use authenticated TLS gateway for non-loopback deployments.

# Custom port
npx @romaco/mcp --port 3200

# Or via env
ROMACO_MCP_PORT=3200 npx @romaco/mcp

Set the same port in <McpBridge port={3200} />.


Local execution and remote egress

Current tools compute analysis locally in src/compression. Setting ROMACO_TOKEN or ROMACO_API_URL does not authorize transmission of candles to a remote analysis service. When a token is present, romaco_thesis returns a structured REMOTE_EGRESS_DISABLED warning and uses the local artifact unless an already validated gateway artifact was injected through an authorized host path.

A future remote adapter must add explicit authorization, validated boundary schemas, transport security, trace propagation, and user-facing egress docs before it can become callable. No automatic network fallback exists today.


Example prompts

Institutional analysis:

"Load TSLA 4h from yfinance, analyze the market, find key levels, detect any chart patterns, then draw the Fibonacci retracement of the last swing on the chart and add an alert at the 0.618 level."

Conditional automation:

"Load AAPL 15m, run full analysis. If RSI shows bullish divergence and price is near a support level, open a paper long 100 shares with stop loss at the VAL of the Volume Profile."

Pattern scanner:

"Load SPY 1d and detect patterns. For any head & shoulders found, tell me the target price and invalidation level."


Requirements

  • Node.js >= 20

  • For chart-bridge tools: romaco-charts >= 1.0.0-beta.6 with <McpBridge /> in your app


Available Tools

27 tools
romaco_add_alertB

Add a price alert on the chart. Triggered alerts are shown visually. Use romaco_get_chart_context to see existing alerts.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoOptional note attached to the alert, e.g. "Key resistance level"
priceYesPrice level to trigger the alert at
directionNo"above" = triggers when price rises above. "below" = falls below. "cross" = either direction (default).

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavior. It mentions alerts are shown visually when triggered, but omits details like whether the alert is persistent, if it can be removed, or what happens on creation (e.g., success confirmation). This is insufficient for a mutation 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?

The description is exceptionally concise with two sentences, front-loaded with the primary action, and contains no redundant or irrelevant information.

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

Completeness2/5

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

Given the tool has 3 parameters, no output schema, and no annotations, the description lacks important context such as return value, error conditions, or whether the chart must be initialized. It is insufficient for an agent to fully understand the tool's behavior and outcomes.

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%, so the schema already documents parameters. The description does not add any additional meaning beyond the schema, such as explaining the direction enum values or providing examples. Baseline score of 3 is appropriate.

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 adds a price alert on the chart and mentions triggered alerts are shown visually. It also references romaco_get_chart_context for viewing existing alerts, which distinguishes it from sibling tools like romaco_remove_alert and romaco_clear_alerts.

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 suggests using romaco_get_chart_context to see existing alerts, providing some context for use, but it lacks explicit guidance on when to use this tool versus alternatives or any prerequisites (e.g., requires an active chart).

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

romaco_add_drawingA

Draw a technical-analysis shape on the chart. Romaco-charts ships 33 templates: trendline, horizontalLine, horizontalRay, verticalLine, verticalSegment, verticalRay, parallelChannel, rectangle, brush, path, fibRetracement, fibExtension, fibCircle, fibSpiral, fibFan, longPosition, shortPosition, dateRange, ruler, volumeProfile, text, elliottWave, elliottWave3, elliottWave8, elliottWaveAny, circle, triangle, arrow, parallelogram, abcd, xabcd, gannBox, priceAlert. Required point counts vary per template (use romaco_list_templates to discover them). style, paneId, and groupId are optional. Use romaco_get_visible_candles to fetch real timestamps and prices for the anchor points. To draw inside an indicator subpanel (e.g. a horizontal line at RSI=70 inside the RSI pane), pass paneId from romaco_list_panes.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNoOptional text label rendered with the drawing.
styleNoOptional styling. Flat shape; mapped server-side to the chart’s nested DrawingStyle.
paneIdNoWhere to draw. "main" (default) for the candlestick pane, or a subpanel id from romaco_list_panes for inside-indicator drawings.
pointsYesAnchor points. Single-point templates (horizontalLine, text, priceAlert) need 1; trendline / fib / rectangle need 2; parallelChannel / elliottWave3 need 3; etc.
groupIdNoAtomic group id — drawings sharing this id are added/removed together.
drawingTypeYesTemplate name. Run romaco_list_templates for the full catalog.

TDQS

A4.8/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. Discloses optional fields (style, paneId, groupId), how style is mapped server-side, and group inclusion/exclusion behavior. Lacks mention of rate limits or idempotency, but mutation intent is clear.

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?

Dense but efficient: front-loaded with core action, then key details (templates, point requirements, optional fields, helper tools, subpanel usage). Every sentence earns its place 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?

Handles complexity well: 6 parameters, nested objects, 33 templates. Covers prerequisites (helper tools), optional fields, and subpanel use case. No output schema, but mutation tool doesn't need return value explanation. Fully prepares agent.

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%, baseline 3. Description adds significant meaning: enumerates 33 template types, explains point counts for different templates, clarifies paneId with example (RSI=70), and describes style mapping. Far exceeds 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?

States 'Draw a technical-analysis shape on the chart' with a specific verb and resource. Lists 33 templates explicitly, distinguishing it from siblings like romaco_clear_drawings or romaco_draw_pattern.

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: use romaco_list_templates to discover point counts, romaco_get_visible_candles for anchor timestamps/prices, and romaco_list_panes for indicator sub-panels. Includes when-not-to-use info via sibling references.

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

romaco_add_indicatorA

Add a technical indicator to the chart. Examples: EMA with period 20, RSI with period 14, MACD with params [12, 26, 9], BOLL (Bollinger Bands) with period 20. Params are positional numbers specific to each indicator type.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNoPositional parameters. EMA/SMA: [period]. RSI: [period]. MACD: [short, long, signal]. BOLL: [period, multiplier]. KDJ: [period, k, d]. Omit to use defaults.
indicatorTypeYesIndicator type name. Common values: EMA, SMA, RSI, MACD, BOLL, KDJ, ATR, VOL, WR, BIAS, CCI, DMI, SAR, TRIX, MTM, EMV, ROC, PVT, OBV, CR, DMA, VR, BBI, AO, PSY, BRAR. Case-insensitive.

TDQS

A3.8/5.0
Behavior3/5

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

No annotations provided, so description carries burden. Offers parameter format guidance and default behavior, but does not disclose if adding an indicator is destructive, has limits, or requires authentication.

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 wasted words.

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?

Covers indicator types, parameter formats, and defaults. Lacks error conditions or limits, but sufficient for typical usage.

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%, but description adds value by providing examples per indicator type and noting default behavior ('Omit to use defaults'), going 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?

Clearly states verb 'Add' and resource 'technical indicator' with target 'chart'. Examples distinguish it from sibling tools like add_alert or add_drawing.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus siblings like romaco_get_indicator_values or romaco_remove_indicator. Lacks exclusionary context.

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

romaco_analyze_marketA

Run full technical analysis on the currently loaded candle data and return a compressed MarketSummary. Includes trend (direction + strength), piecewise linear price action, support/resistance levels (clustering), momentum (RSI, MACD, divergences), volatility (ATR, Bollinger Bands), and detected patterns (H&S, double top/bottom, triangles, flags). Call romaco_load_candles first. Returns ~500 tokens of structured features instead of raw OHLCV. With a ROMACO_TOKEN (Pro), this is computed server-side when available, with automatic fallback to local compute.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description effectively discloses behavioral traits: server-side computation with fallback (if token is Pro), approximate output size (~500 tokens), and that it returns structured features instead of raw OHLCV. It does not mention state modifications, but analysis is likely read-only.

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 two sentences and front-loaded with the main action. It efficiently lists contained analyses and adds prerequisite and return info. Very concise but packed with information.

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

Completeness4/5

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

Given no output schema and no annotations, the description provides sufficient context: what it does, prerequisite, server-side behavior, and output nature. It does not detail exact output format, but for a tool with no parameters, this is 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?

The tool has zero parameters, so the description adds no parameter info. Per guidelines, 0 parameters yields a baseline of 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 runs full technical analysis on candle data and returns a MarketSummary. It lists comprehensive components (trend, patterns, levels, etc.), distinguishing it from sibling tools like romaco_detect_patterns or romaco_find_levels by being a broader analysis.

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 states to call romaco_load_candles first, providing a clear prerequisite. However, it does not specify when to use this vs. other analysis tools or mention alternative tools for specific analyses.

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

romaco_annotateA

Annotate the latest locally-computed trade thesis on the user's browser chart with VISUAL HIERARCHY: support/resistance and the detected pattern are drawn FAINT (gray, dashed/dotted, low opacity) as context; the entry zone is a soft band; entry/stop/target are the BOLD action (longPosition/shortPosition with built-in reward/risk). Honest guard: if the verdict is stand_aside it draws ONLY context and never invents an entry/stop/target. Re-running replaces the previous annotation (group 'romaco-thesis') and leaves the user's own drawings untouched. Call this ONLY after the user accepts the offer to draw. Requires mounted and candles loaded (romaco_setup_chart or romaco_load_candles).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

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

No annotations provided, so description carries full burden. It discloses visual hierarchy, replacement behavior (group 'romaco-thesis'), leaves user drawings untouched, and the 'stand_aside' guard that prevents false entries.

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?

Description is slightly long but well-structured with front-loaded main action and subsequent details. Each sentence adds value, though minor redundancy could be trimmed.

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?

With no parameters and no output schema, description fully covers prerequisites, behavior, side effects, and guard condition. No gaps.

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?

Input schema has no parameters; description correctly adds no param info. Baseline 4 is appropriate since no parameters need explanation.

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 annotates a trade thesis on the chart with visual hierarchy, distinguishing it from siblings like 'romaco_draw_pattern' or 'romaco_thesis_batch'. It specifies the context (support/resistance faint, entry/stop/target bold) and the 'stand_aside' guard.

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?

Provides explicit prerequisites: requires user acceptance, <McpBridge /> mounted, candles loaded. Mentions re-running replaces previous annotation. Lacks a clear 'when not to use' or alternatives among siblings.

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

romaco_calculate_position_sizeA

Calculate position size based on account risk management rules. Given account size, risk percentage, entry price, and stop loss — returns exact shares/contracts to trade, total risk in dollars, position value, and risk/reward ratio if target is provided. Pure math — no data source or browser needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
riskPctYesMax risk as percentage of account (e.g., 1 = risk 1% = $100 on a $10,000 account). Recommended: 0.5–2%.
stopLossYesStop loss price. Must be below entry for longs, above for shorts.
entryPriceYesPlanned entry price per share/unit
accountSizeYesTotal account value in USD (e.g., 10000)
targetPriceNoTake profit target. Used to calculate risk/reward ratio (optional).
commissionPerSideNoCommission cost per trade side in USD (default 0). Affects net P&L calculation.

TDQS

A4.2/5.0
Behavior4/5

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

No annotations provided, but description declares it's pure math with no side effects. Clearly states what it returns. Sufficient transparency for a non-destructive calculation.

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: first states purpose, second details outputs and nature. No wasted words.

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?

Complete for a pure math tool with no output schema. Lists all return values. Could mention synchronous nature, but not necessary.

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 covers 100% of parameters with detailed descriptions. Tool description adds minimal extra beyond listing example inputs and outputs. Baseline 3 is appropriate.

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?

Clearly states it calculates position size based on risk management rules. Lists inputs and outputs. Distinct from sibling tools that focus on chart actions, alerts, etc.

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?

Implicitly indicates when to use (before opening a trade) and that no data source is needed. Could explicitly state 'use this to compute position size' but provides clear context.

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

romaco_capture_snapshotA

Capture the current chart as a base64 image for vision-enabled models. Cost: 300–800 KB per image (PNG, lossless) or 100–300 KB (JPEG). Gated. Set acknowledgeHighTokenCost:true to receive the image. Without it the tool returns an error explaining the cost. Only opt in when the USER explicitly asked for a visual snapshot — e.g. to share, to confirm placement, or to feed a vision LLM.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoImage format: png (default, lossless) or jpeg (smaller file).
acknowledgeHighTokenCostNoREQUIRED to receive the image. Setting this true commits to 300–800 KB base64 PNG (or 100–300 KB JPEG). Only opt in when the USER explicitly asked for a chart image and accepts the token cost.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description fully discloses behaviors: returns base64 image, costs 300-800 KB (PNG) or 100-300 KB (JPEG), gated, requires acknowledgeHighTokenCost=true, otherwise returns error. 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.

Conciseness4/5

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

The description is structured in clear, informative sentences. It could be slightly more concise by combining cost and gated statements, but every sentence adds value and is 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 the tool's simplicity (2 params, no output schema), the description covers purpose, costs, gating, and usage guidelines. It omits potential limitations like image content exactness or timeouts, but is sufficient for an agent.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds significant context beyond schema, such as token costs per format, gated behavior, and error handling. This enhances parameter 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 'Capture the current chart as a base64 image for vision-enabled models,' which is a specific verb+resource. It distinguishes from sibling tools like romaco_get_chart_context or romaco_get_visible_candles by focusing on image capture.

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 'Only opt in when the USER explicitly asked for a visual snapshot — e.g. to share, to confirm placement, or to feed a vision LLM.' This provides clear when-to-use guidance and implies when not to use (e.g., if the user hasn't asked).

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

romaco_clear_alertsA

Remove all price alerts from the chart.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description bears full responsibility. It conveys a destructive action (removing all alerts) with no mention of reversibility, confirmations, or side effects. Adequate but minimal.

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?

A single sentence that is extremely concise and front-loaded. Every word is necessary; no waste.

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?

For a parameterless tool with no output schema, the description provides sufficient context: what it does and where. It could clarify if 'chart' refers to the current chart, but that is reasonably implied.

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 tool has no parameters, so the description naturally covers all needed information. Baseline for zero parameters is 4, and the description adds value by specifying the action and scope.

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 'Remove', the resource 'all price alerts', and the location 'from the chart'. It distinguishes well from sibling tools like romaco_add_alert and romaco_remove_alert by specifying the scope (all).

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 implies when to use the tool (to clear all alerts), but does not explicitly mention alternatives such as romaco_remove_alert for individual removal. No guidance on when not to use it.

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

romaco_clear_drawingsA

Remove all drawings from the chart (trendlines, Fibonacci retracements, horizontal lines, rectangles, channels, annotations). Cannot be undone.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It discloses the action (removal of drawings) and warns that it cannot be undone. However, it does not specify that other chart elements (indicators, alerts) are unaffected, which could be inferred but not explicit.

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: first explains the action, second adds a critical warning. No wasted words, front-loaded with the core purpose.

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?

For a simple tool with no parameters, the description is adequate. It states the action and irreversibility. Could be slightly more complete by clarifying scope (only drawings, not indicators or alerts), but overall sufficient.

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?

There are zero parameters, and schema coverage is 100% (vacuously). Baseline for 0 params is 4, and the description adds no parameter info, which is acceptable.

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 'Remove all drawings from the chart' and lists specific types (trendlines, Fibonacci retracements, etc.), making the purpose obvious. It distinguishes from siblings like 'romaco_remove_alert' and 'romaco_clear_alerts' by specifying drawings.

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 implies usage for clearing all drawings at once but does not provide explicit when-to-use or when-not-to-use guidance, nor does it name alternatives. The irreversibility warning is helpful but not a usage guideline.

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

romaco_detect_patternsA

Scan the currently loaded candle data for classical chart patterns: Head & Shoulders (and inverse), Double/Triple Top/Bottom (M/W — ATR-gated alignment + depth, no range-chop false positives), Ascending/Descending/Symmetric Triangles, Bull/Bear Flags, Parallel Channels (up/down/flat — strict gates: parallel fit, 5+ touches, close containment), Rising/Falling Wedges, Cup & Handle, Rounding Bottom (parabolic basin, no handle required), unfilled momentum Gaps (≥0.5×ATR, gap_up/gap_down), and Fibonacci harmonics: ABCD, Gartley, Bat, Butterfly, Crab (strict ratio gates ±0.05 — the math fits or no pattern is reported). Each hit returns kind, confidence (0..1), target_price, invalidation_price, and anchor_count. Zombie patterns are discarded: if any candle after a pattern completed already breached its invalidation level or tagged its target, the setup is consumed and never reported — even when the current price drifted back into the live band. Cost: compressed by default (<2 KB). Set acknowledgeHighTokenCost:true to receive the full anchor points[] for each hit (≈3× larger). Call romaco_load_candles first. To draw a detected pattern on the chart, offer romaco_draw_pattern.

ParametersJSON Schema
NameRequiredDescriptionDefault
acknowledgeHighTokenCostNoWARNING: setting this true includes the full points[] array (timestamp + price + role) for every detected pattern. Only opt in when the USER has explicitly asked for the exact anchor coordinates (e.g. to draw the pattern on the chart). Default (omit) returns trimmed hits without points[].

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description fully details behavioral traits: returns fields (kind, confidence, etc.), zombie pattern discarding logic, and cost implications of acknowledgeHighTokenCost. This is comprehensive.

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 detailed but front-loaded with patterns. Some redundancy could be trimmed, but it earns its length with necessary technical details.

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?

Despite no output schema, the description explains return fields, zombie pattern behavior, prerequisites, and cost tradeoffs. It is fully complete for an AI agent.

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 single parameter has 100% schema coverage and the description adds context about token cost and when to set it, going beyond the 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?

The description clearly states it scans candle data for classical chart patterns, listing specific pattern types. It uses a specific verb 'detect' and resource 'candle data', distinguishing it from siblings like romaco_find_levels or romaco_get_indicator_values.

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?

It provides clear prerequisites ('Call romaco_load_candles first') and a follow-up action ('To draw a detected pattern, offer romaco_draw_pattern'). It does not explicitly state when not to use it, but the context is strong.

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

romaco_draw_patternA

Draw the GEOMETRY of a detected chart pattern on the user's browser chart: head & shoulders neckline + silhouette, double top/bottom extremes + trigger line, triangle border trendlines, flag polyline — plus faint dotted target/invalidation levels when the pattern projects them. Patterns are re-detected from the loaded candles (deterministic math, never agent-supplied geometry) and only RECENT patterns qualify — if none match, nothing is drawn and that is the honest answer. Each pattern family owns one drawing group, so re-drawing a family replaces it atomically and the user's own drawings are never touched. Offer this after romaco_detect_patterns or romaco_thesis finds something; call it ONLY after the user accepts. Requires mounted and candles loaded (romaco_load_candles), with the SAME symbol/range on the chart.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoPattern kind to draw. Omit to draw the highest-confidence recent pattern of any kind.
rankNo0-based confidence rank among matching recent patterns (0 = strongest). Default 0.

TDQS

A4.9/5.0
Behavior5/5

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

Despite no annotations, the description discloses key behaviors: patterns are re-detected deterministically, only recent patterns qualify, drawing groups are atomic and user drawings untouched, prerequisites (mounted MCP bridge and loaded candles), and honest answer if no match.

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 comprehensive but slightly lengthy. However, every sentence adds value and it is clearly structured with front-loaded main action, details, and usage conditions.

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 and the complexity of the tool, the description covers prerequisites, behavior under no match, drawing group management, and specific pattern elements drawn. It leaves no major gaps for an AI agent to understand invocation and outcome.

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 covers 100% of parameters, but description adds meaning: explains that omitting 'kind' draws highest-confidence recent pattern, clarifies 'rank' as 0-based confidence index, and introduces the concept of 'recent patterns'.

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 specifies the exact action (draw geometry of detected chart pattern), enumerates pattern families and what is drawn for each, and distinguishes from sibling tools like romaco_add_drawing by stating it is for detected patterns after user acceptance.

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

Usage Guidelines5/5

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

Explicitly states when to use: after romaco_detect_patterns or romaco_thesis finds something, and only after the user accepts. Indicates when not to use (if no pattern detected, nothing is drawn) and implies alternatives exist for manual drawing.

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

romaco_find_levelsA

Find key support and resistance price levels for the currently loaded candle data using 1D K-means clustering on swing extremes, plus Volume Profile (POC, VAH, VAL). Returns up to 3 support levels (below current price) and 3 resistance levels (above), each with touch count, strength (0..1, touch-count × recency), and last-test timestamp. Call romaco_load_candles first.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It transparently describes the algorithm (K-means clustering, Volume Profile), the output format, and the underlying data source (candle data). It does not mention any destructive or permission-related behavior, which is appropriate for a read-only analysis 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?

The description is extremely concise (two sentences) yet packs all essential information: purpose, algorithm, output details, and a prerequisite. Every sentence adds value, and the main action is front-loaded.

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 tool's moderate complexity and the absence of an output schema, the description provides complete context: it explains what the tool does, how it works, what it returns, and what prerequisite actions are needed. No additional information is necessary for proper selection and 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, and schema description coverage is 100%. Since there are no parameters, the description does not need to add parameter details. According to guidelines, baseline is 4 for zero 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 clearly states the tool finds key support and resistance levels using K-means clustering and Volume Profile, specifies the number of levels returned (up to 3 each), and details the output fields (touch count, strength, last test timestamp). This distinguishes it from sibling analysis tools like romaco_detect_patterns and romaco_analyze_market.

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 includes a prerequisite ('Call romaco_load_candles first'), which is helpful, but it does not provide guidance on when to use this tool versus alternatives like romaco_detect_patterns or romaco_analyze_market. No explicit when-not or comparative context is given.

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

romaco_get_chart_contextA

Get a compressed snapshot of the romaco chart state: last price, pane list, indicator/drawing/alert counts, visible range, zoom, render backend. Cost: compressed by default (~1 KB). Set acknowledgeHighTokenCost:true to receive the raw chart context (≈80 KB including all visible candles, every drawing with its points, full indicator params, and capability registries). Only opt in to the raw payload when the user has explicitly asked for it.

ParametersJSON Schema
NameRequiredDescriptionDefault
acknowledgeHighTokenCostNoWARNING: setting this true returns ~80 KB of raw chart state. Only opt in when the USER has explicitly asked for full chart state and accepts the token cost. Default (omit) returns a compressed feature summary.

TDQS

A4.7/5.0
Behavior5/5

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

The description fully discloses the token cost difference (1 KB compressed vs 80 KB raw), the condition for opting into the raw payload, and what the raw payload includes (visible candles, drawings with points, indicator params, capability registries). With no annotations, the description carries the full burden and excels.

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 two sentences, front-loaded with the tool's purpose, and every sentence adds value. No unnecessary words or 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 simple parameter set and no output schema, the description covers default contents, optional raw contents, and usage advice. It is fully self-contained and leaves no ambiguity about behavior.

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 single parameter acknowledgeHighTokenCost is documented in both schema and description. The description adds significant behavioral context beyond the schema's warning: it specifies what exactly the raw payload contains and reiterates the condition for use. Schema coverage is 100%, so baseline is 3, but the added value justifies a 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 retrieves a compressed snapshot of the chart state, listing specific contents (last price, pane list, indicator/drawing/alert counts, visible range, zoom, render backend). This distinguishes it from sibling tools like romaco_get_visible_candles or romaco_get_indicator_values by offering a broader summary.

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?

It explicitly advises when to use the raw payload (only when the user explicitly asks and accepts token cost), implying the compressed version is the default. It does not explicitly compare with siblings, but the purpose is clear enough for appropriate selection.

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

romaco_get_indicator_valuesA

Read the current state of an indicator on the chart: last value, previous value, delta, and a per-indicator state classification (RSI: oversold/neutral/overbought; MACD: bull_cross/bear_cross/bullish/bearish; BOLL: squeeze/expansion/neutral; default: rising/falling/flat). Cost: compressed by default (<500 B). Set acknowledgeHighTokenCost:true to receive every bar of every series (~10 KB at 500 candles, scales linearly). Only opt in to raw series when the user explicitly asked for bar-by-bar values (e.g. for custom backtesting).

ParametersJSON Schema
NameRequiredDescriptionDefault
indicatorIdNoPreferred lookup — the indicator id returned when it was added.
indicatorNameNoFallback lookup by name (case-insensitive, first match), e.g. "RSI".
acknowledgeHighTokenCostNoWARNING: setting this true returns the full per-bar series arrays (~10 KB for 500 bars, scales linearly). Only opt in when the USER has explicitly asked for raw indicator values and accepts the token cost. Default (omit) returns a compressed last/prev/delta/state summary.

TDQS

A5/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: it is a read operation, returns a compressed summary by default, warns about high token cost for raw series, and details state classifications per indicator type (RSI, MACD, BOLL, default). No contradiction.

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) and front-loaded with purpose and output. Every sentence serves a purpose: purpose, output, state classification, cost modes, and usage condition. No redundant text.

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 complexity (3 params, no output schema), the description fully explains the output format (compressed and raw) and state classification, covering all necessary context for 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?

Schema coverage is 100%, so baseline is 3, but the description adds substantial value: clarifies indicatorId as preferred and indicatorName as fallback, explains the default behavior of acknowledgeHighTokenCost=false, and warns of cost implications. This goes beyond schema descriptions.

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 'Read the current state of an indicator on the chart' with specific output details (last value, previous value, delta, state classification). It distinguishes itself from sibling tools like romaco_get_chart_context by focusing solely on indicator values.

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 the compressed default vs. the raw series via acknowledgeHighTokenCost, stating 'Only opt in to raw series when the user explicitly asked for bar-by-bar values' and explaining token cost trade-offs.

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

romaco_get_visible_candlesA

Summarize the OHLCV candles currently visible in the chart viewport: count, first/last candle, OHLC range, volume stats, percent change, ATR approximation. Cost: compressed by default (<1 KB). Set acknowledgeHighTokenCost:true to receive the raw OHLCV array (≈70 KB for a 360-candle viewport). Only opt in to the raw array when the user explicitly asked for raw candles (e.g. for custom indicator math). For analysis, prefer romaco_analyze_market.

ParametersJSON Schema
NameRequiredDescriptionDefault
acknowledgeHighTokenCostNoWARNING: setting this true returns the raw OHLCV array (≈70 KB at 360 candles, scales linearly). Only opt in when the USER has explicitly asked for raw candles and accepts the token cost. Default (omit) returns a compressed range summary.

TDQS

A4.7/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 token cost, compression behavior, and the difference between summary and raw array. Lacks details on rate limits or idempotency, but sufficient for a read-only operation.

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?

Concise, front-loaded first sentence states core purpose. Subsequent sentences cover cost and usage caveats without redundancy. Every sentence adds value.

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?

For a simple one-parameter tool with no output schema, the description covers functionality, cost, and when to choose raw vs. summary. References sibling tool for analysis, making it complete.

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?

Single boolean parameter has schema description with cost warning. The description adds context on when to use raw mode and approximate size (70 KB), reinforcing and clarifying the 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?

The description clearly states it summarizes OHLCV candles visible in the chart viewport, listing specific statistics (count, first/last, OHLC range, etc.). It distinguishes from siblings by explicitly recommending romaco_analyze_market for analysis.

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 the compressed summary vs. raw array ('only opt in when user explicitly asked for raw candles'). Also suggests alternative tool for analysis, making usage boundaries clear.

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

romaco_go_to_timestampA

Move the chart viewport (or replay cursor if in replay mode) to a specific timestamp. Use this to revisit historical setups or scrub through past patterns. Timestamp is in milliseconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
timestampYesTarget timestamp in milliseconds.

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description fully handles transparency. It mentions the difference in behavior between normal mode and replay mode (viewport vs cursor). However, it does not disclose potential side effects (e.g., data loading) or error conditions (e.g., out-of-range timestamp).

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 extremely concise with only two sentences. The first sentence states the core action and mode differentiation, and the second provides clear use cases. Every word serves a purpose.

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?

For a simple tool with a single parameter and no output schema, the description fully explains what the tool does, when to use it, and the parameter's unit. Nothing essential is missing.

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?

The input schema has 100% description coverage, already stating the parameter 'timestamp' is in milliseconds. The description repeats this unit information, adding marginal value beyond the schema. No additional semantic details are provided.

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 action: moving the chart viewport or replay cursor to a specific timestamp. It uses a specific verb ('move') and resource ('viewport/replay cursor'), and the context of 'revisit historical setups' distinguishes it from sibling tools like zooming or loading candles.

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 provides clear usage context ('revisit historical setups or scrub through past patterns') but does not explicitly state when not to use it or mention alternative tools. It is adequate for guiding the agent.

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

romaco_list_panesA

List the chart panes: the main candlestick pane plus every indicator subpanel. Each pane returns its id, the indicators it hosts, and a short alias (e.g. "rsi"). Use the id as paneId on romaco_add_drawing to anchor a drawing inside that pane.

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 are provided, so the description carries the burden. It transparently describes the return structure (id, indicators, alias) and does not mention any side effects. Since it is a read-only list operation, this level of detail is adequate.

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 the core purpose, and no redundant information. Every word earns its place.

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?

For a tool with no parameters and no output schema, the description is complete: it explains the return fields and provides a key usage example. It fully addresses the agent's needs for selecting and invoking this tool.

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?

With no parameters and 100% schema coverage (by virtue of no properties), the description correctly omits parameter details. The baseline for zero parameters is 4, and the description adds no unnecessary parameter information.

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's purpose: listing chart panes (main candlestick pane and indicator subpanels). It specifies what each pane returns (id, indicators, alias), distinguishing it from sibling tools like romaco_add_drawing or romaco_add_indicator by focusing on enumeration rather than modification.

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 provides a concrete usage: using the returned `id` as `paneId` on romaco_add_drawing. While it doesn't explicitly state when not to use this tool, the context and sibling list imply that it's for obtaining pane references, which is sufficient for a simple listing tool.

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

romaco_list_templatesA

List every drawing template available in romaco-charts, with category and required point count. Use this BEFORE romaco_add_drawing to choose a valid drawingType and know how many anchor points it expects.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/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 return information (category, point count) and implies read-only behavior by saying 'list'. Could explicitly state it is non-destructive, 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.

Conciseness5/5

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

Two concise, front-loaded sentences with no wasted words. The first sentence states the action and output, the second provides usage guidance.

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 simplicity of a list tool with no parameters and no output schema, the description fully covers what the tool does, what it returns, and how to use it effectively.

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?

No parameters defined in input schema. According to scoring guidelines, 0 parameters results in a baseline of 4. The description adds no parameter info because none exist.

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 lists drawing templates with category and required point count, distinguishing it from sibling tools like romaco_add_drawing by explicitly positioning it as a prerequisite.

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

Usage Guidelines5/5

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

Explicitly states 'Use this BEFORE romaco_add_drawing to choose a valid drawingType and know how many anchor points it expects.' This provides clear when-to-use and how to use context.

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

romaco_load_candlesA

Load OHLCV candle data from a data source. Once loaded, the data persists in the MCP session and is used by all subsequent analysis tools (analyze_market, find_levels, detect_patterns). Default source is "yfinance" (free, no auth). Use "raw" to pass your own candle array.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYes"yfinance" = Yahoo Finance (free, no API key needed, OHLCV for stocks/ETFs/crypto/FX). "raw" = pass your own candle array via rawCandles.
symbolYesTicker symbol (e.g., "AAPL", "TSLA", "BTC-USD", "EURUSD=X"). For raw source, this is just a label.
lookbackNoNumber of recent candles to fetch (default 500, max 5000).
timeframeYesCandle interval. Intraday: 1m, 2m, 5m, 15m, 30m, 1h, 2h, 4h. Daily+: 1d, 5d, 1w, 1mo, 3mo.
rawCandlesNoOnly used when source="raw". Array of {timestamp, open, high, low, close, volume}.

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses that data persists across the session, and that the default source is free with no auth required. This goes beyond schema information. However, it does not mention whether reloading overwrites existing data or any rate limits.

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 two sentences plus a note, all front-loaded with the main function. Every sentence adds value, and there is no redundancy or unnecessary information.

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

Completeness4/5

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

Considering the 5 parameters with full schema descriptions, no output schema, and sibling tools focused on analysis/charting, the description adequately explains the tool's role, persistence behavior, and source options. It could mention confirmation behavior on success, but it is sufficiently 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 coverage is 100% (all parameters have descriptions). The tool description does not add additional meaning beyond what the schema provides for parameters. The description's mention of source options is valuable but does not specifically enhance parameter semantics beyond baseline.

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 'load', the resource 'OHLCV candle data', and the effect 'persists in the MCP session'. It distinguishes this tool from siblings, which are analysis or chart manipulation tools.

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 explains when to use each source ('yfinance' vs 'raw'), notes that default source is free and requires no authentication, and indicates that data persists for subsequent analysis. It does not explicitly say when not to use the tool, but the context is clear enough.

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

romaco_open_paper_positionA

Open a simulated (paper) trading position at the current market price. No real money involved. Positions are shown visually on the chart as entry markers.

ParametersJSON Schema
NameRequiredDescriptionDefault
sideYes"long" = buy (profit when price rises). "short" = sell (profit when price falls).
quantityYesNumber of units to trade (shares, contracts, coins)
stopLossNoStop-loss price. Position auto-closes if price reaches this level.
takeProfitNoTake-profit price. Position auto-closes if price reaches this level.

TDQS

A3.7/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It discloses simulated nature and visual markers, but lacks details on execution behavior (e.g., immediate fill, market price vs limit) or any side effects.

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 two sentences, front-loaded with the primary action, and contains no unnecessary words.

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?

Given no output schema, the description does not explain what the tool returns (e.g., confirmation or order ID). It covers core purpose but leaves out expected return behavior.

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%, and the description adds no extra semantic meaning beyond what the schema already provides for the 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 clearly states the verb 'Open', the resource 'simulated (paper) trading position', and distinguishes it from real trading. It also mentions visual feedback on the chart.

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 does not explicitly state when to use this tool vs alternatives among siblings. While the purpose is clear, there is no guidance on when not to use it or mention of alternative tools.

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

romaco_remove_alertA

Remove a specific price alert from the chart. Use romaco_get_chart_context to see existing alerts and their price/direction.

ParametersJSON Schema
NameRequiredDescriptionDefault
priceYesPrice level of the alert to remove
directionNoDirection of the alert to remove (omit to match any direction at that price)

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It states the tool removes an alert, which implies mutation, but does not disclose potential side effects, permissions, or reversibility. The description is adequate for a simple removal action but lacks depth.

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 consists of two concise sentences, front-loaded with the primary purpose and followed by a usage hint. No unnecessary words or repetition.

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 tool's simplicity (2 parameters, no output schema, no nested objects), the description fully covers its usage. It tells what the tool does, how to find alerts to remove, and the parameter meanings are in the schema. No gaps.

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%, and the input schema already describes both parameters ('price' and 'direction') with clear descriptions. The tool description adds no extra parameter information beyond what the schema provides, earning the baseline score.

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 'Remove' and the resource 'specific price alert from the chart'. It distinguishes itself from siblings like 'romaco_add_alert' and 'romaco_clear_alerts' by specifying removal of a specific alert.

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 recommends using 'romaco_get_chart_context' to view existing alerts before removal, providing a clear prerequisite step. However, it does not explicitly mention when not to use the tool or alternative approaches.

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

romaco_remove_indicatorA

Remove a technical indicator from the chart by type. Use romaco_get_chart_context to see active indicators.

ParametersJSON Schema
NameRequiredDescriptionDefault
indicatorTypeYesIndicator type to remove (e.g. EMA, RSI, MACD). Case-insensitive. Removes the first matching indicator if multiple exist.

TDQS

A4.4/5.0
Behavior4/5

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

Discloses that removal is by type, case-insensitive, and removes the first matching indicator if multiple exist. No annotations are provided, so the description carries the burden; it adequately covers key behavioral traits, though could mention side effects or error cases.

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 fluff. Essential information is front-loaded: the action and a usage hint. Every word earns its place.

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 simplicity of the tool (one param, no output schema), the description is fairly complete. It explains what the tool does and how to check active indicators. Could mention behavior when no indicator of the given type exists, but not required.

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 100% coverage with a description for indicatorType. The description adds meaning: 'Case-insensitive. Removes the first matching indicator if multiple exist,' which goes beyond the schema's basic description.

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 the action: 'Remove a technical indicator from the chart by type.' The verb 'remove' and resource 'technical indicator' are specific, and 'by type' distinguishes it from siblings like 'romaco_add_indicator' or 'romaco_remove_alert'.

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?

Provides clear context by referencing 'romaco_get_chart_context' to see active indicators before removal. Does not explicitly mention when not to use or alternatives, but the guidance is helpful for correct usage.

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

romaco_reset_viewA

Reset the chart view to auto-fit all available data. Use after zooming or panning to return to the default overview.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states that the tool resets to auto-fit all data, implying it overrides manual zoom/pan, but it does not disclose potential side effects such as whether it affects other chart states (e.g., indicators, drawings, multiple panes) or if it is destructive. More detail would be needed for full transparency.

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 two sentences long, front-loaded with the core action, and contains no redundant or superfluous words. Every sentence serves a purpose.

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 simplicity (no parameters, no output schema, single action), the description is largely complete for its intended use. However, it could be improved by noting whether the reset applies to all panes or just the current pane, and whether it preserves any user-applied settings (e.g., indicators).

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?

There are no parameters, so the schema description coverage is 100% and the baseline is 4. The description adds no additional parameter info, which is acceptable since there are none to describe.

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 action ('Reset the chart view') and the specific behavior ('auto-fit all available data'). It distinguishes from sibling tools like romaco_set_zoom (manual zoom) and romaco_go_to_timestamp (navigation), making the purpose unambiguous.

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 tells when to use the tool ('Use after zooming or panning to return to the default overview'). It provides clear context for usage but does not mention when not to use it or explicitly contrast with alternatives, though the sibling context implies differentiation.

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

romaco_setup_chartA

One-command chart setup: loads OHLCV data, runs full market analysis, and (if browser is connected) applies a professional indicator preset to the chart. Available presets: trend_analysis, scalping, swing_trading, institutional, momentum, clean. Works headless too — returns MarketSummary even without a connected browser. This is the recommended first tool to call for any analysis session.

ParametersJSON Schema
NameRequiredDescriptionDefault
presetNoChart preset. Options: "trend_analysis", "scalping", "swing_trading", "institutional", "momentum", "clean". Omit for "institutional".
sourceNo"yfinance" (default, free) or "raw" (provide your own candles via rawCandles).
symbolYesTicker symbol: "AAPL", "TSLA", "BTC-USD", "EURUSD=X"
lookbackNoNumber of candles to load (default from preset, max 2000).
timeframeNoOverride the preset's default timeframe. Omit to use the preset default.
rawCandlesNoRequired when source="raw". Array of {timestamp, open, high, low, close, volume}.

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so the description carries the full burden. It discloses key behaviors: headless operation (returns MarketSummary without browser), preset application, and loading of OHLCV data. No contradictions with annotations.

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 with 4 sentences, front-loading the core purpose. Every sentence provides necessary context without 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?

Given 6 parameters, 1 required, and no output schema, the description covers the overall behavior, headless mode, returned MarketSummary, and presets. It is sufficiently complete for an agent to use correctly, though it could mention pagination or data limits (already in schema).

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by noting the default preset ('omit for institutional') and listing available presets, which aids understanding beyond the schema enum. It also explains the source parameter options succinctly.

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's purpose: 'One-command chart setup: loads OHLCV data, runs full market analysis, and applies a professional indicator preset'. It uses specific verbs and identifies the resource (chart setup), and distinguishes itself as the recommended first tool among siblings.

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 recommends this as the first tool to call for any analysis session and mentions headless vs browser-connected behavior, providing clear usage context. However, it does not explicitly state when not to use it or list alternatives.

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

romaco_set_zoomA

Zoom the chart in or out. Each call zooms by the given factor (default 1.5x). Call multiple times for more zoom. Use romaco_reset_view to return to default fit.

ParametersJSON Schema
NameRequiredDescriptionDefault
factorNoZoom multiplier (default 1.5). Higher = more zoom per call.
directionYes"in" = fewer candles in detail, "out" = more candles visible

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the full burden. It discloses that zoom is cumulative per call and mentions the default factor and reset alternative. However, it does not describe potential side effects, permissions needed, or behavior at extremes (e.g., max/min zoom level). This is adequate but not comprehensive.

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 very concise: three sentences, no fluff. The first sentence states the main purpose, and subsequent sentences add essential usage details. Every sentence earns its place.

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?

For a low-complexity tool with full schema coverage and no output schema, the description is largely complete. It covers purpose, usage, and resetting. It could mention that zoom affects the current pane or visible range, but overall it is adequate.

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 the baseline is 3. The description adds minimal value beyond the schema: it restates the default factor and notes that calls are cumulative. The schema already describes factor, direction, and their meanings.

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's purpose: 'Zoom the chart in or out.' It specifies the action (zoom) and resource (chart), and distinguishes from siblings by mentioning 'Use romaco_reset_view to return to default fit.' No other sibling zoom tool exists.

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 explains how to use the tool: 'Each call zooms by the given factor (default 1.5x). Call multiple times for more zoom.' It also advises when to use an alternative: 'Use romaco_reset_view to return to default fit.' It does not explicitly state when not to use it, but the context is clear.

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

romaco_thesisA

Produce an actionable trade thesis for the currently loaded candles: a computed bull/bear debate (every point derived from real features, not guessed), a verdict (long / short / stand_aside) with confidence, and a concrete setup (entry, stop, target, reward/risk) plus invalidation. Stands aside when there is no clean setup at acceptable R/R — it will not manufacture a signal. Call romaco_load_candles or romaco_setup_chart first. Returns <2 KB. With a ROMACO_TOKEN (Pro), an enhanced server-side thesis is used when available, with automatic fallback to the local synthesis. After stating the verdict, OFFER to draw it on the user's chart and ASK first (e.g. "Want me to draw this setup on your chart so you can judge it yourself?") — do not call romaco_annotate automatically. Always end your response with: "⚠️ Not investment advice — educational purposes only."

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 are provided, so the description carries the full burden. It discloses behavioral traits like server-side vs local synthesis, result size (<2 KB), the instruction to offer drawing and ask first, and the required disclaimer. It lacks details on potential side effects but covers key behaviors.

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 well-structured and front-loaded with the main purpose. Every sentence adds value: prerequisite, token info, behavioral instruction, and disclaimer. No unnecessary words.

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 absence of output schema and annotations, the description fully explains the tool's input (none needed beyond loaded candles), output (thesis components), and special behaviors (stand aside, token usage, drawing offer). It is complete for a 0-parameter tool.

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 baseline is 4. The description adds no parameter info but explains the tool's output and behavior, which is sufficient.

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's purpose: to produce an actionable trade thesis with bull/bear debate, verdict, confidence, setup, and invalidation. It uses specific verbs and distinguishes from siblings like romaco_analyze_market and romaco_detect_patterns by focusing on thesis generation.

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 states prerequisites (load candles and setup chart) and indicates when the tool will stand aside. While it doesn't directly compare to siblings, the context is clear. It also warns not to call romaco_annotate automatically.

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

romaco_thesis_batchA

Analyze multiple tickers in one call, compare their trade setups, and return a ranked table sorted by R/R × confidence (best setup first). Fetches OHLCV data for each symbol via yfinance (free), runs a deterministic bull/bear thesis (no LLM, no hallucination) for each, then ranks them. After returning the table, OFFER to draw the top-ranked setup on the user's chart: "Draw the [SYMBOL] setup on your chart? (Recommended)" — if the user accepts, call romaco_setup_chart then romaco_annotate. The top-ranked symbol is automatically loaded into session so romaco_annotate runs immediately. Always end your response with: "⚠️ Not investment advice — educational purposes only."

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolsYesTickers to analyze, e.g. ["AAPL", "NVDA", "MSFT"]. Max 10.
lookbackNoNumber of candles per symbol (default 300).
timeframeNoCandle timeframe. Default "1d".

TDQS

A4.6/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 transparently discloses that data comes from yfinance (free), analysis is deterministic (no LLM, no hallucination), and that the top symbol is automatically loaded into session. 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.

Conciseness4/5

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

The description is 7 sentences, which is reasonably concise given the complexity. It is front-loaded with the main purpose, then details the method, then post-processing steps. Slightly verbose but each sentence serves a purpose.

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?

For a tool with 3 parameters and no output schema, the description is complete. It explains the return format (ranked table by R/R × confidence), the data source, the analysis method, and the recommended follow-up actions. The disclaimer is included.

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% (all parameters described in schema). The description adds default values for lookback (300) and timeframe ('1d'), which are not in the schema. It also provides practical examples for the symbols parameter. This adds value beyond the 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?

The description clearly states the tool analyzes multiple tickers, compares setups, and returns a ranked table sorted by R/R × confidence. It distinguishes itself from the sibling tool romaco_thesis (single ticker) by emphasizing 'multiple tickers in one call'. The verb and resource are specific.

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 when to use this tool (for multiple tickers) versus alternatives (romaco_thesis for a single ticker). It provides explicit instructions on what to do after returning results (offer to draw a chart, call other tools). However, it does not explicitly state when not to use it or mention alternatives by name.

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.

  1. 27 tool updatesv0.0.2
    • First observedromaco_add_alert
    • First observedromaco_add_drawing
    • First observedromaco_add_indicator
    • First observedromaco_analyze_market
    • First observedromaco_annotate
    • First observedromaco_calculate_position_size
    • First observedromaco_capture_snapshot
    • First observedromaco_clear_alerts
    • First observedromaco_clear_drawings
    • First observedromaco_detect_patterns
    • First observedromaco_draw_pattern
    • First observedromaco_find_levels
    • First observedromaco_get_chart_context
    • First observedromaco_get_indicator_values
    • First observedromaco_get_visible_candles
    • First observedromaco_go_to_timestamp
    • First observedromaco_list_panes
    • First observedromaco_list_templates
    • First observedromaco_load_candles
    • First observedromaco_open_paper_position
    • First observedromaco_remove_alert
    • First observedromaco_remove_indicator
    • First observedromaco_reset_view
    • First observedromaco_set_zoom
    • First observedromaco_setup_chart
    • First observedromaco_thesis
    • First observedromaco_thesis_batch

TDQS

A4.2/5.0

Scored across 27 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: data loading, analysis, pattern detection, drawing, annotations, indicator management, alerts, paper trading, etc. There is no ambiguity between tools.

Naming Consistency5/5

All tools follow the 'romaco_' prefix with a verb_noun pattern (e.g., add_alert, load_candles, detect_patterns), making the naming highly predictable and consistent.

Tool Count4/5

27 tools is slightly above the typical well-scoped range (3-15) but justified by the complexity of trading analysis and charting. Each tool earns its place, though the count is heavy.

Completeness5/5

The tool surface covers the full lifecycle of chart analysis: data loading, market analysis, pattern detection, indicator management, drawing, alerts, paper trading, and thesis generation. No obvious gaps for the stated purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    MCP server that lets AI agents directly control and interact with the TradingView desktop app via 88 chart-control tools, enabling automated chart reading, Pine Script compilation, strategy optimization, and replay control.
    4
    113
    332 npm
    41
    MIT
  • 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
    111 npm
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    MCP server for the FLOX trading framework. About 30 tools to run backtests, scaffold strategies, validate for lookahead bias, compute indicators, place orders, and query PnL from Claude/Cursor.
    38
    225
    MIT