# T-Bank Invest (read-only) (pypi · t-bank-invest-mcp-read-only)

Read-only T-Bank (Tinkoff) Invest API: portfolio, operations, instruments, market data.

- Trust score: 76/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-08

## Components

- pypi · `t-bank-invest-mcp-read-only`: 76/100 (this document), [markdown](https://verifymcp.io/servers/sicness-t-bank-invest-mcp-read-only/t-bank-invest-mcp-read-only.md), [page](https://verifymcp.io/servers/sicness-t-bank-invest-mcp-read-only/t-bank-invest-mcp-read-only)

## Channel facts

- Registry: `pypi`
- Package: `t-bank-invest-mcp-read-only`
- Version: `1.0.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-08.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs hatchling.build at install time, a recognised build step with no custom scripting around it.
  - 0 of 28 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 97/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to Sicness/t-bank-invest-mcp-read-only).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 5 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 70/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 6554 tokens (~168/item across 39 items; 39 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 67/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 0% of tool parameters carry a description.
- **Tool Safety**: 75/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "get_withdraw_limits" implies "withdraw" and declares readOnlyHint instead, contradicting what its own name says it does.
  - An AI judge read all 40 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### How do I install the T-Bank Invest (read-only) MCP server?

T-Bank Invest (read-only) runs locally as a PyPI package, launched with uvx t-bank-invest-mcp-read-only. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add sicness-t-bank-invest-mcp-read-only -- uvx t-bank-invest-mcp-read-only
```

### Cursor

```json
{
  "mcpServers": {
    "sicness-t-bank-invest-mcp-read-only": {
      "command": "uvx",
      "args": [
        "t-bank-invest-mcp-read-only"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "sicness-t-bank-invest-mcp-read-only": {
      "command": "uvx",
      "args": [
        "t-bank-invest-mcp-read-only"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add sicness-t-bank-invest-mcp-read-only -- uvx t-bank-invest-mcp-read-only
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "sicness-t-bank-invest-mcp-read-only": {
      "type": "local",
      "command": [
        "uvx",
        "t-bank-invest-mcp-read-only"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add sicness-t-bank-invest-mcp-read-only --command uvx --arg t-bank-invest-mcp-read-only
```

### Hermes

```yaml
mcp_servers:
  sicness-t-bank-invest-mcp-read-only:
    command: "uvx"
    args: ["t-bank-invest-mcp-read-only"]
```

### Netclaw

```json
{
  "McpServers": {
    "sicness-t-bank-invest-mcp-read-only": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "t-bank-invest-mcp-read-only"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add sicness-t-bank-invest-mcp-read-only -t stdio -c uvx -a t-bank-invest-mcp-read-only
```

### Other

```json
{
  "mcpServers": {
    "sicness-t-bank-invest-mcp-read-only": {
      "command": "uvx",
      "args": [
        "t-bank-invest-mcp-read-only"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-03 (score 76, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-10-02 (score 61)

First indexed and scored.

## MCP tools (39)

### `get_accounts` (~85 tokens)

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_info` (~25 tokens)

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

### `get_margin_attributes` (~52 tokens)

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

Args:
    account_id: Account ID (get from get_accounts)

Input parameters:

- `account_id` (string, required)

### `get_portfolio` (~279 tokens)

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)

Input parameters:

- `account_id` (string, required)
- `currency` (string)

### `get_positions` (~135 tokens)

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)

Input parameters:

- `account_id` (string, required)

### `get_withdraw_limits` (~49 tokens)

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

Args:
    account_id: Account ID (get from get_accounts)

Input parameters:

- `account_id` (string, required)

### `get_operations` (~448 tokens)

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)

Input parameters:

- `account_id` (string, required)
- `figi` (string)
- `from_date` (string)
- `state` (string)
- `to_date` (string)

### `get_operations_by_cursor` (~668 tokens)

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 clien…

Input parameters:

- `account_id` (string, required)
- `cursor` (string)
- `from_date` (string)
- `instrument_id` (string)
- `limit` (integer)
- `operation_types` (string)
- `state` (string)
- `to_date` (string)
- `without_commissions` (boolean)
- `without_trades` (boolean)

### `find_instrument` (~315 tokens)

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)

Input parameters:

- `instrument_kind` (string)
- `limit` (integer)
- `query` (string, required)
- `tradable_only` (boolean)

### `get_instrument_by` (~139 tokens)

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

Input parameters:

- `class_code` (string)
- `id` (string, required)
- `id_type` (string)

### `get_bond_by` (~128 tokens)

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

Input parameters:

- `class_code` (string)
- `id` (string, required)
- `id_type` (string)

### `get_bond_coupons` (~132 tokens)

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

Input parameters:

- `figi` (string)
- `from_date` (string)
- `instrument_id` (string)
- `to_date` (string)

### `get_bond_events` (~276 tokens)

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

Input parameters:

- `from_date` (string)
- `instrument_id` (string, required)
- `to_date` (string)
- `type` (string)

### `get_share_by` (~126 tokens)

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

Input parameters:

- `class_code` (string)
- `id` (string, required)
- `id_type` (string)

### `get_etf_by` (~123 tokens)

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

Input parameters:

- `class_code` (string)
- `id` (string, required)
- `id_type` (string)

### `get_currency_by` (~111 tokens)

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

Input parameters:

- `class_code` (string)
- `id` (string, required)
- `id_type` (string)

### `get_future_by` (~119 tokens)

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

Input parameters:

- `class_code` (string)
- `id` (string, required)
- `id_type` (string)

### `get_dividends` (~116 tokens)

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

Input parameters:

- `from_date` (string)
- `instrument_id` (string, required)
- `to_date` (string)

### `get_accrued_interests` (~101 tokens)

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

Input parameters:

- `from_date` (string)
- `instrument_id` (string, required)
- `to_date` (string)

### `get_asset_fundamentals` (~155 tokens)

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

Input parameters:

- `assets` (string, required)

### `get_consensus_forecasts` (~215 tokens)

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

Input parameters:

- `instrument_id` (string, required)
- `max_pages` (integer)
- `page_limit` (integer)
- `page_number` (integer)

### `get_stock_snapshot` (~285 tokens)

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")

Input parameters:

- `candle_days` (integer)
- `class_code` (string)
- `ticker` (string, required)

### `get_forecast_by` (~62 tokens)

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

Input parameters:

- `instrument_id` (string, required)

### `get_asset_reports` (~98 tokens)

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

Input parameters:

- `from_date` (string)
- `instrument_id` (string, required)
- `to_date` (string)

### `get_favorites` (~16 tokens)

Get list of user's favorite instruments.

### `get_trading_schedules` (~108 tokens)

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

Input parameters:

- `exchange` (string)
- `from_date` (string)
- `to_date` (string)

### `get_candles` (~436 tokens)

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)

Input parameters:

- `from_date` (string)
- `instrument_id` (string, required)
- `interval` (string)
- `to_date` (string)

### `get_last_prices` (~107 tokens)

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

Input parameters:

- `instrument_ids` (string, required)

### `get_order_book` (~92 tokens)

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)

Input parameters:

- `depth` (integer)
- `instrument_id` (string, required)

### `get_close_prices` (~100 tokens)

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

Input parameters:

- `instrument_ids` (string, required)

### `get_trading_status` (~53 tokens)

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

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

Input parameters:

- `instrument_id` (string, required)

### `get_tech_analysis` (~454 tokens)

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)

Input parameters:

- `deviation` (number)
- `fast_length` (integer)
- `from_date` (string)
- `indicator_type` (string, required)
- `instrument_id` (string, required)
- `interval` (string)
- `length` (integer)
- `signal_smoothing` (integer)
- `slow_length` (integer)
- `to_date` (string)
- `type_of_price` (string)

### `get_orders` (~55 tokens)

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

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

Args:
    account_id: Account ID

Input parameters:

- `account_id` (string, required)

### `get_order_state` (~58 tokens)

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

Args:
    account_id: Account ID
    order_id: Order ID

Input parameters:

- `account_id` (string, required)
- `order_id` (string, required)

### `list_shares` (~140 tokens)

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

Input parameters:

- `instrument_status` (string)

### `list_bonds` (~157 tokens)

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

Input parameters:

- `instrument_status` (string)

### `list_etfs` (~143 tokens)

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

Input parameters:

- `instrument_status` (string)

### `list_currencies` (~77 tokens)

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

Input parameters:

- `instrument_status` (string)

### `list_futures` (~143 tokens)

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

Input parameters:

- `instrument_status` (string)

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/sicness-t-bank-invest-mcp-read-only/t-bank-invest-mcp-read-only#diagnostics

## Score history

- 2026-10-08: 76
- 2026-10-04: 76
- 2026-10-03: 76
- 2026-10-02: 61

## Common questions

### What is the T-Bank Invest (read-only) MCP server?

T-Bank Invest (read-only) is an MCP server listed in the public MCP registry as io.github.Sicness/t-bank-invest-mcp-read-only. Read-only T-Bank (Tinkoff) Invest API: portfolio, operations, instruments, market data. This page covers its PyPI package (t-bank-invest-mcp-read-only).

### Is the T-Bank Invest (read-only) MCP server safe to use?

T-Bank Invest (read-only) scores 76 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 8 October 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the T-Bank Invest (read-only) MCP server expose?

T-Bank Invest (read-only) exposes 39 tools: get_accounts, get_user_info, get_margin_attributes, get_portfolio, get_positions, and 34 more. Their descriptions and schemas cost roughly 6,381 tokens of context every time the server is loaded.

### Is the T-Bank Invest (read-only) MCP server still maintained?

T-Bank Invest (read-only) is still listed as active in the MCP registry. We last reached this channel on 8 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the T-Bank Invest (read-only) MCP server under?

T-Bank Invest (read-only) declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- PyPI project: https://pypi.org/project/t-bank-invest-mcp-read-only/
- Socket report: https://socket.dev/pypi/package/t-bank-invest-mcp-read-only
- Repository: https://github.com/Sicness/t-bank-invest-mcp-read-only
- Changelog RSS feed: https://verifymcp.io/servers/sicness-t-bank-invest-mcp-read-only/t-bank-invest-mcp-read-only.xml
- Changelog JSON feed: https://verifymcp.io/servers/sicness-t-bank-invest-mcp-read-only/t-bank-invest-mcp-read-only.json
- HTML version of this page: https://verifymcp.io/servers/sicness-t-bank-invest-mcp-read-only/t-bank-invest-mcp-read-only
