Skip to main content
Glama

get_holdings

Read-only

Retrieve current investment holdings with position-level details, including ticker, quantity, price, equity value, average cost, and total return; filter results by account or ticker symbol.

Instructions

Get current investment holdings with position-level detail. Returns ticker, name, quantity, current price, equity value, average cost, and total return per holding. Joins data from account holdings, securities, and optionally historical snapshots. Filter by account or ticker symbol. Note: cost_basis may be unavailable for cash-equivalent positions. Positions on hidden and merged accounts are EXCLUDED by default, matching get_accounts — pass include_hidden: true for them. Do NOT sum holdings as portfolio value: unvested stock-plan shares are reported as holdings, so the sum can far exceed the investment balance; with --live-reads use get_investment_balance_live for the total.

Input Schema

NameRequiredDescriptionDefault
limitNoMaximum number of results (default: 100, max: 10000)
offsetNoNumber of results to skip for pagination (default: 0)
account_idNoFilter by investment account ID. Returns empty for a hidden or merged account unless include_hidden is also set.
ticker_symbolNoFilter by ticker symbol, case-insensitive (e.g., "AAPL", "SCHX"). The cash sleeve is CUR:USD here and USD in live mode; either spelling matches it in both modes (CUR:USD matches only cash; a bare USD also matches a security tickered USD).
include_hiddenNoInclude positions on hidden and merged accounts (default: false). Same flag, same default as get_accounts — leave it off and the two tools agree on which accounts exist.
include_historyNoInclude monthly price/quantity snapshots per holding (default: false)

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changedv3.0.0
    • changedInput schema / properties / account_id / description
      Previous value: -"Filter by investment account ID"New value: +"Filter by investment account ID. Returns empty for a hidden or merged account unless include_hidden is also set."
    • addedInput schema / properties / include_hidden
      Added value: +{
      +  "default": false,
      +  "description": "Include positions on hidden and merged accounts (default: false). Same flag, same default as get_accounts — leave it off and the two tools agree on which accounts exist.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / ticker_symbol / description
      Previous value: -"Filter by ticker symbol (e.g., \"AAPL\", \"SCHX\")"New value: +"Filter by ticker symbol, case-insensitive (e.g., \"AAPL\", \"SCHX\"). The cash sleeve is CUR:USD here and USD in live mode; either spelling matches it in both modes (CUR:USD matches only cash; a bare USD also matches a security tickered USD)."
  2. First observedv2.0.1

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true. The description adds meaningful behavioral context beyond that: hidden/merged accounts are excluded by default, cost_basis may be unavailable for cash-equivalents, and unvested stock-plan shares inflate the sum. Minor gap on pagination behavior, but the safety and edge-case profile is well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

Front-loads purpose and return fields, then adds scoping and caveats in order of importance. Every sentence carries a distinct fact (return fields, join sources, filtering, hidden-account behavior, summation warning). Slightly dense but no filler.

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

Completeness4/5

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

No output schema exists, but the description enumerates the returned fields so an agent knows the shape. Combined with the behavioral caveats and filtering guidance, the definition is complete enough to call correctly, with only pagination left to the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all six parameters thoroughly. The description restates filtering by account/ticker and the include_hidden alignment with get_accounts, adding only marginal value beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (current investment holdings) at position-level detail, then enumerates the return fields (ticker, quantity, price, equity value, cost, return). This distinguishes it cleanly from siblings like get_transactions, get_investment_prices, and get_investment_splits.

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

Usage Guidelines5/5

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

Explicitly says when filtering applies (account/ticker), explains the include_hidden default matches get_accounts so the two agree, and gives a clear when-not-to-use with an alternative: 'Do NOT sum holdings... use get_investment_balance_live for the total.' This is exactly the routing guidance an agent needs.

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