Skip to main content
Glama

fahali_get_market_snapshot

Read-onlyIdempotent

Retrieve live prices and changes for crypto and US equities with asset class, venue, identity, and coverage details so you can see what was searched.

Instructions

Live prices and changes, with asset class, venue and identity. Crypto is the full Binance USDT book; US equities are a small watchlist PLUS any symbol you name in symbols, fetched on demand — so an unrequested equity is absent because nobody asked, not because it is quiet. Read coverage for what was searched, and coverage.volume.comparableAcrossBases before ranking by volume. Public data.

Input Schema

NameRequiredDescriptionDefault
limitNoOptional maximum assets to return. Omitting it returns everything this snapshot holds — which is the full Binance USDT book plus a configured US watchlist, NOT every instrument Fahali monitors. Max 800.
sinceNoOptional lower timestamp bound for returned row collections.
detailNoResponse depth. audit is the full-fidelity default; brief and standard are explicit compact projections.audit
compactNoWhen true, returns symbol+price+change only (drops volume/assetClass/venue)
sort_byNoSort field (default symbol). `volume` ranks only rows whose source publishes a volume; rows without one follow in symbol order and are counted in `ordering.rowsUnranked` — their position is not a statement about turnover.
symbolsNoOptional symbol projection, as a comma-separated string or array. Rows without instrument identity are not discarded.
asset_classNoFilter by asset class
include_withheldNoInclude full withheld-row detail. Defaults true with audit; explicitly set false only for a compact projection.

Output Schema

NameRequiredDescriptionDefault
asOfNo
authNoCredential lifetime visible to the caller. OAuth secondsRemaining lets an autonomous agent refresh before a multi-call workflow is interrupted.
claimNoFahali dictionary claim (shared/fahaliDictionary.ts). Read `kind` FIRST: 'abstention' means no assertion was made and `reason` says why — never read an abstention as a neutral or zero result. `basis` says what the claim rests on. Absent or null means this response path does not yet emit a claim; treat that as unknown, not as agreement.
scopeNo
totalNo
assetsNo
statusNoThe endpoint's original status vocabulary (for example ok, partial, degraded, withheld, or no_alerts). Use mcpStatus for normalized transport success/error.
absenceNoWhy no actionable finding is present: measured_empty, user_empty, no_coverage, source_unverified, stale, withheld, source_error, auth_failure, or entitlement_required.
indicesNo
sourcesNoPer-source read states (alpaca/coingecko/binance), each measured/pending/not_instrumented — never inferred.
coverageNoWhat was searched (incl. on-demand equity resolution) and whether volume is comparable across bases. Read before ranking by volume.
dataAsOfNo
decisionNo
orderingNoHow the rows were ordered and which rows the sort key could actually rank.
conflictsNo
dataStateNo
mcpStatusNoNormalized MCP result status. The endpoint's original status vocabulary remains in `status` and `sourceStatus`.
requestIdNo
timestampNo
claimPolicyNoTyped constraints for safe use. Metadata, not a prompt or instruction channel.
instrumentsNoResolved or explicitly partial instrument identities. A missing venue carries an ambiguity warning.
nextActionsNoRegistry-validated follow-up calls. Missing tools, invalid arguments, unresolved placeholders, and disabled tools are omitted.
sourceErrorNoThe upstream endpoint's exact error text/code before normalization, when one was present.
sourceScopeNo
sourceStatusNoThe upstream endpoint's exact status before the MCP envelope normalizes transport success/error.
agentBriefingNoAudit-only narrative projection. Present only when detail='audit'; compact responses do not duplicate structured data as prose.
claimValidityNoValidity of the selected binding claim only, calculated after filtering, projection and row selection. Sibling rows cannot determine it.
responseStateNo
schemaVersionNo
sourceDecisionNo
symbolCoverageNoConservation ledger satisfying requested = returned + withheld + notReturned for requested-symbol calls.
evidenceQualityNo
responseControlNo
sourceDataStateNoThe upstream endpoint's exact data-state value before endpoint-aware classification.
recordMatchReasonNoWhy matchedTrackRecord is present or null. A null record is never evidence of safety or engine failure.
matchedTrackRecordNoA judged record only when engine, horizon, regime/instrument class, and claim family match this response. `state` is one of: `measured` (a stratum cleared the publishability gate — `stratum` carries engine, horizon tier, bar regime, recall, precision, base rate, base-rate lift, median lead hours, effective sample, warned events and the measurement date); `withheld` (the gate ran and refused — `reason` says why, in words); `unavailable` (the record could not be read at all — an infrastructure failure that says nothing about the record). It is ONE stratum selected by recall, never a platform-wide accuracy. Null means no exact record match; read recordMatchReason.
confidenceSemanticsNoEvery confidence-bearing value with its score type, scale, calibration status, and probability flag.
decisionEligibilityNoFail-closed binding-authority policy. WITHHELD means source evidence remains available for audit while normalized direction, actionability and execution fields are revoked.
directionEligibilityNoCurrent market-direction eligibility. Direction is authorized only by an exact, eligible producer stratum (canonical_verdict, canonical_symbol_verdict, committee_verdict) — read bindingAuthority to see which one bound. Widening WHO may bind did not weaken WHAT binding requires: the named producer must still hold a matching horizon/class/family record on a verified-only judged population, so an authority without a record still cannot bind.
executionEligibilityNoFail-closed execution boundary. Portfolio monitoring tools always return WITHHELD with MONITOR_ONLY_NO_EXECUTION_AUTHORITY while Fahali has no capital path.
monitoringEligibilityNoCurrent portfolio-monitoring validity based on captured identity, freshness, integrity, and the caller-supplied monitoring policy. ELIGIBLE authorizes observation/delivery only, never financial action.
sourceEvidenceQualityNo
currentActionEligibilityNoCurrent eligibility of an immutable historical portfolio verdict. It never mutates the stored judgment being replayed.
sourceConfidenceSemanticsNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed10 schema fields changedv1.28.1
    • addedInput schema / properties / detail
      Added value: +{
      +  "default": "audit",
      +  "description": "Response depth. audit is the full-fidelity default; brief and standard are explicit compact projections.",
      +  "enum": [
      +    "brief",
      +    "standard",
      +    "audit"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / include_withheld
      Added value: +{
      +  "default": true,
      +  "description": "Include full withheld-row detail. Defaults true with audit; explicitly set false only for a compact projection.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / limit / description
      Previous value: -"Max assets to return (default 50, max 800)"New value: +"Optional maximum assets to return. Omitting it returns everything this snapshot holds — which is the full Binance USDT book plus a configured US watchlist, NOT every instrument Fahali monitors. Max 800."
    • addedInput schema / properties / limit / maximum
      Added value: +800
    • addedInput schema / properties / limit / minimum
      Added value: +1
    • changedInput schema / properties / limit / type
      Previous value: -"number"New value: +"integer"
    • addedInput schema / properties / since
      Added value: +{
      +  "description": "Optional lower timestamp bound for returned row collections.",
      +  "format": "date-time",
      +  "type": "string"
      +}
    • changedInput schema / properties / sort_by / description
      Previous value: -"Sort field (default symbol)"New value: +"Sort field (default symbol). `volume` ranks only rows whose source publishes a volume; rows without one follow in symbol order and are counted in `ordering.rowsUnranked` — their position is not a statement about turnover."
    • addedInput schema / properties / symbols
      Added value: +{
      +  "description": "Optional symbol projection, as a comma-separated string or array. Rows without instrument identity are not discarded.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": [
      +    "string",
      +    "array"
      +  ]
      +}
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "absence": {
      +      "description": "Why no actionable finding is present: measured_empty, user_empty, no_coverage, source_unverified, stale, withheld, source_error, auth_failure, or entitlement_required.",
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "agentBriefing": {
      +      "description": "Audit-only narrative projection. Present only when detail='audit'; compact responses do not duplicate structured data as prose.",
      +      "type": "string"
      +    },
      +    "asOf": {
      +      "format": "date-time",
      +      "type": "string"
      +    },
      +    "assets": {
      +      "items": {
      +        "properties": {
      +          "assetClass": {
      +            "type": "string"
      +          },
      +          "canonicalInstrumentId": {
      +            "description": "Stable underlying key (BTC, ETH, NVDA...) — quoted-pair variants of the same asset share one identity",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "changePct": {
      +            "type": "number"
      +          },
      +          "price": {
      +            "type": "number"
      +          },
      +          "symbol": {
      +            "type": "string"
      +          },
      +          "underlying": {
      +            "type": "string"
      +          },
      +          "underlyingId": {
      +            "description": "Alias of canonicalInstrumentId",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "venue": {
      +            "type": "string"
      +          },
      +          "volume": {
      +            "type": "number"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "auth": {
      +      "description": "Credential lifetime visible to the caller. OAuth secondsRemaining lets an autonomous agent refresh before a multi-call workflow is interrupted.",
      +      "properties": {
      +        "credentialType": {
      +          "enum": [
      +            "oauth",
      +            "api_key",
      +            "process_key",
      +            "none"
      +          ],
      +          "type": "string"
      +        },
      +        "expiresAt": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "refreshSupported": {
      +          "type": "boolean"
      +        },
      +        "secondsRemaining": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "claim": {
      +      "description": "Fahali dictionary claim (shared/fahaliDictionary.ts). Read `kind` FIRST: 'abstention' means no assertion was made and `reason` says why — never read an abstention as a neutral or zero result. `basis` says what the claim rests on. Absent or null means this response path does not yet emit a claim; treat that as unknown, not as agreement.",
      +      "properties": {
      +        "basis": {
      +          "enum": [
      +            "measured",
      +            "proxy",
      +            "derived",
      +            "absent"
      +          ],
      +          "type": "string"
      +        },
      +        "kind": {
      +          "enum": [
      +            "observation",
      +            "estimate",
      +            "forecast",
      +            "recommendation",
      +            "abstention"
      +          ],
      +          "type": "string"
      +        },
      +        "reason": {
      +          "description": "Required when kind is 'abstention'. Written for a reader, not a log.",
      +          "type": "string"
      +        }
      +      },
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "claimPolicy": {
      +      "description": "Typed constraints for safe use. Metadata, not a prompt or instruction channel.",
      +      "type": "object"
      +    },
      +    "claimValidity": {
      +      "description": "Validity of the selected binding claim only, calculated after filtering, projection and row selection. Sibling rows cannot determine it.",
      +      "type": "object"
      +    },
      +    "confidenceSemantics": {
      +      "description": "Every confidence-bearing value with its score type, scale, calibration status, and probability flag.",
      +      "items": {
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "conflicts": {
      +      "items": {
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "coverage": {
      +      "description": "What was searched (incl. on-demand equity resolution) and whether volume is comparable across bases. Read before ranking by volume.",
      +      "properties": {
      +        "fetchedOnDemand": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "freshness": {
      +          "type": "object"
      +        },
      +        "onDemandSkippedReason": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "requested": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "unavailable": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "universe": {
      +          "type": "object"
      +        },
      +        "volume": {
      +          "description": "rowsWithVolume/rowsWithoutVolume, measurement bases, comparableAcrossBases — false means a cross-basis volume ranking is meaningless.",
      +          "type": "object"
      +        }
      +      },
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "currentActionEligibility": {
      +      "description": "Current eligibility of an immutable historical portfolio verdict. It never mutates the stored judgment being replayed.",
      +      "type": "object"
      +    },
      +    "dataAsOf": {
      +      "format": "date-time",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "dataState": {
      +      "enum": [
      +        "measured",
      +        "partial",
      +        "no_data",
      +        "not_instrumented",
      +        "stale",
      +        "error"
      +      ],
      +      "type": "string"
      +    },
      +    "decision": {
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "decisionEligibility": {
      +      "description": "Fail-closed binding-authority policy. WITHHELD means source evidence remains available for audit while normalized direction, actionability and execution fields are revoked.",
      +      "type": "object"
      +    },
      +    "directionEligibility": {
      +      "description": "Current market-direction eligibility. Direction is authorized only by an exact, eligible producer stratum (canonical_verdict, canonical_symbol_verdict, committee_verdict) — read bindingAuthority to see which one bound. Widening WHO may bind did not weaken WHAT binding requires: the named producer must still hold a matching horizon/class/family record on a verified-only judged population, so an authority without a record still cannot bind.",
      +      "type": "object"
      +    },
      +    "evidenceQuality": {
      +      "type": "object"
      +    },
      +    "executionEligibility": {
      +      "description": "Fail-closed execution boundary. Portfolio monitoring tools always return WITHHELD with MONITOR_ONLY_NO_EXECUTION_AUTHORITY while Fahali has no capital path.",
      +      "type": "object"
      +    },
      +    "indices": {
      +      "items": {
      +        "properties": {
      +          "changePct": {
      +            "type": "number"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "price": {
      +            "type": "number"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "instruments": {
      +      "description": "Resolved or explicitly partial instrument identities. A missing venue carries an ambiguity warning.",
      +      "items": {
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "matchedTrackRecord": {
      +      "description": "A judged record only when engine, horizon, regime/instrument class, and claim family match this response. `state` is one of: `measured` (a stratum cleared the publishability gate — `stratum` carries engine, horizon tier, bar regime, recall, precision, base rate, base-rate lift, median lead hours, effective sample, warned events and the measurement date); `withheld` (the gate ran and refused — `reason` says why, in words); `unavailable` (the record could not be read at all — an infrastructure failure that says nothing about the record). It is ONE stratum selected by recall, never a platform-wide accuracy. Null means no exact record match; read recordMatchReason.",
      +      "properties": {
      +        "dataAsOf": {
      +          "description": "When the record was computed. A figure without this reads as current forever.",
      +          "type": "string"
      +        },
      +        "reason": {
      +          "description": "Present on `withheld` and `unavailable`: why there is no figure.",
      +          "type": "string"
      +        },
      +        "state": {
      +          "enum": [
      +            "measured",
      +            "withheld",
      +            "unavailable"
      +          ],
      +          "type": "string"
      +        },
      +        "stratum": {
      +          "description": "Present only on `measured`. Precision must never be quoted without recall.",
      +          "properties": {
      +            "barRegime": {
      +              "type": "string"
      +            },
      +            "baseRatePct": {
      +              "type": "number"
      +            },
      +            "claimFamily": {
      +              "description": "What this precision is ABOUT: `directional` (price moved the way the stratum said) or `magnitude` (a move exceeded the judge bar, carrying no direction). Never infer a direction from a `magnitude` row.",
      +              "type": "string"
      +            },
      +            "claimMeans": {
      +              "description": "The record endpoint's own sentence explaining the claim family. Quote it beside any precision figure.",
      +              "type": "string"
      +            },
      +            "effectiveSample": {
      +              "type": "number"
      +            },
      +            "engine": {
      +              "type": "string"
      +            },
      +            "horizonTier": {
      +              "type": "string"
      +            },
      +            "leadMedianHours": {
      +              "type": "number"
      +            },
      +            "measuredOn": {
      +              "type": "string"
      +            },
      +            "precisionPct": {
      +              "description": "Share of its warnings that held. Never quotable alone.",
      +              "type": "number"
      +            },
      +            "recallPct": {
      +              "description": "Share of qualifying events this stratum warned on — the half a buyer is exposed to.",
      +              "type": "number"
      +            },
      +            "warnedEvents": {
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        }
      +      },
      +      "required": [
      +        "state"
      +      ],
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "mcpStatus": {
      +      "description": "Normalized MCP result status. The endpoint's original status vocabulary remains in `status` and `sourceStatus`.",
      +      "enum": [
      +        "ok",
      +        "error"
      +      ],
      +      "type": "string"
      +    },
      +    "monitoringEligibility": {
      +      "description": "Current portfolio-monitoring validity based on captured identity, freshness, integrity, and the caller-supplied monitoring policy. ELIGIBLE authorizes observation/delivery only, never financial action.",
      +      "type": "object"
      +    },
      +    "nextActions": {
      +      "description": "Registry-validated follow-up calls. Missing tools, invalid arguments, unresolved placeholders, and disabled tools are omitted.",
      +      "items": {
      +        "properties": {
      +          "args": {
      +            "additionalProperties": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "requiredTier": {
      +            "type": "string"
      +          },
      +          "tool": {
      +            "type": "string"
      +          },
      +          "why": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "tool",
      +          "why"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "ordering": {
      +      "description": "How the rows were ordered and which rows the sort key could actually rank.",
      +      "properties": {
      +        "field": {
      +          "enum": [
      +            "symbol",
      +            "change",
      +            "volume"
      +          ],
      +          "type": "string"
      +        },
      +        "note": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "rowsRanked": {
      +          "type": "integer"
      +        },
      +        "rowsUnranked": {
      +          "type": "integer"
      +        }
      +      },
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "recordMatchReason": {
      +      "description": "Why matchedTrackRecord is present or null. A null record is never evidence of safety or engine failure.",
      +      "type": "string"
      +    },
      +    "requestId": {
      +      "type": "string"
      +    },
      +    "responseControl": {
      +      "type": "object"
      +    },
      +    "responseState": {
      +      "enum": [
      +        "OK_WITH_FINDINGS",
      +        "OK_NO_FINDINGS",
      +        "PARTIAL",
      +        "WITHHELD",
      +        "NO_COVERAGE",
      +        "ERROR"
      +      ],
      +      "type": "string"
      +    },
      +    "schemaVersion": {
      +      "enum": [
      +        "2.0"
      +      ],
      +      "type": "string"
      +    },
      +    "scope": {
      +      "type": "object"
      +    },
      +    "sourceConfidenceSemantics": {
      +      "type": [
      +        "array",
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "sourceDataState": {
      +      "description": "The upstream endpoint's exact data-state value before endpoint-aware classification.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "sourceDecision": {
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "sourceError": {
      +      "description": "The upstream endpoint's exact error text/code before normalization, when one was present.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "sourceEvidenceQuality": {
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "sourceScope": {
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "sourceStatus": {
      +      "description": "The upstream endpoint's exact status before the MCP envelope normalizes transport success/error.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "sources": {
      +      "description": "Per-source read states (alpaca/coingecko/binance), each measured/pending/not_instrumented — never inferred.",
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "status": {
      +      "description": "The endpoint's original status vocabulary (for example ok, partial, degraded, withheld, or no_alerts). Use mcpStatus for normalized transport success/error.",
      +      "type": "string"
      +    },
      +    "symbolCoverage": {
      +      "description": "Conservation ledger satisfying requested = returned + withheld + notReturned for requested-symbol calls.",
      +      "type": "object"
      +    },
      +    "timestamp": {
      +      "type": [
      +        "string",
      +        "integer",
      +        "number"
      +      ]
      +    },
      +    "total": {
      +      "type": "integer"
      +    }
      +  },
      +  "type": "object"
      +}
  2. Addedv1.5.3

TDQS

A4/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent, open-world, non-destructive, so the safety profile is covered; the description goes further by disclosing the exact data scope (full Binance USDT book vs. configured watchlist plus on-demand `symbols` fetching) and the semantics of missing rows. It also warns about a real analytical pitfall: volume rows are not comparable across bases. This is substantial context beyond structured fields.

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?

Three sentences, front-loaded with what the tool returns, then scope, then the caveat about coverage. Dense but every clause carries information; the long em-dash sentence is slightly heavy but not wasteful.

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?

With an output schema present, return-value details are not required, and the description covers scope, absence semantics and the volume-comparability caveat. Minor omissions such as default page size or the meaning of the `since` bound are handled by the schema, so an agent has everything needed to call it correctly.

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 would be 3, but the description adds real meaning beyond the schema: naming a symbol in `symbols` triggers an on-demand equity fetch, and non-requested equities are absent rather than quiet. That behavior is not derivable from the parameter descriptions alone.

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

Purpose4/5

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

States a specific verb+resource: live prices and changes, enriched with asset class, venue and identity. It also scopes the data precisely (full Binance USDT book for crypto, watchlist plus on-demand equities). It does not explicitly differentiate itself from siblings like get_market_verdict or get_market_regime, which keeps it below a 5.

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

Usage Guidelines3/5

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

Gives interpretive guidance (read `coverage` for what was searched; check `coverage.volume.comparableAcrossBases` before ranking by volume) and explains that an absent equity means it was not requested. However, it never states when to choose this snapshot over alternatives such as fahali_get_market_verdict or fahali_get_market_briefing, so tool-selection guidance is only implied.

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

Deploy Server

Other Tools