Skip to main content
Glama

BotSpot: AI Trading, Backtests and Bots

Broker daily snapshots

broker_snapshots

Read stored daily broker snapshot automation data. For realtime holdings use get_broker_positions. action="run_now" requests a fresh no-trade snapshot for the saved account and starts read-only snapshot compute.

Set "action" to choose the operation. Only send the fields listed for that action.

action="list": List broker daily snapshots

No other fields required. Lists the authenticated user's daily broker snapshot automation metadata and latest sanitized telemetry. Each broker credential has a deterministic snapshot bot id. Returned data can include accountDisplay (a safe label such as 'Account ending in 4821'), lifecycle status, last run status, latest portfolio value, cash, positions count, and timestamps. Never infer an account suffix from brokerCredentialId. Raw broker credentials and full account numbers are never returned. This is not the only source of position evidence. If this returns no accounts, no positions, stale data, or unavailable telemetry while the user asked for actual positions/holdings, continue with list_deployments(status="running", limit=50) and get_deployment_position_telemetry before concluding no live-bot positions are available.

action="portfolio": Get broker snapshot portfolio series

Required fields: brokerCredentialId. Returns portfolio-value snapshot data for one saved broker credential owned by the authenticated user. Use broker_snapshots(action="list") first to find brokerCredentialId and snapshot status. Raw broker credentials are never returned.

action="positions": Get broker snapshot positions

No other fields required. Returns stored normalized position snapshot data for saved broker snapshot automation. Use this only when the user explicitly asks about snapshot history, snapshot status, or stored snapshot diagnostics. For realtime holdings questions like 'how much Tesla stock do I own?', use get_broker_positions with symbol=TSLA. Use broker_snapshots(action="list") first to find brokerCredentialId and snapshot status. brokerCredentialId is optional. For all linked broker accounts, all broker positions, or 'not just the count' across accounts, prefer one aggregate call with brokerCredentialId omitted instead of many parallel per-account calls; the aggregate result preserves brokerCredentialId, accountDisplay, botId, broker, paperOrLive, positions[], and results[] so account-to-position mapping stays intact. Use accountDisplay in user-facing account labels and never infer an account suffix from brokerCredentialId. Raw broker credentials and full account numbers are never returned. If broker snapshot positions are empty, stale, or unavailable and the user asked for actual positions/holdings, continue with live-bot evidence through list_deployments(status="running", limit=50) and get_deployment_position_telemetry. Empty broker snapshots do not prove running deployments have no positions.

action="diagnostics": Get broker snapshot diagnostics

Required fields: brokerCredentialId. Read-only diagnostics for one broker snapshot automation owned by the authenticated user. Returns Node snapshot identity/latest telemetry, sanitized Bot Manager scheduled/ECS status, and optionally recent sanitized logs. Use this when broker_snapshots(action="list") shows setup pending, pending last run, no latest snapshot, or failed status. Raw broker credentials, Vault ids, runtime secret ARNs, and secret values are never returned.

action="run_now": Run broker snapshot now

Required fields: brokerCredentialId. Requests one immediate no-trade portfolio snapshot run for a saved broker credential owned by the authenticated user. This starts read-only snapshot compute through Bot Manager and the normal Vault-backed runtime secret path. It does not accept or return raw broker credentials, Vault ids, runtime secret ARNs, API keys, raw runtime configuration, or inline code.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "action": "<action>"
    },
    "name": "broker_snapshots"
  }
}

Input Schema

NameRequiredDescriptionDefault
endNoUsed with action="portfolio".
sortNoUsed with action="positions".
limitNoUsed with action="portfolio", action="positions".
startNoUsed with action="portfolio".
actionYesWhich operation to run: "list", "portfolio", "positions", "diagnostics", "run_now". See the tool description for each one.
symbolNoUsed with action="positions".
historyNoUsed with action="positions".
logLimitNoUsed with action="diagnostics".
frequencyNoUsed with action="portfolio".
includeLogsNoUsed with action="diagnostics".
brokerCredentialIdNoUsed with action="portfolio", action="diagnostics", action="run_now", action="positions". Required for action="portfolio", action="diagnostics", action="run_now".

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing what run_now actually does (starts read-only snapshot compute via Bot Manager and the Vault-backed runtime secret path), ownership scoping ("owned by the authenticated user"), and repeated sanitization guarantees (no raw credentials, Vault ids, ARNs, secret values, full account numbers). It reconciles with readOnlyHint=false by framing run_now as an execution trigger. It does not state that repeated run_now calls are non-idempotent (each call starts a new run) or note rate/cost limits, which is the remaining gap.

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

Conciseness3/5

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

Front-loading is strong (the realtime alternative appears in sentence two) and the per-action headings make it scannable. However, "Raw broker credentials and full account numbers are never returned" is restated in four separate action sections, and the list_deployments fallback guidance appears twice, so a meaningful share of roughly 450 words is redundant padding.

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

Completeness5/5

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

With no output schema and eleven parameters across five actions, the description carries return-shape disclosure itself and does so: list returns accountDisplay/lifecycle/last run/portfolio value/cash/position count, diagnostics returns Node identity plus scheduled/ECS status, positions returns normalized snapshot rows. It also preempts the account-labeling trap ("Never infer an account suffix from brokerCredentialId").

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds action-conditional structure the flat schema does not convey: "Only send the fields listed for that action," per-action "Required fields: brokerCredentialId," and "No other fields required" for list/positions. It also explains the key semantic choice for positions — omit brokerCredentialId to get one aggregate call that preserves account-to-position mapping rather than fanning out.

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?

Opens with a specific verb+resource ("Read stored daily broker snapshot automation data") and immediately separates itself from the realtime sibling: "For realtime holdings use get_broker_positions." Each of the five actions is then enumerated with its own heading and one-line purpose, so an agent can tell list/portfolio/positions/diagnostics/run_now apart without opening the schema.

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?

Explicit when-not-to-use for the riskiest misinterpretation: positions "only when the user explicitly asks about snapshot history... for realtime holdings questions like 'how much Tesla stock do I own?', use get_broker_positions with symbol=TSLA." It also supplies a documented fallback chain (list_deployments(status="running", limit=50) then get_deployment_position_telemetry) and warns that empty snapshots do not prove running deployments have no positions.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.