Skip to main content
Glama
T-Bank Invest MCP Server (read-only)

T-Bank Invest MCP Server (read-only)

by Sicness

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
TBANK_INVEST_TOKENYesТокен T-Invest API (выпускать readonly). Передаётся через переменную окружения TBANK_INVEST_TOKEN в конфигурации MCP-клиента.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_accountsA

Get list of all user investment accounts with their types and statuses.

Returns account IDs needed for other operations (portfolio, positions, operations). Account types: TINKOFF (broker), TINKOFF_IIS (individual investment account), INVEST_BOX, INVEST_FUND, DFA (digital financial assets). closedDate of 1970-01-01 means the account is open.

get_user_infoA

Get user information: tariff, qualified investor status, premium status, risk level.

get_margin_attributesA

Get margin trading attributes for an account: liquid portfolio value, starting/minimal margin, funds sufficiency.

Args: account_id: Account ID (get from get_accounts)

get_portfolioA

Get full portfolio for an account: total values by asset type, all positions with prices, yields, and quantities.

Each position has ticker, classCode, figi, instrumentUid, positionUid, instrumentType, quantity, averagePositionPrice, currentPrice, expectedYield, dailyYield, currentNkd (bonds) and its currency. Amounts are plain numbers; a field that is zero or false is left out, and so are the two fields the API has deprecated.

expectedYield and dailyYield of a position are amounts of money in the position's currency, not percentages; the portfolio's own expectedYield, at the top level, is a percentage. A bond's averagePositionPrice and currentPrice are money per bond, and currentNkd is the accrued interest per bond in the same currency — while get_last_prices, get_candles and get_order_book give a bond's price in percent of its nominal. positionUid is the key of a position: one paper can come under several figi and instrumentUid (its listings), all with the same positionUid.

Args: account_id: Account ID (get from get_accounts) currency: Portfolio currency — RUB, USD, or EUR (default: RUB)

get_positionsA

Get all positions in an account: securities, futures, options, and cash balances.

Unlike get_portfolio, this returns raw position balances without price calculations. A field that is zero or false (blocked, exchangeBlocked) is left out. balance is a string holding an integer — for a fund held in fractions of a unit it is cut down to whole units, and the exact quantity is in get_portfolio; positionUid is the key of the position, the same one the portfolio and the operations carry.

Args: account_id: Account ID (get from get_accounts)

get_withdraw_limitsA

Get available withdrawal limits for an account: free cash, blocked amounts, futures guarantees.

Args: account_id: Account ID (get from get_accounts)

get_operationsA

Get list of operations (transactions) for an account within a date range.

Returns: buys, sells, dividends, coupons, taxes, commissions, deposits, withdrawals, etc. Each operation has: id, operationType (the code, e.g. OPERATION_TYPE_BUY), type (the same in Russian words), date, state, payment, price, quantity, quantityRest, figi, instrumentUid, positionUid, trades. A field that is zero or empty is left out; assetUid is left out too.

Canceled orders are operations as well, and carry the quantity and the payment they asked for: pass state="EXECUTED" before adding up money or quantities. quantity is what the order asked for and quantityRest what was not executed, so the executed quantity is their difference. A bond repayment has no quantity. Prices and quantities are as they were at the time: unlike candles, they are not adjusted for later splits.

Note: this method has no paging. An operation is about 450 characters, so about 100 of them fit into a client's limit, and a month of an active account can be twice that — keep the range to a week or two, or use get_operations_by_cursor, which pages. The API returns no more than 1000 operations, the latest ones; when that happens the result starts with a "note" saying so, and the earlier operations are not in it.

Args: account_id: Account ID from_date: Start date (YYYY-MM-DD), default: 14 days ago — about as much as a client's limit takes for an active account to_date: End date (YYYY-MM-DD, inclusive), default: now state: Filter by state: EXECUTED, CANCELED, PROGRESS (empty = all) figi: Filter by instrument — FIGI, ticker, ISIN or UID (empty = all instruments)

get_operations_by_cursorA

Get operations with cursor-based pagination. Better for large histories.

Returns hasNext and nextCursor for pagination: pass nextCursor as cursor to get the next page. Each operation item includes detailed info: id, type (the code, e.g. OPERATION_TYPE_BUY), name and description, state, date, payment, price, commission, yield, accruedInt, quantity, quantityDone, quantityRest, ticker, classCode, figi, instrumentType, instrumentUid, positionUid, tradesInfo.trades (the trades of the order) and childOperations (its commissions and taxes). A field that is zero or empty is left out, and so are fields that repeat another one or the request (instrumentKind, assetUid, brokerAccountId, the per-item cursor).

Canceled orders are operations as well, and carry the quantity and the payment they asked for — a canceled buy with a positive payment, where an executed one is negative: pass state="EXECUTED" before adding up money or quantities. quantity is what the order asked for, quantityDone what was executed (left out when nothing was) and quantityRest what was not — an order can be executed in part. A bond repayment has no quantity. Prices and quantities are as they were at the time: unlike candles, they are not adjusted for later splits. positionUid is the key of a position: one paper can come under several figi and instrumentUid. The API can send an operation twice under one id; within a page the two are merged, across pages add up by unique id.

Common operation types: BUY, SELL, DIVIDEND, COUPON, TAX, BOND_TAX, INPUT, OUTPUT, BROKER_FEE, BOND_REPAYMENT_FULL, BOND_REPAYMENT; DIV_EXT is a dividend paid out to a card, which never reaches the account.

Args: account_id: Account ID from_date: Start date (YYYY-MM-DD), default: 1 year ago to_date: End date (YYYY-MM-DD, inclusive), default: now cursor: Cursor from previous response for pagination limit: Number of operations per page (1-1000, default: 50; a page of 50 is about 28,000 characters, and a client refuses a result twice that) instrument_id: Filter by instrument — ticker, FIGI, ISIN or UID operation_types: Comma-separated operation types (e.g. "BUY,SELL,DIVIDEND"); a type the API does not have is an error state: Filter by state: EXECUTED, CANCELED, PROGRESS without_commissions: Exclude commission operations without_trades: Exclude trade details from response

find_instrumentA

Search for instruments by text query (ticker, name, ISIN, FIGI).

Returns {"instruments": [...], "total": N}. Each instrument has ticker, classCode, name, instrumentType, uid, figi, isin and lot; forQualInvestorFlag appears when it is true and apiTradeAvailableFlag when it is false. An instrument whose ticker, ISIN or FIGI equals the query comes first, then shares, funds, bonds and the rest. "total" counts every match; "note" says when the list was cut to limit or when nothing tradable matched and non-tradable listings are shown instead.

A paper has many listings (one per board, most of them not tradable), and a company's name also matches all its bonds — narrow the search with instrument_kind.

Args: query: Search string (e.g. "SBER", "Газпром", "Apple") instrument_kind: Only this kind — share, bond, etf, currency, futures, option, sp, clearing_certificate, index, commodity (empty = any) tradable_only: Only listings tradable through the API (default: true). False also returns delisted papers and technical boards. limit: Maximum number of instruments to return (1-200, default: 20)

get_instrument_byA

Get detailed instrument info by its identifier.

Returns: name, ticker, figi, uid, lot size, currency, country, sector, trading status, etc.

Args: id: Instrument ticker, FIGI, ISIN or UID — which one it is gets recognised automatically id_type: Only needed with class_code: INSTRUMENT_ID_TYPE_TICKER. Otherwise leave the default. class_code: Board of a ticker (e.g. "TQBR"), to pick one listing out of several

get_bond_byA

Get detailed bond info: maturity date, coupon rate, nominal, ACI, issue size, risk level.

Args: id: Bond ticker, FIGI, ISIN or UID — which one it is gets recognised automatically id_type: Only needed with class_code: INSTRUMENT_ID_TYPE_TICKER. Otherwise leave the default. class_code: Board of a ticker (e.g. "TQBR"), to pick one listing out of several

get_bond_couponsA

Get bond coupon payment schedule: dates, amounts, coupon periods.

Args: figi: Deprecated, kept for existing callers — pass the FIGI as instrument_id instead instrument_id: Bond ticker, FIGI, ISIN or UID (required) from_date: Start date (YYYY-MM-DD), default: now to_date: End date (YYYY-MM-DD, inclusive), default: 1 year from now

get_bond_eventsA

Get bond events: coupon payments, offers (calls), maturity, conversions.

Without dates the API returns only a window of a few years around today, so a bond's maturity or a distant offer needs an explicit from_date/to_date range to show up. A field of an event that is zero or empty is left out.

A coupon event carries couponInterestRate, the coupon's rate in percent a year — the bond itself (get_bond_by) does not have it. Partial repayments (amortization) come as MTY events with operationType "OA" and value in percent of the nominal; the final repayment is the MTY event with operationType "OM".

Args: instrument_id: Bond ticker, FIGI, ISIN or UID type: Event type filter (empty = all): CPN (coupon), CALL (offer), MTY (maturity and amortization), CONV (conversion) from_date: Start date (YYYY-MM-DD), default: chosen by the API to_date: End date (YYYY-MM-DD, inclusive), default: chosen by the API

get_share_byA

Get detailed share (stock) info: sector, dividend yield, IPO date, issue size, country.

Args: id: Share ticker, FIGI, ISIN or UID — which one it is gets recognised automatically id_type: Only needed with class_code: INSTRUMENT_ID_TYPE_TICKER. Otherwise leave the default. class_code: Board of a ticker (e.g. "TQBR"), to pick one listing out of several

get_etf_byA

Get detailed ETF/fund info: management fee, tracking index, rebalance frequency.

Args: id: ETF ticker, FIGI, ISIN or UID — which one it is gets recognised automatically id_type: Only needed with class_code: INSTRUMENT_ID_TYPE_TICKER. Otherwise leave the default. class_code: Board of a ticker (e.g. "TQBR"), to pick one listing out of several

get_currency_byC

Get detailed currency instrument info.

Args: id: Currency ticker, FIGI, ISIN or UID — which one it is gets recognised automatically id_type: Only needed with class_code: INSTRUMENT_ID_TYPE_TICKER. Otherwise leave the default. class_code: Board of a ticker (e.g. "TQBR"), to pick one listing out of several

get_future_byB

Get detailed futures contract info: expiration, basic asset, margin requirements.

Args: id: Future ticker, FIGI, ISIN or UID — which one it is gets recognised automatically id_type: Only needed with class_code: INSTRUMENT_ID_TYPE_TICKER. Otherwise leave the default. class_code: Board of a ticker (e.g. "TQBR"), to pick one listing out of several

get_dividendsA

Get dividend payment history and upcoming dividends for an instrument.

Returns: record date, payment date, dividend per share, yield, currency.

Args: instrument_id: Instrument ticker, FIGI, ISIN or UID from_date: Start date (YYYY-MM-DD), default: 2 years ago to_date: End date (YYYY-MM-DD, inclusive), default: 1 year ahead

get_accrued_interestsA

Get accrued coupon interest (NKD) history for a bond.

Args: instrument_id: Bond ticker, FIGI, ISIN or UID from_date: Start date (YYYY-MM-DD), default: 30 days ago to_date: End date (YYYY-MM-DD, inclusive), default: now

get_asset_fundamentalsA

Get fundamental financial data for assets: P/E, P/BV, EPS, ROE, revenue, market cap, etc.

The API keys fundamentals by asset UID, which is not the instrument UID; whatever is passed here is converted. Each item of the result carries its assetUid, and the items come in the order of the request. A value of 0 means the API has no figure (P/E of a company at a loss, EBITDA of a bank), not zero. Bonds and funds have no fundamentals.

Args: assets: Comma-separated list of tickers, FIGIs, ISINs, instrument UIDs or asset UIDs

get_consensus_forecastsA

Get the analyst consensus forecast for one instrument: target price, recommendation, number of analysts.

GetConsensusForecasts has no server-side instrument filter — it only returns pages of forecasts for the whole instrument universe, keyed by asset UID. This resolves instrument_id to its asset UID, scans pages internally and returns just the matching item, or {"error": ...} if there is none.

Args: instrument_id: Ticker, FIGI, ISIN, instrument UID or asset UID page_limit: Page size used while scanning (default: 100; a non-positive value means 100) max_pages: Safety cap on how many pages to scan before giving up (default: 50, at least 1) page_number: Deprecated and ignored, kept for existing callers: the tool reads the pages itself

get_stock_snapshotA

Get a one-call overview of a share: fundamentals, recent price change, and analyst consensus.

Convenience wrapper around FindInstrument + GetInstrumentBy + GetAssetFundamentals + GetCandles + GetConsensusForecasts, so a caller doesn't need separate round trips (and the manual ticker → UID → asset UID resolution) to get a compact picture of one share.

Returns ticker, class_code, uid, asset_uid and name of the share it resolved to — check them when the query is ambiguous — plus price, fundamentals and consensus. Returns {"error": ...} if no share matches.

price holds last_close and last_close_date (the latest finished session), change_pct over change_sessions finished sessions, and — only while today's session is still open — current_price, which is not a close.

Args: ticker: Ticker, name, ISIN, or FIGI of a share (searched with FindInstrument; an exact ticker/ISIN/FIGI match is preferred over the first search hit) candle_days: Number of daily candles (trading sessions) the price change spans (default: 5) class_code: Optional class code to disambiguate listings (e.g. "TQBR")

get_forecast_byA

Get investment house price forecasts for an instrument.

Returns: analyst name, target price, recommendation (buy/hold/sell), date.

Args: instrument_id: Instrument ticker, FIGI, ISIN or UID

get_asset_reportsA

Get upcoming and past earnings report dates for an instrument's issuer.

Args: instrument_id: Instrument ticker, FIGI, ISIN or UID from_date: Start date (YYYY-MM-DD), default: now to_date: End date (YYYY-MM-DD, inclusive), default: 1 year ahead

get_favoritesB

Get list of user's favorite instruments.

get_trading_schedulesA

Get trading schedules for exchanges: trading hours, auction times, clearing times.

Args: exchange: Exchange name (e.g. "MOEX", "SPB"). Empty = all exchanges. from_date: Start date (YYYY-MM-DD), default: today to_date: End date (YYYY-MM-DD, inclusive), default: 7 days ahead

get_candlesA

Get historical candles (OHLCV) for an instrument.

Returns {"columns": ["time", "open", "high", "low", "close", "volume", "volumeBuy", "volumeSell"], "candles": [...]}: one row per candle, oldest first, in the order of "columns". Volumes are in lots; the two columns splitting volume into buys and sells are there when the API has them. For day, week and month candles "time" is a date. "last_candle_complete": false appears when the last candle's period is still running — its close is the current price, not a close. A bond's prices are in percent of its nominal, not in money. Candles from before a split or a consolidation usually come recalculated to today's shares, while operations keep the prices and quantities of their day.

The API limits the period one request may span: a day for minute candles, a week for 5-10 minute ones, 3 weeks for 15-30 minute ones, 3 months for hourly ones, 6 years for daily ones. A year of daily candles is about 22,000 characters; several years of them do not fit into a client's limit — ask for weekly or monthly candles instead.

Args: instrument_id: Instrument ticker, FIGI, ISIN or UID from_date: Start date (YYYY-MM-DD), default: 30 days ago to_date: End date (YYYY-MM-DD, inclusive), default: now interval: Candle interval — CANDLE_INTERVAL_1_MIN, CANDLE_INTERVAL_5_MIN, CANDLE_INTERVAL_15_MIN, CANDLE_INTERVAL_HOUR, CANDLE_INTERVAL_DAY, CANDLE_INTERVAL_WEEK, CANDLE_INTERVAL_MONTH (also 5/10/30_SEC, 2/3/10/30_MIN, 2/4_HOUR)

get_last_pricesA

Get last trade prices for one or more instruments.

One record per requested identifier, in the order of the request, each with its ticker and classCode. An identifier no instrument matches gives {"requested": ..., "error": ...} in its place. A bond's price is in percent of its nominal, not in money.

Args: instrument_ids: Comma-separated list of tickers, FIGIs, ISINs or UIDs

get_order_bookA

Get order book (market depth) for an instrument: bids, asks, last price, spread.

A bond's prices are in percent of its nominal, not in money.

Args: instrument_id: Instrument ticker, FIGI, ISIN or UID depth: Order book depth 1-50 (default: 20)

get_close_pricesA

Get previous trading session close prices for instruments.

One record per requested identifier, in the order of the request. An identifier no instrument matches gives {"requested": ..., "error": ...} in its place. A bond's price is in percent of its nominal, not in money.

Args: instrument_ids: Comma-separated list of tickers, FIGIs, ISINs or UIDs

get_trading_statusB

Get current trading status for an instrument: is it tradeable, auction phase, etc.

Args: instrument_id: Instrument ticker, FIGI, ISIN or UID

get_tech_analysisA

Get technical analysis indicators (SMA, EMA, RSI, MACD, BB) for an instrument.

Returns technicalIndicators: one item per interval with a timestamp and the indicator's values — signal (SMA, EMA, RSI), macd and signal (MACD), or middleBand, upperBand and lowerBand (BB).

Args: instrument_id: Instrument ticker, FIGI, ISIN or UID indicator_type: INDICATOR_TYPE_SMA, INDICATOR_TYPE_EMA, INDICATOR_TYPE_RSI, INDICATOR_TYPE_MACD, INDICATOR_TYPE_BB from_date: Start date (YYYY-MM-DD), default: 90 days ago to_date: End date (YYYY-MM-DD, inclusive), default: now interval: INDICATOR_INTERVAL_ONE_DAY (default), _ONE_HOUR, _WEEK, MONTH and the minute and hour steps listed in the schema. The API names intervals differently here than in get_candles; the CANDLE_INTERVAL* names of the same steps are taken too. type_of_price: TYPE_OF_PRICE_CLOSE, TYPE_OF_PRICE_OPEN, TYPE_OF_PRICE_HIGH, TYPE_OF_PRICE_LOW, TYPE_OF_PRICE_AVG length: Indicator period in intervals (default: 14); MACD ignores it deviation: BB only — number of standard deviations between the middle and outer bands (default: 2) fast_length: MACD only — period of the fast EMA (default: 12) slow_length: MACD only — period of the slow EMA (default: 26) signal_smoothing: MACD only — period of the signal line (default: 9)

get_ordersB

Get list of active (pending) orders for an account.

Returns: order_id, direction, type, status, price, quantity, instrument info.

Args: account_id: Account ID

get_order_stateB

Get detailed status of a specific order: execution status, filled quantity, average price.

Args: account_id: Account ID order_id: Order ID

list_sharesA

Get the full reference list of shares (stocks): every field of every share.

A dump for scripts, not something to read: about 1,900 shares and 2 MB of JSON with INSTRUMENT_STATUS_BASE, 8 MB with INSTRUMENT_STATUS_ALL — far more than fits in a model's context; a client saves such a result to a file or refuses it. To find particular shares use find_instrument, and get_share_by for the details of one.

Args: instrument_status: INSTRUMENT_STATUS_BASE (tradeable) or INSTRUMENT_STATUS_ALL

list_bondsA

Get the full reference list of bonds: every field of every bond.

A dump for scripts, not something to read: about 1,600 bonds and 2.4 MB of JSON with INSTRUMENT_STATUS_BASE — far more than fits in a model's context; a client saves such a result to a file or refuses it. INSTRUMENT_STATUS_ALL is 38 MB, and the API drops the connection before sending it all. To find particular bonds use find_instrument with instrument_kind="bond", and get_bond_by for the details of one.

Args: instrument_status: INSTRUMENT_STATUS_BASE (tradeable) or INSTRUMENT_STATUS_ALL

list_etfsA

Get the full reference list of ETFs and funds: every field of every fund.

A dump for scripts, not something to read: about 280 funds and 300 KB of JSON with INSTRUMENT_STATUS_BASE, 2.3 MB with INSTRUMENT_STATUS_ALL — more than fits in a model's context; a client saves such a result to a file or refuses it. To find particular funds use find_instrument with instrument_kind="etf", and get_etf_by for one.

Args: instrument_status: INSTRUMENT_STATUS_BASE (tradeable) or INSTRUMENT_STATUS_ALL

list_currenciesA

Get list of all available currency instruments.

Small enough to read: about 15 instruments and 13 KB with INSTRUMENT_STATUS_BASE, twice that with INSTRUMENT_STATUS_ALL.

Args: instrument_status: INSTRUMENT_STATUS_BASE (tradeable) or INSTRUMENT_STATUS_ALL

list_futuresA

Get the full reference list of futures contracts: every field of every contract.

A dump for scripts, not something to read: about 530 contracts and 700 KB of JSON with INSTRUMENT_STATUS_BASE, 3.5 MB with INSTRUMENT_STATUS_ALL — far more than fits in a model's context; a client saves such a result to a file or refuses it. To find particular contracts use find_instrument with instrument_kind="futures", and get_future_by for one.

Args: instrument_status: INSTRUMENT_STATUS_BASE (tradeable) or INSTRUMENT_STATUS_ALL

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.7/5.0

Scored across 39 tools

Disambiguation4/5

Most tools target distinct resources or actions, and the descriptions actively separate easily confused pairs like get_portfolio vs get_positions, get_operations vs get_operations_by_cursor, and list_* dumps vs find_instrument. However, the generic get_instrument_by overlaps with the five asset-specific *_by tools, get_last_prices and get_close_prices are similar, and get_share_by vs get_stock_snapshot compete, so several boundaries require reading long descriptions.

Naming Consistency5/5

Tool names consistently use snake_case with a clear verb_noun pattern: get_* for lookups, list_* for bulk reference lists, find_instrument for search, and get_*_by for detail-by-identifier. The only minor terminology wobble is 'stock' in get_stock_snapshot versus 'share' elsewhere, but the naming convention itself is predictable throughout.

Tool Count2/5

39 tools is well above the typical 3-15 range and exceeds the 25-tool threshold for 'too many' in the rubric, making the surface heavy for an agent. The set includes overlapping instrument-detail lookups and five list_* bulk dumps that descriptions themselves warn are script dumps rather than agent-friendly queries, so not every tool clearly earns its place.

Completeness4/5

For a read-only investment server the coverage is broad: accounts, portfolios, positions, operations, instrument search/details, bond coupons/events, dividends, market data, analytics, orders, schedules, and reference lists are all present. Minor gaps remain, such as no direct portfolio performance/risk summary beyond margin attributes and no non-dump way to enumerate all instruments, but agents can work around these.

Maintenance

ActivityMaintained
ResponsivenessNo issues