Skip to main content
Glama
CurrencyFreaks

currencyfreaks-mcp

Official

CurrencyFreaks MCP Server

npm version GitHub Node.js License

Official MCP server for CurrencyFreaks. Exposes 7 MCP tools for real-time and historical exchange rates and currency conversion across 1000+ fiat currencies, cryptocurrencies, and precious metals. Your AI assistant asks for rates in plain English; the MCP server handles the API calls.

Works with Claude Desktop, Claude Code, Cursor, Windsurf, VS Code, Cline, Codex, and any other MCP-compatible client.

Item

Value

Package

@currencyfreaks/mcp

Transport

stdio

Node.js

>=18

Quick Start

  1. Get a free CurrencyFreaks API key — 1,000 requests a month, no card required.

  2. Cursor users can install in one click:

    Add to Cursor

  3. Everyone else: add this to your MCP client config (see Install by Client for the exact file path):

{
  "mcpServers": {
    "currencyfreaks": {
      "command": "npx",
      "args": ["-y", "@currencyfreaks/mcp"],
      "env": {
        "CURRENCYFREAKS_API_KEY": "<YOUR_API_KEY>"
      }
    }
  }
}
  1. Restart your client.

  2. Test it: ask "What's the current EUR to USD exchange rate?"

Related MCP server: Frankfurter Forex MCP

Table of Contents

Install by Client

Requirements

  • Node.js 18 or later

  • npx available in your terminal

  • A CurrencyFreaks API key — sign up free

Claude Desktop

Add to claude_desktop_config.json (Settings → Developer → Edit Config):

{
  "mcpServers": {
    "currencyfreaks": {
      "command": "npx",
      "args": ["-y", "@currencyfreaks/mcp"],
      "env": {
        "CURRENCYFREAKS_API_KEY": "<YOUR_API_KEY>"
      }
    }
  }
}

Restart Claude Desktop after saving.

Claude Code

claude mcp add currencyfreaks --env CURRENCYFREAKS_API_KEY=<YOUR_API_KEY> -- npx -y @currencyfreaks/mcp

Start a new Claude Code session after adding the server.

Cursor

One-click install:

Add to Cursor

Or add to .cursor/mcp.json manually:

{
  "mcpServers": {
    "currencyfreaks": {
      "command": "npx",
      "args": ["-y", "@currencyfreaks/mcp"],
      "env": {
        "CURRENCYFREAKS_API_KEY": "<YOUR_API_KEY>"
      }
    }
  }
}

Restart Cursor after saving.

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "currencyfreaks": {
      "command": "npx",
      "args": ["-y", "@currencyfreaks/mcp"],
      "env": {
        "CURRENCYFREAKS_API_KEY": "<YOUR_API_KEY>"
      }
    }
  }
}

Restart Windsurf after saving.

VS Code / GitHub Copilot

Add to your VS Code settings.json:

{
  "mcp": {
    "servers": {
      "currencyfreaks": {
        "command": "npx",
        "args": ["-y", "@currencyfreaks/mcp"],
        "env": {
          "CURRENCYFREAKS_API_KEY": "<YOUR_API_KEY>"
        }
      }
    }
  }
}

Restart VS Code after saving.

Cline

Open MCP Servers panel → Configure → Advanced MCP Settings. Add to cline_mcp_settings.json:

{
  "mcpServers": {
    "currencyfreaks": {
      "command": "npx",
      "args": ["-y", "@currencyfreaks/mcp"],
      "env": {
        "CURRENCYFREAKS_API_KEY": "<YOUR_API_KEY>"
      }
    }
  }
}

Restart Cline after saving.

Codex CLI

codex mcp add currencyfreaks --env CURRENCYFREAKS_API_KEY=<YOUR_API_KEY> -- npx -y @currencyfreaks/mcp
codex mcp list

Start a new Codex session after adding the server.

Any Other MCP Client

Use this config:

{
  "command": "npx",
  "args": ["-y", "@currencyfreaks/mcp"],
  "env": {
    "CURRENCYFREAKS_API_KEY": "<YOUR_API_KEY>"
  }
}

Verify It Works

Try these after setup:

Prompt

Expected tool

What's the current EUR to USD exchange rate?

get_latest_rates with symbols=EUR

Convert 500 USD to PKR.

convert_currency

What was 1,000 GBP worth in JPY on 2026-01-15?

convert_currency with date

What was the EUR/USD rate on January 2nd, 2020?

get_historical_rates

Show daily USD to INR rates for the first week of August 2026.

get_time_series

How much has the yen moved against the dollar since June 1st?

get_fluctuation

What's the currency code for the Nepalese rupee?

list_currencies with search=nepal

What's 50 USD in the local currency of IP 182.186.18.9?

ip_to_currency

Tool Reference

All 7 tools wrap the CurrencyFreaks v2.0 REST API. Tools that take symbols accept a comma-separated list of currency codes (e.g. EUR,GBP,PKR), case-insensitive. Use list_currencies to look up a code — there are 1000+ across fiat, crypto, and metals.

Precious metals use ISO 4217 codes: XAU (gold), XAG (silver), XPT (platinum), XPD (palladium). The API returns all rates and amounts as strings to preserve precision.

list_currencies

GET /v2.0/currency-symbols (compact) or GET /v2.0/supported-currencies (detailed) — the supported currency catalogue. No API key required.

Parameter

Required

Description

search

No

Case-insensitive substring matched against code, name, or (with detailed) country name, e.g. rupee, PK, bitcoin

detailed

No

true returns country, status (AVAILABLE/DEPRECATED), the availableFrom/availableUntil historical data range, and flag icon per currency. Default false. Combine with search; the full detailed catalogue is ~270 KB.

get_latest_rates

GET /v2.0/rates/latest — latest rates for one or more currencies against a base. Refresh frequency depends on plan: daily on Developer (free), hourly on Starter, every 10 minutes on Growth, every 60 seconds on Professional and above.

Parameter

Required

Description

symbols

No

Comma-separated currency codes. Omit for all 1000+ currencies.

base

No

Base currency code. Default USD. Paid plans only.

convert_currency

GET /v2.0/convert/latest, or GET /v2.0/convert/historical when date is given — convert an amount between two currencies. Paid plans only.

Parameter

Required

Description

from

Yes

Currency code to convert from

to

Yes

Currency code to convert to

amount

No

Amount to convert, greater than 0. Default 1.0.

date

No

YYYY-MM-DD. Converts at that day's rate instead of the latest.

get_historical_rates

GET /v2.0/rates/historical — rates on a specific past date. Major fiat currencies go back to 1984-11-28; newer currencies and crypto start from their own listing date. Paid plans only.

Parameter

Required

Description

date

Yes

YYYY-MM-DD

symbols

No

Comma-separated currency codes. Omit for all.

base

No

Base currency code. Default USD.

get_time_series

GET /v2.0/timeseries — daily rates between two dates, one entry per day. Professional plan and above.

Parameter

Required

Description

startDate

Yes

YYYY-MM-DD

endDate

Yes

YYYY-MM-DD

symbols

No

Comma-separated currency codes

base

No

Base currency code. Default USD.

get_fluctuation

GET /v2.0/fluctuation — how each currency moved between two dates: start rate, end rate, absolute change, and percent change. Professional plan and above.

Sign convention: change is startRate - endRate. A positive change means the rate fell (the symbol currency strengthened against the base); a negative change means the rate rose (the symbol currency weakened).

Parameter

Required

Description

startDate

Yes

YYYY-MM-DD

endDate

No

YYYY-MM-DD. Defaults to the day before today.

symbols

No

Comma-separated currency codes

base

No

Base currency code. Default USD.

ip_to_currency

GET /v2.0/iptocurrency — resolves the local currency from an IP address's geolocation and converts an amount into it. The target currency comes back in the to field. Growth plan and above.

Parameter

Required

Description

from

Yes

Currency code to convert from

ip

No

IPv4 or IPv6 address. Omit to use the caller's own IP.

amount

No

Amount to convert. Default 1.0.

Plan Requirements

Feature

Minimum plan

list_currencies

None (no API key needed)

get_latest_rates with default USD base

Developer (free)

base parameter on any tool

Starter

convert_currency

Starter

get_historical_rates

Starter

ip_to_currency

Growth

get_time_series

Professional

get_fluctuation

Professional

Calls that exceed the plan return a 402 error with guidance (see Error Codes).

Prompt Examples

Live rates

  • What's the current EUR to USD exchange rate?

  • Give me the latest rates for GBP, JPY, and CHF against the euro.

  • What's bitcoin worth in USD right now?

  • What's the gold price in euros?

Conversion

  • Convert 250 USD to Indian rupees.

  • How many yen is 1,200 euros?

  • What was 500 GBP worth in USD on 2025-12-31?

Historical data

  • What was the USD to PKR rate on January 2nd, 2020?

  • Show me daily EUR/USD rates for Q1 2026.

  • Compare the pound and the euro against the dollar over the last 30 days.

Price changes

  • How much has the Turkish lira dropped against the dollar since January 1st?

  • Did ETH go up or down versus USD this month, and by how much?

Discovery

  • What's the currency code for the Kazakhstani tenge?

  • Which currencies does CurrencyFreaks support for Africa?

  • How far back does historical data go for the Nigerian naira?

Example Answers and Tool Output

The text answers show what a client might say; exact wording depends on the model. JSON blocks are raw tool output.

Latest rates

Prompt: What are the latest EUR, GBP, and PKR rates against the dollar?

Example answer: As of 2026-08-25 13:26 UTC, 1 USD buys 0.9279 EUR, 0.8173 GBP, or 281.62 PKR.

{
  "date": "2026-08-25 13:26:00+00",
  "base": "USD",
  "rates": {
    "EUR": "0.9278605451274349",
    "GBP": "0.8172754173817152",
    "PKR": "281.6212943333344",
    "USD": "1.0"
  }
}

Conversion

Prompt: Convert 500 USD to PKR.

Example answer: 500 USD is 140,841.48 PKR at a rate of 281.683.

{
  "date": "2026-08-25 15:22:00+00",
  "from": "USD",
  "to": "PKR",
  "rate": "281.683",
  "givenAmount": "500.0",
  "convertedAmount": "140841.475"
}

Fluctuation

Prompt: How did the Pakistani rupee move against the pound between June 1st and June 15th, 2026?

Example answer: PKR strengthened against the pound, going from 254.331 to 243.874 per GBP, a move of 10.457 (4.11%).

{
  "startDate": "2026-06-01",
  "endDate": "2026-06-15",
  "base": "GBP",
  "rateFluctuations": {
    "PKR": {
      "startRate": "254.331",
      "endRate": "243.874",
      "change": "10.457",
      "percentChange": "4.11"
    }
  }
}

Currency lookup

Prompt: What's the currency code for the Nepalese rupee?

Example answer: The Nepalese rupee is NPR.

{
  "count": 6,
  "currencies": {
    "SCR": "Seychellois Rupee",
    "MUR": "Mauritius Rupee",
    "INR": "Indian Rupee",
    "PKR": "Pakistani Rupee",
    "LKR": "Sri Lankan Rupee",
    "NPR": "Nepalese Rupee"
  }
}

Error Codes

Tool calls never crash the server. Upstream errors are returned as structured tool results with error, code, message, and a guidance field so the client can explain what went wrong instead of echoing a status code.

Code

Meaning

400

Missing API key, or invalid parameters (bad currency code, date format, amount, or IP address)

401

API key is invalid or inactive — check CURRENCYFREAKS_API_KEY in your client config

402

Feature not included in the current plan — see Plan Requirements

404

Rates not found for the requested currency, date, or interval

429

Monthly request quota exhausted — upgrade or wait for the reset

499

Request to the upstream API timed out (see CURRENCYFREAKS_REQUEST_TIMEOUT_MS)

502

Server could not reach the upstream API

Example error result for an invalid key:

{
  "error": "Invalid Api Access Exception",
  "code": 401,
  "message": "Provided API key is invalid. [Contact tech. support for assistance at support@currencyfreaks.com]",
  "guidance": "The API key is invalid or inactive. Check CURRENCYFREAKS_API_KEY in your MCP client config and confirm the key is active on the CurrencyFreaks dashboard."
}

How It Works

This is a stdio MCP server that wraps the CurrencyFreaks v2.0 REST API.

At runtime:

  1. Your MCP client starts the server process via npx.

  2. The client reads the tool list.

  3. When a prompt matches a tool, the client calls it.

  4. The server validates inputs, calls CurrencyFreaks, and returns structured JSON.

The API key is read from the environment on each call and sent as the apikey query parameter. The catalogue endpoints behind list_currencies are public, so that tool works even before a key is configured.

Environment Variables

Variable

Required

Default

Description

CURRENCYFREAKS_API_KEY

Yes

Your CurrencyFreaks API key

CURRENCYFREAKS_REQUEST_TIMEOUT_MS

No

15000

Upstream request timeout in ms

Building from Source

git clone https://github.com/CurrencyFreaks/currencyfreaks-mcp.git
cd currencyfreaks-mcp
npm install
npm run build

Run it directly:

CURRENCYFREAKS_API_KEY=<YOUR_KEY> node dist/cli.js

Inspect with the MCP Inspector:

CURRENCYFREAKS_API_KEY=<YOUR_KEY> npx @modelcontextprotocol/inspector node dist/cli.js

Troubleshooting

Client uses an old tool list after updating: Restart the client and confirm it loaded the latest npm version.

400 "Please provide API Key": CURRENCYFREAKS_API_KEY is not set in your MCP client config's env block.

401 errors: The key is wrong or inactive. Copy it again from the CurrencyFreaks dashboard.

402 errors: The tool needs a higher plan. See Plan Requirements. On the Developer (free) plan only get_latest_rates with the default USD base and list_currencies work.

404 "Rates of provided currency X are available from A to B": The date is outside that currency's data range. Call list_currencies with search=X and detailed=true to see availableFrom and availableUntil.

Huge responses: Always pass symbols to the rate tools and search to list_currencies. Without them the API returns all 1000+ currencies.

499 timeouts: The upstream API did not respond in time. Increase CURRENCYFREAKS_REQUEST_TIMEOUT_MS (default: 15000 ms).

Pricing

Developer plan is free with 1,000 requests a month, no card required. Paid plans add base currency selection, conversion, historical data, time series, fluctuation, and IP-to-currency, with faster refresh rates. See the CurrencyFreaks pricing page.

License

MIT

Available Tools

7 tools
convert_currencyConvert an amount between currenciesA

Converts an amount from one currency to another using the latest rate, or the rate on a past date if 'date' is given. Returns the rate used, the given amount, and the converted amount. Starter plan and above (any paid plan).

NameRequiredDescriptionDefault
toYesCurrency code to convert to, e.g. 'EUR'.
dateNoOptional past date (YYYY-MM-DD) to convert at that day's rate instead of the latest rate.
fromYesCurrency code to convert from, e.g. 'USD'.
amountNoAmount to convert. Must be greater than 0. Default is 1.0.

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and adds real value: it discloses the plan requirement ('Starter plan and above') and the returned fields (rate used, given amount, converted amount). It does not cover failure behavior (invalid currency code, out-of-range date), which is the remaining gap for a no-annotation tool.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action, then the return contract, then the access requirement. Nothing is redundant and no sentence could be dropped without losing 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?

For a four-parameter tool with no output schema, the description covers the operation, the date variant, the return contents, and plan gating — enough to call it correctly. Only error/edge-case behavior is left 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%, so all four parameters — including the YYYY-MM-DD pattern for 'date' and the exclusiveMinimum on 'amount' — are already documented in the schema. The description's mention of the date conditional restates rather than extends the schema, 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?

The description gives a specific verb and resource ('converts an amount from one currency to another') plus the basis for the conversion (latest rate or a past date's rate). It implicitly separates itself from the rate-listing siblings (get_latest_rates, get_historical_rates) by returning a converted amount, but never names or contrasts them 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?

It clearly states the condition that selects the historical behavior: supply 'date' for a past day's rate, omit it for the latest rate. There are no explicit exclusions or named alternative tools for the rate-only lookups, so it stops short of full routing guidance.

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

get_fluctuationGet exchange rate fluctuationA

Returns how currencies moved between two dates: start rate, end rate, absolute change, and percent change for each symbol against the base. Note the sign convention: change = startRate - endRate, so a POSITIVE change means fewer units per base, i.e. the symbol currency strengthened against the base, and a NEGATIVE change means the rate rose and the symbol currency weakened. Professional plan and above.

NameRequiredDescriptionDefault
baseNoBase currency code the rates are expressed against (e.g. 'EUR'). Default is USD. Changing the base requires the Starter plan or above (any paid plan).
endDateNoEnd date in YYYY-MM-DD format. Defaults to the day before today.
symbolsNoComma-separated currency codes to return, e.g. 'EUR,GBP,PKR' or 'BTC,ETH' or 'XAU,XAG'. Case-insensitive. Omit to get every supported currency (1000+ entries) — prefer passing symbols to keep responses small. Use list_currencies to look up a code.
startDateYesStart date in YYYY-MM-DD format.

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden well: it discloses the returned fields, the sign convention with a worked interpretation (positive = symbol strengthened), and the plan gating. It does not mention rate limits or behavior when dates are invalid/reversed, which keeps it below 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.

Conciseness4/5

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

The output fields are front-loaded in the first clause, followed by the sign convention and plan note. The sign-convention sentence is long but each part earns its place by preventing a real interpretation error; 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?

There is no output schema and no annotations, so the description must specify the response shape and safety/permission context — it does both by enumerating return fields and stating the plan requirement. Minor gap: no guidance on default date behavior beyond what the schema provides or on large-symbol responses.

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 base, startDate, endDate, and symbols are already fully documented in the schema, including defaults and the symbols guidance. The description adds no parameter-level meaning beyond the sign convention, so the baseline 3 is appropriate.

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 how currencies moved between two dates') and enumerates the returned metrics (start rate, end rate, absolute change, percent change). It is clearly distinct from a raw rate lookup, though it does not explicitly name the closest siblings (get_time_series, get_historical_rates) that an agent might confuse it with.

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

Usage Guidelines3/5

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

It gives a clear operational precondition ('Professional plan and above') and implies usage for two-date comparison, but it never says when to prefer this over get_time_series or get_historical_rates. The choice among siblings is left to inference.

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

get_historical_ratesGet historical exchange ratesA

Returns exchange rates for a specific past date. Major fiat currencies go back to 1984-11-28; newer currencies and crypto start from their own listing date (see list_currencies with detailed=true). Starter plan and above (any paid plan).

NameRequiredDescriptionDefault
baseNoBase currency code the rates are expressed against (e.g. 'EUR'). Default is USD. Changing the base requires the Starter plan or above (any paid plan).
dateYesDate in YYYY-MM-DD format.
symbolsNoComma-separated currency codes to return, e.g. 'EUR,GBP,PKR' or 'BTC,ETH' or 'XAU,XAG'. Case-insensitive. Omit to get every supported currency (1000+ entries) — prefer passing symbols to keep responses small. Use list_currencies to look up a code.

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does disclose two meaningful behavioral facts: data-availability boundaries and plan gating (Starter+). It is silent on response shape, payload size (the 1000+ entry default lives only in the schema), and whether requests for pre-coverage dates error or return empty.

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 the tool returns, then coverage limits, then plan requirement. No filler; the parenthetical pointer to list_currencies is actionable rather than decorative.

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?

No output schema and no annotations, so the description must stand alone — and it covers purpose, data availability, plan requirement, and a currency-lookup escape hatch. The remaining gap is what the response looks like and how out-of-range dates behave, which an agent needs before calling.

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

Parameters3/5

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

Schema coverage is 100%, so the parameters are already documented, including base-plan gating and the symbols size warning. The description adds the date lower bound (1984-11-28) and per-currency listing dates, which genuinely extend the bare 'YYYY-MM-DD format' schema text, but it adds nothing about base or symbols.

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?

Clear verb+resource+scope: 'Returns exchange rates for a specific past date' precisely separates it from get_latest_rates without naming the sibling. It does not explicitly name alternatives, but the temporal qualifier makes the distinction usable.

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 real constraints on when the tool works: historical coverage from 1984-11-28 for major fiat, per-currency listing dates for newer/crypto, and a paid-plan requirement. It never explicitly contrasts with get_latest_rates or get_time_series, leaving the choice of tool to the name rather than stated guidance.

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

get_latest_ratesGet latest exchange ratesA

Returns the latest exchange rates for one or more currencies against a base currency (USD by default). Covers fiat, crypto, and metals. Rates are returned as strings; refresh frequency depends on the plan (daily on Developer/free, hourly on Starter, every 10 minutes on Growth, every 60 seconds on Professional). Omit 'symbols' to get all 1000+ currencies.

NameRequiredDescriptionDefault
baseNoBase currency code the rates are expressed against (e.g. 'EUR'). Default is USD. Changing the base requires the Starter plan or above (any paid plan).
symbolsNoComma-separated currency codes to return, e.g. 'EUR,GBP,PKR' or 'BTC,ETH' or 'XAU,XAG'. Case-insensitive. Omit to get every supported currency (1000+ entries) — prefer passing symbols to keep responses small. Use list_currencies to look up a code.

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does substantial work: it discloses that rates are returned as strings, that refresh frequency varies by plan (daily/hourly/10min/60s), and that the response can balloon to 1000+ entries. It stops short of describing error behavior or the response shape (e.g. a code→rate mapping).

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 purpose and followed by constraints and the key caveat. The plan-tier refresh sentence is dense but earns its place; nothing is redundant enough to cut.

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-optional-parameter read tool with no annotations and no output schema, the description covers scope, return type, freshness, and response-size risk. The main gap is the shape of the returned payload, which matters here precisely because 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 description coverage is 100%, so both parameters are already fully documented, including the default base of USD, the comma-separated symbol format, and the advice to prefer passing symbols. The description's 'Omit symbols to get all 1000+ currencies' restates the schema, 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 latest exchange rates) plus scope (fiat, crypto, metals; against a base currency). The word 'latest' implicitly separates it from get_historical_rates, get_time_series, and get_fluctuation, but no sibling is named, so an agent must infer the boundary rather than read it.

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 guidance is limited to parameter-level advice ('Omit symbols to get all 1000+ currencies'). There is no statement of when to pick this over convert_currency (single conversion) or get_historical_rates, and no mention of the plan prerequisite for changing base beyond what the schema already says.

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

get_time_seriesGet daily exchange rate time seriesB

Returns daily exchange rates for one or more currencies between two dates, one entry per day. Professional plan and above.

NameRequiredDescriptionDefault
baseNoBase currency code the rates are expressed against (e.g. 'EUR'). Default is USD. Changing the base requires the Starter plan or above (any paid plan).
endDateYesEnd date in YYYY-MM-DD format.
symbolsNoComma-separated currency codes to return, e.g. 'EUR,GBP,PKR' or 'BTC,ETH' or 'XAU,XAG'. Case-insensitive. Omit to get every supported currency (1000+ entries) — prefer passing symbols to keep responses small. Use list_currencies to look up a code.
startDateYesStart date in YYYY-MM-DD format.

TDQS

B3.4/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It does add real context: plan gating and the one-entry-per-day shape of the result. It omits what happens with large ranges, empty intervals, response size/pagination behavior, and error conditions, which matter for a date-range query tool.

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 capability and followed by the access constraint; no filler. It is arguably under-sized for a tool with zero annotation coverage, but nothing in it is 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?

With no annotations and no output schema, the description should be richer. It covers the plan requirement and output granularity, but leaves the agent without guidance on range limits, large-response behavior, or failure modes for a tool that can return 1000+ entries per day.

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 each parameter is already documented with format, defaults, and plan-dependent base behavior. The description adds nothing about parameters beyond restating the two dates and the currency set, so 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 daily exchange rates), the scope (one or more currencies, between two dates) and the granularity (one entry per day). It is distinguishable from get_latest_rates and get_historical_rates by the daily-series framing, but it never names them, so differentiation is left to inference.

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 only usage signal is the eligibility constraint (Professional plan and above), which is genuinely useful for deciding whether to call. There is no explicit guidance on when to pick this over get_historical_rates or get_fluctuation, and no exclusions or alternatives are named.

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

ip_to_currencyConvert to the local currency of an IP addressA

Resolves the local currency from an IP address's geolocation and converts an amount into it using the latest rate. Useful for localizing prices for a visitor. The target currency is returned in the 'to' field. Growth plan and above.

NameRequiredDescriptionDefault
ipNoIPv4 or IPv6 address to geolocate. Omit to use the caller's own IP address.
fromYesCurrency code to convert from, e.g. 'USD'.
amountNoAmount to convert. Must be greater than 0. Default is 1.0.

TDQS

A3.7/5.0
Behavior3/5

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

No annotations, so the description carries the full burden. It usefully discloses the plan gating ("Growth plan and above") and that the rate used is the latest, not historical. However, it omits failure behavior for private/ungeolocatable IPs and what happens when no rate exists for the derived currency.

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-loaded with the core action and ending with the access constraint. No sentence repeats the title or the schema, and the 'to' field note earns its place as return-value information.

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?

There is no output schema, so the description is the only source of return-value information, and it names just the 'to' field. The converted amount field, the rate used, and error shapes remain undisclosed for a tool whose output the agent will need to interpret.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters (ip, from, amount) are already documented including the omit-to-use-caller's-IP behavior and the amount default. The description adds no parameter-level meaning beyond the schema, so the 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 and resource: resolve the local currency from an IP's geolocation and convert an amount into it at the latest rate. This clearly distinguishes it from the generic sibling convert_currency (which takes an explicit target) and from get_latest_rates, since the target currency is derived from an IP.

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 for localizing prices for a visitor" implies the use case but never says when to prefer this over convert_currency (target currency already known) or what to do if geolocation is not desired. The agent must infer the alternative from the sibling name alone.

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

list_currenciesList supported currenciesA

Returns the currencies supported by CurrencyFreaks: 1000+ fiat currencies, cryptocurrencies, and precious metals (XAU gold, XAG silver, XPT platinum, XPD palladium). Use it to find a currency code before calling rate or conversion tools. No API key needed. By default returns a compact code → name map. Pass 'search' to filter by code, name, or country (e.g. 'rupee', 'PK', 'bitcoin'). Pass detailed=true for country, status (AVAILABLE/DEPRECATED), and the availableFrom/availableUntil date range of historical data per currency — combine with 'search' because the full detailed catalogue is very large.

NameRequiredDescriptionDefault
searchNoCase-insensitive substring to match against currency code, name, or (with detailed=true) country name.
detailedNoReturn full details per currency (country, status, historical availability range, icon). Default false.

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses that no API key is needed, that the default response is a compact code → name map, which fields detailed=true adds (country, status AVAILABLE/DEPRECATED, availableFrom/availableUntil), and warns that the full detailed catalogue is very large. Gaps are minor — nothing on rate limits, error behavior, or pagination of the 1000+ item list.

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?

Front-loaded with what the tool returns, then usage, then auth, then the two parameter behaviors in progression. Four dense sentences with no filler and no repetition of the schema text verbatim.

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 2-parameter, no-annotation, no-output-schema read tool, the description covers the essentials: return shape in both modes, auth requirement, catalogue size caveat, and how the parameters interact. Nothing an agent needs in order to call this correctly is 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?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond it: concrete search examples ('rupee', 'PK', 'bitcoin') and the behavioral distinction that country names are only matched when detailed=true. That extra context lifts it above baseline.

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 the currencies supported by CurrencyFreaks') and quantifies the scope: 1000+ fiat currencies, cryptocurrencies, and precious metals with named examples (XAU, XAG, XPT, XPD). It also positions itself against siblings by saying it's used to find a currency code before calling rate or conversion tools, so an agent can distinguish it from get_latest_rates and convert_currency without opening the schema.

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

Usage Guidelines5/5

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

Explicitly names the downstream tools (rate or conversion tools) and the condition that selects this one — locating a currency code first. It also gives usage routing between the plain call, 'search', and detailed=true, including the instruction to combine search with detailed because the full catalogue is very large.

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. 7 tool updatesv1.0.1
    • First observedconvert_currency
    • First observedget_fluctuation
    • First observedget_historical_rates
    • First observedget_latest_rates
    • First observedget_time_series
    • First observedip_to_currency
    • First observedlist_currencies

TDQS

A3.9/5.0

Scored across 7 tools

Disambiguation4/5

Each tool targets a distinct temporal or functional aspect (latest vs historical vs time series vs fluctuation vs conversion), and descriptions clarify boundaries. Slight overlap between get_latest_rates and convert_currency exists, but the conversion tool's added value (amount + rate + result) is clear.

Naming Consistency4/5

Most tools follow a clean snake_case verb_noun pattern (list_currencies, get_latest_rates, convert_currency, get_historical_rates, get_time_series, get_fluctuation). ip_to_currency breaks the pattern as noun-first, a minor deviation.

Tool Count5/5

Seven tools cleanly cover the currency-freaks API surface without bloat; each maps to a distinct endpoint/operation.

Completeness4/5

Covers catalogue lookup, latest/historical/time-series rates, conversion, fluctuation, and IP localization, matching the API's core lifecycle. Minor gaps like account/usage status or symbol-level metadata beyond list_currencies are non-critical.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    C
    quality
    F
    maintenance
    An MCP server providing real-time currency conversion and exchange rate data through the Frankfurter API, enabling users to convert currencies, fetch latest or historical rates, and list available currencies.
    4
    37
    -
  • F
    license
    B
    quality
    D
    maintenance
    An MCP server that provides currency rates, conversions, and historical exchange-rate data using the Frankfurter API. It enables users to retrieve latest rates, convert amounts between currencies, and access time-series data for currency pairs.
    3
    -
  • A
    license
    A
    quality
    A
    maintenance
    Provides real-time foreign-exchange rates, historical data, and multi-currency lookups to MCP-compatible AI coding assistants like Claude Code and Cursor.
    4
    832 npm
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    An MCP server for the Xe Currency Data API that brings live FX rates, historical analysis, and quant-flavored tools into AI tools, working out of the box with zero credentials via Frankfurter/ECB data.
    12
    4 npm
    1
    MIT