Skip to main content
Glama

AstraEye Labs

Price a research run

quote_research_run
Destructive

Prices one run of a saved project (projectId from list_research_projects or create_research_project) exactly as it stands, without starting it and without changing the project. Returns quoteId, priceCredits, what it covers, expiresAt, the member's dailyLimit and whether it is startable (null when the limit could not be read). A newer price can replace an earlier unstarted one (quote_replaced), so one run never starts twice; a price lapses at expiresAt.

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": {
      "projectId": "<projectId>"
    },
    "name": "quote_research_run"
  }
}

Input Schema

NameRequiredDescriptionDefault
projectIdYesThe saved project to price as it is.
clientRequestIdNoOptional UUID you generate for this request. Retrying with the same id never does it twice.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed9 schema fields changed
    • removedInput schema / properties / analysisIds
      Removed value: -{
      -  "description": "The analyses to run, by id (or a templateId instead). From list_analyses.",
      -  "items": {
      -    "pattern": "^[a-z0-9_]{1,80}$",
      -    "type": "string"
      -  },
      -  "maxItems": 40,
      -  "minItems": 1,
      -  "type": [
      -    "array",
      -    "null"
      -  ]
      -}
    • removedInput schema / properties / assetIds
      Removed value: -{
      -  "description": "With covers chosen_assets: the assets, by assetId. From find_assets or list_watchlist; at most 25.",
      -  "items": {
      -    "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      -    "type": "string"
      -  },
      -  "maxItems": 25,
      -  "minItems": 1,
      -  "type": [
      -    "array",
      -    "null"
      -  ]
      -}
    • removedInput schema / properties / covers
      Removed value: -{
      -  "description": "What it covers: chosen_assets (assetIds), the watchlist, holdings_or_watchlist, or global_market (marketSliceIds, skipsAssetClass).",
      -  "enum": [
      -    "chosen_assets",
      -    "watchlist",
      -    "holdings_or_watchlist",
      -    "global_market",
      -    null
      -  ],
      -  "type": [
      -    "string",
      -    "null"
      -  ]
      -}
    • removedInput schema / properties / marketSliceIds
      Removed value: -{
      -  "description": "With covers global_market: at most one slice id per asset class.",
      -  "items": {
      -    "pattern": "^[a-z0-9_]{1,64}$",
      -    "type": "string"
      -  },
      -  "maxItems": 2,
      -  "minItems": 1,
      -  "type": [
      -    "array",
      -    "null"
      -  ]
      -}
    • changedInput schema / properties / projectId / description
      Previous value: -"A saved project to price as it is."New value: +"The saved project to price as it is."
    • changedInput schema / properties / projectId / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • removedInput schema / properties / skipsAssetClass
      Removed value: -{
      -  "description": "With covers global_market: the class left out (crypto for Stocks only).",
      -  "enum": [
      -    "crypto",
      -    "equity",
      -    null
      -  ],
      -  "type": [
      -    "string",
      -    "null"
      -  ]
      -}
    • removedInput schema / properties / templateId
      Removed value: -{
      -  "description": "A template id from list_templates (or analysisIds instead).",
      -  "pattern": "^[A-Za-z0-9_-]{1,80}$",
      -  "type": [
      -    "string",
      -    "null"
      -  ]
      -}
    • addedInput schema / required
      Added value: +[
      +  "projectId"
      +]
  2. Added

TDQS

A4.2/5.0
Behavior4/5

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

Explains the non-obvious side effect that justifies destructiveHint=true and idempotentHint=false: a newer price replaces an earlier unstarted one (quote_replaced) so a run never starts twice, and quotes lapse at expiresAt. It also flags the null case for 'startable' when the limit is unreadable. What's missing is whether quoting itself consumes credits or requires any auth/limit prerequisites beyond the daily limit.

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 the core action and the 'does not start / does not change' constraints. The second sentence is a dense list of return fields that could be trimmed since the first two clauses carry the decision-relevant information, but nothing is redundant.

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, the description still enumerates what comes back (quoteId, priceCredits, coverage, expiresAt, dailyLimit, startable) including the null condition, and covers expiry and replacement semantics. An agent has everything needed to call this and interpret the result.

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 coverage is 100%, so the schema already documents both parameters, and the description only adds provenance for projectId. clientRequestId is left entirely to the schema despite the retry semantics being worth reinforcing at the description level. Baseline 3 applies.

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?

Specific verb+resource: "Prices one run of a saved project… exactly as it stands, without starting it and without changing the project." It preemptively separates itself from start_research_run by stating it does not run anything, so an agent can distinguish the two without consulting schemas.

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?

States the precondition clearly (projectId must come from list_research_projects or create_research_project) and implies this is a preflight before starting. It never names start_research_run as the follow-up alternative nor gives an explicit 'do not use when…' rule, but the context for calling is unambiguous.

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