⚠ MVP PreviewReport a Bug

Available Tools

FinanceDataAPI currently exposes 15 MCP tools. The schemas below are manually transcribed from app/mcp/tools/ so they stay readable while matching the real tool signatures.

All tool calls count against the same per-key rate limit and monthly quota used by the REST API.

Symbol tools

list_symbols

Paginated symbol search with optional filters.

{
  "type": "object",
  "properties": {
    "page": { "type": "integer", "default": 1 },
    "page_size": { "type": "integer", "default": 50 },
    "search": { "type": "string" },
    "asset_type": { "type": "string" },
    "sector": { "type": "string" },
    "tags": { "type": "string" }
  }
}

get_symbol

Returns full metadata for one ticker.

{
  "type": "object",
  "required": ["symbol"],
  "properties": {
    "symbol": { "type": "string" }
  }
}

Signal discovery and batch execution

list_signals

Lists every registered signal definition with names, descriptions, and parameter metadata.

{
  "type": "object",
  "properties": {}
}

run_signals

Computes one or more signals for one or more symbols over a date range.

{
  "type": "object",
  "required": ["symbols", "signal_names", "start_date", "end_date"],
  "properties": {
    "symbols": {
      "type": "array",
      "items": { "type": "string" }
    },
    "signal_names": {
      "type": "array",
      "items": { "type": "string" }
    },
    "start_date": { "type": "string", "format": "date" },
    "end_date": { "type": "string", "format": "date" },
    "signal_parameters": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "additionalProperties": true
      }
    },
    "interval": { "type": "string", "default": "1d" },
    "page": { "type": "integer", "default": 1 },
    "page_size": { "type": "integer", "default": 100 }
  }
}

Per-signal tools

All per-signal tools share a common shape:

{
  "type": "object",
  "required": ["symbol", "start_date", "end_date"],
  "properties": {
    "symbol": { "type": "string" },
    "start_date": { "type": "string", "format": "date" },
    "end_date": { "type": "string", "format": "date" },
    "interval": { "type": "string", "default": "1d" },
    "page": { "type": "integer", "default": 1 },
    "page_size": { "type": "integer", "default": 500 }
  }
}

FinanceDataAPI currently documents these 8 per-signal tools:

get_sma

{
  "type": "object",
  "required": ["symbol", "start_date", "end_date"],
  "properties": {
    "symbol": { "type": "string" },
    "start_date": { "type": "string", "format": "date" },
    "end_date": { "type": "string", "format": "date" },
    "interval": { "type": "string", "default": "1d" },
    "page": { "type": "integer", "default": 1 },
    "page_size": { "type": "integer", "default": 500 },
    "period": { "type": "integer", "default": 20 }
  }
}

get_ema

{
  "type": "object",
  "required": ["symbol", "start_date", "end_date"],
  "properties": {
    "symbol": { "type": "string" },
    "start_date": { "type": "string", "format": "date" },
    "end_date": { "type": "string", "format": "date" },
    "interval": { "type": "string", "default": "1d" },
    "page": { "type": "integer", "default": 1 },
    "page_size": { "type": "integer", "default": 500 },
    "period": { "type": "integer", "default": 20 }
  }
}

get_rsi

{
  "type": "object",
  "required": ["symbol", "start_date", "end_date"],
  "properties": {
    "symbol": { "type": "string" },
    "start_date": { "type": "string", "format": "date" },
    "end_date": { "type": "string", "format": "date" },
    "interval": { "type": "string", "default": "1d" },
    "page": { "type": "integer", "default": 1 },
    "page_size": { "type": "integer", "default": 500 },
    "period": { "type": "integer", "default": 14 }
  }
}

get_macd

{
  "type": "object",
  "required": ["symbol", "start_date", "end_date"],
  "properties": {
    "symbol": { "type": "string" },
    "start_date": { "type": "string", "format": "date" },
    "end_date": { "type": "string", "format": "date" },
    "interval": { "type": "string", "default": "1d" },
    "page": { "type": "integer", "default": 1 },
    "page_size": { "type": "integer", "default": 500 },
    "fast": { "type": "integer", "default": 12 },
    "slow": { "type": "integer", "default": 26 },
    "signal_period": { "type": "integer", "default": 9 }
  }
}

get_bollinger_bands

{
  "type": "object",
  "required": ["symbol", "start_date", "end_date"],
  "properties": {
    "symbol": { "type": "string" },
    "start_date": { "type": "string", "format": "date" },
    "end_date": { "type": "string", "format": "date" },
    "interval": { "type": "string", "default": "1d" },
    "page": { "type": "integer", "default": 1 },
    "page_size": { "type": "integer", "default": 500 },
    "period": { "type": "integer", "default": 20 },
    "std_dev": { "type": "number", "default": 2.0 }
  }
}

get_atr

{
  "type": "object",
  "required": ["symbol", "start_date", "end_date"],
  "properties": {
    "symbol": { "type": "string" },
    "start_date": { "type": "string", "format": "date" },
    "end_date": { "type": "string", "format": "date" },
    "interval": { "type": "string", "default": "1d" },
    "page": { "type": "integer", "default": 1 },
    "page_size": { "type": "integer", "default": 500 },
    "period": { "type": "integer", "default": 14 }
  }
}

get_momentum

{
  "type": "object",
  "required": ["symbol", "start_date", "end_date"],
  "properties": {
    "symbol": { "type": "string" },
    "start_date": { "type": "string", "format": "date" },
    "end_date": { "type": "string", "format": "date" },
    "interval": { "type": "string", "default": "1d" },
    "page": { "type": "integer", "default": 1 },
    "page_size": { "type": "integer", "default": 500 },
    "period": { "type": "integer", "default": 20 }
  }
}

get_volume

{
  "type": "object",
  "required": ["symbol", "start_date", "end_date"],
  "properties": {
    "symbol": { "type": "string" },
    "start_date": { "type": "string", "format": "date" },
    "end_date": { "type": "string", "format": "date" },
    "interval": { "type": "string", "default": "1d" },
    "page": { "type": "integer", "default": 1 },
    "page_size": { "type": "integer", "default": 500 }
  }
}

Backtest tools

submit_backtest

Submits an asynchronous backtest job.

{
  "type": "object",
  "required": [
    "name",
    "symbols",
    "start_date",
    "end_date",
    "initial_capital",
    "entry_condition",
    "entry_signal_names",
    "exit_condition"
  ],
  "properties": {
    "name": { "type": "string" },
    "symbols": {
      "type": "array",
      "items": { "type": "string" }
    },
    "start_date": { "type": "string", "format": "date" },
    "end_date": { "type": "string", "format": "date" },
    "initial_capital": { "type": "number" },
    "entry_condition": { "type": "string" },
    "entry_signal_names": {
      "type": "array",
      "items": { "type": "string" }
    },
    "exit_condition": { "type": "string" },
    "position_size": { "type": "number", "default": 1.0 },
    "commission": { "type": "number", "default": 0.001 },
    "weighting": { "type": "string", "default": "equal" },
    "custom_weights": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["symbol", "weight"],
        "properties": {
          "symbol": { "type": "string" },
          "weight": { "type": "number" }
        }
      }
    }
  }
}

get_backtest

Reads the status or results for an existing backtest.

{
  "type": "object",
  "required": ["backtest_id"],
  "properties": {
    "backtest_id": { "type": "integer" }
  }
}

wait_for_backtest

Polls until a backtest reaches completed or failed.

{
  "type": "object",
  "required": ["backtest_id"],
  "properties": {
    "backtest_id": { "type": "integer" },
    "timeout_seconds": { "type": "integer", "default": 120 },
    "poll_interval_seconds": { "type": "integer", "default": 3 }
  }
}

Important behavioral notes

  • interval="1d" is the only interval currently implemented.
  • run_signals supports up to 50 symbols in one request.
  • Multi-symbol backtests require a Pro or Enterprise plan.
  • wait_for_backtest is the preferred retrieval flow; do not hand-roll polling unless you need tighter control.