Repository navigation
fix(integrations): list the toolkits the public catalog publishes - #1249
samkujovich wants to merge 9 commits into
Conversation
The integrations index built its list from the design-system TOOLKITS array, so it drifted from production whenever the pinned package fell behind: Twilio showed as a coming-soon Verified server after it launched, and Workday needed a hand-written override. Build the index from the nightly toolkit-docs-generator output instead. That data comes from the same experience-api public catalog that arcade.dev/tools snapshots, so both sites list the same toolkits with the same badges. Coming-soon placeholders that exist only in the design system are no longer listed, and Math and ArcadeEngineApi are hidden to match arcade.dev/tools.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
…x-from-public-catalog # Conflicts: # lib/integration-catalog.ts
sdserranog
left a comment
There was a problem hiding this comment.
Left a couple of small comments inline: one question about the internal list and one about the sidebar still using design-system.
| LAUNCHED_TOOLKIT_IDS.has(normalizeToolkitId(toolkit.id)) | ||
| ? { ...toolkit, isComingSoon: false } | ||
| : toolkit; | ||
| const INTERNAL_TOOLKIT_IDS: ReadonlySet<string> = new Set([ |
There was a problem hiding this comment.
ArcadeEngineApi isn't in the catalog, so I think we can remove it from this list.
For Math, should we keep its docs page? If not, we could mark it as hidden in the catalog and drop this list. Worth a Linear ticket either way, so docs stops keeping its own list.
There was a problem hiding this comment.
Agreed, and the list is gone now (acbb4ad). ArcadeEngineApi isn't in the live catalog (129 toolkits, none named that). For Math, we're hiding it in the toolkit metadata instead: ArcadeAI/monorepo#5848 sets isHidden: true, and the index already skips hidden toolkits, so docs doesn't keep a list of its own. Its docs page goes away with it. That PR sits under GRO-615 rather than a separate ticket.
~ 🤖 sam-i-am, Sam’s Agent
| partners: readonly ToolkitWithDocsLink[] | ||
| ): ToolkitWithDocsLink[] => [ | ||
| ...[...generated] | ||
| .filter((toolkit) => !INTERNAL_TOOLKIT_IDS.has(toolkit.id)) |
There was a problem hiding this comment.
This hides Math on the index, but the sidebar still reads from design-system, so Math keeps showing there and the two can disagree on labels too. Could we fix the sidebar in this PR as well so both match?
There was a problem hiding this comment.
Done in acbb4ad. sync-toolkit-sidebar.ts now takes labels, the hidden flag and the category only from the generated toolkit files, the same source as the index, and no longer imports design-system. Before switching, I compared design-system and the generated files: all 125 labels match and nothing is hidden only in design-system. Regenerating the sidebar changed exactly one line: Math's entry is gone, since math.json now carries isHidden: true (what the nightly writes once ArcadeAI/monorepo#5848 is live).
~ 🤖 sam-i-am, Sam’s Agent
…ath there The sidebar took toolkit labels, the hidden flag and a fallback category from design-system. It now reads them from the generated toolkit files, the same source as the index, so the two cannot disagree. Math is hidden in the toolkit metadata (ArcadeAI/monorepo#5848), so the index no longer needs its own list of toolkits to leave out. math.json carries the flag now, which the nightly writes once the catalog serves it. Part of GRO-615
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 5f2d747. Configure here.
The CrewAI guide pointed readers at a "Math" toolkit, which the catalog now hides, and at "Search", which is not a current toolkit name. Part of GRO-615
…index-from-public-catalog
getToolkitFiles lowercases file names before reading them, so a fixture saved as GoogleSearch.json was never found on a case-sensitive file system: the fallback-label test failed on Linux CI, and the hidden test passed only because its file went missing. Fixtures now use lowercase file names with the toolkit ID inside, and the hidden test keeps a visible sibling so it fails if the flag stops working. Part of GRO-615
…x-from-public-catalog # Conflicts: # public/llms.txt

Part of GRO-615
What/why
The integrations index on docs.arcade.dev and arcade.dev/tools disagree about which MCP servers Arcade offers. arcade.dev/tools is right: it is built from the live public catalog. The docs index was built from the
TOOLKITSlist in@arcadeai/design-system, which is hand-maintained and pinned here at 7.11.0. So docs lists Twilio as a "Coming soon" Verified server after it launched, shows about 37 coming-soon toolkits that no one can use, and lists Math, which arcade.dev/tools hides as internal. After this change the docs index lists the same toolkits as arcade.dev/tools, with the same badges.Codebase changes
The index now reads the per-toolkit files that
generate-toolkit-docs.ymlwrites every night. That job reads experience-api's/api/public/*, the same catalog arcade.dev/tools snapshots, so both sites share one source. Each generated file already carries the card fields (label, icon, category, type, BYOC/Pro), so design-system no longer drives this page. The category sidebar (sync-toolkit-sidebar.ts) reads the same files for its labels, hidden flag and category, so the index and sidebar can't disagree. Partner toolkits (Nimble, Tavily) are still merged in fromdata/partner-toolkits.ts. Math is hidden through the catalog (ArcadeAI/monorepo#5848), so docs keeps no list of its own. The hand-written Workday "launched" override is gone, because it only patched a stale design-system flag.Proof
getToolkitsWithDocsLinks+resolveIndexToolkitsand diffed it against ArcadeAI/wwwsrc/content/tools-catalog.jsonOn currentmain's data: the same 84 curated toolkits, with Bright Data, Clickhouse, MongoDB and Postgres asarcade, Twilio listed, and no Math. The only gap is Google Forms, newly in the catalog, whose data is in the open nightly PR #1258tests/integration-index-links.test.tspassestests/integration-catalog.test.tssync-toolkit-sidebar.test.ts(58 passed). Real: before switching, all 125 design-system labels matched the generated files; regenerating the sidebar changed one line, removing Mathbun run buildon the Fumadocsmain; the prerenderedintegrations.htmlcarries 123 catalog cards plus the 2 partners, with no Math or coming-soon cards, and no Math link or pagepnpm test(899 passed, 2 skipped),pnpm lint,tsc --noEmitAdditional notes
toolkit-static-params.tsstill falls back to design-system for a toolkit with no generated file. No such toolkit exists today.GoogleCalendarorLinear; the nightly already removed Math's page frompublic/llms.txt. The deploy and Helm pages keep[arcade_math]as atoolPackagesexample. The package still ships, so it stays accurate.~ 🤖 sam-i-am, Sam’s Agent
Note
Medium Risk
Changes which integrations appear on docs (fewer “coming soon” and internal entries like Math) and how the sidebar is built; behavior is covered by new/updated tests but affects a high-traffic docs surface.
Overview
Aligns the docs integrations index and category sidebar with the same nightly-generated toolkit catalog that powers arcade.dev/tools, instead of the hand-maintained
@arcadeai/design-systemTOOLKITSlist.getToolkitsWithDocsLinksnow loads per-toolkit JSON fromtoolkit-docs-generatorvialoadAllToolkitData, maps card fields withtoIntegrationCatalog, and still appends partner toolkits. Design-system enrichment, docs-link backfill, and the Workday “launched”isComingSoonoverride are removed.sync-toolkit-sidebar.tsuses the same JSON for category,isHidden, and labels (no design-system priority orsetToolkitsForTesting). Math is dropped from the public list by settingisHidden: trueinmath.jsonand regenerating sidebar/llms.txt; the CrewAI guide’s next steps now mention MCP servers likeGoogleCalendar/Linearinstead of Math.Adds
tests/integration-catalog.test.tsand updates sidebar tests for the JSON-only behavior.Reviewed by Cursor Bugbot for commit 7b1d264. Bugbot is set up for automated code reviews on this repo. Configure here.