feat(adapters): add FXMacroData adapter for macro releases, calendars and FX rates - #892
Open
roberttidball wants to merge 1 commit into
Open
roberttidball wants to merge 1 commit into
roberttidball wants to merge 1 commit into
Conversation
roberttidball
requested review from
D3nisty,
keysersoft and
mirkopoloni
as code owners
October 5, 2026 23:21
|
👋 Welcome, @roberttidball, and thanks for opening your first PR on AnythingMCP! A few quick pointers:
Someone from the core team will look at this within ~48h. If you don't hear back, please ping us in Discussions / Q&A. ⭐ While you wait — if you find AnythingMCP useful, a star helps others discover it. |
|
I have read the CLA Document and I hereby sign the CLA You can retrigger this bot by commenting recheck in this Pull Request. Posted by the CLA Assistant Lite bot. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds an FXMacroData adapter to the catalog: official macroeconomic releases, central-bank policy rates, release calendars and FX rates for 22 currencies over the FXMacroData REST API (api.fxmacrodata.com/v1). Five read-only GET tools. It follows the shape of the Serply adapter (#765), and for the optional key it uses the pattern you added for Agent Skills Finder in #709.
Changes
packages/backend/src/adapters/intl/fxmacrodata.json: five tools.fxmacrodata_data_catalogueisGET /data_catalogue/{currency}: indicator slugs with unit, frequency, source and coverage. It is also the probe, since it answers for every currency without a key.fxmacrodata_latest_announcementsisGET /announcements/{currency}/latest.fxmacrodata_indicator_historyisGET /announcements/{currency}/{indicator}withstart_date,end_date,limit(1-100) andoffset.fxmacrodata_release_calendarisGET /calendar/{currency}withindicator,start_date,end_date.fxmacrodata_fx_ratesisGET /forex/{base}/{quote}(always needs a key).authType: NONE,FXMACRODATA_API_KEYinoptionalEnvVars, sent per tool as"X-API-Key": "${FXMACRODATA_API_KEY}"so the header is left out when the key is unset. The API answers an empty or wrong key with 401invalid_api_keyeven on the free routes, so a staticAPI_KEYauthConfig would break keyless installs.envVarMetamarks the key as a secret credential and rejects whitespace in it at setup.YYYY-MM-DDpattern, and every path usesencodePathParams, so an indicator value cannot be used to reach a different route.responseMapping, on purpose: keyless responses carryfreemium_window(90-day cutoff) andfreemium_delay(15-minute delay,withheld_count,message), and the instructions tell the model to surface those instead of presenting delayed data as current. The instructions also say thatdateis the reference period and that release timing isannouncement_datetime.fxmacrodata.live.spec.ts: static checks always run with mocked axios (no header without a key, header with one, URL and query for every tool, encoded path values, a 401 is raised and not returned as data, enum/date/limit constraints, read-only annotations, instructions only name tools that exist). Live calls run behindRUN_FXMACRODATA_LIVE=1, same pattern asagent-skills.live.spec.ts.catalog.tsentry, logo atlogos/connectors/fxmacrodata.svg(the FXMacroData mark), and counts bumped to 263 adapters / 16 keyless peradapter-count.mjs --check.Without a key the API serves the data catalogue for every currency, the USD release calendar, and USD announcements for the most recent 90 days on a 15-minute delay (fair use 100 requests a day). Other currencies, FX rates, full history and real-time releases need a key.
Type
Testing
I ran these in a throwaway container with only the backend test dependencies installed, not a full
npm ci, so the Prisma client and bcrypt were stubbed (neither is reached by these specs), andtsc --noEmitshowed no errors in the touched files. I did not run eslint or the full backend suite.Checklist
instructions, as with the other adaptersnpm test): I ran the catalog, env-var-meta, Serply and new adapter suites, not the whole backend suiteRelated Issues
None. Nothing changes for anyone who doesn't install the adapter.
AI tools helped draft this; I reviewed and tested it.
Disclosure: I run FXMacroData. Happy to adjust scope or naming, or drop this if it isn't a fit for the catalog.