Skip to content

fix(integrations): list the toolkits the public catalog publishes - #1249

Open
samkujovich wants to merge 9 commits into
mainfrom
fix/integrations-index-from-public-catalog
Open

samkujovich wants to merge 9 commits into
mainfrom
fix/integrations-index-from-public-catalog

Conversation

@samkujovich

@samkujovich samkujovich commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

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 TOOLKITS list 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.yml writes 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 from data/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

Behavior How it was proven
Index lists exactly the toolkits arcade.dev/tools lists Real: resolved the index with getToolkitsWithDocsLinks + resolveIndexToolkits and diffed it against ArcadeAI/www src/content/tools-catalog.json On current main's data: the same 84 curated toolkits, with Bright Data, Clickhouse, MongoDB and Postgres as arcade, Twilio listed, and no Math. The only gap is Google Forms, newly in the catalog, whose data is in the open nightly PR #1258
Every card links to a real page Real: same run, 0 cards without a page; existing tests/integration-index-links.test.ts passes
Card fields come from the generated file; partners kept Unit: new tests/integration-catalog.test.ts
Sidebar matches the generated data Unit: sync-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 Math
Built page renders the new list Real: bun run build on the Fumadocs main; the prerendered integrations.html carries 123 catalog cards plus the 2 partners, with no Math or coming-soon cards, and no Math link or page
Deployed page shows the new list Real: Playwright against this PR's Vercel preview and production at 1440px. All servers 169 → 125; search "google" 15 → 14 (Google Forms gone); Developer Tools 30 → 19 (Math, Arcade Engine API and the coming-soon cards gone). Screenshots below
Nothing else regressed pnpm test (899 passed, 2 skipped), pnpm lint, tsc --noEmit
Before (docs.arcade.dev) After (Vercel preview)
before-count All servers: 169, including design-system-only entries after-count All servers: 125, the published catalog
before-google Search "google": Google Forms shown as "Coming soon" after-google Search "google": only the published Google servers
before-developer Developer Tools: Math, Arcade Engine API, and coming-soon cards after-developer Developer Tools: only published toolkits

Additional notes

  • Docs picks up catalog changes when the nightly generated-docs PR merges; that PR needs a human push before its required checks run.
  • toolkit-static-params.ts still falls back to design-system for a toolkit with no generated file. No such toolkit exists today.
  • Other Math mentions in docs: the CrewAI guide's next steps suggested a "Math" toolkit and now suggests GoogleCalendar or Linear; the nightly already removed Math's page from public/llms.txt. The deploy and Helm pages keep [arcade_math] as a toolPackages example. The package still ships, so it stays accurate.
  • Reviewer decision: dropping the coming-soon cards and hiding Math was chosen so that docs matches arcade.dev/tools exactly.

~ 🤖 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-system TOOLKITS list.

getToolkitsWithDocsLinks now loads per-toolkit JSON from toolkit-docs-generator via loadAllToolkitData, maps card fields with toIntegrationCatalog, and still appends partner toolkits. Design-system enrichment, docs-link backfill, and the Workday “launched” isComingSoon override are removed. sync-toolkit-sidebar.ts uses the same JSON for category, isHidden, and labels (no design-system priority or setToolkitsForTesting). Math is dropped from the public list by setting isHidden: true in math.json and regenerating sidebar/llms.txt; the CrewAI guide’s next steps now mention MCP servers like GoogleCalendar/Linear instead of Math.

Adds tests/integration-catalog.test.ts and 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.

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.
@vercel

vercel Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
docs Ready Ready Preview Oct 22, 2026 10:19pm UTC

Request Review

…x-from-public-catalog

# Conflicts:
#	lib/integration-catalog.ts

@laughnan laughnan left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@sdserranog sdserranog left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left a couple of small comments inline: one question about the internal list and one about the sidebar still using design-system.

Comment thread lib/integration-catalog.ts Outdated
LAUNCHED_TOOLKIT_IDS.has(normalizeToolkitId(toolkit.id))
? { ...toolkit, isComingSoon: false }
: toolkit;
const INTERNAL_TOOLKIT_IDS: ReadonlySet<string> = new Set([

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Comment thread lib/integration-catalog.ts Outdated
partners: readonly ToolkitWithDocsLink[]
): ToolkitWithDocsLink[] => [
...[...generated]
.filter((toolkit) => !INTERNAL_TOOLKIT_IDS.has(toolkit.id))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

samkujovich and others added 2 commits October 20, 2026 14:31
…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

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ 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.

Comment thread toolkit-docs-generator/tests/scripts/sync-toolkit-sidebar.test.ts
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
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

@sdserranog sdserranog left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! :shipit:

This branch was successfully deployed

1 active deployment
Preview — 1df0b34b Deployed Oct 22, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants