Market Intel MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Market Intel MCPconvert 100 USD to EUR"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Market Intel MCP — by Datakoot
Live and historical foreign-exchange rates for AI agents — as MCP tools your agent can call mid-task. No API keys.
Tools
Tool | What it does | Source |
| Latest exchange rates for a base currency | ECB via Frankfurter |
| Convert an amount between two currencies at the latest ECB reference rate | ECB via Frankfurter |
| Exchange rates for a base currency on a specific past date | ECB via Frankfurter |
| Exchange-rate history over a date range, for trend analysis | ECB via Frankfurter |
| Supported currencies and their names | ECB via Frankfurter |
No API keys required for any tool.
fx_rates, fx_historical, and fx_currencies advertise an MCP outputSchema and return matching structuredContent on success. Error results stay errors and are not schema-validated. The JSON text body is unchanged.
Related MCP server: FX Currency MCP Server
Quick start
claude mcp add --transport http market-intel https://market.datakoot.com/mcpOr point any MCP client at https://market.datakoot.com/mcp.
Try it in 10 seconds — no key, no signup
Paste this into a terminal:
curl -s https://market.datakoot.com/mcp \
-H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "fx_rates", "arguments": {"base": "USD"}}}'You get live USD foreign-exchange rates (European Central Bank reference data) — no API key, nothing to sign up for.
Or point any MCP client at the URL and just ask your agent, in plain language:
"Convert 500 USD to euros at today's rate."
"How has USD/JPY moved over the last month?"
Data & attribution
Rates are European Central Bank reference rates, served via the free, open-source Frankfurter API. ECB reference rates are published for information and are not intended for use as transaction benchmarks.
Looking for other data? For cryptocurrency prices see Base Intel, and for company financials and SEC filings see Filings Intel — both at datakoot.com.
Pricing
Free — 100 calls a day, keyless, no signup. Pro — $15/mo including 50,000 calls a month with no daily limit; one key unlocks all nine Datakoot servers. Go over the monthly allowance and you drop to free-tier speed for the rest of the month, or top up — never cut off, no metered overage. Full terms: datakoot.com/pricing.
A paid allowance is shared across all nine Datakoot servers rather than being
nine separate buckets, and only a tools/call counts — connecting and listing
tools are free. Full terms at datakoot.com/pricing.
Development
node --testPart of Datakoot — keyless intelligence APIs for AI agents.
Available Tools
5 toolsfx_convertFX ConvertARead-onlyIdempotentInspect
Convert an amount from one currency to another at the latest ECB reference rate. Returns the rate, the converted result, and the rate date.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Target 3-letter currency | |
| from | Yes | Source 3-letter currency | |
| amount | Yes | Amount in the 'from' currency to convert. Send it as a number, not a string. |
Output Schema
| Name | Required | Description |
|---|---|---|
| to | No | |
| date | No | |
| from | No | |
| rate | No | |
| amount | No | |
| result | No | |
| source | No | |
| provenance | No | Where this answer came from. served_at is when Datakoot answered (UTC); upstream lists the official sources consulted. Datakoot may serve a briefly cached copy, so the source's own observation can be older than served_at. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world behavior, so the safety profile is covered. The description adds the ECB reference-rate source as the authoritative origin of the numbers, which is useful context, but says nothing about rate freshness, unsupported currencies, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core action front-loaded and the return payload summarized afterward; no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be detailed, and the parameters are fully documented in the schema. The description is complete for a simple conversion call, though a note on currency coverage or rate staleness would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with the schema even specifying the numeric-format constraint for amount, so the schema carries the parameter burden. The description adds no syntax or format detail beyond what the schema already provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Convert) and resource (currency amounts) plus the data source and rate vintage ('latest ECB reference rate'). The word 'latest' implicitly separates it from fx_historical and fx_timeseries, though siblings are never named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is for current conversion rather than time-series or rate lookup, but the description never states when to prefer it over fx_rates or fx_historical, nor any prerequisites such as supported currency coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fx_currenciesFX CurrenciesARead-onlyIdempotentInspect
List the currencies supported for exchange-rate lookups, with their full names.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of supported currencies |
| source | Yes | |
| currencies | Yes | ISO 4217 codes mapped to currency names |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered. The description adds only that full names are included in the result, a modest return-content hint; with an output schema present, little more behavioral disclosure is warranted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the verb and resource lead, and the result detail trails. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter enumeration tool with full annotation coverage and an output schema, the description is essentially sufficient. Return format is delegated to the output schema, which is the correct division of labor, though a note on how these currency codes feed into the sibling tools would have closed the loop.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the baseline there is nothing for the description to disambiguate. The schema cannot add meaning here, and the description correctly does not invent any.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('currencies supported for exchange-rate lookups'), which an agent can distinguish from the rate/conversion siblings fx_convert, fx_rates, fx_historical, and fx_timeseries. It stops short of explicitly naming those siblings as alternatives, but the resource itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'supported for exchange-rate lookups' implies this is a discovery/enumeration step before calling the rate tools, but the description never states when to use it versus the siblings or any prerequisites. 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.
fx_historicalFX HistoricalARead-onlyIdempotentInspect
Get foreign-exchange rates for a base currency on a specific past date (YYYY-MM-DD). ECB publishes rates on business days; a weekend/holiday date returns the most recent prior business day.
| Name | Required | Description | Default |
|---|---|---|---|
| base | No | 3-letter base (default USD) | |
| date | Yes | The date to look up, YYYY-MM-DD (MM/DD/YYYY is also accepted). Weekends and holidays return the previous business day's ECB rates. | |
| symbols | No | Optional comma-separated targets |
Output Schema
| Name | Required | Description |
|---|---|---|
| base | Yes | ISO 4217 base currency actually used |
| date | Yes | ECB rate date actually used YYYY-MM-DD |
| rates | Yes | Quote currencies mapped to the ECB reference rate |
| source | Yes | |
| requested_date | Yes | Caller-requested date YYYY-MM-DD |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/openWorld/destructive=false, so the safety profile is handled. The description adds genuinely non-obvious behavior: ECB publishes only on business days and weekend/holiday dates resolve to the most recent prior business day. Return format is not described, but an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the core purpose front-loaded and the ECB business-day caveat second. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A simple read-only lookup with a fully documented schema, rich annotations, and an output schema, so return values need no explanation. The one behavior an agent could get wrong — non-business-day dates — is explicitly addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (base, date, symbols) are already documented, including the default USD and accepted date formats. The description restates the date format and base-currency notion without adding syntax or constraints beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get), resource (foreign-exchange rates), and scope (a specific past date) — clearly a point-in-time lookup. It implicitly separates itself from fx_rates (current) and fx_timeseries (range) via 'a specific past date', though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'on a specific past date' implies the usage context, and the weekend/holiday note hints at edge-case handling. But there is no explicit when-to-use vs when-not guidance and no named alternative among fx_convert, fx_currencies, fx_rates, or fx_timeseries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fx_ratesFX RatesARead-onlyIdempotentInspect
Get the latest foreign-exchange rates for a base currency (default USD), optionally limited to specific target currencies. Source: European Central Bank reference rates.
| Name | Required | Description | Default |
|---|---|---|---|
| base | No | 3-letter base currency, e.g. USD, EUR (default USD) | |
| symbols | No | Optional comma-separated targets, e.g. EUR,GBP,JPY |
Output Schema
| Name | Required | Description |
|---|---|---|
| base | Yes | ISO 4217 base currency actually used |
| date | Yes | ECB rate date YYYY-MM-DD |
| rates | Yes | Quote currencies mapped to the ECB reference rate |
| source | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and open-world behavior, so the safety profile is covered. The description adds genuine value beyond that by disclosing the data source (ECB reference rates), which tells the agent about provenance and update cadence. It stops short of stating freshness or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences, front-loaded with the core action and following with the optional narrowing and data source. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-required-parameter read tool with a full schema and an output schema (so return values need not be explained), the description covers purpose, default, filter, and source adequately. Only the absence of routing guidance against the four siblings keeps it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (base, symbols) are fully documented in the schema, including the USD default and comma-separated format. The description restates the same defaults and target-currency concept without adding syntax or constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the latest foreign-exchange rates') plus scope (base currency, optional targets). 'Latest' implicitly distinguishes it from fx_historical/fx_timeseries, but no sibling is named explicitly, so 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'latest' spot rates and the optional target filter, which contrasts with time-series siblings, but the description never states when to choose this over fx_convert, fx_historical, or fx_timeseries. No explicit alternatives or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fx_timeseriesFX TimeseriesARead-onlyIdempotentInspect
Get a time series of exchange rates for a base currency over a date range (max ~1 year), useful for trend analysis. Provide start and end as YYYY-MM-DD and one or more target currencies.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | End date, YYYY-MM-DD (MM/DD/YYYY is also accepted). | |
| base | No | 3-letter base (default USD) | |
| start | Yes | Start date, YYYY-MM-DD (MM/DD/YYYY is also accepted). Range up to about one year. | |
| symbols | Yes | Comma-separated targets, e.g. EUR,GBP |
Output Schema
| Name | Required | Description |
|---|---|---|
| base | No | |
| rates | No | |
| source | No | |
| end_date | No | |
| provenance | No | Where this answer came from. served_at is when Datakoot answered (UTC); upstream lists the official sources consulted. Datakoot may serve a briefly cached copy, so the source's own observation can be older than served_at. |
| start_date | No |
TDQS
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 fully covered. The description's only added behavioral fact is the ~1-year range ceiling, which is already repeated in the schema's 'start' description, so marginal new context; no rate limits, auth needs, or data-freshness caveats are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the core action and its scope front-loaded, followed by the input-format reminder. Nothing is wasted, though it is slightly dense and could split the format guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, and annotations carry the safety profile. The description covers scope, date format, range limit, and multi-target input, leaving only the sibling-routing question unanswered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description restates the YYYY-MM-DD format and that one or more target currencies are expected, but adds no syntax or constraint detail beyond what the schema already documents for start, end, base, and symbols.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get a time series of exchange rates') plus scope (base currency, date range, max ~1 year) and a purpose hint (trend analysis). This is clear, but it never differentiates itself from near-siblings like fx_historical or fx_rates, which likely also return rate data over dates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'useful for trend analysis' implies the use case, but the description never says when to pick this over fx_historical, fx_rates, or fx_convert. Usage is inferable rather than stated, and no exclusions or prerequisites are given.
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.
5 tool updates
v2.1.0- First observed
fx_convert - First observed
fx_currencies - First observed
fx_historical - First observed
fx_rates - First observed
fx_timeseries
TDQS
Scored across 5 tools
Each tool targets a distinct time-scope or operation: fx_rates (latest snapshot), fx_historical (single past date), fx_timeseries (date range), fx_convert (arithmetic conversion), and fx_currencies (metadata listing). The descriptions explicitly clarify the 'latest' vs 'specific past date' vs 'range' boundaries, so an agent can select reliably.
All five tools share a consistent fx_ prefix with predictable descriptive suffixes (rates, convert, historical, timeseries, currencies). Mixing a verb (convert) among nouns is coherent given it describes an action, and the pattern is fully predictable.
Five tools is well-scoped for a focused FX-reference server, with no redundancy and no thin coverage. Every tool maps to a distinct, needed capability.
The surface covers the full practical lifecycle: listing supported currencies, latest rates, conversion, historical lookup, and trend time series. Minor gaps remain (no direct pair-rate lookup separate from conversion, no data freshness/provenance endpoint), but agents can work around these easily.
Maintenance
Related MCP Connectors
Fetch latest and historical currency exchange rates from Frankfurter. Convert amounts between curr…
Latest and historical ECB foreign-exchange reference rates for 30+ currencies, via Frankfurter.
Live and historical FX rates (ECB via Frankfurter) — paid per call (x402/credits), 2 tools
Convert currencies, get FX rates, and query historical ECB exchange rate data.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides access to currency exchange rates and conversion tools using the Frankfurter API, including latest rates, historical data, and time series from sources like the European Central Bank.5MIT
- FlicenseNot gradedqualityDmaintenanceProvides real-time and historical foreign exchange rates for 31+ currencies, enabling currency conversion, historical rate lookups, and time series analysis using data from the Frankfurter API.-
- FlicenseNot gradedqualityDmaintenanceEnables fetching real-time exchange rates between currencies and listing supported currency codes using the Frankfurter API.-
- AlicenseNot gradedqualityBmaintenanceWraps the Frankfurter API to enable currency exchange rate queries and conversions through natural language.10 npmMIT