Skip to main content
Glama

list_opportunities

Read-only

List opportunities by stage or status, newest first, with a cursor for the next page. Narrow with filter, for example filter: ['owner_actor_id:eq:act_...', 'expected_close_date:isNotNull'] and sort: '-expected_close_date'; get_crm_schema lists the fields each type accepts.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "list_opportunities"
  }
}

Input Schema

NameRequiredDescriptionDefault
orNo
sortNo
limitNoHow many to return. The page bound is published in the schema call, and asking for more is refused rather than quietly truncated.
cursorNoThe opaque marker from the previous page. Store it and hand it back; do not parse it. A cursor is only ever emitted when another row really exists, so a page you were given is never empty.
filterNo
statusNoOnly records with this status. Status is derived from the stage's kind rather than set separately, so a deal cannot be open and won at once.
stageIdNoOnly records in this stage. Stage ids come from the schema call, which lists every pipeline and its stages in order.
updatedSinceNoOnly rows changed after this instant. The incremental read: without it a service syncing a large workspace has to walk all of it every time.
lastInteractionBeforeNoOnly records whose most recent interaction is older than this, including those with none at all.

Output Schema

NameRequiredDescriptionDefault
itemsYesThis page of results, in the order you asked for.
nextCursorYesHand this back to get the next page, or null when there is no next page. Null is the end of the list and an empty `items` is not: a cursor is only emitted when another row really exists.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changed
    • addedInput schema / properties / cursor / description
      Added value: +"The opaque marker from the previous page. Store it and hand it back; do not parse it. A cursor is only ever emitted when another row really exists, so a page you were given is never empty."
    • addedInput schema / properties / lastInteractionBefore / description
      Added value: +"Only records whose most recent interaction is older than this, including those with none at all."
    • addedInput schema / properties / limit / description
      Added value: +"How many to return. The page bound is published in the schema call, and asking for more is refused rather than quietly truncated."
    • addedInput schema / properties / stageId / description
      Added value: +"Only records in this stage. Stage ids come from the schema call, which lists every pipeline and its stages in order."
    • addedInput schema / properties / status / description
      Added value: +"Only records with this status. Status is derived from the stage's kind rather than set separately, so a deal cannot be open and won at once."
    • addedInput schema / properties / updatedSince / description
      Added value: +"Only rows changed after this instant. The incremental read: without it a service syncing a large workspace has to walk all of it every time."
    • addedOutput schema / properties / items / description
      Added value: +"This page of results, in the order you asked for."
    • addedOutput schema / properties / nextCursor / description
      Added value: +"Hand this back to get the next page, or null when there is no next page. Null is the end of the list and an empty `items` is not: a cursor is only emitted when another row really exists."
  2. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already mark readOnlyHint=true and destructiveHint=false, and the description adds meaningful behavior beyond that: default ordering is 'newest first', pagination uses a cursor, and filtering/sorting syntax is demonstrated. No contradiction with annotations.

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

Conciseness5/5

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

Three sentences with no filler: the first states the core behavior, the second provides a concrete usage example, and the third points to the schema helper. Information is front-loaded and each sentence earns its place.

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 read-only list tool with a rich input schema and an output schema, the description covers the essential invocation knowledge: pagination, default order, filtering, sorting, and field discovery. The main gap is the undocumented 'or' parameter and the lack of direct guidance on when to prefer this over search_crm, but the core calling pattern is well supported.

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 description coverage is 67%, so the description partially compensates by giving concrete filter syntax ('owner_actor_id:eq:act_...', 'expected_close_date:isNotNull') and a sort example ('-expected_close_date'). It also points to get_crm_schema for legal fields. The 'or' parameter remains undocumented in both schema and description, which prevents a 5.

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?

The description uses a specific verb ('List'), a clear resource ('opportunities'), and adds qualifying details: by stage or status, newest first, with cursor pagination. This cleanly separates it from mutating siblings like create_opportunity/update_opportunity and from other list tools like list_contacts.

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

Usage Guidelines4/5

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

The description gives clear context for when the tool applies: listing opportunities by stage/status and narrowing with filter/sort. It also routes the agent to get_crm_schema for field discovery. It does not explicitly name alternatives like search_crm or list_stale_records, but the intended use is clear enough.

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.