Skip to main content
Glama

Server Details

FRED macro data, Treasury yields, FX rates & macro indicators for AI agents. Pay-per-query via x402.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
99.9% over 78 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
zev-lll/lastlook-data
GitHub Stars
0
ChatGPT
–
Claude
–

TDQS

A3.8/5.0

Scored across 26 tools

Disambiguation3/5

The set has many overlapping paths to the same data: bundles duplicate individual endpoints (e.g. get_bundle_rate_environment vs get_yield_curve/get_policy_spread, get_bundle_crypto vs get_crypto_price, get_bundle_fx_dashboard vs get_fx_rate_current), and get_current_value/get_series/get_value_by_date/get_treasury_yield_current all retrieve FRED readings. Descriptions do provide guidance on when to use bundles versus granular calls, but an agent still faces non-trivial selection ambiguity among similar data-access tools.

Naming Consistency5/5

Tool names are consistently snake_case and follow a verb_noun pattern throughout. Most use get_* for retrieval, while calc_refinance and grade_mortgage_offer are clear action-verb variants rather than inconsistent naming styles.

Tool Count3/5

At 26 tools, the surface is heavy for a single server, though the broad domain (macro data, rates, mortgage analytics, FX, crypto, and SEC fundamentals) explains much of the count. The presence of both bundled and granular endpoints for the same data makes the set feel somewhat larger than necessary.

Completeness4/5

Coverage is strong for economic indicators, mortgage decision support, crypto, FX, and basic public-company fundamentals. Minor gaps remain, such as no way to discover supported FRED series IDs or crypto/FX symbols, no stock price quote tool, and limited EDGAR coverage beyond company fundamentals.

Available Tools

26 tools
calc_refinanceRefinance CalculatorA
Read-onlyIdempotent
Inspect

Should this borrower refinance? Give the current rate, balance and years remaining; returns the new monthly payment, monthly savings, break-even month, net dollar benefit over the years they expect to stay, and a verdict (worth_considering / marginal / not_worth_it). If new_rate is omitted, uses today's market rate from the Optimal Blue locked-rate index for the borrower's credit score and LTV segment. Price: $0.35 USDC per call via x402 (Base or Solana).

NameRequiredDescriptionDefault
ltvNoLoan-to-value percent — selects the market-rate segment
balanceYesRemaining principal balance in USD
new_rateNoQuoted new rate in percent. Omit to use today's market rate.
new_termNoNew loan term in years (default 30)
credit_scoreNoFICO score — selects the market-rate segment
current_rateYesCurrent note rate in percent, e.g. 7.25
closing_costsNoTotal refinance closing costs in USD (default 2% of balance)
years_in_homeNoYears the borrower expects to keep the loan (default 7)
remaining_yearsNoYears left on the current loan (default 30)

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the description wisely spends its words elsewhere: it discloses the x402 price and chains ($0.35 USDC on Base or Solana) and the external data dependency (Optimal Blue locked-rate index) that justifies openWorldHint. It does not say what happens when new_rate is omitted but credit_score/ltv are also absent — a real behavioral gap for a fallback path.

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

Conciseness4/5

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

Two sentences, front-loaded with the decision question and with the output list compressed into one readable clause; the pricing caveat is correctly demoted to its own line. Slightly dense with the comma-separated output enumeration, but nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries its weight by naming all five return fields and the three verdict values, so the agent knows what it gets back. The remaining gap is the fallback path's dependency on credit_score/ltv and how the verdict thresholds are derived — acceptable omissions for a read-only calculator.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each parameter already carries units, ranges and defaults (including the 2%-of-balance closing cost default), so the schema does the heavy lifting. The description adds only two things beyond it: the meaning of omitting new_rate and the interpretation of years_in_home as expected holding period.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a concrete decision question ("Should this borrower refinance?") and immediately names the required inputs and the full set of computed outputs (payment, savings, break-even, net benefit, verdict). An agent can tell this apart from grade_mortgage_offer or get_bundle_refi_signal because it is a per-borrower scenario calculation, not a market signal or offer score.

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

Usage Guidelines4/5

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

States the framing inputs ("Give the current rate, balance and years remaining") and the one mode switch that matters: omit new_rate to fall back to market rate. No explicit exclusions or sibling alternatives are named, so the agent must infer that bundle_refi_signal is the market-level alternative rather than a per-borrower scenario.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bundle_context_briefGet Economic Context Brief BundleA
Read-onlyIdempotent
Inspect

Returns a pre-formatted natural-language paragraph summarizing 15+ economic indicators — rates, inflation, employment, mortgage market, energy prices, and FX. The "brief" field is ready to inject directly into an LLM prompt as economic context. Also returns structured series, FX, derived, and signals fields. Price: $0.75 USDC per call via x402 (Base or Solana).

NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, open-world behavior, so safety is covered. The description adds material context the annotations do not: a concrete price of $0.75 USDC per call via x402 on Base or Solana, which matters for agent cost decisions, plus the shape of the return payload. It omits freshness/staleness or update cadence of the indicators.

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

Conciseness5/5

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

Three short sentences: what it returns, what the key field is for, and what else comes back, with pricing last. No filler and the most decision-relevant information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description enumerates the returned fields (brief, structured series, FX, derived, signals) and the intended use of the primary field. With zero parameters, there is nothing else an agent needs in order to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters and the description correctly makes no parameter claims, so there is nothing to mis-specify. Baseline 4 applies for a no-arg tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: returns a pre-formatted natural-language paragraph summarizing 15+ named indicator domains (rates, inflation, employment, mortgage, energy, FX). It is clearly distinguishable from the narrower single-series siblings like get_series or get_fx_rate_current, though it never names an alternative explicitly.

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

Usage Guidelines3/5

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

Useful context is implied by 'ready to inject directly into an LLM prompt as economic context', which tells the agent the intended consumption pattern. However, it gives no explicit when-to-use vs. when-to-use-a-sibling guidance (e.g., bundle vs. individual series calls) and no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bundle_cryptoGet Crypto Top 20 BundleA
Read-onlyIdempotent
Inspect

Returns the top 20 cryptocurrencies by market cap in one call: price, 24h change, 7d change, market cap, and volume. Covers BTC, ETH, SOL, BNB, XRP, USDT, USDC, ADA, AVAX, DOGE, and more. Use this instead of individual get_crypto_price calls when you need broad market coverage. Source: CoinGecko. Price: $0.50 USDC per call via x402 (Base or Solana).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations (which already declare readOnly, idempotent, openWorld, non-destructive), the description adds critical behavioral context: the data source (CoinGecko) and the cost/payment mechanism ($0.50 USDC per call via x402 on Base or Solana). This is exactly the kind of operational detail an agent needs before invoking a paid tool.

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

Conciseness5/5

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

The description is front-loaded with the core return data, then coverage examples, then usage guidance, then source and pricing. Every sentence earns its place, and the structure supports fast scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters and no output schema, the description carries the full burden of explaining what is returned. It lists the fields and example assets, states the data source, and discloses the payment model, leaving no significant gap for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema requires no parameter documentation. The description correctly does not invent parameter details; the baseline for 0-param tools is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Returns the top 20 cryptocurrencies by market cap') and enumerates exactly what data is included (price, 24h change, 7d change, market cap, volume). It distinguishes itself from the sibling get_crypto_price by framing itself as a bundle for broad coverage.

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

Usage Guidelines5/5

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

It explicitly says 'Use this instead of individual get_crypto_price calls when you need broad market coverage,' naming the alternative and the condition that selects this tool. No further inference is required to choose between the two.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bundle_energyGet Energy & Commodities BundleA
Read-onlyIdempotent
Inspect

Returns current energy commodity prices in one call: WTI crude oil (DCOILWTICO), Brent crude (DCOILBRENTEU), US regular gasoline (GASREGCOVW), and Henry Hub natural gas (DHHNGSP). Includes the WTI-Brent spread and a market signal. Source: FRED. Price: $0.25 USDC per call via x402 (Base or Solana).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds useful context beyond annotations: the FRED source, the included WTI-Brent spread and market signal, and the $0.25 USDC x402 payment requirement on Base or Solana.

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

Conciseness5/5

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

The description is two tight sentences with no wasted language. It front-loads the returned commodities and then adds source and payment details efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of explaining return values, and it lists all four commodities plus the spread and market signal. It is nearly complete, though it does not define the "market signal" or specify freshness beyond "current."

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there are no parameter semantics to explain. The baseline for a no-parameter tool is 4, and the description does not need to compensate for missing schema details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it returns current energy commodity prices, and it names the exact series included (WTI, Brent, gasoline, natural gas). This clearly distinguishes it from sibling bundles such as crypto, FX, and macro.

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

Usage Guidelines3/5

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

The phrase "in one call" implies the bundle is for efficient retrieval of current energy prices, but the description does not explicitly say when to use this versus individual series tools like get_series or get_current_value. Usage is implied rather than fully guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bundle_fx_dashboardGet G10 FX Dashboard BundleA
Read-onlyIdempotent
Inspect

Returns all 9 G10 FX spot rates in one call: EURUSD, GBPUSD, USDJPY, USDCHF, USDCAD, AUDUSD, NZDUSD, USDSEK, USDNOK. Also includes a USD strength index (average % change vs G10 basket over 30 days) and a USD trend signal. Source: European Central Bank via Frankfurter. Price: $0.35 USDC per call via x402 (Base or Solana).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld, so the bar is lower; the description adds genuinely non-obvious context: the upstream source (ECB via Frankfurter) and a per-call cost of $0.35 USDC via x402 on Base or Solana. That pricing detail materially affects whether an agent should call it repeatedly.

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

Conciseness4/5

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

Front-loaded with the core value proposition, followed by derived metrics, source, and price. The nine-pair enumeration is long but removes ambiguity about coverage; only minor tightening (e.g. 'all 9 G10 pairs') would shorten it without loss.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no parameters, the description carries the full burden of describing return contents, and it does so concretely: nine named rates, a USD strength index defined as average % change vs the G10 basket over 30 days, and a trend signal. Cost and data source are also disclosed, leaving no practical gap for invoking it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly avoids inventing parameter semantics and instead spends its words on return contents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Returns all 9 G10 FX spot rates in one call') and enumerates exactly which pairs are covered, plus two derived metrics. This clearly separates it from single-rate siblings like get_fx_rate_current and series tools like get_fx_rate_series without needing to name them.

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

Usage Guidelines3/5

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

The phrase 'in one call' implies the efficiency rationale for choosing this bundle over individual FX calls, but the description never states when to prefer it versus get_fx_rate_current or get_fx_rate_series, nor any prerequisites. Usage must be inferred from scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bundle_macroGet Macro Health Snapshot BundleA
Read-onlyIdempotent
Inspect

Returns a macro health snapshot: GDP, unemployment rate (UNRATE), CPI and core CPI, Fed funds rate, yield curve 2s10s spread, and Sahm Rule recession indicator. Includes a cycle phase signal (expansion/late cycle/peak/contraction). Use this for macroeconomic context or recession risk assessment. Price: $0.50 USDC per call via x402 (Base or Solana).

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/destructive=false, so the safety profile is covered. The description adds genuinely new behavioral context beyond annotations: a per-call price of $0.50 USDC settled via x402 on Base or Solana, which an agent must know before invoking. It does not state freshness/cadence of the underlying data or what happens on payment failure, keeping it below 5.

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

Conciseness4/5

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

Front-loaded with the return contents, followed by the usage hint and then the payment terms; no filler sentences. The indicator enumeration is long but each item is information the agent needs to judge fit, so it earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no input parameters and no output schema, the description carries the return-value burden and does so by naming every indicator and the cycle-phase signal. The main remaining gap is data recency/as-of semantics and failure/payment-error behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so there is nothing to disambiguate and the baseline of 4 applies. The description correctly signals a no-argument call by describing the output rather than implying undocumented inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Returns a macro health snapshot') and enumerates the exact indicators included plus the derived cycle-phase signal, so an agent knows precisely what payload to expect. It does not, however, differentiate itself from siblings that expose overlapping data (get_recession_indicator, get_yield_curve, get_policy_spread, get_bundle_rate_environment), leaving the bundle-vs-single-series choice ambiguous.

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

Usage Guidelines3/5

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

'Use this for macroeconomic context or recession risk assessment' gives a usage context, but no exclusions and no named alternative, even though get_recession_indicator and get_yield_curve expose subsets of the same data. An agent must infer when the $0.50 bundle is preferable to a narrower, presumably cheaper, single-indicator call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bundle_mortgage_pulseGet Mortgage Market Pulse BundleA
Read-onlyIdempotent
Inspect

Returns a complete mortgage market snapshot: 30yr and 15yr mortgage rates, 10Y Treasury yield, Fed funds rate, median home price (MSPUS), housing starts (HOUST), MBS spread (30yr mortgage minus 10Y), and 30-day rate trend signal. Use this for mortgage market analysis. Price: $0.40 USDC per call via x402 (Base or Solana).

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, open-world behavior, so safety is covered. The description adds genuinely new operational facts: a $0.40 USDC charge per call via x402 on Base or Solana, and that MBS spread and the trend signal are derived rather than raw fields. It omits data freshness/cadence and what happens on payment failure.

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

Conciseness4/5

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

Two sentences, front-loaded with the payload inventory and followed by the price. Each enumerated field earns its place because there is no output schema to carry them. The trailing 'Use this for mortgage market analysis' is largely redundant with the field list.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no input parameters and no output schema, the description carries the return-value burden and does so by listing every field. Combined with the annotation-covered safety profile and the disclosed price, an agent has nearly everything needed; only freshness/units and the type of the trend signal are missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly implies a parameterless call by describing a fixed snapshot rather than a configurable query.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

A specific verb ('Returns') plus an enumerated resource: 30yr/15yr rates, 10Y Treasury, Fed funds, MSPUS, HOUST, MBS spread, and a 30-day trend signal. The field-level inventory makes it distinguishable from generic siblings like get_series or get_yield_curve. It stops short of 5 because near-identical bundles (get_bundle_rate_environment, get_bundle_refi_signal) are never named as different.

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

Usage Guidelines3/5

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

'Use this for mortgage market analysis' gives a usage context but no when-not-to-use condition and no named alternative. With roughly a dozen sibling bundle and single-indicator tools, an agent must infer which of get_bundle_rate_environment, get_bundle_refi_signal, or get_bundle_macro to pick instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bundle_purchase_marketGet Home Purchase Market BundleA
Read-onlyIdempotent
Inspect

Returns a home purchase market bundle: current 30yr mortgage rate, median US home sale price (MSPUS), estimated monthly P&I payment on the median home assuming 20% down, annual income required to qualify at 28% DTI, affordability level signal, and housing starts. Directly answers "can my client afford a home today?" Price: $0.60 USDC per call via x402 (Base or Solana).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so safety is covered; the description adds the genuinely non-obvious operational fact that each call costs $0.60 USDC via x402 on Base or Solana. That payment/auth detail is exactly the kind of context annotations cannot express, though rate limits, timeout or failure behavior are not mentioned.

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

Conciseness5/5

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

Two sentences, front-loaded with the return payload and the question it answers, with the price disclosure isolated at the end. The long enumeration of metrics is justified rather than padding, since no output schema exists to carry that information elsewhere.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no parameters, the description carries the full burden of telling the agent what comes back, and it does so metric by metric, including the analytics assumptions (20% down, 28% DTI). The one gap is data recency — median sale price series like MSPUS are lagged, and calling this to answer 'today' without a freshness note could mislead.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. The description correctly presents this as a parameterless pull, matching the empty input schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and a precisely enumerated resource: 'Returns a home purchase market bundle' followed by the exact six metrics it contains (30yr rate, MSPUS, monthly P&I, qualifying income, affordability signal, housing starts). The contents also differentiate it from siblings like get_bundle_mortgage_pulse and get_bundle_refi_signal, which are narrower rate-only bundles.

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

Usage Guidelines4/5

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

Frames the decision it supports — 'can my client afford a home today?' — which tells the agent the buyer-affordability scenario that selects this bundle. There are no explicit exclusions or comparisons against the other bundle siblings (mortgage_pulse, refi_signal, rate_environment), so the agent must infer which bundle wins in overlapping cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bundle_rate_environmentGet Rate Environment Snapshot BundleA
Read-onlyIdempotent
Inspect

Returns a complete rate environment snapshot in one call: FEDFUNDS, SOFR, DGS2, DGS5, DGS10, DGS30, plus computed yield curve spreads (2s10s and 3m10y), Fed policy spread (EFFR vs IORB), and curve shape signal. Use this instead of multiple individual calls when you need the full rate picture. Price: $0.35 USDC per call via x402 (Base or Solana).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive behavior, so the safety profile is covered. The description adds genuinely non-obvious context: the call costs $0.35 USDC via x402 on Base or Solana, which materially affects an agent's decision to use a bundle rather than cheap single calls. It omits data freshness/latency, 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.

Conciseness5/5

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

Two sentences, both earning their place: the first front-loads contents and the routing rule, the second front-loads the cost constraint. The dense ticker list is functional precision rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of explaining the return value, and it does so by naming every field and computed spread. It stops short of describing the response envelope (units, timestamps, nesting), leaving a modest gap for a data-returning tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4; there is nothing for the schema to document and nothing the description needs to disambiguate. The enumeration of returned fields implicitly confirms no filtering arguments are required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb+resource and then enumerates exactly which series (FEDFUNDS, SOFR, DGS2/5/10/30) and derived values (2s10s, 3m10y, EFFR vs IORB spread, curve shape signal) come back. This clearly distinguishes it from siblings like get_yield_curve, get_policy_spread, and get_series, which return only pieces of the same picture.

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

Usage Guidelines4/5

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

"Use this instead of multiple individual calls when you need the full rate picture" gives an explicit selection rule against the alternative pattern. It falls short of a 5 because the alternative is described generically ("multiple individual calls") rather than naming the concrete siblings it replaces, and no when-not condition (e.g. single-series needs) is stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bundle_refi_signalGet Refinance Signal BundleA
Read-onlyIdempotent
Inspect

Returns a refinance signal bundle: current 30yr and 15yr mortgage rates, 52-week high/low range, MBS spread over 10Y Treasury, 30-day and 90-day rate trend, and a refi break-even threshold. The refi_breakeven_threshold field directly answers "what rate does a borrower need to have to benefit from refinancing today?" Price: $0.60 USDC per call via x402 (Base or Solana).

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

The annotations already declare readOnly, idempotent, openWorld, and non-destructive behavior, so the description does not need to repeat safety hints. It adds useful context by disclosing the $0.60 USDC per-call cost via x402 on Base or Solana and by explaining the practical meaning of the breakeven threshold field. It still omits freshness, source latency, and rate-limit details.

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

Conciseness5/5

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

The description front-loads the returned bundle contents and uses compact sentences with no wasted preamble. The pricing note is appended cleanly and every sentence contributes useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Because there is no output schema, the description appropriately enumerates the key return fields and defines the refi_breakeven_threshold. It is nearly complete for invocation, but it does not mention data freshness/source, output structure, or update cadence for an openWorld paid data bundle.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The empty input schema has 100% description coverage, and no parameter semantics need to be explained in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Returns a refinance signal bundle' and enumerates the contents, including 30yr/15yr rates, 52-week range, MBS spread, trends, and breakeven threshold. It is clear what the tool does, but it does not explicitly distinguish the bundle from siblings such as calc_refinance, get_bundle_mortgage_pulse, or get_bundle_rate_environment.

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

Usage Guidelines3/5

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

The description implies usage by saying the refi_breakeven_threshold field answers whether a borrower benefits from refinancing today. However, it gives no explicit when-to-use guidance, exclusions, or comparison against calc_refinance or the mortgage/rate bundle siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_crypto_historyGet Crypto Historical PricesA
Read-onlyIdempotent
Inspect

Returns historical daily closing prices for any supported cryptocurrency over 30, 90, or 365 days. Use for trend analysis, drawdown calculation, or training data. Source: CoinGecko. Price: $0.15 USDC per call via x402 (Base or Solana).

NameRequiredDescriptionDefault
coinYesCrypto symbol, e.g. BTC
daysYesDays of daily price history

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly/openWorld/idempotent/non-destructive, so the safety profile is covered. The description adds material context annotations cannot express: a paid call ($0.15 USDC via x402 on Base or Solana) and the upstream source (CoinGecko) — the payment requirement is the critical behavioral fact here.

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

Conciseness5/5

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

Two tight sentences plus a one-line price notice, with the core capability front-loaded before the cost caveat. No filler and nothing redundant with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-param, fully-enumerated, no-output-schema tool this is nearly complete: what it returns, when to use it, and the payment gate are all stated. It only omits the shape of the returned series (e.g., list of date/close pairs), which matters somewhat since there is no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both params carry enums, so the schema already defines valid values. The description adds only 'any supported cryptocurrency' and the 30/90/365 windows, both of which restate the schema; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Returns historical daily closing prices'), plus scope (30/90/365 days) and data source (CoinGecko). It implicitly contrasts with the sibling get_crypto_price (current price) via 'historical', but never names an alternative explicitly.

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

Usage Guidelines4/5

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

Gives concrete use cases ('trend analysis, drawdown calculation, or training data'), which tells the agent when this tool is appropriate. It stops short of exclusions or naming which sibling to use instead (e.g., get_crypto_price for a spot quote).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_crypto_priceGet Current Crypto PriceA
Read-onlyIdempotent
Inspect

Returns the current USD price, 24h % change, market cap, and 24h volume for any supported cryptocurrency. Supported: BTC, ETH, SOL, BNB, XRP, USDT, USDC, ADA, AVAX, DOGE, DOT, MATIC, LINK, LTC, ATOM, UNI, SUI, APT, NEAR, PEPE. Source: CoinGecko. Price: $0.02 USDC per call via x402 (Base or Solana).

NameRequiredDescriptionDefault
coinYesCrypto symbol, e.g. BTC

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent and openWorld, so safety is covered. The description adds genuinely new behavioral context the annotations cannot convey: the call is paid ($0.02 USDC per call via x402 on Base or Solana) and the upstream source is CoinGecko. It stops short of disclosing rate limits, freshness/latency, or failure behavior for unsupported symbols.

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

Conciseness4/5

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

Three sentences, front-loaded with the return payload before source and payment details. Slightly wasteful because the 20-symbol list restates the schema enum verbatim, but the overall length is proportionate and no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, but the description compensates by enumerating the returned fields (price, 24h change, market cap, volume) and disclosing the payment model, which is essential before invoking a paid endpoint. Remaining gaps are minor: unsupported-symbol behavior and data freshness are unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single 'coin' parameter is a fully enumerated string, so the schema carries the parameter semantics. The description's list of supported symbols duplicates the enum value-for-value rather than adding format or edge-case meaning, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Returns') plus the exact resource: current USD price, 24h % change, market cap and 24h volume for supported cryptocurrencies. It also names the data source (CoinGecko) and lists the supported symbol universe, so the agent knows precisely what data points come back and which coins qualify. The word 'current' implicitly separates it from the sibling get_crypto_history.

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

Usage Guidelines3/5

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

The description implies the usage context ('current' price) which implicitly contrasts with get_crypto_history, but it never states when to prefer this tool versus its siblings or when not to use it. There are no exclusions or prerequisites beyond the implicit supported-symbol constraint, which the schema already enforces.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_current_valueGet Current FRED Series ValueA
Read-onlyIdempotent
Inspect

Returns only the single most recent value for any supported FRED series. Cheaper than get_series ($0.01 vs $0.05). Use this when you need just the latest reading — e.g. current CPI, unemployment rate, mortgage rate. Use get_series instead when you need historical observations. Price: $0.01 USDC per call via x402 (Base or Solana).

NameRequiredDescriptionDefault
series_idYesFRED series ID. Use IORB for Interest on Reserve Balances, EFFR for Effective Fed Funds Rate, MORTGAGE30US for 30-yr mortgage rate, SAHMREALTIME for Sahm Rule, etc.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent and open-world behavior. The description adds cost and payment details ($0.01 USDC via x402 on Base or Solana), which an agent needs before invoking. It does not describe the return shape, such as whether the observation date or units are included.

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

Conciseness5/5

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

The text is short and front-loaded with purpose, and every sentence earns its place: purpose, cost comparison, when to use, alternative, and price.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

It is mostly complete for a simple one-parameter read tool with rich annotations. The lack of an output schema leaves the return format (value, date, units) undocumented. Routing among many overlapping siblings is only partly addressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the enum plus its description already explain series_id well. The description's examples (CPI, unemployment, mortgage rate) add a little mapping help but little beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

It names a specific action and resource: the single most recent value for a supported FRED series. It separates itself from get_series by contrasting latest-only with historical observations.

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

Usage Guidelines4/5

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

It says when to use the tool (latest reading, with examples) and when to use get_series instead (historical data). It gives no guidance against close siblings such as get_treasury_yield_current, get_value_by_date or the bundle tools, which overlap heavily with this one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_economic_calendarGet Economic CalendarA
Read-onlyIdempotent
Inspect

Returns upcoming FRED economic data release dates — CPI, jobs report, GDP, Treasury rates, and more. Use this to find out when the next major economic data will be published. Price: $0.02 USDC per call via x402 (Base or Solana).

NameRequiredDescriptionDefault
daysYesLookahead window in days

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds materially useful context the annotations cannot carry: the paid x402 model at $0.02 per call and the accepted payment rails (Base or Solana). It does not state whether results include prior actuals or revisions.

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

Conciseness4/5

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

One sentence establishes the capability with examples, a second gives the usage cue, and a third carries pricing. Front-loaded and free of padding, though the price line reads as a bolted-on operational note rather than an integrated part of the definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, read-only tool with an enum-constrained input and annotations covering safety, this is nearly sufficient: an agent knows what it gets, when to reach for it, and what it costs. The only gap is that the return shape (a list of release dates, presumably with source/date fields) is only loosely implied since no output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single `days` parameter is a constrained enum (30/60/90) with its own description, so the schema does the heavy lifting. The description adds nothing about the lookahead window, which is fine given the baseline but leaves no extra value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'Returns upcoming FRED economic data release dates' — and enumerates concrete examples (CPI, jobs report, GDP, Treasury rates). This implicitly separates it from the historical-data siblings like get_series or get_value_by_date, though no sibling is named.

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

Usage Guidelines3/5

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

The clause 'Use this to find out when the next major economic data will be published' gives a clear forward-looking usage context, which is enough to distinguish it from historical lookups. It stops short of naming alternatives or stating when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_edgar_companyGet Company Fundamentals (SEC EDGAR)A
Read-onlyIdempotent
Inspect

Returns financial fundamentals for any US public company from SEC EDGAR XBRL filings: revenue, net income, total assets, stockholders equity, and EPS. Includes both annual (10-K) and quarterly (10-Q) data for the most recent periods. Works for any ticker listed on a US exchange (AAPL, MSFT, TSLA, AMZN, NVDA, GOOGL, META, JPM, BAC, etc.). Source: SEC EDGAR. Price: $0.75 USDC per call via x402 (Base or Solana).

NameRequiredDescriptionDefault
tickerYesUS stock ticker, e.g. AAPL, MSFT, NVDA

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/openWorld, and the description usefully adds data coverage (annual 10-K plus quarterly 10-Q, most recent periods), the upstream source, and — critically — the per-call price of $0.75 USDC via x402 with payment networks. It does not disclose how many periods are returned or what happens for an invalid/unknown ticker.

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

Conciseness4/5

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

Front-loaded with purpose, metrics, and coverage before pricing. Slightly wasteful: two separate long lists of example tickers (AAPL/MSFT/TSLA/AMZN/NVDA/GOOGL/META/JPM/BAC, then AAPL/MSFT/NVDA) repeat information already in the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does the necessary work by naming the returned fields and the period types. Gaps remain on units/currency, number of periods returned, and ordering, but an agent can invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description earns extra by scoping the parameter to US-exchange-listed tickers and confirming the ASX-style free-text form. The example tickers largely duplicate the schema's own example, so the added value is modest.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Returns financial fundamentals ... from SEC EDGAR XBRL filings') and enumerates the exact metrics and filing types returned. No sibling tool covers company-level fundamentals, so it is unambiguously distinguishable.

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

Usage Guidelines3/5

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

The domain constraint ('any ticker listed on a US exchange') implicitly excludes foreign/private companies, but there is no explicit when-to-use or when-not-to-use guidance and no mention of alternatives. The agent must infer that this is the only fundamentals source among mostly macro/market-data siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_fx_rate_by_dateGet G10 FX Rate by DateA
Read-onlyIdempotent
Inspect

Returns the exchange rate for a G10 currency pair on a specific date. Source: European Central Bank. Use YYYY-MM-DD format. Price: $0.01 USDC per call via x402 (Base or Solana).

NameRequiredDescriptionDefault
dateYesDate in YYYY-MM-DD format, e.g. 2026-05-09
pairYesG10 currency pair, e.g. EURUSD

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive, and open-world behavior, so the lower bar applies; the description nonetheless adds real context the annotations don't: the European Central Bank as the upstream source and a $0.01 USDC per-call payment via x402 (Base or Solana). That cost/payment requirement is operationally important and not inferable from 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.

Conciseness4/5

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

Three short sentences, front-loaded with purpose, then source, then format, then price. The date-format sentence duplicates the schema's own pattern, which is a minor redundancy, but nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only lookup with no output schema, the description states what is returned (a single rate) and where it came from, which is sufficient. It omits edge cases such as non-publishing days or missing-date behavior, and return value shape is only implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the enum of nine G10 pairs plus the date pattern are fully documented in the schema. The description restates the YYYY-MM-DD format but adds no syntax or semantic detail beyond it, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Returns the exchange rate for a G10 currency pair on a specific date') and names the data source (ECB). The 'on a specific date' phrasing implicitly separates it from get_fx_rate_current and get_fx_rate_series, but no sibling is named explicitly.

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

Usage Guidelines2/5

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

The only guidance is 'Use YYYY-MM-DD format,' which is a formatting rule, not a usage rule. Nothing tells the agent when to pick this over get_fx_rate_current, get_fx_rate_series, or the get_bundle_fx_dashboard bundle.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_fx_rate_currentGet Current G10 FX RateA
Read-onlyIdempotent
Inspect

Returns the current exchange rate for a G10 currency pair. Source: European Central Bank. Supported: EURUSD, GBPUSD, USDJPY, USDCHF, USDCAD, AUDUSD, NZDUSD, USDSEK, USDNOK. Price: $0.01 USDC per call via x402 (Base or Solana).

NameRequiredDescriptionDefault
pairYesG10 currency pair, e.g. EURUSD

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive), and the description adds genuinely new context: the ECB data source and, importantly, a $0.01 USDC per-call cost via x402 on Base or Solana. It stops short of stating data refresh cadence or staleness, which would matter for a 'current' rate.

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

Conciseness4/5

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

Three tight sentences, front-loaded with purpose and then source and price. The enumerated pair list slightly duplicates the schema enum, a minor redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description tells the agent it receives an exchange rate, plus source and cost, which is enough to call correctly. Return format and update frequency are the only omissions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the pair argument is a fully enumerated type, so the schema already carries the burden. The description's list of supported pairs merely restates the enum rather than adding format or semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Returns the current exchange rate for a G10 currency pair') and the word 'current' implicitly separates it from historical siblings like get_fx_rate_by_date and get_fx_rate_series.

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

Usage Guidelines3/5

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

The scope is implied by 'current' exchange rate, but the description never states when to pick this over get_fx_rate_by_date or get_fx_rate_series, and gives no exclusions or preconditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_fx_rate_seriesGet G10 FX Rate HistoryA
Read-onlyIdempotent
Inspect

Returns historical daily exchange rates for a G10 currency pair. Source: European Central Bank. Price: $0.05 USDC per call via x402 (Base or Solana).

NameRequiredDescriptionDefault
daysYesHistory window in days
pairYesG10 currency pair, e.g. EURUSD

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive behavior, so safety is covered. The description adds genuinely non-inferable context: the data source (ECB) and, importantly, that each call costs $0.05 USDC via x402 on Base or Solana — a payment/auth requirement the agent must know before calling.

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

Conciseness5/5

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

Three short sentences, front-loaded with the purpose, then source, then cost. No filler, nothing wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, two-enum-param tool, the essential calling information is present and the pricing/source context is useful. But with no output schema, the description says nothing about the return shape (array of date/rate points, row count implied by 'days'), and it omits any routing guidance against the other FX siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with enumerated values for both 'pair' and 'days', so the schema fully documents the inputs. The description adds only the 'daily' granularity hint, which is marginal; baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Returns'), resource ('historical daily exchange rates') and scope ('G10 currency pair'), which distinguishes it reasonably from get_fx_rate_current. However, it never explicitly contrasts with the close sibling get_fx_rate_by_date, leaving the series-vs-single-date boundary implicit.

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

Usage Guidelines2/5

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

No when-to-use guidance at all: nothing says to prefer this over get_fx_rate_by_date or get_fx_rate_current, nor when the 30/90/365 windows are appropriate. The agent must infer usage purely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_policy_spreadGet Fed Policy Spread (EFFR vs IORB)A
Read-onlyIdempotent
Inspect

Returns the spread between the Effective Federal Funds Rate (EFFR) and Interest on Reserve Balances (IORB), with an interpretation of Fed policy stance. EFFR below IORB is the normal operating band. Source: FRED. Price: $0.02 USDC per call via x402 (Base or Solana).

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, and openWorld, so the safety profile is covered. The description adds genuinely new behavioral context: the data source (FRED) and the cost model ($0.02 USDC per call via x402 on Base or Solana), which an agent needs before invoking. It does not specify the response shape (scalar vs. object with interpretation text).

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

Conciseness5/5

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

Two tight sentences plus a price line, front-loaded with what is returned and followed by the interpretive baseline, source, and cost. Every sentence carries distinct information with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of describing the return, and it does so at a high level (spread plus policy-stance interpretation). Combined with source and per-call pricing, an agent has enough to decide and call, though the exact return structure is left unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate. It correctly spends its words on output meaning and pricing instead of restating a nonexistent input schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a precise verb and resource — the spread between EFFR and IORB — and even defines both acronyms, so an agent can tell it apart from siblings like get_yield_curve, get_series, or get_recession_indicator without opening a schema. It stops short of explicitly contrasting itself with any sibling, which keeps it out of the top band.

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

Usage Guidelines3/5

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

The phrase 'with an interpretation of Fed policy stance' implies the use case (assessing policy posture) and the note that 'EFFR below IORB is the normal operating band' hints at how to read the result. But there is no explicit when-to-use, when-not-to-use, or named alternative such as get_series or get_yield_curve, so usage must be inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recession_indicatorGet Sahm Rule Recession IndicatorA
Read-onlyIdempotent
Inspect

Returns the real-time Sahm Rule recession indicator. A value >= 0.50 signals a recession is likely underway. Measures the rise in unemployment from its recent low. Source: FRED SAHMREALTIME. Price: $0.02 USDC per call via x402 (Base or Solana).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/non-destructive, so the bar is lower; the description adds genuinely useful context beyond them — the interpretation threshold, the underlying definition, the data source, and notably a per-call cost of $0.02 USDC via x402 on Base or Solana, which is a real behavioral constraint an agent must know before calling.

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

Conciseness4/5

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

Three short sentences, front-loaded with the return value and threshold before the source and price. Dense and largely waste-free, though the pricing line is compressed into a sentence that could be more cleanly separated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does the necessary work of explaining what the returned value means and how to read it. It stops short of saying whether the response includes a date/series metadata or just a scalar, a minor gap for a no-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; the 4 baseline applies. No parameter guidance is needed or expected.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (returns the real-time Sahm Rule recession indicator) and immediately defines what the indicator measures and its FRED source, so it is clearly distinguishable from the surrounding macro/pricing siblings such as get_bundle_macro or get_series.

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

Usage Guidelines3/5

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

The threshold rule ('a value >= 0.50 signals a recession is likely underway') implies the use case, but the description never says when to pick this over siblings like get_bundle_macro or get_series, nor does it state any prerequisite or exclusion. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_seriesGet FRED Data SeriesA
Read-onlyIdempotent
Inspect

Returns recent observations for any supported FRED data series. Use this to get current and historical values for mortgage rates, Treasury yields, Fed funds rate, CPI, SOFR, unemployment, GDP, energy prices, and more. Common use cases:

  • Current 30-yr mortgage rate: series_id=MORTGAGE30US, days=30

  • Current Fed funds rate: series_id=FEDFUNDS, days=30

  • Current 10-yr Treasury yield: series_id=DGS10, days=30

  • Current CPI (inflation): series_id=CPIAUCSL, days=30

  • Current WTI crude oil: series_id=DCOILWTICO, days=30 The most recent observation in the returned array is the current value. Price: $0.05 / $0.10 / $0.25 USDC per call (30 / 90 / 365 days) via x402 (Base or Solana).

NameRequiredDescriptionDefault
daysYesHistory window: 30 ($0.05), 90 ($0.10), or 365 ($0.25). Use 30 for current/recent values.
series_idYesFRED series ID. Use IORB for Interest on Reserve Balances, EFFR for Effective Fed Funds Rate, MORTGAGE30US for 30-yr mortgage rate, SAHMREALTIME for Sahm Rule, etc.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, open-world behavior, so safety needs no restatement. The description adds genuinely non-obvious context beyond that: per-call pricing tiers tied to the days window and payment rails (x402 on Base/Solana), plus a hint about the returned array's ordering.

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

Conciseness4/5

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

Front-loaded with the core behavior, then a scannable example block, then the pricing note. The bullet list is long but every bullet is a distinct series mapping; the pricing sentence is necessary because cost varies by parameter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must carry return-value burden; it only partially does ("most recent observation in the returned array is the current value"). It omits that values are percentage points for rate series but index levels for CPIAUCSL/GDP, and says nothing about how many observations the window yields or error behavior for stale series.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with enums, so the baseline is 3; the description earns above baseline by translating opaque series IDs into real-world meaning (MORTGAGE30US = 30-yr mortgage rate, CPIAUCSL = inflation) and by restating that days=30 maps to the cheapest current-value tier.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Returns recent observations for any supported FRED data series") and lists concrete domains (mortgage rates, Treasury yields, CPI, SOFR, GDP). It is distinguishable from bundle/aggregate siblings, but it never names overlapping siblings like get_current_value or get_value_by_date, so the boundary is left implicit.

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

Usage Guidelines4/5

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

Gives five concrete use cases with exact series_id and days values, which is unusually actionable when-to-use guidance. It offers no when-not-to-use guidance or explicit routing to the simpler sibling tools (get_current_value, get_value_by_date) that appear to overlap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_treasury_yield_by_dateGet 30-Year Treasury Yield by DateA
Read-onlyIdempotent
Inspect

Returns the 30-year US Treasury yield for a specific date. Business days only. Use YYYY-MM-DD format. Price: $0.01 USDC per call via x402 (Base or Solana).

NameRequiredDescriptionDefault
dateYesDate in YYYY-MM-DD format, e.g. 2026-05-09

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, open-world and non-destructive, so the bar is low. The description still adds two traits not in the annotations: business-day-only data availability and a $0.01 USDC per-call x402 payment requirement, the latter being operationally critical before invoking.

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

Conciseness5/5

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

Three short sentences, front-loaded with what is returned, then the constraint, then the cost. Nothing is wasted and the payment caveat is not buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description should say more about the response: units (percentage points vs basis points), and especially what happens when a weekend/holiday date is supplied. Safety and cost are covered, but the failure mode for non-business days is left ambiguous.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single `date` parameter is already documented with format and an example in the schema. The description restates the YYYY-MM-DD format and adds the business-day restriction on valid values, but adds no new semantics beyond that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with scope qualifiers ('30-year US Treasury yield', 'for a specific date'), which implicitly separates it from get_treasury_yield_current and get_yield_curve. It never names a sibling explicitly, so the differentiation is inferred 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.

Usage Guidelines3/5

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

'Business days only' and 'Use YYYY-MM-DD format' are real usage constraints, but there is no guidance on when to pick this over get_treasury_yield_current or get_yield_curve. The agent must infer the historical-single-date use case from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_treasury_yield_currentGet Current 30-Year Treasury YieldA
Read-onlyIdempotent
Inspect

Returns the most recent 30-year US Treasury constant maturity yield (DGS30) from FRED. Free — no payment required. For other series use get_current_value or get_series. Free — no payment required.

NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered. The description adds the upstream source (FRED) and a cost note, but does not say what 'most recent' means in practice (latest business day, publication lag, caching/refresh cadence) or the units of the returned value.

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

Conciseness3/5

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

The core is two tight, front-loaded sentences, but 'Free — no payment required.' appears twice verbatim, which is pure waste in a definition this short. Removing the duplicate would leave a well-structured definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, single-value lookup with no output schema, the description covers the series, source, and cost. The only real gap is the return shape (bare number vs. object with date) and units, which an agent must otherwise infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies; the series identifier DGS30 usefully pins down what fixed input the tool substitutes for.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb, resource, and scope: the most recent 30-year constant maturity yield (DGS30) sourced from FRED. The series ID makes it unambiguously distinguishable from siblings like get_yield_curve and get_treasury_yield_by_date.

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

Usage Guidelines4/5

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

Explicitly routes the agent to get_current_value or get_series when a different series is wanted, which is the main ambiguity here. It does not, however, address when to prefer this over get_treasury_yield_by_date (historical dates) or get_yield_curve (term structure), so the routing is only partially complete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_value_by_dateGet FRED Series Value by DateA
Read-onlyIdempotent
Inspect

Returns the value of any supported FRED series for a specific date. Business days only. Use YYYY-MM-DD format. Price: $0.01 USDC per call via x402 (Base or Solana).

NameRequiredDescriptionDefault
dateYesDate in YYYY-MM-DD format, e.g. 2026-05-09
series_idYesFRED series ID. Use IORB for Interest on Reserve Balances, EFFR for Effective Fed Funds Rate, MORTGAGE30US for 30-yr mortgage rate, SAHMREALTIME for Sahm Rule, etc.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare the tool read-only, idempotent, open-world, and non-destructive. The description adds valuable operational context beyond annotations: business-days-only behavior and the $0.01 USDC payment requirement via x402.

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

Conciseness5/5

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

Four short sentences front-load the purpose, then add only necessary constraints: business days, date format, and cost. There is no wasted language.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool with full schema coverage and annotations, the description is mostly complete. The main remaining gap is that it does not explain the return format or behavior for non-business days or unavailable dates.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents both parameters, including the date format and the full series_id enum. The description restates the date format but adds no additional parameter semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: returns the value of a supported FRED series for a specific date. It is clear what the tool does, though it does not explicitly distinguish itself from siblings such as get_current_value or get_series.

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

Usage Guidelines3/5

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

It provides implied usage guidance by saying the tool is for a specific date and that only business days are supported. However, it does not state when to use this instead of get_current_value, get_series, or other date-specific siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_yield_curveGet Yield Curve SpreadsA
Read-onlyIdempotent
Inspect

Returns 2s10s (2-year vs 10-year) and 3m10y (3-month vs 10-year) Treasury yield curve spreads with inversion signal. An inverted yield curve (negative spread) historically precedes recessions. Source: FRED. Price: $0.03 USDC per call via x402 (Base or Solana).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, open-world, so the safety profile is covered. The description adds genuinely useful context beyond that: the upstream source (FRED) and an explicit cost of $0.03 USDC per call via x402 on Base or Solana — pricing is the kind of detail annotations never carry. It does not state whether calls are cached or what happens on upstream failure, keeping it below 5.

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

Conciseness5/5

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

Three short sentences: what it returns, why it matters, where it comes from, then the price line. Front-loaded with the payload and every sentence 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.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must carry the return contract and it largely does by naming both spreads and the inversion signal. The one gap is units/format — whether spreads come back in basis points or percent — which an agent needs to render or threshold the values correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4 and there is nothing the description could add or omit on this dimension.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Returns 2s10s and 3m10y Treasury yield curve spreads') plus the derived artifact ('inversion signal'). This is precise enough to separate it from siblings like get_treasury_yield_current (single-tenor yields) and get_recession_indicator 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.

Usage Guidelines3/5

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

No explicit when-to-use or when-not statement, and no sibling is named as an alternative for related needs. Usage is only implied by the interpretive note that inversion precedes recessions, which tells an agent why it might want the data but not when to pick this over get_treasury_yield_by_date.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grade_mortgage_offerMortgage Offer GraderA
Read-onlyIdempotent
Inspect

Is this mortgage offer good? Grades a written offer (rate, points, lender fees) A–D against the live Optimal Blue index of actual locked rates for the same product, term, credit score and LTV. Returns spread vs market in basis points, monthly and total cost vs market over the expected holding period, and a plain-language verdict with next step. Price: $0.50 USDC per call via x402 (Base or Solana).

NameRequiredDescriptionDefault
ltvNoLoan-to-value percent
rateYesOffered note rate in percent, e.g. 6.875
termNoLoan term in years (default 30)
pointsNoDiscount points as percent of loan; negative for lender credits (default 0)
loan_typeNoLoan program (default conventional)
lender_feesNoLender origination/underwriting fees in USD, excluding third-party costs (default 0)
loan_amountYesLoan amount in USD
credit_scoreNoBorrower FICO score
years_in_homeNoYears the borrower expects to keep the loan (default 7)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/non-destructive/openWorld, and the description adds genuinely new behavioral context: the data source is a live index of actually locked rates (so results move with market), the returned figures (spread in bps, monthly and total cost, plain-language verdict with next step), and the metered cost of $0.50 USDC per call via x402 on Base or Solana. It stops short of noting failure modes or index availability.

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

Conciseness4/5

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

The core sentence front-loads the question, the method and the returned outputs, and the payment terms are isolated on their own line. Slightly dense (one long sentence packing method, outputs and verdict) but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter read-only analytic with a fully described schema and no output schema, the description covers input meaning, return contents, benchmark source and per-call cost. An agent has everything needed to decide and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so a baseline of 3 applies, but the description adds real meaning by explaining that product, term, credit score and LTV are matching keys against the index and that years_in_home defines the comparison horizon — information the per-field schema descriptions do not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (grades) and a specific resource (a written mortgage offer with rate, points, lender fees) plus the A–D output and the benchmark it uses (live Optimal Blue locked-rate index). This clearly separates it from calc_refinance and the mortgage_pulse bundle reads.

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

Usage Guidelines3/5

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

The framing question 'Is this mortgage offer good?' implies the use case (evaluating an offer a borrower already has in hand), but there is no explicit when-to-use versus calc_refinance or get_bundle_mortgage_pulse, and no stated prerequisites or exclusions.

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.

  1. 26 tool updates
    • Addedcalc_refinance
    • Changedget_bundle_context_brief1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": false,
        -  "properties": {
        -    "as_of": {
        -      "description": "Date of the most recent underlying data",
        -      "type": "string"
        -    },
        -    "brief": {
        -      "description": "Pre-formatted natural-language economic context paragraph",
        -      "type": "string"
        -    },
        -    "bundle": {
        -      "description": "Bundle identifier",
        -      "type": "string"
        -    },
        -    "derived": {
        -      "additionalProperties": {},
        -      "description": "Computed fields (spreads, Sahm Rule, etc.)",
        -      "type": "object"
        -    },
        -    "fx": {
        -      "additionalProperties": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "description": "Current FX rates included in the brief",
        -      "type": "object"
        -    },
        -    "series": {
        -      "additionalProperties": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "description": "Current values for all FRED series in the brief",
        -      "type": "object"
        -    },
        -    "signals": {
        -      "additionalProperties": {},
        -      "description": "Curve shape and recession signals",
        -      "type": "object"
        -    }
        -  },
        -  "required": [
        -    "as_of",
        -    "bundle",
        -    "brief",
        -    "series",
        -    "fx",
        -    "derived",
        -    "signals"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedget_bundle_crypto1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": false,
        -  "properties": {
        -    "as_of": {
        -      "description": "ISO timestamp of the data fetch",
        -      "type": "string"
        -    },
        -    "bundle": {
        -      "description": "Bundle identifier: crypto",
        -      "type": "string"
        -    },
        -    "coins": {
        -      "description": "Top 20 coins by market cap",
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "change_24h_pct": {
        -            "description": "24h price change %",
        -            "type": [
        -              "number",
        -              "null"
        -            ]
        -          },
        -          "change_7d_pct": {
        -            "description": "7d price change %",
        -            "type": [
        -              "number",
        -              "null"
        -            ]
        -          },
        -          "market_cap_usd": {
        -            "description": "Market cap in USD",
        -            "type": [
        -              "number",
        -              "null"
        -            ]
        -          },
        -          "name": {
        -            "description": "Full name",
        -            "type": "string"
        -          },
        -          "price_usd": {
        -            "description": "Current price in USD",
        -            "type": "number"
        -          },
        -          "rank": {
        -            "description": "Market cap rank",
        -            "type": "number"
        -          },
        -          "symbol": {
        -            "description": "Ticker symbol",
        -            "type": "string"
        -          },
        -          "volume_24h_usd": {
        -            "description": "24h volume in USD",
        -            "type": [
        -              "number",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "rank",
        -          "symbol",
        -          "name",
        -          "price_usd",
        -          "change_24h_pct",
        -          "change_7d_pct",
        -          "market_cap_usd",
        -          "volume_24h_usd"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "count": {
        -      "description": "Number of coins returned",
        -      "type": "number"
        -    }
        -  },
        -  "required": [
        -    "bundle",
        -    "as_of",
        -    "count",
        -    "coins"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedget_bundle_energy1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": false,
        -  "properties": {
        -    "as_of": {
        -      "description": "Date of the most recent underlying data",
        -      "type": "string"
        -    },
        -    "bundle": {
        -      "description": "Bundle identifier",
        -      "type": "string"
        -    },
        -    "derived": {
        -      "additionalProperties": {},
        -      "description": "WTI-Brent spread",
        -      "type": "object"
        -    },
        -    "series": {
        -      "additionalProperties": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "description": "Current values for each energy series",
        -      "type": "object"
        -    },
        -    "signals": {
        -      "additionalProperties": {
        -        "type": "string"
        -      },
        -      "description": "WTI-Brent market signal",
        -      "type": "object"
        -    }
        -  },
        -  "required": [
        -    "as_of",
        -    "bundle",
        -    "series",
        -    "derived",
        -    "signals"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedget_bundle_fx_dashboard1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": false,
        -  "properties": {
        -    "as_of": {
        -      "description": "Date of the FX rates",
        -      "type": "string"
        -    },
        -    "bundle": {
        -      "description": "Bundle identifier",
        -      "type": "string"
        -    },
        -    "derived": {
        -      "additionalProperties": {},
        -      "description": "USD strength index vs G10 basket",
        -      "type": "object"
        -    },
        -    "series": {
        -      "additionalProperties": {
        -        "type": "number"
        -      },
        -      "description": "All 9 G10 FX spot rates",
        -      "type": "object"
        -    },
        -    "signals": {
        -      "additionalProperties": {
        -        "type": "string"
        -      },
        -      "description": "USD trend over 30 days",
        -      "type": "object"
        -    }
        -  },
        -  "required": [
        -    "as_of",
        -    "bundle",
        -    "series",
        -    "derived",
        -    "signals"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedget_bundle_macro1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": false,
        -  "properties": {
        -    "as_of": {
        -      "description": "Date of the most recent underlying data",
        -      "type": "string"
        -    },
        -    "bundle": {
        -      "description": "Bundle identifier",
        -      "type": "string"
        -    },
        -    "derived": {
        -      "additionalProperties": {},
        -      "description": "Sahm Rule value and yield curve spread",
        -      "type": "object"
        -    },
        -    "series": {
        -      "additionalProperties": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "description": "Current values for each macro series",
        -      "type": "object"
        -    },
        -    "signals": {
        -      "additionalProperties": {},
        -      "description": "Cycle phase and recession triggered flag",
        -      "type": "object"
        -    }
        -  },
        -  "required": [
        -    "as_of",
        -    "bundle",
        -    "series",
        -    "derived",
        -    "signals"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedget_bundle_mortgage_pulse1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": false,
        -  "properties": {
        -    "as_of": {
        -      "description": "Date of the most recent underlying data",
        -      "type": "string"
        -    },
        -    "bundle": {
        -      "description": "Bundle identifier",
        -      "type": "string"
        -    },
        -    "derived": {
        -      "additionalProperties": {},
        -      "description": "MBS spread and related computed fields",
        -      "type": "object"
        -    },
        -    "series": {
        -      "additionalProperties": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "description": "Current values for each series",
        -      "type": "object"
        -    },
        -    "signals": {
        -      "additionalProperties": {
        -        "type": "string"
        -      },
        -      "description": "Rate trend signal",
        -      "type": "object"
        -    }
        -  },
        -  "required": [
        -    "as_of",
        -    "bundle",
        -    "series",
        -    "derived",
        -    "signals"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedget_bundle_purchase_market1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": false,
        -  "properties": {
        -    "as_of": {
        -      "description": "Date of the most recent underlying data",
        -      "type": "string"
        -    },
        -    "bundle": {
        -      "description": "Bundle identifier: purchase_market",
        -      "type": "string"
        -    },
        -    "derived": {
        -      "additionalProperties": {},
        -      "description": "loan_amount, monthly_payment_estimate, income_required_28pct, home_price_change_qoq",
        -      "type": "object"
        -    },
        -    "series": {
        -      "additionalProperties": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "description": "MORTGAGE30US, MSPUS, HOUST, FEDFUNDS",
        -      "type": "object"
        -    },
        -    "signals": {
        -      "additionalProperties": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "description": "affordability_level (elevated/moderate/accessible), market_activity (strong/moderate/subdued)",
        -      "type": "object"
        -    }
        -  },
        -  "required": [
        -    "as_of",
        -    "bundle",
        -    "series",
        -    "derived",
        -    "signals"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedget_bundle_rate_environment1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": false,
        -  "properties": {
        -    "as_of": {
        -      "description": "Date of the most recent underlying data",
        -      "type": "string"
        -    },
        -    "bundle": {
        -      "description": "Bundle identifier",
        -      "type": "string"
        -    },
        -    "derived": {
        -      "additionalProperties": {},
        -      "description": "Computed spread and policy fields",
        -      "type": "object"
        -    },
        -    "series": {
        -      "additionalProperties": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "description": "Current values for each rate series",
        -      "type": "object"
        -    },
        -    "signals": {
        -      "additionalProperties": {
        -        "type": "string"
        -      },
        -      "description": "Curve shape and policy stance signals",
        -      "type": "object"
        -    }
        -  },
        -  "required": [
        -    "as_of",
        -    "bundle",
        -    "series",
        -    "derived",
        -    "signals"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedget_bundle_refi_signal1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": false,
        -  "properties": {
        -    "as_of": {
        -      "description": "Date of the most recent underlying data",
        -      "type": "string"
        -    },
        -    "bundle": {
        -      "description": "Bundle identifier: refi_signal",
        -      "type": "string"
        -    },
        -    "derived": {
        -      "additionalProperties": {},
        -      "description": "mbs_spread, week52_high, week52_low, week52_position_pct, refi_breakeven_threshold",
        -      "type": "object"
        -    },
        -    "series": {
        -      "additionalProperties": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "description": "MORTGAGE30US, MORTGAGE15US, DGS10, FEDFUNDS",
        -      "type": "object"
        -    },
        -    "signals": {
        -      "additionalProperties": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "description": "rate_trend_30d, rate_trend_90d, rate_vs_52wk, refi_environment",
        -      "type": "object"
        -    }
        -  },
        -  "required": [
        -    "as_of",
        -    "bundle",
        -    "series",
        -    "derived",
        -    "signals"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedget_crypto_history3 fields changed
      • changedInput schema / properties / coin / description
        Previous value: -"Crypto symbol e.g. BTC, ETH, SOL"New value: +"Crypto symbol, e.g. BTC"
      • changedInput schema / properties / days / description
        Previous value: -"History window: 30 ($0.15), 90 ($0.15), or 365 ($0.15) days"New value: +"Days of daily price history"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": false,
        -  "properties": {
        -    "count": {
        -      "description": "Number of data points returned",
        -      "type": "number"
        -    },
        -    "days": {
        -      "description": "Number of days requested",
        -      "type": "number"
        -    },
        -    "end": {
        -      "description": "End date (YYYY-MM-DD)",
        -      "type": "string"
        -    },
        -    "name": {
        -      "description": "Full coin name",
        -      "type": "string"
        -    },
        -    "observations": {
        -      "description": "Daily price observations",
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "date": {
        -            "type": "string"
        -          },
        -          "price_usd": {
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "date",
        -          "price_usd"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "start": {
        -      "description": "Start date (YYYY-MM-DD)",
        -      "type": "string"
        -    },
        -    "symbol": {
        -      "description": "Crypto symbol",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "symbol",
        -    "name",
        -    "days",
        -    "count",
        -    "start",
        -    "end",
        -    "observations"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedget_crypto_price2 fields changed
      • changedInput schema / properties / coin / description
        Previous value: -"Crypto symbol e.g. BTC, ETH, SOL, DOGE"New value: +"Crypto symbol, e.g. BTC"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": false,
        -  "properties": {
        -    "as_of": {
        -      "description": "ISO timestamp of the data fetch",
        -      "type": "string"
        -    },
        -    "change_24h_pct": {
        -      "description": "24-hour price change %",
        -      "type": "number"
        -    },
        -    "market_cap_usd": {
        -      "description": "Market cap in USD",
        -      "type": [
        -        "number",
        -        "null"
        -      ]
        -    },
        -    "name": {
        -      "description": "Full name",
        -      "type": "string"
        -    },
        -    "price_usd": {
        -      "description": "Current price in USD",
        -      "type": "number"
        -    },
        -    "symbol": {
        -      "description": "Crypto symbol",
        -      "type": "string"
        -    },
        -    "volume_24h_usd": {
        -      "description": "24-hour trading volume in USD",
        -      "type": [
        -        "number",
        -        "null"
        -      ]
        -    }
        -  },
        -  "required": [
        -    "symbol",
        -    "name",
        -    "price_usd",
        -    "change_24h_pct",
        -    "market_cap_usd",
        -    "volume_24h_usd",
        -    "as_of"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedget_current_value2 fields changed
      • changedInput schema / properties / series_id / description
        Previous value: -"FRED series ID e.g. CPIAUCSL, UNRATE, MORTGAGE30US, DGS10, DCOILWTICO, SAHMREALTIME"New value: +"FRED series ID. Use IORB for Interest on Reserve Balances, EFFR for Effective Fed Funds Rate, MORTGAGE30US for 30-yr mortgage rate, SAHMREALTIME for Sahm Rule, etc."
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": false,
        -  "properties": {
        -    "date": {
        -      "description": "Date of the observation (YYYY-MM-DD)",
        -      "type": "string"
        -    },
        -    "label": {
        -      "description": "Human-readable series name",
        -      "type": "string"
        -    },
        -    "series_id": {
        -      "description": "FRED series identifier",
        -      "type": "string"
        -    },
        -    "value": {
        -      "description": "Most recent observed value",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "series_id",
        -    "label",
        -    "value",
        -    "date"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedget_economic_calendar2 fields changed
      • changedInput schema / properties / days / description
        Previous value: -"Lookahead window in days: 30, 60, or 90"New value: +"Lookahead window in days"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": false,
        -  "properties": {
        -    "calendar_end": {
        -      "description": "End date of the calendar window",
        -      "type": "string"
        -    },
        -    "calendar_start": {
        -      "description": "Start date of the calendar window",
        -      "type": "string"
        -    },
        -    "count": {
        -      "description": "Number of scheduled releases",
        -      "type": "number"
        -    },
        -    "releases": {
        -      "description": "Scheduled FRED economic data releases",
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "date": {
        -            "description": "Release date (YYYY-MM-DD)",
        -            "type": "string"
        -          },
        -          "release_id": {
        -            "description": "FRED release identifier",
        -            "type": "number"
        -          },
        -          "release_name": {
        -            "description": "Name of the economic release",
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "date",
        -          "release_id",
        -          "release_name"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "calendar_start",
        -    "calendar_end",
        -    "count",
        -    "releases"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedget_edgar_company3 fields changed
      • changedInput schema / properties / ticker / description
        Previous value: -"Stock ticker symbol e.g. AAPL, MSFT, TSLA, AMZN, NVDA, GOOGL"New value: +"US stock ticker, e.g. AAPL, MSFT, NVDA"
      • changedInput schema / properties / ticker / maxLength
        Previous value: -5New value: +10
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": false,
        -  "properties": {
        -    "as_of": {
        -      "description": "Date the data was fetched",
        -      "type": "string"
        -    },
        -    "cik": {
        -      "description": "SEC Central Index Key",
        -      "type": "string"
        -    },
        -    "company_name": {
        -      "description": "Company legal name",
        -      "type": "string"
        -    },
        -    "edgar_url": {
        -      "description": "EDGAR filing browser URL for this company",
        -      "type": "string"
        -    },
        -    "fundamentals": {
        -      "additionalProperties": {},
        -      "description": "Financial data: revenue, net_income, total_assets, stockholders_equity, eps_basic",
        -      "type": "object"
        -    },
        -    "ticker": {
        -      "description": "Ticker symbol",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "ticker",
        -    "company_name",
        -    "cik",
        -    "fundamentals",
        -    "as_of",
        -    "edgar_url"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedget_fx_rate_by_date3 fields changed
      • changedInput schema / properties / date / description
        Previous value: -"Date in YYYY-MM-DD format e.g. 2026-01-15"New value: +"Date in YYYY-MM-DD format, e.g. 2026-05-09"
      • changedInput schema / properties / pair / description
        Previous value: -"G10 currency pair e.g. EURUSD, USDJPY"New value: +"G10 currency pair, e.g. EURUSD"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": false,
        -  "properties": {
        -    "date": {
        -      "description": "Date of the rate (YYYY-MM-DD)",
        -      "type": "string"
        -    },
        -    "label": {
        -      "description": "Human-readable pair name",
        -      "type": "string"
        -    },
        -    "pair": {
        -      "description": "Currency pair identifier",
        -      "type": "string"
        -    },
        -    "rate": {
        -      "description": "Exchange rate on the requested date",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "pair",
        -    "label",
        -    "rate",
        -    "date"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedget_fx_rate_current2 fields changed
      • changedInput schema / properties / pair / description
        Previous value: -"G10 currency pair e.g. EURUSD, USDJPY, GBPUSD"New value: +"G10 currency pair, e.g. EURUSD"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": false,
        -  "properties": {
        -    "date": {
        -      "description": "Date of the rate (YYYY-MM-DD)",
        -      "type": "string"
        -    },
        -    "label": {
        -      "description": "Human-readable pair name",
        -      "type": "string"
        -    },
        -    "pair": {
        -      "description": "Currency pair identifier",
        -      "type": "string"
        -    },
        -    "rate": {
        -      "description": "Current exchange rate",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "pair",
        -    "label",
        -    "rate",
        -    "date"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedget_fx_rate_series3 fields changed
      • changedInput schema / properties / days / description
        Previous value: -"History window: 30 ($0.05), 90 ($0.10), or 365 ($0.25)"New value: +"History window in days"
      • changedInput schema / properties / pair / description
        Previous value: -"G10 currency pair e.g. EURUSD"New value: +"G10 currency pair, e.g. EURUSD"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": false,
        -  "properties": {
        -    "count": {
        -      "description": "Number of observations returned",
        -      "type": "number"
        -    },
        -    "end": {
        -      "description": "End date of the window",
        -      "type": "string"
        -    },
        -    "label": {
        -      "description": "Human-readable pair name",
        -      "type": "string"
        -    },
        -    "observations": {
        -      "description": "Daily exchange rates",
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "date": {
        -            "type": "string"
        -          },
        -          "value": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "date",
        -          "value"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "pair": {
        -      "description": "Currency pair identifier",
        -      "type": "string"
        -    },
        -    "start": {
        -      "description": "Start date of the window",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "pair",
        -    "label",
        -    "count",
        -    "start",
        -    "end",
        -    "observations"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedget_policy_spread1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": false,
        -  "properties": {
        -    "as_of": {
        -      "description": "Date of the most recent data",
        -      "type": "string"
        -    },
        -    "effr": {
        -      "description": "Effective Federal Funds Rate (%)",
        -      "type": "number"
        -    },
        -    "interpretation": {
        -      "description": "Policy stance interpretation",
        -      "type": "string"
        -    },
        -    "iorb": {
        -      "description": "Interest on Reserve Balances (%)",
        -      "type": "number"
        -    },
        -    "spread": {
        -      "description": "EFFR minus IORB spread in percentage points",
        -      "type": "number"
        -    }
        -  },
        -  "required": [
        -    "as_of",
        -    "effr",
        -    "iorb",
        -    "spread",
        -    "interpretation"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedget_recession_indicator1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": false,
        -  "properties": {
        -    "as_of": {
        -      "description": "Date of the most recent observation",
        -      "type": "string"
        -    },
        -    "signal": {
        -      "description": "Human-readable signal description",
        -      "type": "string"
        -    },
        -    "threshold": {
        -      "description": "Trigger threshold (0.50)",
        -      "type": "number"
        -    },
        -    "triggered": {
        -      "description": "True if value >= 0.50 (recession signal active)",
        -      "type": "boolean"
        -    },
        -    "value": {
        -      "description": "Sahm Rule indicator value",
        -      "type": "number"
        -    }
        -  },
        -  "required": [
        -    "as_of",
        -    "value",
        -    "threshold",
        -    "triggered",
        -    "signal"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedget_series1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": false,
        -  "properties": {
        -    "count": {
        -      "description": "Number of observations returned",
        -      "type": "number"
        -    },
        -    "current_date": {
        -      "description": "Date of the most recent observation",
        -      "type": "string"
        -    },
        -    "current_value": {
        -      "description": "Most recent observed value",
        -      "type": "string"
        -    },
        -    "end": {
        -      "description": "End date of the series window",
        -      "type": "string"
        -    },
        -    "label": {
        -      "description": "Human-readable series name",
        -      "type": "string"
        -    },
        -    "observations": {
        -      "description": "All observations in the window",
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "date": {
        -            "type": "string"
        -          },
        -          "value": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "date",
        -          "value"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "series_id": {
        -      "description": "FRED series identifier",
        -      "type": "string"
        -    },
        -    "start": {
        -      "description": "Start date of the series window",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "series_id",
        -    "label",
        -    "current_value",
        -    "current_date",
        -    "count",
        -    "start",
        -    "end",
        -    "observations"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedget_treasury_yield_by_date2 fields changed
      • changedInput schema / properties / date / description
        Previous value: -"Date in YYYY-MM-DD format e.g. 2026-05-09"New value: +"Date in YYYY-MM-DD format, e.g. 2026-05-09"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": false,
        -  "properties": {
        -    "date": {
        -      "description": "Date of the observation (YYYY-MM-DD)",
        -      "type": "string"
        -    },
        -    "yield_percent": {
        -      "description": "30-year Treasury yield as a percentage",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "yield_percent",
        -    "date"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedget_treasury_yield_current1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": false,
        -  "properties": {
        -    "date": {
        -      "description": "Date of the observation (YYYY-MM-DD)",
        -      "type": "string"
        -    },
        -    "yield_percent": {
        -      "description": "Current 30-year Treasury yield as a percentage",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "yield_percent",
        -    "date"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedget_value_by_date3 fields changed
      • changedInput schema / properties / date / description
        Previous value: -"Date in YYYY-MM-DD format e.g. 2026-01-15"New value: +"Date in YYYY-MM-DD format, e.g. 2026-05-09"
      • changedInput schema / properties / series_id / description
        Previous value: -"FRED series ID"New value: +"FRED series ID. Use IORB for Interest on Reserve Balances, EFFR for Effective Fed Funds Rate, MORTGAGE30US for 30-yr mortgage rate, SAHMREALTIME for Sahm Rule, etc."
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": false,
        -  "properties": {
        -    "date": {
        -      "description": "Date of the observation (YYYY-MM-DD)",
        -      "type": "string"
        -    },
        -    "label": {
        -      "description": "Human-readable series name",
        -      "type": "string"
        -    },
        -    "series_id": {
        -      "description": "FRED series identifier",
        -      "type": "string"
        -    },
        -    "value": {
        -      "description": "Observed value on the requested date",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "series_id",
        -    "label",
        -    "value",
        -    "date"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedget_yield_curve1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": false,
        -  "properties": {
        -    "DGS10": {
        -      "description": "10-Year Treasury yield",
        -      "type": "number"
        -    },
        -    "DGS1MO": {
        -      "description": "1-Month T-Bill rate",
        -      "type": "number"
        -    },
        -    "DGS2": {
        -      "description": "2-Year Treasury yield",
        -      "type": "number"
        -    },
        -    "as_of": {
        -      "description": "Date of the most recent underlying data",
        -      "type": "string"
        -    },
        -    "inverted_2s10s": {
        -      "description": "Whether the 2s10s spread is negative (inverted)",
        -      "type": "boolean"
        -    },
        -    "inverted_3m10y": {
        -      "description": "Whether the 3m10y spread is negative (inverted)",
        -      "type": "boolean"
        -    },
        -    "signal": {
        -      "description": "Curve shape signal: Fully inverted, Partially inverted, or Normal",
        -      "type": "string"
        -    },
        -    "spread_2s10s": {
        -      "description": "10Y minus 2Y Treasury spread in percentage points",
        -      "type": "number"
        -    },
        -    "spread_3m10y": {
        -      "description": "10Y minus 3-Month T-Bill spread in percentage points",
        -      "type": "number"
        -    }
        -  },
        -  "required": [
        -    "as_of",
        -    "spread_2s10s",
        -    "spread_3m10y",
        -    "DGS2",
        -    "DGS10",
        -    "DGS1MO",
        -    "inverted_2s10s",
        -    "inverted_3m10y",
        -    "signal"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Addedgrade_mortgage_offer
  2. 4 tool updates
    • Addedget_bundle_crypto
    • Addedget_crypto_history
    • Addedget_crypto_price
    • Addedget_edgar_company
  3. 2 tool updates
    • Addedget_bundle_purchase_market
    • Addedget_bundle_refi_signal
  4. 6 tool updates
    • Addedget_bundle_context_brief
    • Addedget_bundle_energy
    • Addedget_bundle_fx_dashboard
    • Addedget_bundle_macro
    • Addedget_bundle_mortgage_pulse
    • Addedget_bundle_rate_environment
  5. 12 tool updates
    • First observedget_current_value
    • First observedget_economic_calendar
    • First observedget_fx_rate_by_date
    • First observedget_fx_rate_current
    • First observedget_fx_rate_series
    • First observedget_policy_spread
    • First observedget_recession_indicator
    • First observedget_series
    • First observedget_treasury_yield_by_date
    • First observedget_treasury_yield_current
    • First observedget_value_by_date
    • First observedget_yield_curve

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables LLM agents to query US macroeconomic time series from FRED, including GDP, CPI, unemployment, and interest rates, for contextual research.
    6
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides access to 800,000+ Federal Reserve Economic Data (FRED) time series, enabling users to search, retrieve, and analyze economic indicators like GDP, unemployment, inflation, and interest rates through natural language queries.
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    US Macro Economic Intelligence MCP — 8 tools for Fed rates, inflation, yield curve, labor market, GDP via FRED. Part of ToolOracle.
    -
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to search and retrieve FRED economic time series, including vintage (as-published) data, with tools for series search, observation retrieval, release calendar, revision history, and more.
    9
    29 PyPI
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.