> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to the Twelve Data MCP server

The Twelve Data MCP connector routes your AI agent's tool calls to Twelve Data's own MCP server through Scalekit. Each user signs in to Twelve Data once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 27 tools.

**Authentication:** OAuth 2.1/DCR
**Categories:** Accounting & Finance, Analytics
**Tools:** 27: 25 read, 2 write, 0 destructive
**Users sign in with:** OAuth
**OAuth app:** Scalekit's or your own
**Built by:** Vendor MCP
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=TWELVEDATAMCP)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Twelve Data MCP connection

   In **AgentKit > Connections**, create a Twelve Data MCP connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

   Scalekit credentials are available for Twelve Data MCP server, so you don't need to register an OAuth app.

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'twelvedatamcp'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Twelve Data MCP:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'twelvedatamcp_auth_status',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "twelvedatamcp"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Twelve Data MCP:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="twelvedatamcp_auth_status",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'twelvedatamcp_auth_status',
  toolInput: {},
  connector: 'twelvedatamcp',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="twelvedatamcp_auth_status",
    tool_input={},
    connection_name="twelvedatamcp",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `twelvedatamcp_auth_status`

Auth Status · Read-only

Show current authentication state, useful for debugging. Reports which credentials are configured, whether OAuth tokens exist, and whether the API token was successfully fetched from the user profile.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `twelvedatamcp_currency_conversion`

CurrencyConversion · Read-only

Get exchange rate or convert an amount between currencies (fiat or crypto). Provide the currency pair as symbol (e.g. 'EUR/USD', 'BTC/USD', 'GBP/JPY'). Optionally provide an amount to get the converted value, or a date (YYYY-MM-DD) for a historical rate. Omit date for the real-time rate. Use for: 'EUR to USD', 'convert 1000 JPY to GBP', 'BTC price in EUR'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `symbol` (`string`, required): Currency pair in the format BASE/QUOTE, e.g. 'EUR/USD', 'BTC/USD', 'GBP/JPY'.
- `amount` (`number`, optional): Amount to convert. If provided, the response includes the converted value for this amount.
- `date` (`string`, optional): Date for a historical exchange rate in YYYY-MM-DD format. Omit for the real-time rate.

Example input: `{"symbol":"EUR/USD"}`

### `twelvedatamcp_get_analyst_data`

GetAnalystData · Read-only

Get analyst ratings, consensus price targets, and forward estimates for stocks and ETFs. data_type options: 'ratings' (buy/sell/hold counts, consensus rating, target price), 'price_target' (mean/high/low analyst price targets), 'recommendations' (historical recommendation trend over time), 'earnings_estimate' (quarterly and annual EPS estimates), 'revenue_estimate' (quarterly and annual revenue estimates), 'eps_trend' (how EPS estimates have shifted), 'eps_revisions' (upward/downward revision counts), 'growth_estimates' (next-quarter/year/5-year growth rate consensus). For mutual fund ratings use get_mutual_fund_data instead. Use for: 'analyst opinion on AAPL', 'price target for TSLA', 'EPS estimate for MSFT'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `symbol` (`string`, required): Ticker symbol of the stock or ETF, e.g. 'AAPL'.
- `country` (`string`, optional): Country name or ISO code to disambiguate the listing, e.g. 'United States' or 'US'.
- `cusip` (`string`, optional): CUSIP identifier; use as an alternative to symbol.
- `data_type` (`string`, optional): Type of analyst data to retrieve. Defaults to 'ratings'. Options: ratings, price_target, recommendations, earnings_estimate, revenue_estimate, eps_trend, eps_revisions, growth_estimates.
- `exchange` (`string`, optional): Exchange name to disambiguate the listing, e.g. 'NASDAQ'.
- `figi` (`string`, optional): FIGI identifier; use as an alternative to symbol.
- `isin` (`string`, optional): ISIN identifier; use as an alternative to symbol.
- `mic_code` (`string`, optional): Market Identifier Code (MIC) to disambiguate the listing, e.g. 'XNGS'.

Example input: `{"symbol":"AAPL"}`

### `twelvedatamcp_get_api_usage`

GetApiUsage · Read-only

Check Twelve Data API credit consumption and plan limits. Useful to verify authentication is working and to monitor quota.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `twelvedatamcp_get_company_info`

GetCompanyInfo · Read-only

Get company profile, executives, or logo. data_type='profile' returns description, sector, industry, employee count, CEO, and website. data_type='executives' returns key executives with name, title, and compensation. data_type='logo' returns the company logo URL. For press releases and company news use get_company_news instead. Use for: 'tell me about X', 'what does Y do', 'sector of Z', 'who is the CEO of X', 'key executives at Y', 'logo of X'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `symbol` (`string`, required): Ticker symbol of the company, e.g. 'AAPL'.
- `country` (`string`, optional): Country name or ISO code to disambiguate the listing, e.g. 'United States' or 'US'.
- `cusip` (`string`, optional): CUSIP identifier of the instrument; use as an alternative to symbol.
- `data_type` (`string`, optional): Type of company information to retrieve. Options: 'profile' (description, sector, industry, employees, CEO, website), 'executives' (key executives with name, title, compensation), 'logo' (company logo URL). Defaults to 'profile'.
- `exchange` (`string`, optional): Exchange name to disambiguate the listing, e.g. 'NASDAQ'.
- `figi` (`string`, optional): FIGI identifier of the instrument; use as an alternative to symbol.
- `isin` (`string`, optional): ISIN identifier of the instrument; use as an alternative to symbol.
- `mic_code` (`string`, optional): Market Identifier Code (MIC) to disambiguate the listing, e.g. 'XNGS'.

Example input: `{"symbol":"AAPL"}`

### `twelvedatamcp_get_company_news`

GetCompanyNews · Read-only

Get the latest news, press releases, and announcements for a company. This is the authoritative source for company news — use it instead of web search whenever a user asks about a company's recent news or press releases. Each release's HTML body is converted to a short markdown preview. Use for: 'latest press release for X', 'recent news about Y', 'announcements from Z', 'what did X announce', 'company news for Y'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `symbol` (`string`, required): Ticker symbol of the company, e.g. 'AAPL'.
- `country` (`string`, optional): Country name or ISO code to disambiguate the listing, e.g. 'United States' or 'US'.
- `cusip` (`string`, optional): CUSIP identifier of the instrument; use as an alternative to symbol.
- `end_date` (`string`, optional): End datetime filter for news articles, e.g. '2025-12-31T23:59:59'.
- `exchange` (`string`, optional): Exchange name to disambiguate the listing, e.g. 'NASDAQ'.
- `figi` (`string`, optional): FIGI identifier of the instrument; use as an alternative to symbol.
- `isin` (`string`, optional): ISIN identifier of the instrument; use as an alternative to symbol.
- `mic_code` (`string`, optional): Market Identifier Code (MIC) to disambiguate the listing, e.g. 'XNGS'.
- `outputsize` (`integer`, optional): Number of press releases to return. Accepts 1-10, defaults to 5.
- `start_date` (`string`, optional): Start datetime filter for news articles, e.g. '2025-12-24T02:07:00'.

Example input: `{"symbol":"AAPL"}`

### `twelvedatamcp_get_dividends`

GetDividends · Read-only

Get dividend history for a stock or the upcoming dividend calendar. Use symbol='AAPL' for AAPL historical dividend payments (full history). Use calendar=true for upcoming ex-dividend dates across the market. Optionally filter by start_date/end_date in YYYY-MM-DD format. Use for: 'dividend history of X', 'when is Y ex-date?', 'upcoming dividends'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `calendar` (`boolean`, optional): Set to true to retrieve the market-wide upcoming ex-dividend calendar instead of a single symbol's history. Defaults to false.
- `country` (`string`, optional): Country name or ISO code to disambiguate or filter results, e.g. 'United States' or 'US'.
- `cusip` (`string`, optional): CUSIP identifier of the instrument; use as an alternative to symbol.
- `end_date` (`string`, optional): End date filter in YYYY-MM-DD format to narrow dividend records.
- `exchange` (`string`, optional): Exchange name to disambiguate the listing or filter results, e.g. 'NASDAQ'.
- `figi` (`string`, optional): FIGI identifier of the instrument; use as an alternative to symbol.
- `isin` (`string`, optional): ISIN identifier of the instrument; use as an alternative to symbol.
- `mic_code` (`string`, optional): Market Identifier Code (MIC) to disambiguate the listing, e.g. 'XNGS'.
- `start_date` (`string`, optional): Start date filter in YYYY-MM-DD format to narrow dividend records.
- `symbol` (`string`, optional): Ticker symbol to get dividend history for, e.g. 'AAPL'. Optional when calendar=true for market-wide calendar.

Example input: `{}`

### `twelvedatamcp_get_earliest_timestamp`

GetEarliestTimestamp · Read-only

Get the earliest available datetime for an instrument at a given interval. Returns the first date/time for which historical data exists (with its UNIX timestamp) -- i.e. how far back the history goes. This is metadata about data availability, not the price data itself. Use this to discover the valid start_date before calling get_time_series. Identify the instrument with any one of symbol, figi, isin, or cusip.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `cusip` (`string`, optional): CUSIP identifier of the instrument; use as an alternative to symbol.
- `exchange` (`string`, optional): Exchange name to disambiguate the listing, e.g. 'NASDAQ'.
- `figi` (`string`, optional): FIGI identifier of the instrument; use as an alternative to symbol.
- `interval` (`string`, optional): Time interval to check data availability for. Valid values: 1min, 5min, 15min, 30min, 45min, 1h, 2h, 4h, 1day, 1week, 1month. Defaults to 1day. Default: `1day`.
- `isin` (`string`, optional): ISIN identifier of the instrument; use as an alternative to symbol.
- `mic_code` (`string`, optional): Market Identifier Code (MIC) to disambiguate the listing, e.g. 'XNGS'.
- `symbol` (`string`, optional): Ticker symbol of the instrument, e.g. 'AAPL'. Use as the primary identifier.

Example input: `{}`

### `twelvedatamcp_get_earnings`

GetEarnings · Read-only

Get earnings data or the market-wide earnings calendar. Use symbol='AAPL' for EPS history (actual vs estimate, surprise %). Use calendar=true for upcoming earnings events across the market. Combine calendar=true with start_date/end_date to filter the calendar to a date window (YYYY-MM-DD). outputsize caps rows for the market-wide calendar (default 50; ignored for single-symbol history). Use for: 'when does X report?', 'AAPL earnings history', 'upcoming earnings this week'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `calendar` (`boolean`, optional): Set to true to retrieve the market-wide upcoming earnings calendar instead of a single symbol's history. Defaults to false.
- `country` (`string`, optional): Country name or ISO code to filter results, e.g. 'United States' or 'US'.
- `cusip` (`string`, optional): CUSIP identifier of the instrument; use as an alternative to symbol.
- `end_date` (`string`, optional): End date filter for the earnings calendar in YYYY-MM-DD format.
- `exchange` (`string`, optional): Exchange name to filter results, e.g. 'NASDAQ'.
- `figi` (`string`, optional): FIGI identifier of the instrument; use as an alternative to symbol.
- `isin` (`string`, optional): ISIN identifier of the instrument; use as an alternative to symbol.
- `mic_code` (`string`, optional): Market Identifier Code (MIC) to disambiguate the listing, e.g. 'XNGS'.
- `outputsize` (`integer`, optional): Maximum number of rows for the market-wide calendar. The calendar can have 1000+ entries per day worldwide, so defaults to 50. Pass a larger value or filter by country/exchange to narrow results. Ignored for single-symbol earnings history.
- `start_date` (`string`, optional): Start date filter for the earnings calendar in YYYY-MM-DD format.
- `symbol` (`string`, optional): Ticker symbol to get EPS history for, e.g. 'AAPL'. Optional when calendar=true for market-wide calendar.

Example input: `{}`

### `twelvedatamcp_get_etf_data`

GetEtfData · Read-only

Get ETF analytics. data_type controls what is returned: 'summary' (name, AUM, expense ratio, NAV, category, inception date), 'performance' (returns over 1M/3M/6M/YTD/1Y/3Y/5Y/10Y), 'risk' (Sharpe, Sortino, Treynor, standard deviation, beta, alpha), 'composition' (top holdings and sector/asset-class weights). Use for: ETF comparison, expense ratios, performance history, what's inside an ETF.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `symbol` (`string`, required): Ticker symbol of the ETF, e.g. 'SPY' or 'QQQ'.
- `country` (`string`, optional): Country name or ISO code to disambiguate the listing, e.g. 'United States' or 'US'.
- `cusip` (`string`, optional): CUSIP identifier of the ETF; use as an alternative to symbol.
- `data_type` (`string`, optional): Type of ETF data to retrieve. Options: 'summary', 'performance', 'risk', 'composition'. Defaults to 'summary'.
- `figi` (`string`, optional): FIGI identifier of the ETF; use as an alternative to symbol.
- `isin` (`string`, optional): ISIN identifier of the ETF; use as an alternative to symbol.

Example input: `{"symbol":"SPY"}`

### `twelvedatamcp_get_financials`

GetFinancials · Read-only

Get financial statements for a company. statement='income_statement' (or 'income') returns revenue, gross/operating/net income, and EPS. statement='balance_sheet' (or 'balance') returns assets, liabilities, equity, cash, and debt. statement='cash_flow' (or 'cf') returns operating, investing, financing cash flows and free cash flow. period can be 'annual' or 'quarterly'. Use for: 'X revenue', 'Y income statement', 'Z free cash flow', financial analysis.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `symbol` (`string`, required): Ticker symbol of the company, e.g. 'AAPL'.
- `country` (`string`, optional): Country name or ISO code to disambiguate the listing, e.g. 'United States' or 'US'.
- `cusip` (`string`, optional): CUSIP identifier of the instrument; use as an alternative to symbol.
- `exchange` (`string`, optional): Exchange name to disambiguate the listing, e.g. 'NASDAQ'.
- `figi` (`string`, optional): FIGI identifier of the instrument; use as an alternative to symbol.
- `isin` (`string`, optional): ISIN identifier of the instrument; use as an alternative to symbol.
- `mic_code` (`string`, optional): Market Identifier Code (MIC) to disambiguate the listing, e.g. 'XNGS'.
- `period` (`string`, optional): Reporting period: 'annual' for annual reports or 'quarterly' for quarterly reports. Defaults to 'annual'.
- `statement` (`string`, optional): Financial statement type to retrieve. Options: 'income_statement' or 'income' for income statement, 'balance_sheet' or 'balance' for balance sheet, 'cash_flow' or 'cf' for cash flow statement. Defaults to 'income_statement'.

Example input: `{"symbol":"AAPL"}`

### `twelvedatamcp_get_ipo_calendar`

GetIpoCalendar · Read-only

Get the IPO calendar -- upcoming and recent initial public offerings. Returns IPOs grouped by date, each with symbol, company name, exchange, price range, offer price, currency, and share count. All filters are optional. Use for: 'what IPOs are coming up?', 'IPOs on NASDAQ this month', 'recent IPOs'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `country` (`string`, optional): Country name or ISO code to filter IPOs, e.g. 'United States' or 'US'.
- `end_date` (`string`, optional): End of the date window in YYYY-MM-DD format.
- `exchange` (`string`, optional): Filter IPOs by exchange name, e.g. 'NASDAQ' or 'NYSE'.
- `mic_code` (`string`, optional): ISO 10383 Market Identifier Code to filter by exchange, e.g. 'XNAS' for NASDAQ.
- `start_date` (`string`, optional): Start of the date window in YYYY-MM-DD format.

Example input: `{}`

### `twelvedatamcp_get_market_cap`

GetMarketCap · Read-only

Get market capitalization for a company. Without date params returns the current market cap from statistics (available on lower plans). With start_date and end_date returns a historical market cap time series. Use for: 'market cap of X', 'what is Y worth?', 'historical market cap of Z', 'how has X market cap changed over time?'

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `symbol` (`string`, required): Ticker symbol of the company, e.g. 'AAPL'.
- `country` (`string`, optional): Country name or ISO code to disambiguate the listing, e.g. 'United States' or 'US'.
- `cusip` (`string`, optional): CUSIP identifier of the instrument; use as an alternative to symbol.
- `end_date` (`string`, optional): End date for historical market cap time series in YYYY-MM-DD format.
- `exchange` (`string`, optional): Exchange name to disambiguate the listing, e.g. 'NASDAQ'.
- `figi` (`string`, optional): FIGI identifier of the instrument; use as an alternative to symbol.
- `isin` (`string`, optional): ISIN identifier of the instrument; use as an alternative to symbol.
- `mic_code` (`string`, optional): Market Identifier Code (MIC) to disambiguate the listing, e.g. 'XNGS'.
- `outputsize` (`integer`, optional): Number of records per page for historical data. Defaults to 10.
- `start_date` (`string`, optional): Start date for historical market cap time series in YYYY-MM-DD format. When provided with end_date, returns a time series instead of the current snapshot.

Example input: `{"symbol":"AAPL"}`

### `twelvedatamcp_get_market_movers`

GetMarketMovers · Read-only

Get top market movers -- biggest gainers, losers, or most-active instruments. Specify the market type (stocks, etfs, mutual_funds, forex, crypto, commodities), direction (gainers, losers, or most_active -- most_active only for stocks), and optionally a country. Use for: 'top gainers today', 'biggest crypto losers', 'most active stocks'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `country` (`string`, optional): Country to filter results for stocks and ETFs, e.g. 'United States', 'United Kingdom', 'Germany'. Defaults to United States. Default: `United States`.
- `direction` (`string`, optional): Which movers to return. Valid values: gainers, losers, most_active (most_active only available for stocks). Defaults to gainers. Default: `gainers`.
- `market` (`string`, optional): Market type to query. Valid values: stocks, etfs, mutual_funds, forex, crypto, commodities. Defaults to stocks. Default: `stocks`.
- `outputsize` (`integer`, optional): Number of movers to return. Defaults to 10. Default: `10`.

Example input: `{}`

### `twelvedatamcp_get_market_state`

GetMarketState · Read-only

Get current trading status and hours for exchanges. Leave all filters blank to return all major markets. Use for: 'is the market open?', 'NYSE hours', 'when does NASDAQ close?'

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `country` (`string`, optional): Country name or ISO code to filter results, e.g. 'United States' or 'US'.
- `exchange` (`string`, optional): Exchange name to filter results, e.g. 'NYSE', 'NASDAQ', 'LSE', 'BINANCE'.
- `mic_code` (`string`, optional): Market Identifier Code (MIC) to filter results, e.g. 'XNYS'.

Example input: `{}`

### `twelvedatamcp_get_mutual_fund_data`

GetMutualFundData · Read-only

Get mutual fund data -- summary, performance, risk, ratings, holdings, and more. data_type options: 'summary' (name, AUM, expense ratio, NAV, category, inception date), 'performance' (returns over 1M/3M/6M/YTD/1Y/3Y/5Y/10Y), 'risk' (Sharpe, Sortino, standard deviation, beta, alpha), 'ratings' (Morningstar star ratings and analyst ratings for the fund), 'composition' (top holdings and sector/asset-class weights), 'purchase_info' (minimum investment, load fees, availability), 'sustainability' (ESG scores and controversy metrics), 'full' (all of the above in one response). Note: 'ratings' here are fund quality ratings (Morningstar stars), NOT analyst buy/sell recommendations -- use get_analyst_data for those. Use for: 'expense ratio of VFIAX', 'top holdings of FXAIX', 'Morningstar rating of X'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `symbol` (`string`, required): Ticker symbol of the mutual fund, e.g. 'VFIAX' or 'FXAIX'.
- `country` (`string`, optional): Country name or ISO code to disambiguate the listing, e.g. 'United States' or 'US'.
- `cusip` (`string`, optional): CUSIP identifier; use as an alternative to symbol.
- `data_type` (`string`, optional): Type of mutual fund data to retrieve. Defaults to 'summary'. Options: summary, performance, risk, ratings, composition, purchase_info, sustainability, full.
- `figi` (`string`, optional): FIGI identifier; use as an alternative to symbol.
- `isin` (`string`, optional): ISIN identifier; use as an alternative to symbol.

Example input: `{"symbol":"VFIAX"}`

### `twelvedatamcp_get_price`

GetPrice · Read-only

Get the current real-time price for one or more symbols. Identify the instrument with any one of symbol, figi, isin, or cusip. For multiple symbols pass a comma-separated string such as 'AAPL,MSFT,BTC/USD'. Market indices (S&P 500, NASDAQ, Dow), options, and bonds are not supported; use an ETF proxy for an index (SPY, QQQ, DIA, IWM).

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `country` (`string`, optional): Country name or ISO code to disambiguate the listing, e.g. 'United States' or 'US'.
- `cusip` (`string`, optional): CUSIP identifier of the instrument; use as an alternative to symbol.
- `exchange` (`string`, optional): Exchange name to disambiguate the listing, e.g. 'NASDAQ'.
- `figi` (`string`, optional): FIGI identifier of the instrument; use as an alternative to symbol.
- `isin` (`string`, optional): ISIN identifier of the instrument; use as an alternative to symbol.
- `mic_code` (`string`, optional): Market Identifier Code (MIC) to disambiguate the listing, e.g. 'XNGS'.
- `prepost` (`boolean`, optional): Include pre-market and post-market price. Defaults to false.
- `symbol` (`string`, optional): Ticker symbol of the instrument, e.g. 'AAPL'. For multiple symbols pass a comma-separated string such as 'AAPL,MSFT,BTC/USD'.

Example input: `{}`

### `twelvedatamcp_get_quote`

GetQuote · Read-only

Get a full real-time quote: open, high, low, close, volume, change %, 52-week range. Identify the instrument with any one of symbol, figi, isin, or cusip. Use for a detailed current market snapshot of a stock, ETF, forex pair, or crypto. Market indices (S&P 500, NASDAQ, Dow), options, and bonds are not supported -- use an ETF proxy (SPY, QQQ, DIA, IWM).

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `country` (`string`, optional): Country name or ISO code to disambiguate the listing, e.g. 'United States' or 'US'.
- `cusip` (`string`, optional): CUSIP identifier of the instrument; use as an alternative to symbol.
- `exchange` (`string`, optional): Exchange name to disambiguate the listing, e.g. 'NASDAQ'.
- `figi` (`string`, optional): FIGI identifier of the instrument; use as an alternative to symbol.
- `isin` (`string`, optional): ISIN identifier of the instrument; use as an alternative to symbol.
- `mic_code` (`string`, optional): Market Identifier Code (MIC) to disambiguate the listing, e.g. 'XNGS'.
- `prepost` (`boolean`, optional): Include pre-market and post-market data. Defaults to false. Default: `false`.
- `symbol` (`string`, optional): Ticker symbol of the instrument, e.g. 'AAPL'. Use as the primary identifier.

Example input: `{}`

### `twelvedatamcp_get_reference_data`

GetReferenceData · Read-only

Get reference and dictionary data -- exchanges, countries, instrument types, and more. data_type is required. Options: 'exchanges' (list of stock/ETF/forex exchanges with MIC codes), 'exchange_schedule' (trading hours and holiday schedule for an exchange), 'crypto_exchanges' (list of supported cryptocurrency exchanges), 'countries' (list of all supported countries with ISO codes), 'instrument_types' (list of all supported instrument types), 'etf_types' (ETF category/type classifications), 'fund_types' (mutual fund category/type classifications). Use for: 'list all exchanges', 'NYSE trading hours', 'what countries are supported?', 'ETF categories', 'is NASDAQ open on Friday?'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `data_type` (`string`, required): Type of reference data to retrieve. Required. Options: exchanges, exchange_schedule, crypto_exchanges, countries, instrument_types, etf_types, fund_types.
- `country` (`string`, optional): Country name or ISO code to filter results, e.g. 'United States' or 'US'.
- `date` (`string`, optional): Specific date in YYYY-MM-DD format, used with exchange_schedule to check if the exchange is open on that date.
- `exchange` (`string`, optional): Exchange name filter, e.g. 'NASDAQ'. Used primarily with exchange_schedule.
- `fund_type` (`string`, optional): Fund category filter for etf_types or fund_types data, e.g. 'Large Blend'.
- `instrument_type` (`string`, optional): Asset class filter for exchanges lookup, e.g. 'ETF' or 'Stock'.
- `mic_code` (`string`, optional): ISO 10383 Market Identifier Code, e.g. 'XNGS' for NASDAQ.

Example input: `{"data_type":"<data_type>"}`

### `twelvedatamcp_get_regulatory_data`

GetRegulatoryData · Read-only

Get regulatory and ownership data for a stock. data_type is required -- pick the one that matches the question. Options: 'insider_transactions' (recent insider buying/selling by officers and directors), 'institutional_holders' (top institutional shareholders with share counts), 'fund_holders' (top mutual-fund holders), 'direct_holders' (direct/registered shareholders), 'edgar_filings' (recent SEC filings: 10-K, 10-Q, 8-K, proxy, etc.), 'tax_info' (withholding rates, domicile, etc.). Use for: 'insider trades at X', 'who owns Y?', 'institutional ownership of Z', 'recent SEC filings for AAPL'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `data_type` (`string`, required): Type of regulatory/ownership data to retrieve. Required. Options: insider_transactions, institutional_holders, fund_holders, direct_holders, edgar_filings, tax_info.
- `symbol` (`string`, required): Ticker symbol of the stock, e.g. 'AAPL'.
- `country` (`string`, optional): Country name or ISO code to disambiguate the listing, e.g. 'United States' or 'US'.
- `cusip` (`string`, optional): CUSIP identifier; use as an alternative to symbol.
- `exchange` (`string`, optional): Exchange name to disambiguate the listing, e.g. 'NASDAQ'.
- `figi` (`string`, optional): FIGI identifier; use as an alternative to symbol.
- `isin` (`string`, optional): ISIN identifier; use as an alternative to symbol.
- `mic_code` (`string`, optional): Market Identifier Code (MIC) to disambiguate the listing, e.g. 'XNGS'.

Example input: `{"data_type":"<data_type>","symbol":"AAPL"}`

### `twelvedatamcp_get_splits`

GetSplits · Read-only

Get stock split history for a company or the upcoming splits calendar. Use symbol='AAPL' for AAPL historical split events including the ratio and date. Use calendar=true for upcoming stock splits across the market. Optionally filter by exchange, mic_code, country, or a start_date/end_date window in YYYY-MM-DD format. Use for: 'split history of X', 'upcoming stock splits', 'has AAPL ever split?'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `calendar` (`boolean`, optional): Set to true to retrieve the market-wide upcoming stock splits calendar instead of a single symbol's history. Defaults to false.
- `country` (`string`, optional): Country name or ISO code to disambiguate or filter results, e.g. 'United States' or 'US'.
- `cusip` (`string`, optional): CUSIP identifier of the instrument; use as an alternative to symbol.
- `end_date` (`string`, optional): End date filter in YYYY-MM-DD format to narrow split records.
- `exchange` (`string`, optional): Exchange name to disambiguate the listing or filter results, e.g. 'NASDAQ'.
- `figi` (`string`, optional): FIGI identifier of the instrument; use as an alternative to symbol.
- `isin` (`string`, optional): ISIN identifier of the instrument; use as an alternative to symbol.
- `mic_code` (`string`, optional): Market Identifier Code (MIC) to disambiguate the listing, e.g. 'XNGS'.
- `start_date` (`string`, optional): Start date filter in YYYY-MM-DD format to narrow split records.
- `symbol` (`string`, optional): Ticker symbol to get split history for, e.g. 'AAPL'. Optional when calendar=true for market-wide calendar.

Example input: `{}`

### `twelvedatamcp_get_statistics`

GetStatistics · Read-only

Get key fundamental statistics for a stock or ETF. Covers: market cap, enterprise value, P/E (trailing and forward), PEG, P/S, P/B, revenue, margins, ROA, ROE, EPS, beta, 52-week range, short ratio, dividend yield. Use for: 'P/E of X', 'market cap of Y', 'fundamental metrics for Z'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `symbol` (`string`, required): Ticker symbol of the stock or ETF, e.g. 'AAPL'.
- `country` (`string`, optional): Country name or ISO code to disambiguate the listing, e.g. 'United States' or 'US'.
- `cusip` (`string`, optional): CUSIP identifier of the instrument; use as an alternative to symbol.
- `exchange` (`string`, optional): Exchange name to disambiguate the listing, e.g. 'NASDAQ'.
- `figi` (`string`, optional): FIGI identifier of the instrument; use as an alternative to symbol.
- `isin` (`string`, optional): ISIN identifier of the instrument; use as an alternative to symbol.
- `mic_code` (`string`, optional): Market Identifier Code (MIC) to disambiguate the listing, e.g. 'XNGS'.

Example input: `{"symbol":"AAPL"}`

### `twelvedatamcp_get_technical_indicator`

GetTechnicalIndicator · Read-only

Calculate any technical indicator for a symbol. Supported indicators include: Trend/Overlap (SMA, EMA, WMA, DEMA, TEMA, TRIMA, KAMA, BBANDS, VWAP, ICHIMOKU, SAR, PIVOT_POINTS_HL, MA), Momentum (RSI, MACD, STOCH, STOCHRSI, ADX, CCI, MFI, AROON, WILLR, ROC, ULTOSC), Volume (OBV, AD, ADOSC, RVOL), Volatility (ATR, NATR, TRANGE, SUPERTREND), Statistics (CORREL, BETA, STDDEV, LINEARREG). For multiple symbols pass a comma-separated string. Use for: 'RSI for AAPL', 'MACD of MSFT', 'Bollinger Bands for BTC/USD'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `indicator` (`string`, required): Technical indicator name (case-insensitive), e.g. 'RSI', 'MACD', 'SMA', 'BBANDS', 'ATR'.
- `symbol` (`string`, required): Ticker symbol of the instrument, e.g. 'AAPL'. For multiple symbols pass a comma-separated string such as 'AAPL,MSFT,BTC/USD'.
- `country` (`string`, optional): Country name or ISO code to disambiguate the listing, e.g. 'United States' or 'US'.
- `cusip` (`string`, optional): CUSIP identifier; use as an alternative to symbol.
- `exchange` (`string`, optional): Exchange name to disambiguate the listing, e.g. 'NASDAQ'.
- `extra` (`string`, optional): JSON string for any additional indicator-specific parameters, e.g. '{"fast_k_period":5,"slow_k_period":3}' for STOCH.
- `fast_period` (`integer`, optional): Fast period for MACD and similar dual-period indicators.
- `figi` (`string`, optional): FIGI identifier; use as an alternative to symbol.
- `interval` (`string`, optional): Time interval for the indicator. Options: 1min, 5min, 15min, 30min, 45min, 1h, 2h, 4h, 1day, 1week, 1month. Defaults to '1day'.
- `isin` (`string`, optional): ISIN identifier; use as an alternative to symbol.
- `mic_code` (`string`, optional): Market Identifier Code (MIC) to disambiguate the listing, e.g. 'XNGS'.
- `nbdevdn` (`number`, optional): Number of standard deviations for the lower band in BBANDS.
- `nbdevup` (`number`, optional): Number of standard deviations for the upper band in BBANDS.
- `outputsize` (`integer`, optional): Number of data points to return. Default is 30.
- `prepost` (`boolean`, optional): Include pre-market and post-market price data. Defaults to false.
- `series_type` (`string`, optional): Price series to use for the calculation. Options: close, open, high, low. Defaults to close.
- `signal_period` (`integer`, optional): Signal period for MACD.
- `slow_period` (`integer`, optional): Slow period for MACD and similar dual-period indicators.
- `symbol_2` (`string`, optional): Second symbol for CORREL or BETA calculations.
- `time_period` (`integer`, optional): Lookback window for the indicator, e.g. 14 for RSI, 20 for SMA or BBANDS.

Example input: `{"indicator":"RSI","symbol":"AAPL"}`

### `twelvedatamcp_get_time_series`

GetTimeSeries · Read-only

Get historical OHLCV (Open, High, Low, Close, Volume) time series data. Identify the instrument with any one of symbol, figi, isin, or cusip. Specify an interval (1min to 1month), outputsize (number of data points, default 30, max 5000), and optional start_date/end_date in YYYY-MM-DD format. Use get_earliest_timestamp to discover how far back data goes before calling this tool. Market indices, options, and bonds are not supported -- use an ETF proxy (SPY, QQQ, DIA, IWM).

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `country` (`string`, optional): Country name or ISO code to disambiguate the listing, e.g. 'United States' or 'US'.
- `cusip` (`string`, optional): CUSIP identifier of the instrument; use as an alternative to symbol.
- `end_date` (`string`, optional): End date for the time series in YYYY-MM-DD format. Defaults to today if omitted.
- `exchange` (`string`, optional): Exchange name to disambiguate the listing, e.g. 'NASDAQ'.
- `figi` (`string`, optional): FIGI identifier of the instrument; use as an alternative to symbol.
- `interval` (`string`, optional): Time interval between data points. Valid values: 1min, 5min, 15min, 30min, 45min, 1h, 2h, 4h, 1day, 1week, 1month. Defaults to 1day. Default: `1day`.
- `isin` (`string`, optional): ISIN identifier of the instrument; use as an alternative to symbol.
- `mic_code` (`string`, optional): Market Identifier Code (MIC) to disambiguate the listing, e.g. 'XNGS'.
- `outputsize` (`integer`, optional): Number of data points to return. Defaults to 30, maximum 5000. Default: `30`.
- `prepost` (`boolean`, optional): Include pre-market and post-market data. Defaults to false. Default: `false`.
- `start_date` (`string`, optional): Start date for the time series in YYYY-MM-DD format. When provided, overrides the outputsize window.
- `symbol` (`string`, optional): Ticker symbol of the instrument, e.g. 'AAPL'. Use as the primary identifier.

Example input: `{}`

### `twelvedatamcp_search_symbol`

SearchSymbol · Read-only

Search for financial instruments by name or partial ticker, or find cross-listings. With cross_listings=false (default), search by name or partial ticker with an optional instrument_type filter (Stock, ETF, Mutual Fund, Forex, Cryptocurrency, Commodity). With cross_listings=true, find all exchanges where a symbol is listed. Indices, options, and bonds are not supported -- use an ETF proxy (e.g. SPY for S&P 500, QQQ for NASDAQ-100, DIA for the Dow).

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `symbol` (`string`, required): Ticker symbol or partial name to search for, e.g. 'AAPL' or 'Apple'.
- `country` (`string`, optional): Country name or ISO code to filter cross-listing results, e.g. 'United States' or 'US'.
- `cross_listings` (`boolean`, optional): If true, find all exchanges where the given symbol is listed. If false (default), search by name or partial ticker. Default: `false`.
- `exchange` (`string`, optional): Filter by exchange name to narrow cross-listing results, e.g. 'NASDAQ'.
- `instrument_type` (`string`, optional): Filter by instrument type. Valid values: Stock, ETF, Mutual Fund, Forex, Cryptocurrency, Commodity. Only applies when cross_listings is false.
- `mic_code` (`string`, optional): Market Identifier Code (MIC) to filter cross-listing results, e.g. 'XNGS'.
- `outputsize` (`integer`, optional): Maximum number of results to return. Defaults to 10. Default: `10`.

Example input: `{"symbol":"AAPL"}`

### `twelvedatamcp_oauth_configure`

Configure OAuth Credentials · Write

Save Twelve Data OAuth credentials to local config so they can be used by oauth_login. Run this once before oauth_login if credentials are not yet configured.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `client_id` (`string`, required): No description.
- `client_secret` (`string`, required): No description.

Example input: `{"client_id":"<client_id>","client_secret":"<client_secret>"}`

### `twelvedatamcp_oauth_login`

OAuth Login · Write

Authenticate with Twelve Data via OAuth 2.0. Opens a browser window for the user to authorize access; after login the API token is fetched from the user profile and saved locally. Requires OAuth client credentials to be configured (see oauth_configure), or a TWELVE_DATA_API_KEY to skip OAuth entirely.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs: none.

Example input: `{}`

## Related

Other Accounting & Finance connectors ([all 20](/agentkit/connectors/?category=accounting-finance)):

- [QuickBooks](/agentkit/connectors/quickbooks/): Scalekit connector, OAuth, 117 tools
- [Xero](/agentkit/connectors/xero/): Scalekit connector, OAuth, 94 tools
- [Stripe](/agentkit/connectors/stripe/): Scalekit connector, Access token, 178 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
