Skip to main content
Glama

Server Details

Convert currencies and fetch blended FX rates from 50+ institutional sources.

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 83 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
lineofflight/frankfurter-mcp
GitHub Stars
5
Server Listing
frankfurter-mcp
ChatGPT
–
Claude
–

TDQS

A4.2/5.0

Scored across 4 tools

Disambiguation4/5

convert and get_rates overlap conceptually because both involve exchange rates, but the descriptions clearly distinguish a converted amount from raw rate data, including guidance to use get_rates when more precision is needed. list_currencies and list_providers are unambiguous. Minor confusion is possible only when deciding whether to use convert or get_rates plus manual calculation.

Naming Consistency4/5

Three tools follow a verb_noun snake_case pattern: get_rates, list_currencies, and list_providers. convert is a bare verb, which is a minor deviation but still readable and predictable. Overall naming is mostly consistent.

Tool Count5/5

Four tools is a tight, well-scoped set for a currency conversion and exchange-rate API. Each tool covers a distinct necessary capability: conversion, raw rates, currency/asset enumeration, and provider enumeration. There is no bloat and no obviously missing operational tool.

Completeness4/5

The core read-only surface is covered: converting amounts, retrieving latest or single-day rates, listing supported assets, and listing rate providers. A notable gap is historical time-series or date-range rate retrieval, since get_rates only supports latest or a single day. Agents can work around this by iterating dates, but it is not ideal.

Available Tools

4 tools
convertConvert currencyA
Read-only
Inspect

Convert an amount from one currency to another. Returns {amount, currency} rounded to the target's minor units. Upstream rounds rates per direction; for low-value sources, flip via get_rates for more precision. Pass provider to use one institution's published rate, e.g. UST for a U.S. Treasury reporting rate.

NameRequiredDescriptionDefault
toYesTarget currency or asset code.
dateNoDate YYYY-MM-DD for a past rate; omit for latest.
fromYesSource currency or asset code, e.g. USD, XAU or BTC.
amountYesAmount in the source currency. Normalize localized input first: '100,50' -> 100.5; German '1.000,50' -> 1000.5; English '1,000.50' -> 1000.5.
providerNoProvider key, e.g. ECB for European Central Bank or UST for U.S. Treasury reporting rates. Serves that institution's published rates instead of the blend; a date inside a weekly, monthly or quarterly provider's period returns the rate in force. Keys at https://frankfurter.dev/providers/.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, yet the description adds substantial behavior: the rounded {amount, currency} return shape, rounding to the target's minor units, upstream per-direction rounding, and that a date inside a weekly/monthly/quarterly provider period returns the rate in force. It does not cover failure behavior for unknown codes or future dates, so it falls short of a 5.

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

Conciseness5/5

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

Four tight sentences, front-loaded with the core action and return shape, then the precision caveat, then provider usage. No filler or redundant restatement of the name.

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, so the description carries the return shape, which it does ('Returns {amount, currency} rounded to the target's minor units'). Combined with full parameter coverage and the precision caveat, an agent has everything needed to invoke it correctly.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description reinforces provider semantics ('one institution's published rate, e.g. UST') beyond what the schema contains; this is useful but does not extend beyond the schema's own provider documentation.

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: 'Convert an amount from one currency to another'. It distinguishes itself from the sibling get_rates by noting that get_rates is the tool for rates and the flip path, so an agent can select without opening schemas.

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

Usage Guidelines4/5

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

Gives two concrete conditions: use get_rates with a flipped direction for low-value sources for more precision, and pass provider when you need one institution's published rate. It lacks an explicit statement of when conversion is inappropriate (e.g., cross-asset conversions or exact rate retrieval), but the context is clear.

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

get_ratesGet exchange ratesA
Read-only
Inspect

Latest or a single day's exchange rates. The raw-rate companion to convert. With provider, published rates from one or more institutions: on its own base the digits are as published, with the date they took effect.

NameRequiredDescriptionDefault
baseNoBase currency or asset code. Default EUR.
dateNoSingle day YYYY-MM-DD. Omit for the latest rates.
quotesNoCurrency or asset codes to return; omit for all.
providerNoProvider key or keys, e.g. ECB or ['ECB', 'HMRC']. Serves published rates instead of the blend; a date inside a weekly, monthly or quarterly provider's period returns the rate in force. Keys at https://frankfurter.dev/providers/.
providersNoAlias for `provider` accepting multiple provider keys.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds genuine behavioral context beyond that: provider mode serves published rates instead of the blend, digits are as published on the provider's own base, and a date inside a provider's period returns the rate in force.

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 core purpose and the sibling relationship, with no redundant restatement of the name or 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 5-parameter read-only tool with no output schema, the description covers the non-obvious provider semantics well; the remaining parameters (base, date, quotes) are fully documented in the schema, so nothing critical is missing, though return shape is left implicit.

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, but the description adds meaning the schema does not: it clarifies the provider parameter's effect (published rates vs blend, effective-date semantics) and the base-relative digit behavior, which helps an agent interpret results.

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 ('Latest or a single day's exchange rates') and explicitly positions itself as the 'raw-rate companion to `convert`', so an agent can distinguish it from the conversion sibling without opening either schema.

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

Usage Guidelines4/5

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

The 'raw-rate companion to `convert`' framing implies when to prefer this tool (retrieving rates rather than converting), and the provider clause explains the alternative mode. It stops short of an explicit 'use this instead of convert when...' statement or exclusions, so it is clear context but not full routing guidance.

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

list_currenciesList currenciesA
Read-only
Inspect

List all supported currency, precious metal and crypto asset codes and their full names (e.g. { 'USD': 'United States Dollar' }).

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 readOnlyHint and openWorldHint, so safety is covered. The description adds genuine context beyond that: it discloses the scope of assets covered (fiat, precious metals, crypto) and the shape of the response as a code-to-name mapping, which is not in any structured field.

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?

A single front-loaded sentence with the scope stated first and a compact example that removes ambiguity about the return value. No 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?

For a trivial zero-argument discovery tool with no output schema, the description plus inline example is sufficient to call it and interpret results. Only a note on whether the list is static or account-dependent would add value.

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 no parameter explanation is needed. The description correctly spends its words on output scope instead.

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 (list) and resource (supported currency, precious metal and crypto asset codes) with an inline example of the returned mapping. It is naturally distinguishable from convert and get_rates, though it never explicitly contrasts itself with list_providers.

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?

Usage is only implied: an agent can infer this is the lookup used to discover valid asset codes before calling convert. There is no explicit when-to-use or when-not-to-use statement, and no mention of the sibling tools.

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

list_providersList providersA
Read-only
Inspect

List the institutions whose rates Frankfurter relays, with key, rate type, frequency (daily, weekly, monthly or quarterly) and coverage dates. Use a key as provider in convert or get_rates for that institution's published rates instead of the blend.

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 readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds real behavioral context: the output is a catalog of institutions with frequency categories (daily, weekly, monthly, quarterly) and coverage date ranges, and that omitting a provider yields a blend. No mention of ordering or whether results are cached.

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, no filler. The catalog contents come first and the cross-tool usage note follows, which is the right order for an agent scanning for relevance.

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 largely discharges it by naming the fields returned. A little more on the response shape (e.g. a flat array vs. object) would make it fully self-sufficient.

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 no parameters, so the baseline applies and the description correctly spends no space on argument docs. It instead explains the semantic meaning of the returned `key` field as an input to sibling tools, which is the relevant 'parameter' knowledge here.

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 ('List the institutions whose rates Frankfurter relays') and enumerates what each entry carries: key, rate type, frequency, coverage dates. This clearly distinguishes it from list_currencies and from the rate-fetching siblings convert/get_rates.

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 says to take a returned key and pass it as `provider` to `convert` or `get_rates` for single-institution rates instead of the default blend. That is strong routing guidance, though it explains downstream use rather than stating when this tool itself should be chosen over an alternative.

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. 2 tool updates
    • Changedconvert8 fields changed
      • changedInput schema / properties / from / description
        Previous value: -"ISO 4217 source currency."New value: +"Source currency or asset code, e.g. USD, XAU or BTC."
      • removedInput schema / properties / from / maxLength
        Removed value: -3
      • removedInput schema / properties / from / minLength
        Removed value: -3
      • addedInput schema / properties / from / pattern
        Added value: +"^[A-Za-z0-9]{3,5}$"
      • changedInput schema / properties / to / description
        Previous value: -"ISO 4217 target currency."New value: +"Target currency or asset code."
      • removedInput schema / properties / to / maxLength
        Removed value: -3
      • removedInput schema / properties / to / minLength
        Removed value: -3
      • addedInput schema / properties / to / pattern
        Added value: +"^[A-Za-z0-9]{3,5}$"
    • Changedget_rates9 fields changed
      • changedInput schema / properties / base / description
        Previous value: -"ISO 4217 base currency. Default EUR."New value: +"Base currency or asset code. Default EUR."
      • removedInput schema / properties / base / maxLength
        Removed value: -3
      • removedInput schema / properties / base / minLength
        Removed value: -3
      • addedInput schema / properties / base / pattern
        Added value: +"^[A-Za-z0-9]{3,5}$"
      • changedInput schema / properties / quotes / description
        Previous value: -"ISO 4217 quote codes to return; omit for all."New value: +"Currency or asset codes to return; omit for all."
      • addedInput schema / properties / quotes / items / $ref
        Added value: +"#/properties/base"
      • removedInput schema / properties / quotes / items / maxLength
        Removed value: -3
      • removedInput schema / properties / quotes / items / minLength
        Removed value: -3
      • removedInput schema / properties / quotes / items / type
        Removed value: -"string"
  2. 2 tool updates
    • Changedconvert1 field changed
      • changedInput schema / properties / provider / description
        Previous value: -"Provider key, e.g. ECB for European Central Bank or UST for U.S. Treasury reporting rates. Serves that institution's published rates instead of the blend; a date inside a monthly or quarterly provider's period returns the rate in force. Keys at https://frankfurter.dev/providers/."New value: +"Provider key, e.g. ECB for European Central Bank or UST for U.S. Treasury reporting rates. Serves that institution's published rates instead of the blend; a date inside a weekly, monthly or quarterly provider's period returns the rate in force. Keys at https://frankfurter.dev/providers/."
    • Changedget_rates1 field changed
      • changedInput schema / properties / provider / description
        Previous value: -"Provider key or keys, e.g. ECB or ['ECB', 'HMRC']. Serves published rates instead of the blend; a date inside a monthly or quarterly provider's period returns the rate in force. Keys at https://frankfurter.dev/providers/."New value: +"Provider key or keys, e.g. ECB or ['ECB', 'HMRC']. Serves published rates instead of the blend; a date inside a weekly, monthly or quarterly provider's period returns the rate in force. Keys at https://frankfurter.dev/providers/."
  3. 2 tool updates
    • Changedconvert1 field changed
      • changedInput schema / properties / provider / description
        Previous value: -"Provider key, e.g. UST for U.S. Treasury reporting rates. Serves that institution's published rates instead of the blend; a date inside a monthly or quarterly provider's period returns the rate in force. Keys at https://frankfurter.dev/providers/."New value: +"Provider key, e.g. ECB for European Central Bank or UST for U.S. Treasury reporting rates. Serves that institution's published rates instead of the blend; a date inside a monthly or quarterly provider's period returns the rate in force. Keys at https://frankfurter.dev/providers/."
    • Changedget_rates6 fields changed
      • changedInput schema / properties / provider / description
        Previous value: -"Provider key, e.g. UST for U.S. Treasury reporting rates. Serves that institution's published rates instead of the blend; a date inside a monthly or quarterly provider's period returns the rate in force. Keys at https://frankfurter.dev/providers/."New value: +"Provider key or keys, e.g. ECB or ['ECB', 'HMRC']. Serves published rates instead of the blend; a date inside a monthly or quarterly provider's period returns the rate in force. Keys at https://frankfurter.dev/providers/."
      • addedInput schema / properties / provider / items
        Added value: +{
        +  "maxLength": 8,
        +  "minLength": 2,
        +  "type": "string"
        +}
      • removedInput schema / properties / provider / maxLength
        Removed value: -8
      • removedInput schema / properties / provider / minLength
        Removed value: -2
      • changedInput schema / properties / provider / type
        Previous value: -"string"New value: +"array"
      • addedInput schema / properties / providers
        Added value: +{
        +  "description": "Alias for `provider` accepting multiple provider keys.",
        +  "items": {
        +    "maxLength": 8,
        +    "minLength": 2,
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  4. 3 tool updates
    • Changedconvert1 field changed
      • addedInput schema / properties / provider
        Added value: +{
        +  "description": "Provider key, e.g. UST for U.S. Treasury reporting rates. Serves that institution's published rates instead of the blend; a date inside a monthly or quarterly provider's period returns the rate in force. Keys at https://frankfurter.dev/providers/.",
        +  "maxLength": 8,
        +  "minLength": 2,
        +  "type": "string"
        +}
    • Changedget_rates1 field changed
      • addedInput schema / properties / provider
        Added value: +{
        +  "description": "Provider key, e.g. UST for U.S. Treasury reporting rates. Serves that institution's published rates instead of the blend; a date inside a monthly or quarterly provider's period returns the rate in force. Keys at https://frankfurter.dev/providers/.",
        +  "maxLength": 8,
        +  "minLength": 2,
        +  "type": "string"
        +}
    • Addedlist_providers
  5. 3 tool updates
    • Changedconvert2 fields changed
      • changedInput schema / properties / amount / description
        Previous value: -"Amount in the source currency."New value: +"Amount in the source currency. Normalize localized input first: '100,50' -> 100.5; German '1.000,50' -> 1000.5; English '1,000.50' -> 1000.5."
      • changedInput schema / properties / date / description
        Previous value: -"Historical date YYYY-MM-DD. Omit for latest."New value: +"Date YYYY-MM-DD for a past rate; omit for latest."
    • Changedget_rates5 fields changed
      • changedInput schema / properties / date / description
        Previous value: -"Single day YYYY-MM-DD. Mutually exclusive with start/end."New value: +"Single day YYYY-MM-DD. Omit for the latest rates."
      • removedInput schema / properties / end
        Removed value: -{
        -  "$ref": "#/properties/date",
        -  "description": "Range end YYYY-MM-DD (inclusive). Requires start and quotes."
        -}
      • removedInput schema / properties / providers
        Removed value: -{
        -  "description": "Provider keys. Omit for blended (default).",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • changedInput schema / properties / quotes / description
        Previous value: -"ISO 4217 quote codes. Required when start/end is set."New value: +"ISO 4217 quote codes to return; omit for all."
      • removedInput schema / properties / start
        Removed value: -{
        -  "$ref": "#/properties/date",
        -  "description": "Range start YYYY-MM-DD (inclusive). Requires end and quotes."
        -}
    • Addedlist_currencies
  6. 2 tool updates
    • First observedconvert
    • First observedget_rates

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Real-time currency exchange rates and crypto prices via MCP. Convert between 60+ fiat currencies and 30+ cryptocurrencies with multi-source failover. No API keys needed for upstream data.
    7 npm
    ISC
  • A
    license
    A
    quality
    C
    maintenance
    Enables MCP clients to access exchange rates for 160+ currencies, currency conversion, historical rates, time series, crypto, metal and stock prices, usage checks, and rate alerts.
    17
    169 npm
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.