quantra-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@quantra-mcpprice a 10Y USD SOFR swap using my pasted market data"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
quantra-mcp
An MCP server that is a client of the Quantra pricing engine's JSON API (QuantLib-based, open source): it builds correct requests from trade terms and named market-convention presets, forwards them, and returns the engine's numbers plus the exact request that was sent. It computes nothing itself; every number comes from the engine.
agent ──(MCP: stdio / streamable HTTP)──▶ quantra-mcp ──(HTTP/JSON)──▶ Quantra engineUse the public server
Hosted instance, no account: https://mcp.quantra.io/mcp (prices on the same
engine as api.quantra.io; open, rate-limited, nothing stored).
claude.ai: Settings → Connectors → Add custom connector → URL
https://mcp.quantra.io/mcp → ask Claude to price a trade.
Claude Code:
claude mcp add --transport http quantra https://mcp.quantra.io/mcpClaude Desktop: add
{"mcpServers": {"quantra": {"url": "https://mcp.quantra.io/mcp"}}}toclaude_desktop_config.jsonCursor: add the same
mcpServersentry to.cursor/mcp.jsonor~/.cursor/mcp.json
Per-client setup, the stdio form for a local engine, and project instructions for business users are in docs/clients.md.
Related MCP server: abacus
Run it yourself
Run an engine (one line, no account):
docker run -d --name quantra-engine -p 8080:8080 ghcr.io/joseprupi/quantra-server:0.7.0Run the server against it, from PyPI or from a clone:
QUANTRA_ENGINE_URL=http://localhost:8080 uvx quantra-mcp # stdio
git clone https://github.com/joseprupi/quantra-mcp && cd quantra-mcp && uv sync && uv run quantra-mcp --http --port 8765Or run engine and server together with Docker Compose (only port 8765 is published):
curl -O https://raw.githubusercontent.com/joseprupi/quantra-mcp/main/docker-compose.example.yml
docker compose -f docker-compose.example.yml up -d
curl http://localhost:8765/readyz
claude mcp add --transport http quantra http://localhost:8765/mcpEnv | Default | Meaning |
|
| Engine JSON gateway (self-hosted or |
|
| Per-request engine timeout in seconds. |
|
| Simultaneous engine calls (analytics fan-outs; |
|
|
|
| (empty) |
|
| (empty) |
|
The full table, hosted-mode hardening, security and limits: docs/configuration.md.
What it does
One tool per engine capability. Convenience tools turn trade terms and a preset into a complete engine request (dates the server cannot compute are resolved by the engine's calendar endpoints); raw passthrough takes any request body, validated against the vendored OpenAPI spec first. 47 tools:
Discovery and calendars (8):
quantra_meta,quantra_health,list_endpoints,engine_schema,list_enums,calendar_holidays,calendar_business_days,calendar_advanceRaw passthrough (1):
engine_requestfor any of the 24 POST endpointsCurves and presets (8):
list_presets,get_preset,build_curve,build_value_curve,curve_from_pasted_table,build_query,bootstrap_curve,bootstrap_inflation_curvePricing (17):
price_*for vanilla and OIS swaps, fixed / floating / zero-coupon / callable bonds, FRA, cap/floor, swaption, CDS, equity option, ZC and YoY inflation swaps and YoY cap/floor (14), plus swaption vol / model calibration and vol-surface sampling (3)Analytics by composition (4):
swap_dv01,key_rate_ladder,scenario,fair_rate, all finite differences of engine NPVsReconciliation (3):
explain_method(cited engine methodology),compare_results,reprice_withSession scratch (4):
session_put,session_get,session_list,session_deleteExamples (2):
list_examples,get_exampleover the engine's 222 vendored example requestsResources (docs, schemas, enums, examples, presets, pin, methodology) and 6 prompts
Catalog with every argument: docs/tools.md.
Rules
Market data comes from the user. The server has no market-data source and no vendor data; licensed curves and vols are never available server-side. Every tool that takes market numbers requires a
market_data_sourcedeclaration (user_pasted,user_file,engine_example,session); there is no value for invented data. The assistant will never type, estimate, recall or invent market data for a trade: until the user has pasted or dictated it, it says what is needed, in paste-able form, and stops.Every result echoes the exact
requestsent and the engine'sresponseverbatim, so any number can be replayed withcurlagainst the same engine. Engine errors pass through unchanged (400request wrong,422unpriceable).Every convention applied is listed in
noteswith its source (a preset field, an engine fixture, or "market standard, not from an in-repo source").The shipped examples are request-shape references only; an example's market data is never reused for a user's trade.
Documentation
docs/clients.md: install and connect each client; project instructions for business users
docs/configuration.md: environment variables, hosted-mode settings, security and limits
docs/tools.md: tools, result shape, analytics, reconciliation, resources, prompts, examples catalog
docs/presets.md: the market-convention presets and their provenance
docs/walkthroughs.md: price a swap in three calls; build a curve from a strip
docs/development.md: gate, live checks, QuantLib parity, engine pin, layout
docs/RELEASING.md: how a release is cut
User guide on the site: https://quantra.io/docs/app/claude
Development
uv run pytest && uv run ruff check . && uv run ruff format --check . && uv run mypy src # the gate
QUANTRA_ENGINE_URL=http://localhost:18087 uv run python scripts/live_check.py # every tool vs a real engineThe engine contract is pinned to the tag in src/quantra_mcp/schema/PIN
(v0.7.0); any engine >= 0.7.0 that keeps the contract works. Bump it with
scripts/pin_engine.py, never by hand (docs/development.md).
License
BSD-3-Clause. See LICENSE.
Available Tools
47 toolsbootstrap_curveA
Bootstrap curves on the engine and sample them (POST /bootstrap-curves).
Args:
curves: items are TermStructure objects, build_curve results
({curve, indices}) or {"session": "<name>"} references
to a stored curve or market.
as_of: YYYY-MM-DD valuation date (pricing.as_of_date).
queries: CurveQuerySpec objects or build_query results.
indices: extra IndexDef objects or {"session": name} refs;
indices carried by build_curve results are added automatically.
Identical duplicates are sent once; conflicting ids are rejected.
calendar_overrides: per-request holiday corrections (engine >= 0.7.0).
request_id: optional X-Request-Id.
The echoed request is the fully RESOLVED body. summary lists per
curve {id, pillars, first_grid_date, last_grid_date, measures}; the
sampled values are in response.results[].series.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | Yes | ||
| curves | Yes | ||
| indices | No | ||
| queries | Yes | ||
| request_id | No | ||
| calendar_overrides | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose non-obvious behavior: the echoed request is fully RESOLVED, indices from build_curve results are added automatically, identical duplicates are collapsed, and conflicting ids are rejected. It omits side-effect/persistence information (whether bootstrapped curves are stored on the engine) and auth/error behavior, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single-line purpose is front-loaded, followed by a scannable Args block and a short response note, so an agent can extract the essentials quickly. Density is high and RST-style quoting adds minor noise, but no sentence is filler given the 0% schema coverage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite an output schema existing (which would excuse omitting return values), the description still explains the resolved request echo, the per-curve summary fields, and where sampled values live, closing the loop for the caller. Gaps remain around persistence, error semantics, and engine-version gating beyond the one calendar_overrides note, but for a six-parameter nested-reference tool this is close to complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the Args block is doing all the work, and it documents every one of the six parameters with types, formats (YYYY-MM-DD for as_of), accepted union forms, and cross-tool provenance references (TermStructure, build_curve results, CurveQuerySpec, build_query results). It also adds semantics the schema cannot express, such as automatic index inclusion and duplicate/conflict handling.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb+resource pair ('Bootstrap curves on the engine and sample them') and pins the HTTP endpoint, so the agent knows this both constructs and evaluates curves. It implicitly separates from build_curve / build_value_curve by accepting their outputs as inputs, but never explicitly names a sibling it is not, so it falls short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is conveyed indirectly through the accepted input types: curves may be TermStructure objects, build_curve results, or session references, which tells the agent this is the sampling step downstream of build_curve/build_query. There is no explicit when-to-use vs when-not, and no routing language against bootstrap_inflation_curve or sample_vol_surface, so guidance remains implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bootstrap_inflation_curveB
POST /bootstrap-inflation-curves with a raw request body (validated first).
Args:
body: the engine's BootstrapInflationCurvesRequest (see
engine_schema('/bootstrap-inflation-curves')); no preset
support yet, the body is sent as given once it validates.
request_id: optional X-Request-Id.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| request_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that the body is validated first, sent as given once validated, and that preset support is absent, but it omits auth requirements, side effects, error behavior, and response handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the endpoint and validation behavior, then lists Args efficiently. It is appropriately sized with little waste, though the docstring formatting is slightly mechanical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. The description covers parameters and validation, but for a raw engine endpoint it does not explain when to use this over close siblings such as engine_request or bootstrap_curve, leaving a gap in selection context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It documents both parameters: body is the raw engine BootstrapInflationCurvesRequest (with a pointer to engine_schema for its shape) and request_id maps to the optional X-Request-Id header.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: POST /bootstrap-inflation-curves with a raw body. It is clear what the tool does, but it does not differentiate from siblings like bootstrap_curve or engine_request, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit when-to-use guidance or alternatives. It only notes that presets are not yet supported and points to engine_schema for the body schema, leaving the agent to infer when this tool is preferable to other curve-building or generic request tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_curveA
Turn a quote strip into an engine curve spec (no engine call).
Args:
id: curve id to register, e.g. USD_SOFR_OIS.
preset: a preset id from list_presets; supplies the index
definition and every helper convention.
quotes: [{type: deposit|fra|future|swap|ois, tenor: "6M", rate: 0.052}, ...]
(fra: months_to_start/months_to_end; future:
future_start_date + price or rate). Sorted by
maturity; a duplicate (type, tenor) is rejected locally.
reference_date: YYYY-MM-DD curve date (normally the pricing as_of).
market_data_source: where the market numbers in this call come from. user_pasted
(the user pasted or typed the numbers in this conversation), user_file (the
user attached a file/screenshot the numbers were read from), engine_example
(an engine example's pricing block, only when the user explicitly asked to run
an example), session (a market previously stored in this session, which
itself came from one of the above). There is no value for estimated, recalled or
placeholder data. If you would have to invent numbers, do not call this tool:
ask the user for the data.
trait: override the preset's bootstrap trait (Discount,
ZeroRate, FwdRate).
interpolator: override the preset's interpolator.
day_counter: override the preset's curve day counter.
Returns {ok, curve, indices, preset, notes}: curve is the
TermStructure and indices the IndexDef list to pass to
bootstrap_curve (or to session_put); notes lists every
default applied with its source. Nothing is priced here.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| trait | No | ||
| preset | Yes | ||
| quotes | Yes | ||
| day_counter | No | ||
| interpolator | No | ||
| reference_date | Yes | ||
| market_data_source | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it is a pure-local builder ('nothing is priced here', 'no engine call'), rejects duplicate (type, tenor) strips locally, and returns notes listing every default applied with its source. The market_data_source enumeration is further constrained in prose to exclude estimated/recalled/placeholder data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then an Args block that maps to the schema; nothing is filler. It is long, but the density is warranted for an 8-param builder with a polymorphic quote list, so only marginally verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a preset-driven curve builder with defaults supplied by preset and an output schema present, the description covers the local-only nature, validation, default provenance, and where the result flows next. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% at the top level, but the description documents every one of the 8 parameters in prose, including the per-type quote shapes (fra months_to_start/end, future price vs rate), the accepted tenor forms, and the exact semantics of each market_data_source enum value. This fully compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Declares a specific verb+resource ('Turn a quote strip into an engine curve spec') and immediately scopes it with '(no engine call)', which is exactly what distinguishes it from the sibling bootstrap_curve. An agent can pick it apart from bootstrap_curve, curve_from_pasted_table and build_value_curve without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when not to call ('If you would have to invent numbers, do not call this tool: ask the user for the data') and routes the output forward explicitly: indices to pass to bootstrap_curve or session_put. That is an explicit when/when-not/alternative set rather than implied usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_queryA
A CurveQuerySpec for bootstrap_curve (no engine call).
Args:
curve_id: the curve to sample.
measures: any of DF, ZERO, FWD.
tenors: TenorGrid, e.g. ["1M", "6M", "1Y", "5Y", "10Y"]; needs
calendar + business_day_convention to roll each tenor.
range_grid: RangeGrid alternative {end_date, step_number, step_time_unit, start_date?, business_days_only?, calendar?, ...}.
zero: options for ZERO (default: continuous, annual, curve day counter).
fwd: required when FWD is requested (forward_type Period + tenor,
or Instantaneous + eps; compounding; frequency).
Returns {ok, query, notes}.
| Name | Required | Description | Default |
|---|---|---|---|
| fwd | No | ||
| zero | No | ||
| tenors | No | ||
| calendar | No | ||
| curve_id | Yes | ||
| measures | Yes | ||
| range_grid | No | ||
| business_day_convention | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the safety burden, and it does disclose the key behavioral fact that no engine call is made and that it returns {ok, query, notes}. It does not state whether the result persists, is executed later, or has any side effects, which leaves a gap for a builder that feeds a downstream operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the one-line purpose, then an Args block whose entries earn their place, closing with the return shape. The style is a dense docstring with clause-per-line, which is appropriate and wastes little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 8-parameter query builder, the description covers the parameters well and notes the return tuple, and an output schema exists so return details need not be expounded. The remaining gap is operational context (how the produced query is consumed and any constraints on it), which the sibling noise makes harder to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does substantially: it defines curve_id, the DF/ZERO/FWD measures, the tenors grid plus the calendar/business_day_convention requirement to roll tenors, the range_grid alternative, and the zero/fwd option blocks including the Period vs Instantaneous forward_type rule. Most of the 8 parameters gain meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line 'A CurveQuerySpec for bootstrap_curve (no engine call)' names the artifact produced and the parent operation, and the '(no engine call)' clause distinguishes it from the bootstrap_curve sibling. It is precise, though the jargon 'CurveQuerySpec' assumes domain familiarity rather than describing in plain terms.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '(no engine call)' note implies this is a construction step separate from bootstrap_curve, which is useful context, but the description never states explicitly when to reach for build_query versus calling bootstrap_curve or the other build_* siblings. Usage is implied, not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_value_curveA
An interpolated curve from explicit values (no engine call).
Args:
id: curve id.
kind: zero (InterpolatedZero), discount (InterpolatedDiscount:
first point must be the reference date with value 1.0) or
forward (InterpolatedFwd: instantaneous continuously-compounded
forwards; Linear/BackwardFlat/ForwardFlat only).
points: [{date: "2026-01-15", value: 0.96}, {tenor: "2Y", value: ...}]
in order; the engine anchors the curve at the first point.
reference_date: YYYY-MM-DD.
market_data_source: where the market numbers in this call come from. user_pasted
(the user pasted or typed the numbers in this conversation), user_file (the
user attached a file/screenshot the numbers were read from), engine_example
(an engine example's pricing block, only when the user explicitly asked to run
an example), session (a market previously stored in this session, which
itself came from one of the above). There is no value for estimated, recalled or
placeholder data. If you would have to invent numbers, do not call this tool:
ask the user for the data.
preset: take the curve day counter and point calendar/convention
from this preset; or give conventions explicitly.
conventions: {day_counter, calendar, business_day_convention}.
compounding, frequency: zero points only (default Continuous /
Annual; all points share them).
interpolator: default Linear (zero, forward) or LogLinear (discount).
Returns {ok, curve, indices: [], preset, notes}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| kind | Yes | ||
| points | Yes | ||
| preset | No | ||
| frequency | No | ||
| compounding | No | ||
| conventions | No | ||
| interpolator | No | ||
| reference_date | Yes | ||
| market_data_source | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers substantive behavior: it will not hit the engine, the curve is anchored at the first point, discount requires the first point to be the reference date with value 1.0, forward supports only Linear/BackwardFlat/ForwardFlat, and compounding/frequency apply only to zero points. It omits the mutation/side-effect profile, e.g. whether the curve is registered under id in the session or whether an id collision overwrites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in one sentence, then a tight Args block where nearly every line adds unique semantics. The market_data_source entry is long but each of its four values changes agent behavior, so it earns its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, enum-heavy builder with no annotations, the description supplies conventions, defaults, cross-parameter constraints and a return shape. The remaining gap is statefulness — whether id registers the curve in the session and how duplicates are handled — which matters for a tool whose output includes a curve handle.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Top-level schema coverage is 0% (only titles, no per-property descriptions), so the description must compensate and does: it documents id, kind semantics per enum value, point syntax with a concrete example, reference_date format, the preset-vs-conventions choice, compounding/frequency scope and defaults, and interpolator defaults per kind. This is richer than the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a concrete verb and resource ('interpolated curve from explicit values') and adds the discriminating clause 'no engine call', which separates it from engine-driven builders. It never names its closest siblings (build_curve, bootstrap_curve, curve_from_pasted_table), so the agent must infer the boundary itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear when-not rule ('If you would have to invent numbers, do not call this tool: ask the user for the data') and defines the four market_data_source situations that license a call. What it lacks is routing between siblings — nothing says when to prefer this over build_curve or curve_from_pasted_table.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calendar_advanceA
Advance a date by a tenor on a QuantLib calendar (POST /calendar-advance).
Args:
calendar: engine Calendar enum value.
date: YYYY-MM-DD start date.
tenor_number: number of units; negative shifts backwards.
tenor_unit: engine TimeUnit (Days, Weeks, Months, Years, ...).
convention: engine BusinessDayConvention (Following,
ModifiedFollowing, Preceding, Unadjusted, ...).
end_of_month: apply the end-of-month rule (default False).
calendar_overrides: optional per-request holiday corrections.
summary = {input_date, advanced_date} taken from the engine's response.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| calendar | Yes | ||
| convention | Yes | ||
| tenor_unit | Yes | ||
| end_of_month | No | ||
| tenor_number | Yes | ||
| calendar_overrides | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully states that negative tenor_number shifts backwards, that end_of_month defaults to False, that calendar_overrides are per-request, and it gives the return shape. However, it does not cover error behavior, side effects, or whether the operation is purely computational.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is well-structured, with a concise purpose line followed by an Args list. It is slightly redundant in restating the return summary even though an output schema exists, but the structure is front-loaded and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter calculation endpoint with no annotations and an existing output schema, the description is largely complete: it documents every parameter and confirms the return object. The main gap is the absence of usage guidance relative to sibling calendar tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: every top-level parameter is described with format, meaning, and defaults. Notable details include YYYY-MM-DD date format, negative tenor semantics, enum references for calendar/tenor_unit/convention, and the default for end_of_month.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Advance a date by a tenor on a QuantLib calendar'. This clearly distinguishes it from sibling tools such as calendar_holidays or calendar_business_days, and the HTTP endpoint reinforces its narrow scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool does but gives no explicit guidance on when to use it versus alternatives. There is no mention of prerequisites, when-not-to-use, or sibling tools like calendar_business_days.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calendar_business_daysA
Business days of a QuantLib calendar between two dates (POST /calendar-business-days).
Args:
calendar: engine Calendar enum value.
start_date: YYYY-MM-DD.
end_date: YYYY-MM-DD.
include_start: whether start_date itself may be listed (default True).
include_end: whether end_date itself may be listed (default True).
calendar_overrides: optional per-request holiday corrections.
summary = {count, first, last} taken from the engine's response.
| Name | Required | Description | Default |
|---|---|---|---|
| calendar | Yes | ||
| end_date | Yes | ||
| start_date | Yes | ||
| include_end | No | ||
| include_start | No | ||
| calendar_overrides | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. It does disclose that calendar_overrides are 'per-request' corrections and gives the returned summary shape ({count, first, last}), but it never states that this is a side-effect-free computation despite the POST-style endpoint, nor says anything about permissions or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose comes first in a single sentence, followed by a tight per-parameter block plus the output summary. No filler sentences; every line carries information an agent would otherwise have to guess.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter computation tool with an output schema and no annotations, the description covers the arguments, formats and return summary adequately. The remaining gap is routing guidance (when to use this vs. the other calendar tools), which is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: it documents all six parameters, supplies the YYYY-MM-DD formats the schema omits, and clarifies include_start/include_end semantics and their True defaults. It is only slightly thin on calendar_overrides, which the schema's $defs partly covers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: computing business days of a named QuantLib calendar between two dates, and even cites the underlying endpoint. It is distinguishable from siblings like calendar_holidays and calendar_advance by the 'between two dates' scope, though it never names those alternatives to sharpen the contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of when to prefer this over calendar_holidays or calendar_advance. Usage is only implied by the tool name and the argument list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calendar_holidaysA
Holidays of a QuantLib calendar between two dates (POST /calendar-holidays).
Args:
calendar: engine Calendar enum value, e.g. TARGET, UnitedStates.
start_date: YYYY-MM-DD (inclusive).
end_date: YYYY-MM-DD (inclusive).
include_weekends: also list Saturdays/Sundays (default False).
calendar_overrides: optional per-request holiday corrections
(added_holidays / removed_holidays per calendar).
summary = {count, first, last} taken from the engine's response.
| Name | Required | Description | Default |
|---|---|---|---|
| calendar | Yes | ||
| end_date | Yes | ||
| start_date | Yes | ||
| include_weekends | No | ||
| calendar_overrides | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does explain the include_weekends default and the calendar_overrides scoping ('applies to every use of that calendar while the request is processed and is discarded afterwards'), which is genuinely useful context. But it does not say whether this is a read-only operation, any auth or rate-limit behavior, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line purpose, then an Args block, then a brief note on summary. Efficient and well structured, though the trailing 'summary = {count, first, last} taken from the engine's response' sentence is low-value since an output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter calendar query with an output schema and no annotations, the description covers the purpose, all five parameters with formats and defaults, and the transient nature of overrides. The remaining gap is the absence of any when-to-use routing against the two sibling calendar tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it documents calendar (with example enum values TARGET, UnitedStates), start_date/end_date as inclusive YYYY-MM-DD, include_weekends default False, and calendar_overrides structure with added/removed_holidays semantics including 'weekends are rejected'. Only the nested CalendarOverride contract is partially duplicated from $defs; the core five parameters get real added meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: listing holidays of a QuantLib calendar between two dates, and even names the underlying endpoint POST /calendar-holidays. An agent can distinguish this from sibling calendar_business_days or calendar_advance without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the resource (holidays between dates) and the endpoint hint, but the description never states when to prefer this over calendar_business_days or calendar_advance, nor prerequisites. Minimum viable guidance only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calibrate_swaption_modelC
Calibrate a Hull-White model to swaption vols (POST /calibrate-swaption-model)
from a raw CalibrateSwaptionModelRequest body (pricing with a
SwaptionModelSpec in Calibrate mode and its hw_calibration block,
model_id). Validated, then forwarded; see the hwcal_* examples.
summary: hw_a, hw_sigma, rmse, num_helpers.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| request_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It discloses only that the body is 'validated, then forwarded', which is a minor processing detail, but says nothing about permissions, cost, rate limits, or side effects of a calibration job.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The sentence is front-loaded with the action and endpoint, which is good. However, it is dense with backtick-laden jargon, and the trailing summary-field list (hw_a, hw_sigma, rmse, num_helpers) is largely redundant given an output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the return-value listing is unnecessary duplication. For a nested 0%-covered body, the description gives a reasonable structural sketch and points at examples, but an agent still lacks the concrete shape of the required body to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% on a nested body object, so the description has to compensate. It partially does by naming the body contents ('pricing' with a SwaptionModelSpec in Calibrate mode, its 'hw_calibration' block, and 'model_id'), but it leaves request_id undocumented and the construction details deferred to external examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: calibrating a Hull-White model to swaption vols, and pins it to the POST /calibrate-swaption-model endpoint. It is mostly distinguishable from siblings, though it never explicitly contrasts itself with calibrate_swaption_vol, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus alternatives such as calibrate_swaption_vol or price_swaption. The only routing hint is 'see the hwcal_* examples', which requires the agent to go look up another resource rather than deciding from the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calibrate_swaption_volB
Calibrate a SABR swaption cube (POST /calibrate-swaption-vol) from a raw
CalibrateSwaptionVolRequest body (pricing with a SwaptionSabrCalibrateSpec
surface, vol_id, discounting_curve_id, forwarding_curve_id). Validated
against the vendored spec, then forwarded; see the vol examples
(sabrcal_*) for complete bodies. summary selects the calibration block.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| request_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses validation against the vendored spec, forwarding, and that summary selects the calibration block, but omits auth requirements, side effects, persistence, idempotency, and error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four dense sentences with the action front-loaded and no filler. Each clause adds invocation or body-construction value, including the endpoint and example reference.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. For a complex nested POST with no annotations and 0% schema coverage, the description is only partially complete: it omits request_id semantics, auth, and side-effect/error details, though example references help an agent proceed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does by naming key body fields (pricing with SwaptionSabrCalibrateSpec, vol_id, discounting_curve_id, forwarding_curve_id) and pointing to sabrcal_* examples. The request_id parameter remains undocumented, preventing a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb 'Calibrate' and resource 'SABR swaption cube' with endpoint POST /calibrate-swaption-vol make the action clear. However, it does not explicitly distinguish this from the sibling calibrate_swaption_model or clarify cube-versus-model calibration scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not, or alternative guidance is provided. The only routing help is 'see the vol examples (sabrcal_*) for complete bodies', which aids invocation but does not explain when this tool should be chosen over sibling calibration or pricing tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_resultsA
Put the user's numbers next to the engine's (no engine call, no modelling).
Args:
external: {label: number} as the user quoted them, e.g.
{"NPV": 10359.49, "DV01": 415.5, "fair rate": 0.0337}. Labels are
matched case- and punctuation-insensitively to response fields
(npv / premium / PV -> npv; DV01 / PV01 -> dv01;
fair rate -> fair_rate then atm_forward; vol ->
implied_volatility, ...). Give the external numbers in the engine's
units (currency amounts; rates and vols as decimals).
quantra: a pricing tool result (its response is used) or the engine
response object itself. The first priced item is compared.
Returns rows = [{label, mapped_to, quantra_path, external, quantra, abs_diff, rel_diff, topic, topic_uri}] with abs_diff = quantra - external
and rel_diff = abs_diff / |external|; unmapped for labels with no field;
mapping shows the candidates tried. topic is the methodology page
(explain_method) to consult for that metric.
| Name | Required | Description | Default |
|---|---|---|---|
| quantra | Yes | ||
| external | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and succeeds: it discloses that no engine call or modelling occurs, explains label matching rules (case- and punctuation-insensitive), specifies units, and details the return fields and diff formulas. This is rich behavioral context beyond the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, followed by structured Args and Returns sections. Although long, every sentence earns its place by documenting the complex mapping and diff logic required for correct invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, 0% schema coverage, nested objects, and a complex comparison task, the description is complete. It even explains return values despite an output schema existing, and references `explain_method` for topic methodology, leaving no critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does thoroughly: `external` is explained with an example, matching logic, and unit guidance; `quantra` is described as a pricing tool result or engine response, with which part is used. This adds substantial meaning absent from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource—'Put the user's numbers next to the engine's'—and explicitly differentiates from engine-calling tools with 'no engine call, no modelling'. An agent can immediately tell this is a comparison utility, not a pricing tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides implied usage context by describing the two parameter types (external numbers and an engine result), but never explicitly states when to use this tool versus the many pricing siblings or when not to use it. No alternatives or prerequisites are named, so an agent must infer the usage scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
curve_from_pasted_tableA
A curve from a table the user pasted (a vendor curve screen, a spreadsheet, a ticket): parses it and calls build_value_curve (discount / zero) or build_curve (par quotes). No engine call; no arithmetic on the values.
Args:
text: the pasted rows. CSV / TSV / ';' / '|' / whitespace separated, header
optional. Each row: a date (2034-09-18, 18-Sep-2034,
09/18/2034 with date_format) or a tenor (10Y), then the
value. % values are divided by 100; 1,000.5 loses its commas.
An optional word per row (ois, swap, deposit) tags a par
quote's type.
id: curve id to register.
kind: discount (discount factors -> InterpolatedDiscount), zero
(zero rates -> InterpolatedZero) or par (market quotes -> bootstrap
helpers of the preset).
market_data_source: where the market numbers in this call come from. user_pasted
(the user pasted or typed the numbers in this conversation), user_file (the
user attached a file/screenshot the numbers were read from), engine_example
(an engine example's pricing block, only when the user explicitly asked to run
an example), session (a market previously stored in this session, which
itself came from one of the above). There is no value for estimated, recalled or
placeholder data. If you would have to invent numbers, do not call this tool:
ask the user for the data.
preset: supplies the curve day counter and point calendar/convention
(USD_SOFR_OIS...); required for par; or give conventions.
reference_date: the curve / as-of date. For discount it may be omitted
when the first row is that date with value 1.0.
quote_type: par tables only: the helper type when the rows do not name one
and the preset offers several.
percent: true = every value is a percentage; default: only values
written with %.
date_format: mdy / dmy for slash dates; inferred when a field exceeds
12, otherwise required.
compounding, frequency: zero tables only (default Continuous / Annual).
interpolator: override the builder default.
Returns the builder result ({ok, curve, indices, preset, notes}) plus
parsed_rows (line, label, value as read), unparsed (line, text,
reason) and header. For a discount table whose first row is not the
reference date, the anchor point {reference_date: 1.0} the engine
requires is added in front and said so in notes.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| kind | Yes | ||
| text | Yes | ||
| preset | No | ||
| percent | No | ||
| frequency | No | ||
| quote_type | No | ||
| compounding | No | ||
| conventions | No | ||
| date_format | No | ||
| interpolator | No | ||
| reference_date | No | ||
| market_data_source | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so: it states 'No engine call; no arithmetic on the values,' identifies the id registration side effect, and documents edge-case behavior (the anchor point {reference_date: 1.0} added and reported in notes). It also discloses what the parse produces and how unparsed rows surface.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the one-line purpose before an Args block, and every sentence is load-bearing given thirteen undocumented parameters. The terse notation keps it dense without padding; nothing reads as filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a high-complexity curve-construction tool with 13 params, 0% schema coverage, and no annotations, this covers input syntax, routing, provenance constraints, and return behavior. The output schema exists, yet the description still orients the agent to the return shape and notes without that being required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 13 parameters, so the description must compensate entirely — and it does, documenting text separators, accepted date formats, % and comma handling, per-row type tags, the three kind values, every market_data_source value, preset vs conventions, reference_date omission rules, quote_type fallback, percent, date_format inference, and compounding/frequency scope per kind.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — it parses a user-pasted table and routes it to build_value_curve or build_curve — and explicitly names the two builder siblings, so an agent can distinguish it from them without opening a schema. The parenthetical examples (vendor screen, spreadsheet, ticket) make the input source unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear use context and a strong explicit when-not rule: 'If you would have to invent numbers, do not call this tool: ask the user for the data,' plus a typology of market_data_source with the meaning of each value. It does not explicitly say when to prefer calling build_value_curve directly with clean values, so routing vs the sibling builders is left partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
engine_requestA
POST a JSON body to any engine endpoint (the raw escape hatch).
Args:
endpoint: one of the engine's POST paths (see list_endpoints),
e.g. /price-ois-swap.
body: the full request object exactly as the engine expects it
(engine_schema and the quantra://examples/* resources
show the shape). The engine does not default omitted fields.
validate: check body against the vendored OpenAPI schema first
(default True). On failure nothing is sent and problems
lists each JSON-pointer path with a message.
request_id: optional X-Request-Id to forward; one is generated
when absent and reported in engine.request_id.
Returns {ok, endpoint, request, response, engine}; on an engine
error ok=false with the HTTP status and the engine's error
text verbatim (400 = request wrong, 422 = well-formed but unpriceable).
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| endpoint | Yes | ||
| validate | No | ||
| request_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: the engine does not default omitted fields, validate=True blocks sending on schema failure with per-JSON-pointer problems, request_id is auto-generated and echoed in engine.request_id, and error semantics are given verbatim (400 = request wrong, 422 = well-formed but unpriceable). This is exactly the kind of behavioral context annotations would otherwise supply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-line summary is front-loaded before the Args and Returns sections, and every sentence carries actionable information – no filler, no restatement of the name. Dense but well-organized with clear sectioning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generic passthrough tool with a nested free-form body, the description covers input discovery, validation, error taxonomy, and return shape. Although an output schema exists (so return values needn't be explained), the added ok/status/error semantics are useful and nothing required for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it documents all four parameters: endpoint with a concrete path example, body as the full request object with pointers to where its shape is defined, validate's default and failure behavior, and request_id's optional X-Request-Id forwarding. No parameter is left ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opening sentence gives a specific verb (POST), resource (JSON body to an engine endpoint), and positions it precisely among siblings as 'the raw escape hatch', immediately distinguishing it from the high-level price_* tools. An agent can tell what this is without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'raw escape hatch' framing plus pointers to list_endpoints, engine_schema, and quantra://examples/* resources tell the agent how to discover valid inputs and when this low-level tool is the right call. It stops short of an explicit when-not (e.g. 'prefer price_ois_swap for standard swaps'), leaving that inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
engine_schemaA
Request and response JSON schema for one engine endpoint.
Args:
endpoint: one of the 24 POST paths, e.g. /price-ois-swap
(leading slash optional). Unknown names return an error that
lists the valid endpoints.
depth: how many levels of $ref to inline (0..8, default 3).
Deeper refs are left as {"$ref": "<Name>", "unresolved": true}.
Returns the spec's top-level required list, the top-level field
names, and both schemas. Remember the engine's rule: a field the
product needs that is omitted is an error, never a default.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | ||
| endpoint | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the burden, and it does disclose unusual behavior: depth controls $ref inlining, deeper refs are marked with '{"$ref": ..., "unresolved": true}', unknown endpoints error with a valid-list, and the engine rule that omitted-but-needed fields are an error, not a default. Missing only auth/rate-limit notes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence, then Args and Returns sections. The docstring layout is slightly awkward inside a description field and the 'Remember the engine's rule...' line reads as an addendum, but every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail is not required, yet the description still summarizes what comes back (top-level required list, field names, both schemas). Combined with error behavior and the no-implicit-defaults rule, an agent has enough to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: endpoint is characterized as one of 24 POST paths with leading slash optional, and depth is given a range (0..8), a default (3), and concrete behavior for values that exceed inlining. It stops short of enumerating or pointing at list_endpoints for valid names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb+resource: fetch request/response JSON schema for one engine endpoint. An agent can distinguish it from engine_request (which calls the endpoint) and list_endpoints (which enumerates names), though the description never states those distinctions explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives usable context: 'one of the 24 POST paths' and the failure mode for unknown names (an error listing valid endpoints). But it never says when to reach for this versus list_endpoints, engine_request, or get_example, leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_methodA
How the engine computes something, cited to its own docs and source at the pinned tag; or how this server derives its analytics (no engine call).
Args:
topic: one of npv, fair-rate, greeks-bump-and-reprice, theta,
curve-bootstrap, value-curves, settlement-and-cash-settlement,
volatility-types, calendars-and-overrides,
day-counters-and-compounding, schedules-and-stubs, error-codes
(engine pages), or connector-analytics (what swap_dv01, key_rate_ladder,
scenario, fair_rate and reprice_with compute on top of engine outputs, cited
into this server's own source).
Returns the page as markdown (plain-language summary, the cited excerpts each
with a path@tag:Lstart-Lend citation and a GitHub permalink, the request
fields that control the behaviour, and what is NOT documented), plus
citations, links (the permalinks), repository and not_documented
as lists; repos gives the engine and connector repository URLs. Quote the
citations (or hand over the links) when you explain a number; never assert a
cause the page does not support.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose notable traits: engine pages make an engine-backed lookup while `connector-analytics` involves 'no engine call', returns include a `not_documented` list (transparency about limitations), and it surfaces provenance. It does not discuss cost, latency, or whether the output is cached, so a small gap remains for a documentation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then well-structured Args/Returns blocks with no filler sentences. The long comma-separated topic list and the closing citation-discipline sentence make it denser than ideal, but every part carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even though an output schema exists, the description still names the returned keys (markdown, citations, links, repository, not_documented, repos), tells the agent what a page contains, and enumerates valid inputs. Nothing an agent needs to select or invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema has only `topic: string`, so the description compensates fully by enumerating every valid value (npv, fair-rate, greeks-bump-and-reprice, … error-codes, plus connector-analytics) and explaining what the analytics value means. This is meaning that exists nowhere in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (explain) and resource (how the engine computes a method / how this server derives its analytics), and explicitly separates the engine-page topics from the `connector-analytics` topic that describes what sibling tools like swap_dv01 and key_rate_ladder compute. An agent can distinguish this from price_* / build_* siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: use it for cited engine/connector documentation, and it explicitly routes the analytics question to the `connector-analytics` topic rather than an engine page. It also prescribes behaviour ('quote the citations or hand over the links when you explain a number; never assert a cause the page does not support'), though it does not give explicit when-not-to-use exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fair_rateA
The engine's fair (par) rate of a swap, read from the pricing response.
Args:
market, trade, as_of: as in swap_dv01.
market_data_source: where the market numbers in this call come from. user_pasted
(the user pasted or typed the numbers in this conversation), user_file (the
user attached a file/screenshot the numbers were read from), engine_example
(an engine example's pricing block, only when the user explicitly asked to run
an example), session (a market previously stored in this session, which
itself came from one of the above). There is no value for estimated, recalled or
placeholder data. If you would have to invent numbers, do not call this tool:
ask the user for the data.
Result: fair_rate / fair_spread exactly as the engine returned them (plus
npv); when the response carries neither, provided_by_engine is false and
message says so (nothing is solved locally). calls[0] is the pricing.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | ||
| trade | Yes | ||
| market | Yes | ||
| request_id | No | ||
| calendar_overrides | No | ||
| market_data_source | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose non-obvious behavior: results are passed through from the engine, nothing is solved locally, and when the response lacks fair_rate/fair_spread the provided_by_engine flag is false with an explanatory message. It does not spell out read-only status, required engine/session prerequisites, or any rate/permission constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in the first sentence, followed by Args and Result sections that are easy to scan. The market_data_source enumeration is verbose but each entry carries decision-relevant meaning, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with nested objects and an output schema, the description covers the one parameter the schema leaves opaque (market_data_source) and the pass-through/failure behavior an agent would otherwise guess wrong. The remaining gap is that trade/market/as_of semantics are delegated to swap_dv01 rather than restated. Since an output schema exists, not describing return fields is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Top-level schema coverage is 0%, so the description must compensate. It explains market_data_source thoroughly (all four provenances plus what has no valid value), but market, trade, and as_of are dismissed with 'as in swap_dv01', deferring to another tool rather than adding semantics here. The nested SwapSpec $defs do carry some documentation, so coverage is partial rather than absent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and action: the fair (par) rate of a swap, read from the engine's pricing response. It also cross-references swap_dv01 for the argument shape, which orients the agent within the family. It stops short of distinguishing when fair_rate is preferred over the sibling pricers (price_vanilla_swap, price_ois_swap), so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The market_data_source enumeration effectively encodes when-to-use conditions (user_pasted / user_file / engine_example / session), and the explicit exclusion 'If you would have to invent numbers, do not call this tool: ask the user for the data' is a clear when-not-to-use rule. No alternative sibling tool is named as a substitute, so it falls short of an explicit routing statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_exampleA
One vendored example: endpoint, catalog description, reference value and the
complete request body (no engine call).
Use it as engine_request(endpoint, body); or pass body["pricing"] as the
market of a pricing tool and let the tool rebuild the trade from a preset.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and usefully discloses that the example is vendored and makes no engine call. It also describes the returned components, though it does not explicitly label the operation as read-only or mention any access constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loads the core purpose before explaining how to use the result. The second sentence is dense but earns its place by giving concrete invocation patterns.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be fully documented, and the description does explain the main returned fields. Still, it leaves the required name parameter undocumented and does not help an agent decide between this tool and sibling example/preset tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for the single required parameter name, and the tool description never explains what the name refers to or what format it expects. The description adds no meaning beyond the bare schema title.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns one vendored example, including endpoint, catalog description, reference value, and complete request body. It implies a single-item retrieval, distinguishing it from list_examples, but does not explicitly name or contrast siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete post-retrieval usage: feed the output to engine_request(endpoint, body) or pass body["pricing"] as the market for a pricing tool. However, it does not state when to choose get_example over alternatives such as list_examples or get_preset.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_presetB
One preset as data: index definition, curve settings, every helper convention block and the provenance of each field.
Args:
id: e.g. USD_SOFR_OIS, EUR_ESTR_OIS, GBP_SONIA_OIS,
GBP_SONIA_SWAP, EUR_EURIBOR_6M, EUR_EURIBOR_3M.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It conveys that this is a read returning structured preset data, but does not state what happens for an unknown id, whether presets are immutable or session-scoped, or any auth/rate considerations. Adequate but incomplete for a zero-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The summary sentence is front-loaded and dense with useful detail, and the Args block is short. The example list is a touch long but each entry earns its place by demonstrating the id pattern.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't explain return values, yet it does sketch them, and the id examples cover the only parameter. For a one-parameter lookup this is nearly sufficient; the missing usage routing is the main gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does by giving six concrete id examples (USD_SOFR_OIS, EUR_ESTR_OIS, GBP_SONIA_OIS, EUR_EURIBOR_6M, etc.) that reveal the naming convention. It does not say whether ids are case-sensitive or where the canonical list comes from, but the examples add real value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (one preset) and enumerates its contents (index definition, curve settings, helper convention blocks, field provenance), which is far more informative than the bare name. It does not explicitly name list_presets as the plural sibling it differs from, so it falls short of the 5 bar.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this versus list_presets or the various build/bootstrap/calibrate tools. The Args block documents the id, not the usage context, so an agent must infer the retrieval scenario entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
key_rate_ladderA
Key-rate DV01 ladder: one bump per pillar of a curve, plus a parallel bump.
Args:
market, trade, bump_bp, method, as_of: as in swap_dv01.
market_data_source: where the market numbers in this call come from. user_pasted
(the user pasted or typed the numbers in this conversation), user_file (the
user attached a file/screenshot the numbers were read from), engine_example
(an engine example's pricing block, only when the user explicitly asked to run
an example), session (a market previously stored in this session, which
itself came from one of the above). There is no value for estimated, recalled or
placeholder data. If you would have to invent numbers, do not call this tool:
ask the user for the data.
curve: id of the curve whose pillars are the buckets (default: the trade's
discounting curve). Buckets are that curve's ACTUAL points in wire order.
Result: ladder = ordered [{pillar, quote_from, quote_up / quote_down, npv_up / npv_down, dv01}], parallel (all pillars bumped together),
sum_of_buckets (sum of the ladder dv01s), definitions (the exact difference
per method) and calls = base + parallel + one complete pricing result per pillar
and side (centered: 1 + 2 + 2 x pillars calls). Reprices run concurrently, bounded by
QUANTRA_MAX_CONCURRENCY.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | ||
| curve | No | ||
| trade | Yes | ||
| market | Yes | ||
| method | No | centered | |
| bump_bp | No | ||
| request_id | No | ||
| calendar_overrides | No | ||
| market_data_source | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does disclose useful traits: the exact reprice count (1 + 2 + 2 x pillars), concurrent execution bounded by QUANTRA_MAX_CONCURRENCY, and strict market_data_source semantics. It never states side effects or persistence (e.g., that the run is a pure read, or what a 'session' source implies about prior writes), leaving the safety/profile picture incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then cleanly split into Args and Result sections; the densest material is the market_data_source paragraph, which earns its space as a usage guard. The 'as in swap_dv01' shorthand is efficient, though the result-format sentence is long enough to need rereading.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be restated, yet the description still names the ladder/parallel/sum_of_buckets/definitions/calls fields, and it covers the provenance, curve-selection, and cost-of-call dimensions an agent needs. The remaining gap is the opaque market payload and override object, which neither schema nor description clarifies.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Top-level schema description coverage is 0% across 9 parameters, so the description must compensate. It fully defines market_data_source (all four enum values with provenance meaning), explains curve's default and that buckets are the curve's ACTUAL points in wire order, and defers market/trade/bump_bp/method/as_of to swap_dv01. The market object (open additionalProperties), request_id, and calendar_overrides remain entirely unexplained, so compensation is partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific computation (key-rate DV01 ladder = one bump per curve pillar plus a parallel bump), which is a concrete verb+resource+scope rather than a restated name. The reference to swap_dv01 for shared arguments implicitly positions it as the bucketed counterpart of swap_dv01, but the contrast is not spelled out explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-not rule tied to data provenance: 'If you would have to invent numbers, do not call this tool: ask the user for the data,' plus the rule that engine_example is only valid when the user asked for an example. It does not, however, say when to choose this over swap_dv01 or scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_endpointsA
The engine's POST endpoints (24 at the pinned version) with one-line descriptions.
Taken from the vendored OpenAPI spec, not from the live engine; compare
with quantra_meta to detect a version mismatch.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the load and does disclose a key behavioral trait: the data comes from a vendored spec rather than the live engine, so it may be stale, and the endpoint count is pinned to a version. It could say more about the read-only/list nature, but the staleness disclosure is genuinely valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with what the tool returns and followed by the provenance caveat. The mid-sentence backtick and line breaks are slightly awkward but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail is not required. For a zero-parameter listing tool, the description covers what is returned, its source, and the version-mismatch caveat, leaving little an agent would need to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there is nothing for the description to explain beyond the schema; baseline 4 applies. The schema is empty and fully described by its own structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it lists the engine's POST endpoints with one-line descriptions, and adds the provenance (vendored OpenAPI spec). It doesn't explicitly differentiate itself from close siblings like list_enums or engine_schema, which also expose engine metadata, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a use case (checking available endpoints, and comparing with quantra_meta to detect a version mismatch) but never states when to use this versus list_enums or engine_schema, nor any preconditions. Usage is inferable rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_enumsA
Values of an engine enum from the vendored spec.
Args:
name: e.g. Calendar, DayCounter, Frequency,
BusinessDayConvention, TimeUnit, Compounding,
Interpolator, BootstrapTrait. An unknown name returns
an error listing every available enum.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the error behavior for unknown names, which is helpful, but does not explicitly state that this is a read-only, side-effect-free operation or address any auth/rate considerations, leaving some transparency gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose and then uses an Args block for parameter examples. It is appropriately sized with no filler, though the trailing newline and minor structural choices keep it from being maximally polished.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity, a single string parameter, and the existence of an output schema (which handles return values), the description covers purpose, parameter examples, and error behavior sufficiently. It lacks explicit sibling differentiation and safety notes, but nothing critical for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the single parameter. It does so effectively by listing concrete example enum names (Calendar, DayCounter, Frequency, etc.) and explaining the error behavior for unknown values, adding meaningful semantics beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource ('engine enum') and action ('values of'), making it clear that this tool returns enum members from the engine spec. It does not explicitly differentiate from siblings like engine_schema or list_endpoints, so it falls short of a 5, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: the tool returns enum values and the description explains that an unknown name returns an error listing every available enum, which is a useful discovery path. However, it gives no explicit when-to-use guidance or alternatives compared to sibling tools, leaving the agent to infer suitability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_examplesA
List the vendored engine example requests (no engine call).
Args:
category: one of the fixture folders (ir_swaps, bonds, swaption,
cds, fra, cap_floor, equity, inflation,
inflation_cap_floor, curves, calendar, vol,
callable_bonds, zero_coupon_swap, misc, blog).
product: filter by endpoint product instead (vanilla_swap, ois_swap,
fixed_rate_bond, swaption, cds, equity_option, ...).
Each row: name, category, endpoint, product, title,
reference_text (the QuantLib value the engine is asserted to match, when
cataloged) and the resource uri. get_example(name) returns the body.
| Name | Required | Description | Default |
|---|---|---|---|
| product | No | ||
| category | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does so reasonably: it declares the operation makes no engine call (i.e. no side effects), and discloses the row shape including the 'reference_text' assertion value and resource 'uri'. Pagination, ordering, and error behavior on unknown categories are not covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence, then structured Args and return-row enumeration. The long fixture lists are long but earn their place as the only valid-value documentation; minor redundancy in listing row fields when an output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-param, zero-schema-coverage discovery tool, the description supplies the value domain, the semantic difference between the two filters, the return shape, and the handoff to get_example. Despite an existing output schema, restating the row fields is harmless reinforcement rather than a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and neither param has an enum, so the description is the only source of meaning — and it supplies it, enumerating 17 valid category fixtures and a set of product endpoints, plus clarifying that product is an alternative filter axis. This is substantial value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the vendored engine example requests') and immediately scopes it against the engine-calling siblings with '(no engine call)'. An agent can distinguish this catalog-listing tool from engine_request and get_example without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames this as a non-executing listing and names the follow-up tool ('get_example(name) returns the body'), routing the agent from discovery to retrieval. It does not spell out when to prefer list_examples over list_endpoints or list_presets, so full alternatives guidance is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_presetsA
Market-convention presets available to build_curve / build_value_curve.
Each row: id, currency, index (the engine index id the
preset registers), helpers (quote types it supports: deposit, fra,
future, swap, ois), curve (day counter / interpolator / trait) and
the provenance of the conventions. get_preset returns the data.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses the returned row structure (id, currency, index, helpers, curve, provenance) and clarifies helpers' meaning, but does not state read-only nature or any auth/pagination behavior. Solid but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: purpose, row fields, and a pointer to get_preset. Front-loaded and every sentence earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param list tool with an output schema, the description covers purpose, context, and data shape. It omits ordering/pagination details, but those are minor and the output schema already covers return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description adds no parameter info, and none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (list) + resource (presets) + scope (market-convention presets for build_curve/build_value_curve). It contrasts with get_preset, which returns the actual data, so an agent can distinguish them without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Identifies downstream consumers (build_curve/build_value_curve) and names get_preset as the tool that returns preset data, implying a list-then-fetch workflow. No explicit when-not or exclusion, so 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_callable_fixed_rate_bondA
Price a callable / puttable fixed-rate bond on a Hull-White lattice (POST /price-callable-fixed-rate-bond).
Args:
market_data_source: where the market numbers in this call come from. user_pasted
(the user pasted or typed the numbers in this conversation), user_file (the
user attached a file/screenshot the numbers were read from), engine_example
(an engine example's pricing block, only when the user explicitly asked to run
an example), session (a market previously stored in this session, which
itself came from one of the above). There is no value for estimated, recalled or
placeholder data. If you would have to invent numbers, do not call this tool:
ask the user for the data.
preset: a preset with a callable_fixed_rate_bond block (EUR_FIXED_BOND).
call_schedule: [{date, price, type: Call|Put}] with increasing dates
(clean price per 100 of face).
model: {a, sigma, lattice_steps?, id?} (explicit Hull-White, lattice_steps
default from the preset) or the id of a SwaptionModelSpec in the market.
tree_steps: engine lattice steps for the bond (default from the preset).
Other arguments: as in price_fixed_rate_bond.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | ||
| model | Yes | ||
| tenor | No | ||
| market | Yes | ||
| preset | Yes | ||
| overrides | No | ||
| issue_date | Yes | ||
| request_id | No | ||
| tree_steps | No | ||
| coupon_rate | Yes | ||
| face_amount | Yes | ||
| call_schedule | Yes | ||
| maturity_date | No | ||
| effective_date | No | ||
| additional_trades | No | ||
| discounting_curve | Yes | ||
| calendar_overrides | No | ||
| market_data_source | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does valuable work disclosing that estimated/recalled/placeholder market data is forbidden and that session-sourced data must trace to a real origin, but says nothing about permissions, idempotency, or pricing side effects, and does not describe the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and endpoint, then an Args block that is organized and scannable. It is fairly long, and the delegation sentence is terse, but no sentence is pure filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 18-parameter, 9-required, nested-object tool with no annotations, the description is only partially complete. An output schema exists so return values need no explanation, but the many undocumented parameters and absent behavioral notes leave gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Top-level schema description coverage is 0%, so the description must compensate. It well documents market_data_source, and covers preset, call_schedule shape, model and tree_steps, but leaves the majority of the 18 parameters (face_amount, coupon_rate, discounting_curve, market, overrides, etc.) to an external reference ('as in price_fixed_rate_bond').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (price) and resource (callable / puttable fixed-rate bond) plus the method used (Hull-White lattice) and the underlying endpoint. An agent can distinguish it from price_fixed_rate_bond by the callability dimension.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The market_data_source paragraph gives explicit when-not-to-use guidance ('If you would have to invent numbers, do not call this tool: ask the user for the data') and constrains the engine_example path. It delegates remaining argument semantics to price_fixed_rate_bond, but does not state callable-vs-plain alternative routing explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_cap_floorA
Price an interest-rate cap, floor or collar (POST /price-cap-floor).
Args:
market_data_source: where the market numbers in this call come from. user_pasted
(the user pasted or typed the numbers in this conversation), user_file (the
user attached a file/screenshot the numbers were read from), engine_example
(an engine example's pricing block, only when the user explicitly asked to run
an example), session (a market previously stored in this session, which
itself came from one of the above). There is no value for estimated, recalled or
placeholder data. If you would have to invent numbers, do not call this tool:
ask the user for the data.
preset: a preset with a cap_floor block (EUR_EURIBOR_3M quarterly,
EUR_EURIBOR_6M semiannual).
cap_floor_type: Cap | Floor | Collar. strike: decimal.
effective_date, termination_date | tenor: as in price_vanilla_swap.
vol: {constant: 0.2, type: Lognormal|Normal|ShiftedLognormal, displacement?, id?} (an OptionletVolSpec the tool adds to the market, base conventions
from the preset) or the id of a surface already in the market.
model: Black | Bachelier | ShiftedBlack | HullWhiteLattice (a
CapFloorModelSpec the tool adds, id <type>_model) or a model id.
include_details: per-caplet breakdown.
frequency, day_counter, business_day_convention, schedule_overrides:
default from the preset (noted).
summary.cap_floors: npv, atm_rate, implied_volatility.
| Name | Required | Description | Default |
|---|---|---|---|
| vol | Yes | ||
| as_of | No | ||
| model | Yes | ||
| tenor | No | ||
| market | Yes | ||
| preset | Yes | ||
| strike | Yes | ||
| index_id | No | ||
| notional | Yes | ||
| frequency | No | ||
| request_id | No | ||
| day_counter | No | ||
| cap_floor_type | Yes | ||
| effective_date | Yes | ||
| include_details | No | ||
| forwarding_curve | Yes | ||
| termination_date | No | ||
| additional_trades | No | ||
| discounting_curve | Yes | ||
| calendar_overrides | No | ||
| market_data_source | Yes | ||
| schedule_overrides | No | ||
| business_day_convention | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that the tool injects an OptionletVolSpec and a CapFloorModelSpec into the market, that base conventions are inherited from the preset, that unspecified schedule fields default from the preset, and that estimated/recalled data is disallowed. It omits failure behavior and curve prerequisites, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads a one-line purpose before the Args block, and the per-parameter lines are tight. It is long, but the length is justified by 23 parameters and enum/format details that are not in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 23-parameter, 11-required tool with nested objects and no annotations, the description supplies the conventions, defaults, and sourcing rules an agent needs to call it correctly; return values are covered by the output schema. Curve-related parameters and error handling remain undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Top-level schema coverage is 0%, so the description must compensate, and it defines the semantics of roughly a dozen parameters (vol structure, model options, preset names, schema override defaults, include_details). However, several of the 23 parameters (discounting_curve, forwarding_curve, index_id, as_of, market, additional_trades, calendar_overrides) receive no explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Price an interest-rate cap, floor or collar') and even names the endpoint. An agent can immediately distinguish it from siblings like price_swaption or price_yoy_inflation_cap_floor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The market_data_source argument defines four legitimate sourcing modes and explicitly states when NOT to call the tool ('If you would have to invent numbers, do not call this tool: ask the user'). It stops short of routing between alternative pricing tools, but the invocation conditions are unusually explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_cdsA
Price a single-name CDS (POST /price-cds).
Args:
market_data_source: where the market numbers in this call come from. user_pasted
(the user pasted or typed the numbers in this conversation), user_file (the
user attached a file/screenshot the numbers were read from), engine_example
(an engine example's pricing block, only when the user explicitly asked to run
an example), session (a market previously stored in this session, which
itself came from one of the above). There is no value for estimated, recalled or
placeholder data. If you would have to invent numbers, do not call this tool:
ask the user for the data.
side: Buyer (buy protection) or Seller. notional: > 0.
running_coupon: decimal (0.01 = 100bp).
credit_curve: {par_spreads: [{tenor, spread}], recovery_rate?, id?}
(bootstrapped by the engine with the preset's helper conventions),
{hazard_rate, recovery_rate?, id?} (flat) or a credit curve id in
the market.
preset: a preset with a cds block (default EUR_CDS: quarterly
TwentiethIMM, Following, Actual360, MidPoint).
start: effective date YYYY-MM-DD or as_of (default).
maturity: YYYY-MM-DD; or tenor (engine-resolved, Unadjusted).
recovery_rate: for a curve the tool builds (default: preset, 0.4).
model: MidPoint | ISDA (CdsModelSpec added, id cds_<type>) or a
model id in the market.
upfront / upfront_date, protection_start (default = start), trade_date
(default = as_of), frequency, day_counter, business_day_convention,
cash_settlement_days, schedule_overrides: optional; defaults noted.
summary.cds_list: npv, fair_spread, fair_upfront, leg npvs.
| Name | Required | Description | Default |
|---|---|---|---|
| side | Yes | ||
| as_of | No | ||
| model | No | MidPoint | |
| start | No | as_of | |
| tenor | No | ||
| market | Yes | ||
| preset | No | EUR_CDS | |
| upfront | No | ||
| maturity | No | ||
| notional | Yes | ||
| frequency | No | ||
| request_id | No | ||
| trade_date | No | ||
| day_counter | No | ||
| credit_curve | Yes | ||
| upfront_date | No | ||
| recovery_rate | No | ||
| running_coupon | Yes | ||
| protection_start | No | ||
| additional_trades | No | ||
| discounting_curve | Yes | ||
| calendar_overrides | No | ||
| market_data_source | Yes | ||
| schedule_overrides | No | ||
| cash_settlement_days | No | ||
| business_day_convention | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description must carry the behavioral load; it discloses the default preset and its conventions, that par-spread curves are bootstrapped by the engine, default recovery rate, the CdsModelSpec id pattern (cds_<type>), and defaults for optional dates. It says nothing about permissions/auth, but for a pure compute endpoint that gap is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the one-line purpose followed by a structured args block; given 26 parameters, most lines earn their place by supplying defaults or accepted value forms. Slightly long, but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be re-explained (the brief summary.cds_list note is a bonus). Against 26 params, 7 required, zero schema coverage and no annotations, leaving the required 'market' object and 'discounting_curve' id undocumented is a real gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% at the top level, so the args list does the heavy lifting and explains most parameters (market_data_source in depth, side, notional, running_coupon units, the three credit_curve forms, preset, start/maturity/tenor, recovery_rate, model, and the optional schedule fields). However, required parameters 'market' and 'discounting_curve', plus as_of, additional_trades and calendar_overrides, are left entirely unexplained, so it doesn't fully compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Price a single-name CDS') plus the underlying route POST /price-cds, which cleanly separates it from the many sibling pricing tools (price_vanilla_swap, price_swaption, price_ois_swap, etc.). An agent can identify the tool's scope without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The market_data_source enumeration gives explicit provenance rules (user_pasted/user_file/engine_example/session) and a clear when-not-to-use rule: 'If you would have to invent numbers, do not call this tool: ask the user for the data.' It does not name sibling tools or say when to prefer related tools, so it falls short of the 5 bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_equity_optionA
Price a vanilla equity option (POST /price-equity-option).
Args:
market_data_source: where the market numbers in this call come from. user_pasted
(the user pasted or typed the numbers in this conversation), user_file (the
user attached a file/screenshot the numbers were read from), engine_example
(an engine example's pricing block, only when the user explicitly asked to run
an example), session (a market previously stored in this session, which
itself came from one of the above). There is no value for estimated, recalled or
placeholder data. If you would have to invent numbers, do not call this tool:
ask the user for the data.
spot: spot price (a Price quote the tool adds) or a quote id in the market.
strike, expiry (YYYY-MM-DD), option_type Call | Put.
vol: {constant: 0.2, id?} (constant BlackVolSpec added) or a surface id.
rate_curve: {rate, end_date, id?} (flat continuous zero curve from as_of to
end_date, added) or a curve id in the market.
dividend_yield: same shape ({rate: 0.0, end_date} for no dividends); the
engine requires a dividend curve id on every underlying.
preset: a preset with an equity_option block (default EUR_EQUITY).
exercise: European | American (window exercise_start..expiry;
start default = as_of) | Bermudan (exercise_dates, last = expiry).
model: {type: BlackScholesAnalytic|BinomialCRR, binomial_steps?, id?} or a
model id; default BlackScholesAnalytic (id bs_analytic).
discrete_dividends: [{ex_date, amount}] cash dividends on the underlying.
market: optional; a pricing block / market with curves, quotes or
surfaces to reference by id. as_of is required without it.
summary.options: npv, delta, gamma, vega, theta, rho.
| Name | Required | Description | Default |
|---|---|---|---|
| vol | Yes | ||
| spot | Yes | ||
| as_of | No | ||
| model | No | ||
| expiry | Yes | ||
| market | No | ||
| preset | No | EUR_EQUITY | |
| strike | Yes | ||
| exercise | No | European | |
| quantity | No | ||
| trade_id | No | ||
| rate_curve | Yes | ||
| request_id | No | ||
| option_type | Yes | ||
| underlying_id | No | EQ | |
| dividend_yield | Yes | ||
| exercise_dates | No | ||
| exercise_start | No | ||
| additional_trades | No | ||
| calendar_overrides | No | ||
| discrete_dividends | No | ||
| market_data_source | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose meaningful side effects and constraints: the tool adds Price quotes / zero curves / vol specs to the market, dividend_yield is mandatory because "the engine requires a dividend curve id on every underlying", as_of is required without a market, and exercise-window defaults are spelled out. Auth, permissions and any limits are unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, then a tightly formatted Args block; sizing is appropriate for a 22-parameter tool. Minor waste in restating the trailing summary.options fields even though an output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a high-complexity tool with no annotations, the description covers the market-data provenance rule, defaults, reference-by-id semantics and exercise conventions, and the output schema carries the return contract. The remaining gap is the handful of undocumented secondary parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Top-level schema description coverage is 0%, so the description must compensate, and it does for most parameters: all market_data_source enum values, the vol/rate_curve/dividend_yield shapes, preset default (EUR_EQUITY), exercise variants, model options and discrete_dividends. Still silent on quantity, trade_id, underlying_id, additional_trades and calendar_overrides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ("Price a vanilla equity option") plus the underlying endpoint, which is enough to separate it from the many sibling pricers (price_vanilla_swap, price_swaption, price_cap_floor, etc.) without reading the schema. Nothing vague or tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-not guidance for market_data_source ("There is no value for estimated, recalled or placeholder data. If you would have to invent numbers, do not call this tool: ask the user for the data") and explains the id-vs-inline reference choice for vol, rate_curve, dividend_yield and model. It does not, however, route the agent to sibling helpers (build_curve, build_query, curve_from_pasted_table) when a curve/surface must be constructed first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_fixed_rate_bondA
Price a fixed-rate bond (POST /price-fixed-rate-bond).
Args:
market_data_source: where the market numbers in this call come from. user_pasted
(the user pasted or typed the numbers in this conversation), user_file (the
user attached a file/screenshot the numbers were read from), engine_example
(an engine example's pricing block, only when the user explicitly asked to run
an example), session (a market previously stored in this session, which
itself came from one of the above). There is no value for estimated, recalled or
placeholder data. If you would have to invent numbers, do not call this tool:
ask the user for the data.
market: as in price_vanilla_swap.
preset: a preset with a fixed_rate_bond block (EUR_FIXED_BOND).
face_amount: > 0. coupon_rate: annual decimal coupon.
issue_date: YYYY-MM-DD or spot (as_of + preset settlement days).
maturity_date: YYYY-MM-DD, or tenor (engine-resolved from the
effective date, Unadjusted).
effective_date: first accrual date (default: = issue_date).
discounting_curve: curve id in the market.
overrides: settlement_days, frequency, accrual_day_counter,
payment_convention, redemption, notionals, schedule rules.
yield_overrides: how the yield is quoted (day_counter/compounding/frequency).
include_details / include_flows: pricing.options.bond_pricing_details / _flows.
summary.bonds: npv, clean/dirty price, accrued, yield, durations.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | ||
| tenor | No | ||
| market | Yes | ||
| preset | Yes | ||
| overrides | No | ||
| issue_date | Yes | ||
| request_id | No | ||
| coupon_rate | Yes | ||
| face_amount | Yes | ||
| include_flows | No | ||
| maturity_date | No | ||
| effective_date | No | ||
| include_details | No | ||
| yield_overrides | No | ||
| additional_trades | No | ||
| discounting_curve | Yes | ||
| calendar_overrides | No | ||
| market_data_source | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose meaningful behavior: default effective_date = issue_date, the 'spot' resolution for issue_date, engine-resolved tenor, and the data-provenance policy. It omits error/side-effect behavior, but the compute-only nature and rich defaults make this solidly above average.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, then a compact Args list where nearly every line carries semantic value (formats, defaults, constraints). It is dense rather than padded, though the market_data_source paragraph is long relative to the rest.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 18-parameter tool with nested objects and an existing output schema (so returns need not be explained), the description covers the critical inputs and even summarizes summary.bonds. Remaining gaps (as_of, additional_trades, calendar_overrides semantics) are minor but present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it documents ~13 of 18 parameters (market_data_source, preset, face_amount>0, coupon_rate as annual decimal, date formats, discounting_curve, overrides, yield_overrides, include_* flags). It leaves as_of, top-level tenor, request_id, additional_trades, and calendar_overrides unexplained, and defers market format to price_vanilla_swap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first line gives a precise verb+resource ("Price a fixed-rate bond") plus the backing endpoint, which cleanly separates it from siblings like price_floating_rate_bond or price_zero_coupon_bond. It never explicitly states what it is not, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The market_data_source block supplies real when-to-use/when-not guidance, including the hard exclusion "If you would have to invent numbers, do not call this tool: ask the user for the data" and the restriction of engine_example to explicit user requests. It does not, however, help the agent choose between the many price_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_floating_rate_bondA
Price a floating-rate note (POST /price-floating-rate-bond).
Args:
market_data_source: where the market numbers in this call come from. user_pasted
(the user pasted or typed the numbers in this conversation), user_file (the
user attached a file/screenshot the numbers were read from), engine_example
(an engine example's pricing block, only when the user explicitly asked to run
an example), session (a market previously stored in this session, which
itself came from one of the above). There is no value for estimated, recalled or
placeholder data. If you would have to invent numbers, do not call this tool:
ask the user for the data.
preset: a preset with a floating_rate_bond block (EUR_EURIBOR_6M).
face_amount, issue_date, maturity_date | tenor, effective_date, overrides,
include_details, include_flows: as in price_fixed_rate_bond.
spread: coupon spread over the index (decimal). index_id: default preset's.
fixing_days, in_arrears: default from the preset (noted).
coupon_pricer: id of a coupon pricer in the market; when omitted the tool
adds the preset's zero-vol BlackIborCouponPricer (an Ibor coupon needs one).
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | ||
| tenor | No | ||
| market | Yes | ||
| preset | Yes | ||
| spread | No | ||
| index_id | No | ||
| overrides | No | ||
| in_arrears | No | ||
| issue_date | Yes | ||
| request_id | No | ||
| face_amount | Yes | ||
| fixing_days | No | ||
| coupon_pricer | No | ||
| include_flows | No | ||
| maturity_date | No | ||
| effective_date | No | ||
| include_details | No | ||
| forwarding_curve | Yes | ||
| additional_trades | No | ||
| discounting_curve | Yes | ||
| calendar_overrides | No | ||
| market_data_source | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it discloses real behavior: fixing_days and in_arrears default from the preset, index_id defaults to the preset's, and when coupon_pricer is omitted the tool injects the preset's zero-vol BlackIborCouponPricer. It also defines the four market_data_source modes and forbids estimated/recalled data. Remaining gaps (permissions, failure modes) are minor for a non-mutating pricing call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in one line, followed by a scannable Args list that groups FRN-specific params first and defers shared ones by reference instead of repeating them. The market_data_source entry is long but each mode earns its place because it governs whether the call is even legal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 22-parameter tool with nested objects and no annotations, the description covers the domain-specific pieces well and correctly leaves return values to the existing output schema. The gap is the unmentioned required curve/market inputs and undocumented optional plumbing (as_of, calendar_overrides, request_id), which an agent must infer from schema names alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description has to compensate, and it does for the FRN-specific params (spread as decimal, index_id default, fixing_days/in_arrears defaults) and market_data_source in detail. However, required params such as market, discounting_curve, and forwarding_curve are never mentioned, and as_of, calendar_overrides, additional_trades, and request_id are left entirely undocumented, so roughly a third of the 22 params get no help.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Price a floating-rate note') and pins the HTTP endpoint, and the argument list makes the FRN-specific surface (spread, index_id, fixing_days, in_arrears, coupon_pricer) explicit against the sibling price_fixed_rate_bond it defers to. Differentiation from price_zero_coupon_bond / price_vanilla_swap is clear from the resource name, though the contrast with price_fixed_rate_bond is only implied by the cross-reference rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-not rule ('If you would have to invent numbers, do not call this tool: ask the user for the data') and a prerequisite for the preset ('a preset with a floating_rate_bond block'). It does not name alternative sibling tools or say when a different pricing tool is the better pick, so it falls short of the 5 tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_fraA
Price a forward rate agreement (POST /price-fra).
Args:
market_data_source: where the market numbers in this call come from. user_pasted
(the user pasted or typed the numbers in this conversation), user_file (the
user attached a file/screenshot the numbers were read from), engine_example
(an engine example's pricing block, only when the user explicitly asked to run
an example), session (a market previously stored in this session, which
itself came from one of the above). There is no value for estimated, recalled or
placeholder data. If you would have to invent numbers, do not call this tool:
ask the user for the data.
preset: a preset with a fra block (EUR_EURIBOR_3M, EUR_EURIBOR_6M).
notional: > 0. strike: agreed forward rate (decimal).
side: Long (pay fixed) or Short.
months_to_start, months_to_end: e.g. 3, 6 for a 3x6; the engine resolves
spot = as_of + settlement days, then spot + 3M / 6M with the preset's
calendar and convention (three /calendar-advance calls, all echoed).
start_date, maturity_date: explicit alternative to the months.
index_id, day_counter, business_day_convention: default from the preset.
summary.fras: npv, forward_rate, spot_value, settlement_date.
| Name | Required | Description | Default |
|---|---|---|---|
| side | Yes | ||
| as_of | No | ||
| market | Yes | ||
| preset | Yes | ||
| strike | Yes | ||
| index_id | No | ||
| notional | Yes | ||
| request_id | No | ||
| start_date | No | ||
| day_counter | No | ||
| maturity_date | No | ||
| months_to_end | No | ||
| months_to_start | No | ||
| forwarding_curve | Yes | ||
| additional_trades | No | ||
| discounting_curve | Yes | ||
| calendar_overrides | No | ||
| market_data_source | Yes | ||
| business_day_convention | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it delivers real behavioral context: market_data_source provenance rules, the engine's three calendar-advance resolution of spot and 3M/6M, and the note that those advances are echoed. It does not discuss error conditions or the assumption behind curve inputs, so not quite 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and then structured as an Args block, with a compact return-value note at the end. The market_data_source definition is verbose, and enumerating redundant sub-cases costs some density, but nearly every line earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 19-parameter pricing tool with no annotations but with an output schema, the description covers provenance, date resolution, curve expectations and returns (summary.fras fields). An agent has enough to invoke correctly without external documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it defines market_data_source's four values, preset requirements (fra block, named presets), the sign of notional, strike as a decimal forward rate, side semantics matching the enum, and the months/dates duality including the 3x6 example. This is far beyond the bare schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Price a forward rate agreement') and anchors it to the endpoint POST /price-fra. Among many 'price_*' siblings, it is immediately distinguishable as the FRA pricer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use/why-not through the market_data_source enumeration, and critically tells the agent not to call the tool when it would have to invent numbers, routing it to ask the user instead. This is unusually strong routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_ois_swapA
Price an OIS (fixed vs compounded overnight) swap (POST /price-ois-swap).
Args:
market_data_source: where the market numbers in this call come from. user_pasted
(the user pasted or typed the numbers in this conversation), user_file (the
user attached a file/screenshot the numbers were read from), engine_example
(an engine example's pricing block, only when the user explicitly asked to run
an example), session (a market previously stored in this session, which
itself came from one of the above). There is no value for estimated, recalled or
placeholder data. If you would have to invent numbers, do not call this tool:
ask the user for the data.
market: as in price_vanilla_swap.
preset: a preset with an ois_swap block (USD_SOFR_OIS: payment lag 2;
EUR_ESTR_OIS: payment lag 0).
swap_type, notional, fixed_rate, effective_date, termination_date | tenor,
spread, index_id, discounting_curve, forwarding_curve: as in
price_vanilla_swap (the overnight index id defaults to the preset's).
payment_lag, averaging_method, lookback_days, lockout_days,
apply_observation_shift, telescopic_value_dates: overnight-leg
parameters; each defaults to the preset's value (noted).
fixed_leg_overrides, overnight_leg_overrides, additional_trades, as_of,
include_flows: as in price_vanilla_swap.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | ||
| tenor | No | ||
| market | Yes | ||
| preset | Yes | ||
| spread | No | ||
| index_id | No | ||
| notional | Yes | ||
| swap_type | Yes | ||
| fixed_rate | Yes | ||
| request_id | No | ||
| payment_lag | No | ||
| lockout_days | No | ||
| include_flows | No | ||
| lookback_days | No | ||
| effective_date | Yes | ||
| averaging_method | No | ||
| forwarding_curve | Yes | ||
| termination_date | No | ||
| additional_trades | No | ||
| discounting_curve | Yes | ||
| calendar_overrides | No | ||
| market_data_source | Yes | ||
| fixed_leg_overrides | No | ||
| telescopic_value_dates | No | ||
| apply_observation_shift | No | ||
| overnight_leg_overrides | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that the overnight-leg parameters default to the preset's values (including concrete preset examples like payment lag 2 for USD_SOFR_OIS) and warns against inventing market data, but says nothing about auth, rate limits, or error behavior. Since an output schema exists, return values need not be explained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and the Args block is scannable, but the repeated 'as in price_vanilla_swap' cross-reference saps self-containedness and forces the agent to consult another tool definition to resolve most parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 26-parameter tool with nested objects, the description covers roughly half the surface and delegates the rest to a sibling. The output schema handles return values, and the market_data_source guidance is thorough, but the unexplained parameters and heavy reliance on price_vanilla_swap leave notable gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 26 parameters, so the description must compensate. It does add real meaning for market_data_source, preset, and the overnight-leg parameters, but punts ten-plus parameters (market, swap_type, notional, curves, overrides, etc.) to 'as in price_vanilla_swap' and never mentions calendar_overrides or request_id at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Price an OIS (fixed vs compounded overnight) swap') plus the endpoint. The parenthetical definition of an OIS clearly separates it from sibling pricing tools such as price_vanilla_swap and price_fra.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-not ('If you would have to invent numbers, do not call this tool: ask the user for the data') and enumerates the valid market_data_source values, which is strong routing guidance. However, it never explicitly contrasts this tool's purpose against price_vanilla_swap beyond deferring parameter docs to it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_swaptionA
Price a swaption (POST /price-swaption).
Args:
market_data_source: where the market numbers in this call come from. user_pasted
(the user pasted or typed the numbers in this conversation), user_file (the
user attached a file/screenshot the numbers were read from), engine_example
(an engine example's pricing block, only when the user explicitly asked to run
an example), session (a market previously stored in this session, which
itself came from one of the above). There is no value for estimated, recalled or
placeholder data. If you would have to invent numbers, do not call this tool:
ask the user for the data.
preset: a preset with swaption + vanilla_swap blocks (EUR_EURIBOR_6M).
underlying: the swap exercised into, as a VanillaSwapTrade (swap_type,
notional, fixed_rate, effective_date, termination_date | tenor, ...).
effective_date: "spot" = exercise_date + preset settlement days
(engine-resolved). For an OIS underlying set underlying_type OisSwap.
exercise_date: European / American. exercise_dates: Bermudan.
settlement_type: Physical (method default from the preset, PhysicalOTC) or
Cash (give settlement_method: CollateralizedCashPrice | ParYieldCurve).
vol: {constant, type, displacement?, id?}, {expiries, tenors, vols, type, id?} (ATM matrix), {payload_type, payload, id?} (SmileCube /
SabrParams / SabrCalibrate given raw) or a surface id in the market. Built
surfaces are SwaptionVolSpec with the preset's swap_index_id.
model: Black | ShiftedBlack | Bachelier (SwaptionModelSpec added,
id <type>_model), {a, sigma, lattice_steps, id?} (HullWhiteLattice
explicit) or a model id in the market.
include_details: pricing.options.swaption_pricing_details (delta/vega/...).
include_diagnostics: per-SABR-surface diagnostics in the response.
summary.swaptions: npv, implied_volatility, atm_forward, annuity.
| Name | Required | Description | Default |
|---|---|---|---|
| vol | Yes | ||
| as_of | No | ||
| model | Yes | ||
| market | Yes | ||
| preset | Yes | ||
| request_id | No | ||
| underlying | Yes | ||
| exercise_date | No | ||
| exercise_type | No | European | |
| exercise_dates | No | ||
| include_details | No | ||
| settlement_type | No | Physical | |
| underlying_type | No | VanillaSwap | |
| forwarding_curve | Yes | ||
| additional_trades | No | ||
| discounting_curve | Yes | ||
| settlement_method | No | ||
| calendar_overrides | No | ||
| market_data_source | Yes | ||
| include_diagnostics | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does substantial work: it explains that settlement_type Physical derives the method from the preset while Cash requires settlement_method, that 'spot' effective_date is engine-resolved via preset settlement days, that built surfaces are wrapped in SwaptionVolSpec with the preset's swap_index_id, and what include_details/include_diagnostics add. It still omits what the market dict must contain and any failure/reversibility behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Structured as a compact, dense Args list where each line addresses a distinct parameter or behavior; little is wasted. It is not front-loaded with a usage summary and the inline cross-references (engine enum names, preset block names) make it long, but the density is justified by a 20-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the brief mention of summary.swaptions (npv, implied_volatility, atm_forward, annuity) is sufficient. For a tool at this complexity, though, leaving three required inputs (market, discounting_curve, forwarding_curve) entirely unexplained is an incompleteness an agent will notice at call time.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Top-level schema description coverage is 0%, so the description must compensate, and it does explain roughly half the arguments well (market_data_source, preset, underlying, exercise_date(s), vol, model, include_details, include_diagnostics). But required arguments such as market, discounting_curve, forwarding_curve and as_of, plus additional_trades and calendar_overrides, are never described, leaving significant gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Price a swaption') plus the underlying endpoint. Against a sibling list containing price_vanilla_swap, price_cap_floor and calibrate_swaption_vol, an agent can immediately tell this is the swaption *pricing* (not calibration) tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit exclusion: 'If you would have to invent numbers, do not call this tool: ask the user for the data,' and constrains engine_example to 'only when the user explicitly asked to run an example.' However, it never routes to the obvious alternatives (calibrate_swaption_vol, calibrate_swaption_model, price_vanilla_swap) or states prerequisites like a stored market being required first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_vanilla_swapA
Price a fixed-vs-IBOR swap (POST /price-vanilla-swap).
Args:
market_data_source: where the market numbers in this call come from. user_pasted
(the user pasted or typed the numbers in this conversation), user_file (the
user attached a file/screenshot the numbers were read from), engine_example
(an engine example's pricing block, only when the user explicitly asked to run
an example), session (a market previously stored in this session, which
itself came from one of the above). There is no value for estimated, recalled or
placeholder data. If you would have to invent numbers, do not call this tool:
ask the user for the data.
market: {"session": name}, an engine pricing block (used verbatim)
or {curves: [...], indices: [...]} (build_curve results allowed).
preset: a preset with a vanilla_swap block (EUR_EURIBOR_6M,
EUR_EURIBOR_3M): schedule, fixed and floating leg conventions.
swap_type: Payer (pay fixed) or Receiver.
notional: constant notional (> 0).
fixed_rate: decimal, e.g. 0.032.
effective_date: YYYY-MM-DD or spot (as_of + the preset's settlement
days, resolved by the engine's /calendar-advance).
discounting_curve, forwarding_curve: curve ids in the market.
termination_date: YYYY-MM-DD; or give tenor (5Y, resolved by the
engine from the effective date, Unadjusted).
spread: floating-leg spread (decimal, default 0.0).
index_id: floating index id in the market (default: the preset's index id).
fixed_leg_overrides, floating_leg_overrides: replace conventions
(frequency, day_counter, payment_convention, notionals, schedule rules).
additional_trades: more swaps for the same request (same preset/market).
as_of: YYYY-MM-DD; required unless market is a pricing block.
include_flows: ask the engine for per-leg cash flows.
Result: uniform shape + notes (every convention with its source),
date_resolution (the /calendar-advance calls) and summary.swaps
(npv, fair_rate, leg npvs selected from the response).
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | ||
| tenor | No | ||
| market | Yes | ||
| preset | Yes | ||
| spread | No | ||
| index_id | No | ||
| notional | Yes | ||
| swap_type | Yes | ||
| fixed_rate | Yes | ||
| request_id | No | ||
| include_flows | No | ||
| effective_date | Yes | ||
| forwarding_curve | Yes | ||
| termination_date | No | ||
| additional_trades | No | ||
| discounting_curve | Yes | ||
| calendar_overrides | No | ||
| market_data_source | Yes | ||
| fixed_leg_overrides | No | ||
| floating_leg_overrides | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does substantial work: it discloses market-data provenance rules, the /calendar-advance date resolution, defaults (spread 0.0, preset index), and the response shape (notes, date_resolution, summary.swaps). It stops short of stating the operation is side-effect free/read-only or whether it requires session state or auth, which an annotation would normally cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and the Args block is well structured with each line earning its place given the 0% schema coverage. The trailing "Result" paragraph is mildly redundant since an output schema exists, and the block is long, but length here is justified by parameter breadth.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 20-parameter, nested-object, packed-structure tool the description is nearly complete: provenance, dates, curves, overrides, batching, and return shape are all covered. Remaining gaps are the unmentioned request_id/calendar_overrides and the absence of any pointer to related tools (fair_rate, swap_dv01, reprice_with) an agent might need next.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% but the Args block documents the overwhelming majority of the 20 parameters with formats, defaults, and value semantics (e.g. fixed_rate "decimal, e.g. 0.032", effective_date "spot", swap_type Payer/Receiver, overrides meaning, additional_trades batching). Only request_id and calendar_overrides go unmentioned, which is a trivial gap given the otherwise dense compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ("Price a fixed-vs-IBOR swap") plus the underlying endpoint, which cleanly separates it from the sibling pricing tools like price_ois_swap and price_fra. An agent knows exactly what instrument is being valued without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Strong conditional guidance for market_data_source (user_pasted vs user_file vs engine_example vs session) and an explicit when-not: "If you would have to invent numbers, do not call this tool: ask the user for the data." However it never routes to alternative pricing siblings such as fair_rate, swap_dv01, or reprice_with, so cross-tool selection is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_yoy_inflation_cap_floorA
Price a year-on-year inflation cap / floor / collar (POST /price-year-on-year-inflation-cap-floor).
fixings REQUIRED as in price_yoy_inflation_swap. vol:
{constant: 0.01, type: Black|Bachelier|UnitDisplacedBlack, id?} (a
YoYOptionletVolSpec the tool adds with the preset's conventions) or a surface
id. cap_rate for Cap/Collar, floor_rate for Floor/Collar.
Args:
market_data_source: where the market numbers in this call come from. user_pasted
(the user pasted or typed the numbers in this conversation), user_file (the
user attached a file/screenshot the numbers were read from), engine_example
(an engine example's pricing block, only when the user explicitly asked to run
an example), session (a market previously stored in this session, which
itself came from one of the above). There is no value for estimated, recalled or
placeholder data. If you would have to invent numbers, do not call this tool:
ask the user for the data.
| Name | Required | Description | Default |
|---|---|---|---|
| vol | Yes | ||
| as_of | No | ||
| tenor | No | ||
| market | Yes | ||
| preset | No | EUR_HICP | |
| spread | No | ||
| fixings | Yes | ||
| gearing | No | ||
| cap_rate | No | ||
| notional | Yes | ||
| frequency | No | ||
| floor_rate | No | ||
| request_id | No | ||
| cap_floor_type | Yes | ||
| effective_date | No | as_of | |
| inflation_curve | Yes | ||
| termination_date | No | ||
| additional_trades | No | ||
| discounting_curve | Yes | ||
| calendar_overrides | No | ||
| inflation_index_id | Yes | ||
| market_data_source | Yes | ||
| schedule_overrides | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. It does disclose useful behavior beyond the schema: the vol spec 'the tool adds with the preset's conventions', the conditional role of cap_rate vs floor_rate, and the data-provenance contract. But it says nothing about compute cost, error behavior, or mutation/state effects, leaving real gaps for a pricing tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then the two param-critical notes, then the provenance contract. Efficient prose overall, though the market_data_source paragraph is long and could be tightened by listing the four enum values against their meanings more compactly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description does not need to explain return values. It supplies the crucial inputs and the invocation constraint for this 23-parameter tool, leaving only the obvious scalar fields implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and largely does for the non-obvious parameters: it documents fixings (required, format per price_yoy_inflation_swap), the vol object shape and enum values, the surface-id alternative, and the cap_rate/floor_rate conditioning. The many self-explanatory params (notional, spread, gearing, dates, curves) are left to their names, which is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb (Price), a specific resource (year-on-year inflation cap / floor / collar), and the underlying endpoint. It also distinguishes itself from the sibling price_yoy_inflation_swap by naming the instrument difference and referencing the sibling for the shared fixings format.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear exclusion ('If you would have to invent numbers, do not call this tool: ask the user') and detailed provenance guidance for market_data_source, including when engine_example is allowed ('only when the user explicitly asked to run an example'). It does not, however, explicitly route between this tool and price_cap_floor or price_yoy_inflation_swap, so the alternatives comparison is only partial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_yoy_inflation_swapB
Price a year-on-year inflation swap (POST /price-year-on-year-inflation-swap).
The market must carry the YoY inflation index and a YoYInflation curve.
fixings (YoY rates) is REQUIRED for the same reason as in
price_zc_inflation_swap. Fixed and YoY legs share the preset's schedule
(annual by default); spread is added to the YoY rate.
Args:
market_data_source: where the market numbers in this call come from. user_pasted
(the user pasted or typed the numbers in this conversation), user_file (the
user attached a file/screenshot the numbers were read from), engine_example
(an engine example's pricing block, only when the user explicitly asked to run
an example), session (a market previously stored in this session, which
itself came from one of the above). There is no value for estimated, recalled or
placeholder data. If you would have to invent numbers, do not call this tool:
ask the user for the data.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | ||
| tenor | No | ||
| market | Yes | ||
| preset | No | EUR_HICP | |
| spread | No | ||
| fixings | Yes | ||
| notional | Yes | ||
| frequency | No | ||
| swap_type | Yes | ||
| fixed_rate | Yes | ||
| request_id | No | ||
| include_flows | No | ||
| effective_date | No | as_of | |
| inflation_curve | Yes | ||
| termination_date | No | ||
| additional_trades | No | ||
| discounting_curve | Yes | ||
| calendar_overrides | No | ||
| inflation_index_id | Yes | ||
| market_data_source | Yes | ||
| schedule_overrides | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden and does add real context: the market must carry a YoY inflation index and YoYInflation curve, fixings are REQUIRED, and fixed/YoY legs share the preset schedule. However it is silent on permissions, error behavior, and what the pricing result contains (though an output schema exists).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and endpoint, and formatted with a clear Args section. The market_data_source block is verbose and repetitive, while other equally complex parameters get no prose at all, so the space allocation is unbalanced.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 21-parameter, 9-required tool with 0% schema coverage and no annotations, the description explains only a handful of inputs and omits key concepts (market object shape, preset selection, curve naming, additional_trades semantics). Output return values are covered by the output schema, but the input side is substantially under-specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 21 parameters, so the description must compensate, and it does so for market_data_source (a full provenance enum explanation) and for spread/fixings/frequency. But the majority of parameters (market, preset, curve ids, additional_trades, calendar_overrides, schedule_overrides, include_flows, request_id) remain unexplained in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Price a year-on-year inflation swap') plus the underlying endpoint, and cross-references the sibling price_zc_inflation_swap to signal the family it belongs to. It stops short of an explicit differentiator against price_yoy_inflation_cap_floor, so sibling discrimination is only partial.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use vs alternatives compared with price_zc_inflation_swap or price_yoy_inflation_cap_floor. It does give a strong negative rule within the market_data_source text ('If you would have to invent numbers, do not call this tool: ask the user'), which is genuine usage guidance but scoped to one argument rather than the tool as a whole.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_zc_inflation_swapA
Price a zero-coupon inflation swap (POST /price-zero-coupon-inflation-swap).
The market must carry the inflation index and a ZeroInflation curve
(pricing.inflation; see the inflation examples). fixings is
REQUIRED: the engine needs the CPI fixing at start minus the observation lag
(and the curve helpers need the recent history) and this server has no
market-data source; the tool sets them on the index and says so in notes.
Args:
market_data_source: where the market numbers in this call come from. user_pasted
(the user pasted or typed the numbers in this conversation), user_file (the
user attached a file/screenshot the numbers were read from), engine_example
(an engine example's pricing block, only when the user explicitly asked to run
an example), session (a market previously stored in this session, which
itself came from one of the above). There is no value for estimated, recalled or
placeholder data. If you would have to invent numbers, do not call this tool:
ask the user for the data.
inflation_index_id: id in pricing.inflation.inflation_indices.
fixings: [{date: "2024-12-01", value: 126.16}, ...] monthly CPI levels.
swap_type: Payer pays fixed. notional, fixed_rate: decimal.
start_date: YYYY-MM-DD or as_of. maturity_date | tenor.
preset: a preset with a zc_inflation_swap block (default EUR_HICP).
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | ||
| tenor | No | ||
| market | Yes | ||
| preset | No | EUR_HICP | |
| fixings | Yes | ||
| notional | Yes | ||
| swap_type | Yes | ||
| fixed_rate | Yes | ||
| request_id | No | ||
| start_date | No | as_of | |
| include_flows | No | ||
| maturity_date | No | ||
| inflation_curve | Yes | ||
| additional_trades | No | ||
| discounting_curve | Yes | ||
| calendar_overrides | No | ||
| inflation_index_id | Yes | ||
| market_data_source | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does so fairly well: it states the market must carry the inflation index plus a ZeroInflation curve, that fixings are mandatory because the server has no market-data source, and that the tool mutates the index and reports this in notes. It omits error/failure behavior and any auth or rate-limit context, but for a stateless pricing call this is solid disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the remainder is organized as a tight Args block with no filler. A few lines are dense but every sentence contributes actionable detail rather than restating the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be described, and the description covers the genuinely tricky provenance/required-fixings logic well. Yet for an 18-parameter tool the unexplained required curve params (discounting_curve, inflation_curve) and trade-shaping params leave the agent partially unequipped to construct a valid call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does for the high-risk params: market_data_source's four enum values are spelled out, and the fixings shape/semantics are given as an example. However, two REQUIRED params (discounting_curve, inflation_curve) receive no explanation at all, along with market, additional_trades, calendar_overrides, include_flows, and request_id, leaving substantial gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Price a zero-coupon inflation swap') and even gives the backing endpoint. The 'zero-coupon' qualifier cleanly separates it from sibling tools like price_yoy_inflation_swap without the agent needing to open a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The market_data_source paragraph gives explicit when/when-not guidance, including the strong exclusion: 'If you would have to invent numbers, do not call this tool: ask the user for the data.' It also flags fixings as REQUIRED and explains why. It stops short of routing to named alternatives (e.g. the YoY or multi-trade siblings).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_zero_coupon_bondA
Price a zero-coupon bond (POST /price-zero-coupon-bond).
Args:
market_data_source: where the market numbers in this call come from. user_pasted
(the user pasted or typed the numbers in this conversation), user_file (the
user attached a file/screenshot the numbers were read from), engine_example
(an engine example's pricing block, only when the user explicitly asked to run
an example), session (a market previously stored in this session, which
itself came from one of the above). There is no value for estimated, recalled or
placeholder data. If you would have to invent numbers, do not call this tool:
ask the user for the data.
preset: a preset with a zero_coupon_bond block (EUR_FIXED_BOND,
settlement T+3 on TARGET).
maturity_date: YYYY-MM-DD, or tenor counted (by the engine, Unadjusted)
from issue_date when given else from as_of.
issue_date: YYYY-MM-DD, as_of or omitted (engine: null date).
settlement_days, redemption: default from the preset (noted).
include_details: pricing.options.bond_pricing_details (duration, convexity).
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | ||
| tenor | No | ||
| market | Yes | ||
| preset | Yes | ||
| issue_date | No | ||
| redemption | No | ||
| request_id | No | ||
| face_amount | Yes | ||
| maturity_date | No | ||
| include_details | No | ||
| settlement_days | No | ||
| yield_overrides | No | ||
| additional_trades | No | ||
| discounting_curve | Yes | ||
| calendar_overrides | No | ||
| market_data_source | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full load. It usefully discloses that settled params default from the preset, how tenor is counted from issue_date/as_of, and that estimated or recalled data is not accepted, but it says nothing about permissions, side effects, determinism, or failure behavior for a POST pricing call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in one line and the remainder is an efficient Args list with no filler. It is appropriately sized for a 16-parameter tool, though the indented bullets are dense enough to be slightly harder to scan than a tighter format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be documented, and the source/guardrail guidance is strong. Still, for a 16-parameter tool with nested objects and 0% schema coverage, leaving required inputs like market and discounting_curve entirely unexplained is a meaningful completeness gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description has to compensate, and it does explain market_data_source, preset, maturity_date, issue_date, settlement_days/redemption, and include_details. However, two required parameters (market, discounting_curve) and several others (as_of, request_id, additional_trades, yield_overrides, calendar_overrides, face_amount) get no explanation at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line gives a precise verb+resource ("Price a zero-coupon bond") plus the underlying endpoint, which is enough for an agent to separate it from the many other bond pricing siblings. It stops short of explicitly contrasting itself with price_fixed_rate_bond or price_floating_rate_bond, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The market_data_source enumeration spells out exactly which situations map to which value (pasted, file, engine example, session) and states an explicit exclusion: "If you would have to invent numbers, do not call this tool: ask the user for the data." It gives clear context and a when-not rule, but names no alternative sibling tool, so it misses the top mark.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quantra_healthA
Engine liveness, verbatim from GET /health.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. 'Verbatim from GET /health' usefully signals this is a thin read-only passthrough with no side effects, but it says nothing about the failure/healthy distinction, auth requirements, or latency/rate behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded clause with zero filler; the identity of the tool and its data source are in the first few words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter liveness probe with an output schema already defining the return shape, the description is nearly sufficient. The only missing piece is how to interpret an unhealthy result or whether any auth/session context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to clarify beyond the schema; baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and intent: engine liveness, plus the underlying GET /health endpoint. An agent can tell it apart from pricing/build siblings, though there is no explicit contrast drawn with the nearby meta/endpoint tools (quantra_meta, list_endpoints, engine_schema).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use statement, no mention of prerequisites (auth, sessions) and no alternative named. Usage is only inferable from the word 'liveness'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quantra_metaA
Engine metadata, verbatim from GET /meta.
Call this first: it tells you the engine's API version, QuantLib
version, product list and endpoint list. The response field is the
engine body unchanged.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose one useful trait: the response is the engine body passed through unchanged ("verbatim from GET /meta"). Beyond that it says nothing about idempotency, auth needs, or rate limits, which for a zero-arg read call is a moderate but not severe gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the identity of the resource and immediately followed by the action-oriented 'call this first' guidance. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description need not document return values, and it still flags the key ``response`` field. For a zero-parameter metadata call, the description plus schema and output schema are sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the baseline there is nothing for the description to disambiguate. Schema coverage is 100% and the empty argument object matches the description's silence on inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (engine metadata) and its provenance (verbatim from GET /meta), which is clear. It is reasonably distinguishable from siblings like quantra_health, list_endpoints, and engine_schema, though the boundary between 'metadata' and those tools is not spelled out.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Call this first" gives explicit situational guidance and the description lists what the call yields (API version, QuantLib version, product list, endpoint list). No alternatives or when-not-to-use conditions are named, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reprice_withA
Test a hypothesis: change one or more request fields and reprice.
Args:
result_or_request: a previous pricing tool result (its endpoint and echoed
request are used; its response is the base unless
reprice_base), or an explicit {"endpoint": "/price-swaption", "body": {...}}.
market_data_source: where the market numbers in the request come from. A previous
tool result carries its own declaration and it is reused (the argument may be
omitted or must agree); for an explicit {endpoint, body} or a result without
one it is required: user_pasted (the user pasted or typed the numbers in
this conversation), user_file (the user attached a file/screenshot the
numbers were read from), engine_example (an engine example's pricing block,
only when the user explicitly asked to run an example), session (a market
previously stored in this session, which itself came from one of the above).
There is no value for estimated, recalled or placeholder data. If you would have
to invent numbers, do not call this tool: ask the user for the data.
changes: [{path, value}] or [{path, bump_bp}]; path is dotted /
indexed into the request body (swaptions[0].swaption.settlement_method,
pricing.rates.curves[0].points[2].point.rate, pricing.as_of_date,
pricing.rates.curves[0].interpolator). bump_bp adds
bump_bp / 10000 to a numeric field.
reprice_base: also reprice the unchanged request now (default: reuse the
given result's response).
validate: check the changed body against the vendored schema before sending.
Returns changes_applied (before / after per change), request_diff (every
leaf that differs between the two requests), base and changed (complete
uniform results, each replayable from its request) and differences: the
numeric top-level fields of the first priced item with difference = changed - base. Nothing else is computed. The engine's error, if any, is verbatim.
| Name | Required | Description | Default |
|---|---|---|---|
| changes | Yes | ||
| validate | No | ||
| request_id | No | ||
| reprice_base | No | ||
| result_or_request | Yes | ||
| market_data_source | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discharges it well: it states that the engine's error is verbatim, that 'Nothing else is computed,' how the base response is reused vs. re-priced, and the provenance rules for market numbers. It omits any note on failure modes beyond engine errors or on what validate does when it fails.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a one-sentence purpose followed by a clearly labeled Args/Returns structure, so it scans well. It is dense and long, and the Returns paragraph partly restates what the output schema already exposes, but nearly every line carries usable detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter nested tool with an output schema, the description is close to complete: argument semantics, reuse behavior, and return shape are all covered, and return-value detail is legitimately omitted-lite since an output schema exists. The undocumented request_id and lack of sibling routing are the remaining gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the top-level arguments, so the description must compensate and largely does: it defines result_or_request's two accepted shapes, spell out each market_data_source enum value, explains path/bump_bp syntax with concrete dotted examples, and clarifies reprice_base and validate defaults. Only request_id goes undocumented, a minor omission against otherwise thorough coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line states a specific verb and goal: 'change one or more request fields and reprice,' framed as hypothesis testing. It clearly distinguishes a reprice-with-edits operation from the sibling price_* tools, though it doesn't explicitly name which sibling (e.g. scenario, compare_results) to use instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Strong conditional guidance: the market_data_source section enumerates exactly when each provenance value applies and states the exclusion 'If you would have to invent numbers, do not call this tool: ask the user for the data.' It also constrains engine_example to explicit user requests. It does not, however, contrast this tool against siblings like scenario or compare_results.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sample_vol_surfaceB
Sample volatility surfaces on a grid (POST /sample-vol-surfaces) from a raw
SampleVolSurfacesRequest body (pricing with the surfaces, queries).
Validated, then forwarded; see the volsample_* examples. summary: per
result vol_id, vol type, grid sizes.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| request_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden, and it does disclose two things: the input is validated then forwarded, and the ``summary`` reports vol_id, vol type, and grid sizes. It says nothing about auth needs, cost/rate limits, or failure modes for what is a compute-style POST operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then supporting detail; no filler sentences. The backtick-heavy jargon and route reference make it slightly dense for its length, but every clause adds information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be spelled out, and the body description is adequate for a passthrough endpoint. But with zero annotations and an opaque body schema, the definition leaves permission, cost, and error behavior unspecified for a POST compute tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the body is just additionalProperties:true, so the description usefully reveals the body's expected shape (``pricing`` carrying the surfaces, plus ``queries``). However, the second parameter (request_id) is never mentioned, so it only partially compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Sample volatility surfaces on a grid") plus the underlying HTTP route, which clearly separates it from pricing/calibration siblings like calibrate_swaption_vol or price_swaption. The core action is unambiguous, though it doesn't name a specific sibling it could be confused with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use/when-not statement or named alternative among the siblings. It defers entirely to "see the ``volsample_*`` examples," which is a pointer rather than guidance and references identifiers that don't appear in the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scenarioA
Reprice a swap under named market variants and tabulate NPV vs base.
Args:
market, trade, as_of: as in swap_dv01.
market_data_source: where the market numbers in this call come from. user_pasted
(the user pasted or typed the numbers in this conversation), user_file (the
user attached a file/screenshot the numbers were read from), engine_example
(an engine example's pricing block, only when the user explicitly asked to run
an example), session (a market previously stored in this session, which
itself came from one of the above). There is no value for estimated, recalled or
placeholder data. If you would have to invent numbers, do not call this tool:
ask the user for the data.
scenarios: [{name, bumps: [{curve, bp, pillar?}], replace_quotes: [{curve, pillar, value}]}]. A bump without pillar moves every pillar
of that curve; pillar is a label ("5Y", "3x6") or a 0-based
index; replace_quotes sets a pillar's quote to an explicit value.
Result: table = [{name, npv, change = npv - base_npv, edits}] starting with
base; calls = one complete pricing result per row with the quotes moved.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | ||
| trade | Yes | ||
| market | Yes | ||
| scenarios | Yes | ||
| request_id | No | ||
| calendar_overrides | No | ||
| market_data_source | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it does substantive work: it defines the data-provenance contract, forbids estimated/recalled data, and states that scenarios move quotes during the call. It stops short of 5 by not stating reversibility of market mutations or any rate-limit/error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then organizes Args and Result into scannable sections with no filler. The market_data_source block is long but each enumerated value earns its place; only the result restatement is arguably redundant given an output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex pricing tool with nested objects it explains the scenario grammar, the provenance requirement, and the table/calls return shape. The opaque free-form 'market' object and unmentioned calendar_overrides/request_id are the remaining holes, but overall it is callable from the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Top-level schema coverage is effectively 0%, and the description compensates well for market_data_source and the nested scenarios/bumps/replace_quotes structure. But market, trade, as_of, calendar_overrides and request_id receive no explanation beyond 'as in swap_dv01', leaving real gaps for a 7-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Reprice a swap') and the distinctive output ('tabulate NPV vs base' under named market variants), which separates it from siblings like swap_dv01, key_rate_ladder and reprice_with. The reference to swap_dv01 for shared arg semantics is a genuine differentiation aid.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-not guidance ('If you would have to invent numbers, do not call this tool: ask the user for the data') and constrains engine_example to only when the user asked for an example. It does not, however, contrast itself against the closest sibling alternatives for repricing, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_deleteB
Delete a stored session item; deleted is false if it did not exist.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that a missing item returns deleted=false, which conveys idempotent-like behavior, but it omits permissions, permanence, and side effects of deletion.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with a compact secondary clause. Every part earns its place and there is no wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, though the description still notes the deleted flag. For a one-parameter destructive tool with no annotations, the description is minimally adequate but lacks guidance on parameter usage and mutation side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the undocumented 'name' parameter. It only vaguely implies a stored session item exists, without clarifying what 'name' refers to or its format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Delete a stored session item.' It distinguishes itself from siblings like session_get, session_list, and session_put through the delete action and adds a return-value condition. An agent can immediately identify the operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explain when to use this tool versus alternatives, nor does it mention any prerequisites or exclusions. It only states what the tool does, leaving usage context entirely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_getB
Return a stored session item (value plus a summary).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the return includes a value and a summary, which is useful behavioral context. However, it does not state that the operation is read-only, what happens if the named item is missing, or any permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It conveys the core action and return shape efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter retrieval tool with an output schema, the description covers the return payload and is minimally adequate. It leaves gaps around parameter meaning and usage context, but the output schema already documents return values, reducing the description's burden.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single required parameter 'name' is not described at all. The description's phrase 'stored session item' weakly implies that 'name' identifies the item, but no syntax, constraints, or meaning are added beyond the schema's bare property title.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Return') and resource ('stored session item'), and notes the return payload ('value plus a summary'). It does not explicitly name or distinguish itself from siblings like session_put, session_list, or session_delete, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as session_list or session_put. The implied usage is retrieval of a stored item, but the description provides no explicit context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_listB
List stored session items (name, kind, stored_at, a short summary).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does not disclose that this is a read-only, side-effect-free operation, nor whether results are paginated, ordered, bounded, or scoped to a session/user. It only lists the item fields, which is largely duplicated by the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the verb and resource come first and the parenthetical field list is compact. It is efficient though very terse given the absence of any other guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value documentation is not required, and for a zero-parameter list tool the description is minimally viable. Still, with no annotations and no usage context, an agent gets no signal about read-only safety or how this pairs with session_put/session_get/session_delete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('stored session items') and enumerates the fields of each item, so the agent knows exactly what comes back. It does not, however, explicitly differentiate itself from siblings like session_get or session_delete, relying on the name alone to imply list-vs-fetch-vs-delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description contains no when-to-use guidance, no prerequisites, and no mention of alternatives such as session_get (retrieve one item) or session_delete. Usage is only weakly implied by the verb 'List'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_putA
Store a curve, index or market block under a name for later calls.
Args:
name: free-form handle, e.g. sofr.
kind: curve (an engine TermStructure or a build_curve result,
whose indices are kept alongside), index (an IndexDef) or
market ({curves: [...], indices: [...]}).
value: the object; it is validated against the engine schema.
market_data_source: where the numbers in value come from. user_pasted
(the user pasted or typed the numbers in this conversation), user_file
(the user attached a file/screenshot the numbers were read from),
engine_example (an engine example's pricing block, only when the user
explicitly asked to run an example), session (a market previously
stored in this session, which itself came from one of the above). There is
no value for estimated, recalled or placeholder data. If you would have to
invent numbers, do not call this tool: ask the user for the data. A
build_curve result already carries its declaration; the two must agree.
In-memory only, per server process, least-recently-used eviction at
QUANTRA_SESSION_MAX_ITEMS (default 64). Reference it later as
{"session": "<name>"} in bootstrap_curve (and pricing tools); the stored
market_data_source is reported in their notes.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| name | Yes | ||
| value | Yes | ||
| market_data_source | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses in-memory per-process storage, LRU eviction at QUANTRA_SESSION_MAX_ITEMS (default 64), validation of value against the engine schema, and the provenance semantics required of market_data_source. It also explains how the stored object is referenced later.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the one-line purpose before the Args block, and the closing paragraph on eviction/referencing is genuinely useful. Some of the kind and market_data_source prose is dense, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter mutation with an output schema available, the description covers storage lifetime, capacity limits, validation behavior, provenance requirements, and the retrieval path. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: every one of the four parameters is documented with meaning and examples, including the enum values for kind and the full taxonomy for market_data_source. It adds far more than the bare schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (store) and resource (curve, index or market block) plus the mechanism (under a name for later calls), which cleanly separates it from session_get/list/delete. An agent can tell immediately that this is the write side of a session key-value store.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear when-to-use ('for later calls') and an explicit when-not ('If you would have to invent numbers, do not call this tool: ask the user'). It also enumerates the market_data_source situations as a decision guide. It stops short of naming alternative tools for the same data (e.g. passing values inline to bootstrap_curve), so not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
swap_dv01A
Parallel DV01 of a swap: reprice with every quote of the selected curve(s) bumped.
Args:
market: as in the pricing tools (session, engine pricing block or build_curve
results).
market_data_source: where the market numbers in this call come from. user_pasted
(the user pasted or typed the numbers in this conversation), user_file (the
user attached a file/screenshot the numbers were read from), engine_example
(an engine example's pricing block, only when the user explicitly asked to run
an example), session (a market previously stored in this session, which
itself came from one of the above). There is no value for estimated, recalled or
placeholder data. If you would have to invent numbers, do not call this tool:
ask the user for the data.
trade: the swap: product (vanilla_swap | ois_swap), preset,
discounting_curve, forwarding_curve and the price_vanilla_swap /
price_ois_swap economics (swap_type, notional, fixed_rate, effective_date
'spot' | date, tenor | termination_date, spread, index_id, overrides).
bump_bp: size of the bump in basis points (default 1, positive; added to every
helper rate / spread; futures prices move by -bp/100; the method sets the sign).
method: centered (default) = (NPV(+bp) - NPV(-bp)) / 2, three engine calls;
up = NPV(+bp) - NPV(base); down = NPV(base) - NPV(-bp).
scope: all (discounting and forwarding curves together), discounting
or forwarding.
as_of: required unless market is a pricing block.
Result: base_npv, npvs (every per-call NPV: base, up, down), dv01,
dv01_definition (the exact difference taken for the method), bumped_quotes
(every quote moved per side, from/to) and calls = the complete pricing results
(each with its echoed request). Nothing else is computed; the arithmetic is cited
at quantra://methodology/connector-analytics.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | ||
| scope | No | all | |
| trade | Yes | ||
| market | Yes | ||
| method | No | centered | |
| bump_bp | No | ||
| request_id | No | ||
| calendar_overrides | No | ||
| market_data_source | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that centered costs three engine calls, how bump signs are applied (positive, futures move by -bp/100), what the returned fields are, and where the arithmetic is documented. Auth/rate-limit behavior is not covered, but that is peripheral for a pure computation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence and each subsequent block maps to an argument, so the length is mostly earned. Still, the trade block inventory is somewhat verbose and could defer more to the pricing-tool docs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 9-parameter tool with nested objects, the description covers the decision-critical pieces (data provenance, method, scope, output fields). Minor omissions (request_id, calendar_overrides) and the output schema already existing keep it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Top-level schema description coverage is effectively 0%, so the description must compensate and largely does: it explains market, market_data_source, trade, bump_bp sign/units, method formulas, scope values, and the as_of requirement. Only request_id and calendar_overrides go undocumented, leaving a modest gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with precision: 'Parallel DV01 of a swap: reprice with every quote of the selected curve(s) bumped.' This clearly separates it from sibling analytics tools like key_rate_ladder (key-rate ladders) and scenario (generic shocks).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives strong in-tool guidance on the market_data_source values and explicitly forbids inventing data ('If you would have to invent numbers, do not call this tool: ask the user for the data'). It does not, however, name alternative siblings (key_rate_ladder, reprice_with) or say when this tool is preferred over them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
47 tool updates
v0.1.4- First observed
bootstrap_curve - First observed
bootstrap_inflation_curve - First observed
build_curve - First observed
build_query - First observed
build_value_curve - First observed
calendar_advance - First observed
calendar_business_days - First observed
calendar_holidays - First observed
calibrate_swaption_model - First observed
calibrate_swaption_vol - First observed
compare_results - First observed
curve_from_pasted_table - First observed
engine_request - First observed
engine_schema - First observed
explain_method - First observed
fair_rate - First observed
get_example - First observed
get_preset - First observed
key_rate_ladder - First observed
list_endpoints - First observed
list_enums - First observed
list_examples - First observed
list_presets - First observed
price_callable_fixed_rate_bond - First observed
price_cap_floor - First observed
price_cds - First observed
price_equity_option - First observed
price_fixed_rate_bond - First observed
price_floating_rate_bond - First observed
price_fra - First observed
price_ois_swap - First observed
price_swaption - First observed
price_vanilla_swap - First observed
price_yoy_inflation_cap_floor - First observed
price_yoy_inflation_swap - First observed
price_zc_inflation_swap - First observed
price_zero_coupon_bond - First observed
quantra_health - First observed
quantra_meta - First observed
reprice_with - First observed
sample_vol_surface - First observed
scenario - First observed
session_delete - First observed
session_get - First observed
session_list - First observed
session_put - First observed
swap_dv01
TDQS
Scored across 47 tools
Each tool targets a distinct instrument, engine endpoint, or analytics function, and descriptions clearly distinguish overlapping tools (e.g., build_curve vs build_value_curve vs curve_from_pasted_table; swap_dv01 vs key_rate_ladder vs scenario). Minor ambiguity remains among reprice/analytics tools and curve-building helpers, but an agent can select correctly from descriptions.
All names use snake_case, but the pattern is mixed: many are verb_noun (price_vanilla_swap, build_curve, list_presets), while others are noun-only (fair_rate, scenario, swap_dv01) or have a domain prefix (calendar_advance, session_put, engine_request). The convention is still readable and mostly predictable by domain.
47 tools is well above the 3-15 sweet spot and exceeds the 25+ threshold that signals a heavy surface. While the domain is complex, the sheer number increases selection cost and makes it likely that some tools overlap in agent use; each may be individually justified but the set is too large for smooth MCP use.
The surface covers health/meta, endpoint discovery, calendars, curve construction, bootstrapping, vol calibration/sampling, pricing for all major asset classes, analytics (DV01, key-rate, scenario, fair rate, reprice, compare), session storage, examples, and methodology explanation. The engine_request escape hatch prevents dead ends for any unwrapped endpoint, so coverage is effectively complete.
Maintenance
Related MCP Connectors
Sportsbook-derived no-vig fair value with confidence, provenance, and history over REST/MCP.
Live prices, perps, prediction markets and a paper trading desk over one MCP.
Option analytics over the SYNTH sample or a permitted chain: Greeks, positioning, payoffs, plots.
Commodity price indices, forward curves and catalog search. Requires a General Index account.
Related MCP Servers
- AlicenseAqualityAmaintenance63 deterministic quant computation tools for autonomous financial agents. Options pricing, derivatives, risk metrics, portfolio optimization, statistics, crypto/DeFi, macro/FX, time value of money. 1,000 free calls/day, no signup required.7412MIT
- AlicenseNot gradedqualityBmaintenanceProvides option and portfolio analytics through validated numerical methods, exposing tools for pricing, Greeks, implied volatility, volatility surfaces, and American options via MCP.MIT
- AlicenseNot gradedqualityBmaintenanceEnables users to compute European option prices and sensitivity metrics, run Monte Carlo GBM simulations, calculate historical/parametric VaR/CVaR, evaluate bond duration and convexity, and interpolate Nelson-Siegel yield curves through MCP.7MIT
- AlicenseNot gradedqualityBmaintenanceEnables analytical pricing of European options and calculation of first- and second-order Greeks including Delta, Gamma, Vega, Theta, and Rho through MCP. It also supports related quantitative finance analytics such as Monte Carlo simulations, VaR/CVaR, bond duration, and yield curve interpolation.7MIT