Economy Intel MCP
Server Details
Macro data for AI agents: GDP, inflation, unemployment and more (World Bank, US BLS). No keys.
- Status
- Healthy
- Uptime
- 100.0% over 42 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- Repository
- datakoot/economy-intel-mcp
- GitHub Stars
- 1
- Server Listing
- Economy Intel MCP
TDQS
Scored across 5 tools
compare_countries (multi-country, single indicator), country_indicator (single-country, single indicator over time), and country_profile (single-country snapshot) have overlapping data but clearly distinct shapes. us_series is cleanly separated as US-specific, and list_indicators is a clear discovery tool. Minor risk that an agent conflates country_profile with a batch of country_indicator calls.
All names are consistent snake_case, which is the most important factor. However, the verb/noun style is mixed: compare_countries and list_indicators use verb_noun while country_indicator, country_profile, and us_series are noun phrases, so the pattern isn't fully predictable.
Five tools is a lean but reasonable set for a macro-data server with two source families (World Bank and BLS/Census). Each tool has a distinct role, though the surface is on the thin side and could feel limiting for broader querying.
Core workflows are covered: discovery (list_indicators), single-country time series, multi-country comparison, country snapshot, and US series. Gaps exist around multi-indicator time-series output, regional/aggregate queries, and richer source metadata, but nothing that blocks typical usage.
Available Tools
5 toolscompare_countriesCompare CountriesARead-onlyIdempotentInspect
Compare one indicator across several countries (latest available value each). Good for ranking or benchmarking economies.
| Name | Required | Description | Default |
|---|---|---|---|
| countries | Yes | Array of country codes or names to compare, e.g. ["US", "DE", "JP"]. | |
| indicator | Yes | World Bank indicator key: gdp, gdp_per_capita, gdp_growth, inflation, population, unemployment, life_expectancy, exports, imports, govt_debt_pct_gdp, real_interest_rate, fdi, co2_per_capita, internet_users. Call list_indicators for the full set. Raw World Bank codes are also accepted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | |
| source | No | |
| ranking | No | |
| indicator | 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, openWorld and non-destructive, so the safety profile is covered. The description still earns credit for disclosing the non-obvious data semantics: only the latest available value per country is returned, which rules out time-series interpretation. It omits anything about missing/stale data for lagging reporters, so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, zero filler, with the core scope statement (one indicator, several countries) front-loaded ahead of the softer benefit claim. Nothing needs trimming.
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 no explanation, and annotations cover the read-only profile. For a 2-parameter read-only tool the description is sufficient, though it could note behavior when a country lacks data for the requested indicator.
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% and the enum list of indicator keys plus country-code example already live in the schema. The description's 'one indicator' wording reinforces cardinality but adds no format or validation detail beyond what is structured. Baseline 3 is correct when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Compare) and resource (one indicator across several countries), plus the temporal scope (latest available value each). It contrasts implicitly with country_profile by scoping to a single indicator, but never names a sibling, so an agent must infer the boundary from sibling names alone.
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 clause 'Good for ranking or benchmarking economies' points at intended use cases, so usage is implied rather than stated as a rule. There is no explicit when-not guidance and no named alternative (e.g. country_indicator for single-country time series), leaving the agent to work out the routing itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
country_indicatorCountry IndicatorARead-onlyIdempotentInspect
Get a macroeconomic indicator for a country over recent years (World Bank). Indicators: gdp, gdp_per_capita, gdp_growth, inflation, unemployment, population, life_expectancy, exports, imports, govt_debt_pct_gdp, real_interest_rate, fdi, co2_per_capita, internet_users. Country accepts an ISO code (US, DE, JP) or a World Bank country code. You may also pass a raw World Bank indicator code.
| Name | Required | Description | Default |
|---|---|---|---|
| years | No | How many of the most recent years to return. | |
| country | Yes | Country as an ISO code or name, e.g. JP, JPN, or Japan. | |
| indicator | Yes | World Bank indicator key: gdp, gdp_per_capita, gdp_growth, inflation, population, unemployment, life_expectancy, exports, imports, govt_debt_pct_gdp, real_interest_rate, fdi, co2_per_capita, internet_users. Call list_indicators for the full set. Raw World Bank codes are also accepted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | |
| series | No | |
| source | No | |
| country | No | |
| indicator | 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 readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety and idempotency are covered structurally. The description's one genuinely new behavioral fact is the World Bank as the data source and that only 'recent years' are returned, plus the accepted input forms; it says nothing about missing data, rate limits, or how gaps are handled.
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, front-loaded with the core purpose before the enumeration of indicators and accepted input formats. The indicator list is long but functional, since it tells the agent the tool's coverage without opening list_indicators.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and all three parameters are documented. For a simple read-only data-fetch tool with rich annotations, the description covers purpose, source, and input formats adequately; only sibling differentiation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented in the schema, and the description largely repeats the indicator list and the country-code flexibility. It adds marginal value, and its claim that country accepts an ISO code or World Bank code sits slightly at odds with the schema wording (ISO code or name).
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 macroeconomic indicator for a country over recent years') and names the data source (World Bank), so the agent knows exactly what it returns. It does not distinguish itself from siblings such as country_profile or compare_countries, which also operate on countries, leaving the agent to infer the boundary.
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 'for a country over recent years', but there is no explicit when-to-use guidance, no mention of when to prefer country_profile or compare_countries, and no exclusions. The routing hint to list_indicators only appears in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
country_profileCountry ProfileARead-onlyIdempotentInspect
Get a snapshot of a country's key macro indicators (latest available values): GDP, GDP per capita, GDP growth, inflation, unemployment, and population. Country accepts an ISO code.
| Name | Required | Description | Default |
|---|---|---|---|
| country | Yes | Country as an ISO code or name, e.g. DE, DEU, or Germany. |
Output Schema
| Name | Required | Description |
|---|---|---|
| latest | No | |
| source | No | |
| country | 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 establish readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered by structured data. The description adds one useful behavioral fact – that values are 'latest available' and therefore may lag – but says nothing about rate limits, auth, or coverage gaps for countries.
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 parameter note appended only where needed. Every clause earns its place by naming real indicators.
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 and rich annotations, the description need not explain return values or safety, and it correctly focuses on scope and coverage ('latest available values'). The only shortfall is the absence of any routing signal relative to the sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already states the country accepts an ISO code or name, so the description's note that 'Country accepts an ISO code' adds little and is actually narrower than the schema's 'ISO code or name'. Baseline 3 applies since the schema carries the parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Get a snapshot of a country's key macro indicators') and enumerates the exact indicators returned, so an agent knows precisely what comes back. It stops short of naming or contrasting with the sibling tools (country_indicator, compare_countries), so differentiation is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'latest available values' implies this is a point-in-time snapshot rather than a time series, which hints at when to prefer it over country_indicator, but no alternative is named and no when-not condition is stated. Usage is inferable rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_indicatorsList IndicatorsARead-onlyIdempotentInspect
List the indicators this server supports (World Bank + US BLS), with descriptions. Call this to discover what you can query.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| us_bls | No | |
| us_census | 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. |
| world_bank | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, covering the safety and idempotency profile. The description adds useful context about the content returned (indicators with descriptions from two named sources) but does not disclose pagination, result size, or other operational behavior. With annotations carrying the main behavioral burden, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no wasted words. The primary function is front-loaded, and the usage instruction follows naturally without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless discovery tool with rich annotations and an output schema already defining return values, the description needs only to state what is listed and why. It does exactly that, leaving no essential gap for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, and the schema is empty. Per the rubric, zero parameters sets a baseline of 4; the description appropriately focuses on the tool's purpose rather than describing nonexistent inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: lists the indicators supported by the server, including their descriptions and data sources (World Bank + US BLS). The purpose as a discovery tool is clear and distinguishes it from siblings like country_indicator or compare_countries, which query data rather than enumerate available indicators.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear contextual guidance with 'Call this to discover what you can query,' making its role as a first-step discovery tool explicit. It does not name alternative tools or state when not to use it, so it stops short of the highest level of guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
us_seriesUS SeriesARead-onlyIdempotentInspect
Get a key US economic time series. From the Bureau of Labor Statistics: us_unemployment_rate, us_cpi, us_nonfarm_payrolls, us_labor_participation, us_avg_hourly_earnings, us_ppi. From the US Census Bureau: us_retail_sales (advance retail & food services, seasonally adjusted). The BLS series are kept warm by Datakoot and always available. A raw BLS series ID is also accepted, but BLS rate-limits by client IP and Datakoot runs on shared edge IPs, so an uncached series may return an upstream-limit error instead of data; that error means the upstream refused, not that the series does not exist.
| Name | Required | Description | Default |
|---|---|---|---|
| series | Yes | A US series key: us_unemployment_rate, us_cpi, us_nonfarm_payrolls, us_labor_participation, us_avg_hourly_earnings, us_ppi (BLS), or us_retail_sales (US Census). These are cached by Datakoot and kept current. A raw BLS series ID is also accepted, but uncached series often hit BLS rate limits. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| as_of | No | |
| series | No | |
| source | No | |
| seriesID | 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?
Goes well beyond the readOnly/idempotent/openWorld annotations by disclosing caching behavior, shared-edge-IP rate limiting, and the precise meaning of an upstream-limit error (refusal, not a nonexistent series). This error semantics is exactly the kind of operational context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then the key list, then the caching and error caveats in a logical order. The error-handling sentence is long but earns its place; overall dense without filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the description covers the remaining gaps an agent needs: valid inputs, availability guarantees, and failure interpretation. Nothing required to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema description already lists the valid keys and the raw-BLS-ID caveat, so the description largely restates what the structured field provides. The bureau grouping adds marginal value but no new syntax or format detail.
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 key US economic time series') and enumerates the exact series keys available, split by source agency. An agent can distinguish this US-series tool from the country-oriented siblings without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains which series are reliably available (BLS keys kept warm by Datakoot) and when a raw BLS series ID is acceptable but risky. It stops short of explicitly naming an alternative tool or stating when-not to use this one, so it is clear context rather than full routing guidance.
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
- Changed
compare_countries1 field changed- added
Output schema / properties / provenanceAdded value: +{ + "description": "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.", + "properties": { + "may_be_cached": { + "type": "boolean" + }, + "publisher": { + "type": "string" + }, + "served_at": { + "format": "date-time", + "type": "string" + }, + "upstream": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
country_indicator1 field changed- added
Output schema / properties / provenanceAdded value: +{ + "description": "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.", + "properties": { + "may_be_cached": { + "type": "boolean" + }, + "publisher": { + "type": "string" + }, + "served_at": { + "format": "date-time", + "type": "string" + }, + "upstream": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
country_profile1 field changed- added
Output schema / properties / provenanceAdded value: +{ + "description": "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.", + "properties": { + "may_be_cached": { + "type": "boolean" + }, + "publisher": { + "type": "string" + }, + "served_at": { + "format": "date-time", + "type": "string" + }, + "upstream": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
list_indicators1 field changed- added
Output schema / properties / provenanceAdded value: +{ + "description": "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.", + "properties": { + "may_be_cached": { + "type": "boolean" + }, + "publisher": { + "type": "string" + }, + "served_at": { + "format": "date-time", + "type": "string" + }, + "upstream": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
us_series1 field changed- added
Output schema / properties / provenanceAdded value: +{ + "description": "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.", + "properties": { + "may_be_cached": { + "type": "boolean" + }, + "publisher": { + "type": "string" + }, + "served_at": { + "format": "date-time", + "type": "string" + }, + "upstream": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
5 tool updates
- Changed
compare_countries1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "code": {}, + "indicator": {}, + "ranking": {}, + "source": {} + }, + "type": "object" +}
- Changed
country_indicator2 fields changed- changed
Input schema / properties / country / descriptionPrevious value: -"Country as an ISO code or name, e.g. US, USA, or United States."New value: +"Country as an ISO code or name, e.g. JP, JPN, or Japan." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "code": {}, + "country": {}, + "indicator": {}, + "series": {}, + "source": {} + }, + "type": "object" +}
- Changed
country_profile2 fields changed- changed
Input schema / properties / country / descriptionPrevious value: -"Country as an ISO code or name, e.g. US, USA, or United States."New value: +"Country as an ISO code or name, e.g. DE, DEU, or Germany." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "country": {}, + "latest": {}, + "source": {} + }, + "type": "object" +}
- Changed
list_indicators1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "note": {}, + "us_bls": {}, + "us_census": {}, + "world_bank": {} + }, + "type": "object" +}
- Changed
us_series1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "as_of": {}, + "data": {}, + "series": {}, + "seriesID": {}, + "source": {} + }, + "type": "object" +}
1 tool update
- Changed
us_series1 field changed- changed
Input schema / properties / series / descriptionPrevious value: -"One of the five warm BLS series: us_unemployment_rate, us_cpi, us_nonfarm_payrolls, us_labor_participation, us_avg_hourly_earnings. Those five are cached by Datakoot and always available. A raw BLS series ID is also accepted, but uncached series often hit BLS rate limits."New value: +"A US series key: us_unemployment_rate, us_cpi, us_nonfarm_payrolls, us_labor_participation, us_avg_hourly_earnings, us_ppi (BLS), or us_retail_sales (US Census). These are cached by Datakoot and kept current. A raw BLS series ID is also accepted, but uncached series often hit BLS rate limits."
5 tool updates
- First observed
compare_countries - First observed
country_indicator - First observed
country_profile - First observed
list_indicators - First observed
us_series
Related MCP Connectors
Macro data for AI agents: GDP, inflation, unemployment and more (World Bank, US BLS). No keys.
Official economic statistics for AI agents: GDP, inflation, trade and debt for 150+ countries.
Macro indicators from World Bank, FRED, IMF, and OECD via unified query surface.
GDP, unemployment, CPI, interest rates, and 800K+ economic time series from the Federal Reserve
Related MCP Servers
- AlicenseAqualityCmaintenanceEuropean financial data for AI agents — ECB interest rates, Eurostat inflation, GDP and unemployment by country. Zero API key needed.640 npm1MIT
- AlicenseAqualityAmaintenanceProvides AI assistants with clean access to 58 US macroeconomic indicators from the FRED database, with pre-computed changes and no need to know series IDs.828 PyPIMIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to query cross-country macroeconomic and financial statistics, including GDP, inflation, fiscal balance, debt, exchange rates, trade, and balance-of-payments data for comparison and time-series analysis.20 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to access official statistical and economic indicator datasets from Eurostat, World Bank, OECD, IMF, WHO, and national statistical offices across 150+ countries through natural-language dataset discovery, inspection, time-series retrieval, SQL queries, CSV export, and account/watchlist management.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.