Skip to main content
Glama

optimize_portfolio

Build a risk-optimized portfolio from a non-empty list of tickers.

Scores `symbols` with the multi-signal scorer, LLM-curates, and risk-optimizes.

Rate-limited to 10/hour
per user server-side.

Asynchronous: returns {"task_id": ..., "status": "PENDING", "supported": [...],
"not_supported": [...]}. Poll `task_id` with `get_task_status` until SUCCESS.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
symbolsYesTickers to score and optimize, e.g. ["AAPL", "MSFT", "JNJ"].
deliveryNoResult channel: "dashboard" (returned via get_task_status) or "email".dashboard
risk_toleranceNoWhich risk profile is marked as recommended; omit for the optimizer default.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
statusYesPENDING on submission.
task_idYesPoll with get_task_status until SUCCESS.
supportedNoTickers that will be scored and optimized.
not_supportedNoTickers outside Flexreport coverage, ignored.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A3.7/5.0
Behavior4/5

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

Annotations are thin (readOnlyHint=false, destructiveHint=false), and the description carries the load well: it discloses a server-side rate limit of 10/hour per user and that execution is asynchronous with a PENDING task handle. It does not explain what happens to in-flight tasks or whether the submission itself is billable, but the behavioral picture is substantially better than the annotations alone.

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 no filler sentences; the rate limit and async contract are stated compactly. The hard line breaks mid-sentence ('Rate-limited to 10/hour / per user server-side') hurt readability slightly but nothing is wasted.

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?

Given an output schema exists, the description need not explain return fields, yet it usefully describes the async PENDING payload and the supported/not_supported lists up front. Combined with rate-limit and polling instructions, the only meaningful omission is any differentiation from `optimize_portfolio_default`.

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 description coverage is 100%, so all three parameters (symbols, delivery, risk_tolerance) are already documented in the schema, including enum choices and default. The description only echoes the scoring/optimization role of `symbols` and adds no syntax or constraint detail beyond minItems that the schema already states.

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 ('Build a risk-optimized portfolio') and enumerates the internal pipeline (multi-signal scoring, LLM curation, risk optimization). It distinguishes itself from most siblings, but never contrasts with the obvious sibling `optimize_portfolio_default`, which an agent could easily confuse it with.

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 real operational guidance for the async flow ('Poll `task_id` with `get_task_status` until SUCCESS') and implies the input requirement ('non-empty list of tickers'). It does not say when to pick this over `optimize_portfolio_default`, so sibling selection is left to inference.

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