Skip to main content
Glama

Find an instrument

find_assets
Read-onlyIdempotent

Resolve instrument names, tickers or identifiers to the asset ids the builders take.

Each entry is one instrument, given by any codes known for it: ``name``, ``ticker``
in any common notation ('SHB B SS Equity', 'SHB-B.ST', 'STO:SHB-B', 'BRK.B'),
``isin``, ``cusip``, ``sedol``, ``figi``, or free text in ``query``, optionally with
the exchange or currency of the line meant. Entries may carry different codes. Each
code is resolved on its own and the answers are checked against each other. Up to 50
entries per call. Asset ids are dense, so an unverified id is usually a different,
real instrument.

Coverage differs by code. Tickers and names reach every traded line, and ISINs about
three in four. FIGIs are held for about one in five US listings and most ASX
listings, and almost none elsewhere. CUSIPs are held for about one in ten US
listings, and are also matched through their ISIN. SEDOLs are matched only through
UK and Irish ISINs. A FIGI, CUSIP or SEDOL on its own therefore often finds nothing;
with a ticker or ISIN in the same entry, that entry still resolves.

Each result has a status. 'exact': the query names one traded line. 'resolved': one
company or fund with several lines, of which one was chosen, in order: a line in the
client's currency that trades, an ordinary share over a receipt, the primary listing,
the most traded line; 'why' names the step. 'ambiguous': different instruments match
about equally well, the first being the most likely. 'not found'. Alternatives are the
same company's other lines (exchange, currency, share class, receipt) and other
instruments that also match, each with its id.

Only lines priced within the last two weeks match, so every id can be built with.
``ensure_price=false`` also matches delisted lines, marked 'no recent price', to look
up a company that no longer trades; a priced line is still preferred within a company.

Names match whole words and word starts, not descriptions ("Novo" matches, "the
Danish diabetes one" does not). Strategies and accounts are found with
``find_portfolios``.

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": {
      "queries": "<queries>"
    },
    "name": "find_assets"
  }
}

Input Schema

NameRequiredDescriptionDefault
kindsNo
queriesYesEach entry a name, ticker or ISIN as plain text ('Volvo B'), or an object with separate codes for the same instrument.
ensure_priceNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark the call read-only, idempotent and non-destructive, and the description adds substantial behaviour beyond that: per-code coverage rates, mutual verification of codes within an entry, the 50-entry cap, the two-week price-recency filter, the 'exact'/'resolved'/'ambiguous'/'not found' status semantics with the exact tie-break ordering, and a warning that asset ids are dense so unverified ids usually point at a different real instrument.

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-loaded with the core purpose and the entry model, then layered coverage, then status semantics, then the price filter — a logical order with no filler sentences. It is long for a tool description (five dense paragraphs), and the coverage paragraph could be tightened, but nearly every sentence conveys operational detail an agent would otherwise get wrong.

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?

For a high-complexity resolution tool with 50-entry batching, mixed-shape query objects and no output schema, the description explains return statuses, alternative listings, and failure modes thoroughly. The one real omission is the 'kinds' filter, which affects result precision and is left entirely to the schema's enum.

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 only 33%, so the description has to carry weight, and it largely does: it enumerates all code fields, spells out accepted ticker notations ('SHB B SS Equity', 'SHB-B.ST', 'STO:SHB-B', 'BRK.B'), explains the exchange/currency hints as line disambiguation, and fully explains ensure_price's flip behaviour. The gap is the top-level 'kinds' filter, which is never mentioned in the description, leaving that parameter documented by enum alone.

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 and resource ('resolve instrument names, tickers or identifiers to the asset ids the builders take') and names the output artifact explicitly, which separates it from sibling describers like describe_asset/describe_assets. It also routes the reader elsewhere for a different resource type ('Strategies and accounts are found with find_portfolios'), so the boundary is unambiguous.

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?

Gives explicit when-to-use rules (whole-word name matching, 'Novo' matches but 'the Danish diabetes one' does not), an explicit alternative for a neighbouring task (find_portfolios), and an explicit conditional mode (ensure_price=false for delisted lines, with priced lines still preferred). Coverage caveats tell the agent when a code alone will fail and how to combine codes to succeed.

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.

Resources