Repository navigation
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
👋 Welcome, @oddsrelay, 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. |
helpcodeai
left a comment
There was a problem hiding this comment.
Thanks for this, and sorry it sat for a few days. I checked the routes against your openapi.json and they all line up, and the quote-first flow with readOnlyHint: false on the two paid tools is exactly how we'd want it. Keep that annotation.
A few things before it can go in:
- CLA: the check is still red. Please post the exact sentence the CLA bot asks for as a comment here ("I have read the CLA Document and I hereby sign the CLA"), then the check reruns.
- main has moved a long way since you branched (the catalog is at 422 adapters now), so
catalog.tsand the counts conflict. Please merge main, then runnode scripts/regenerate-catalog.mjsandnode scripts/adapter-count.mjs --checkfrom the root and update whatever files it names. The counts should end up at main's number plus one (423 today). Don't edit the numbers by hand. oddsrelay_get_coverageingb/oddsrelay.jsonsends the whole/v2/coveragereply to the model. Right now that's about 246 KB: 3,692 bookmaker/sport rows across the seven products plus the market lists. Since the instructions make it step 1, every session would start by burning a big chunk of context. Please add aresponseMappingto shrink it. Keeping only the market keys would already do (something like{"transform": {"mode": "jmespath", "expression": "{generated_at: generated_at, markets: markets}"}}), since your 400/403 errors already list the valid bookmakers. If you'd rather keep the bookmaker/sport pairs, dropstatusand theinterrupted_24hrows and check the size again.
Smaller stuff, not blocking:
- The
descriptionand the first lines ofinstructionssay "bet365 included" twice. That reads like the landing page. Just say what the connector covers (pre-match odds from UK and Irish bookmakers with exchange lay prices) and leave the bookmaker list tooddsrelay_list_bookmakers. oddsrelay.live.spec.tsonly has static checks. Since/v2/usageandquote=truecost nothing, a block behindRUN_ODDSRELAY_LIVE=1that calls usage and one board quote with a real key would be cheap for you and would catch route changes later.
Once 1 to 3 are in, I'll run the catalog suite again and take another look.
Summary
Adds an OddsRelay adapter (
gb/oddsrelay.json): GET tools for the OddsRelay odds API, covering sports, events, bookmakers, coverage, the matched boards, one event's odds and the key's usage. A REST connector cannot quote before a call, so each board or event call spends tokens from the user's account; a quote tool that costs no tokens sits beside each of the two, and the instructions tell the assistant to quote first.Disclosure: this pull request is from OddsRelay, the API it lists.
Changes
packages/backend/src/adapters/gb/oddsrelay.json: the adapter, all GET, Bearer auth fromODDSRELAY_KEY,Accept-Encoding: gzip(some boards refuse a request that does not accept gzip), probe andhealthcheckPathon the usage call, which costs no tokens. The two GETs that spend tokens,oddsrelay_get_boardandoddsrelay_get_event_odds, are annotatedreadOnlyHint: falseon purpose, so the shared endpoint runs them throughanythingmcp_run_write_tool, which tells the assistant to get the user's confirmation before each call; please keep that annotationpackages/backend/src/adapters/gb/oddsrelay.live.spec.ts: static assertions only (base URL, auth, gzip, probe and health check, which tools spend tokens)packages/frontend/public/logos/connectors/oddsrelay.svg: logocatalog.tsregenerated, quoted adapter counts updatedType
Testing
From the repository root:
node scripts/validate-adapters.mjs --warn:gb/oddsrelay.jsonpasses with no errors and no warningsnode scripts/regenerate-catalog.mjs: two lines added tocatalog.tsnode scripts/adapter-count.mjs --check: OKgb/oddsrelay.live.spec.tswithintl/todoist.live.spec.tsunder Jest 30 and the backendtsconfig.json: both suites passNot run: the full backend suite, which needs the database setup. The adapter follows the REST rules in
catalog.spec.ts(every declared argument reaches the request,{name}path placeholders, no body on a GET), and every route and parameter was checked against the API's public OpenAPI file (https://api.oddsrelay.io/v2/openapi.json). It has not been run against a live AnythingMCP instance.Checklist
npm test)