Skip to content

feat(web): add MCP connector directory - #1461

Draft
Dhravya wants to merge 4 commits into
mainfrom
vorflux/add-mcp-connectors-catalog
Draft

feat(web): add MCP connector directory#1461
Dhravya wants to merge 4 commits into
mainfrom
vorflux/add-mcp-connectors-catalog

Conversation

@Dhravya

@Dhravya Dhravya commented Aug 13, 2026

Copy link
Copy Markdown
Member

Adds the full 654-entry MCP directory without bundling records into client JavaScript, with explicit capability status and connector branding that degrades safely when no authoritative logo is available.

Changes

  • Lazy-load and validate the searchable, filterable, progressively rendered MCP catalog.
  • Render same-origin proxied provider icons for 543 entries, with a reviewed domain allowlist and deterministic fallback marks for 111 unresolved or unbranded entries.
  • Record OAuth discovery capability separately from end-to-end support; all directory setup actions remain suppressed until their authentication flow is verified.
  • Add a reproducible OAuth metadata probe with HTTPS/private-network protections, stable URL keys, authorization-server scanning, and catalog fingerprint validation.
  • Add Google Drive branding for the curated built-in connector.

Testing

  • Passed: Deterministic generation and catalog assertions.
    PATH="$HOME/.bun/bin:$PATH" python3 apps/web/scripts/generate-mcp-directory.py --output
    cmp apps/web/public/mcp-directory.json
    Verified 654 entries, 254 DCR discoveries, 27 preregistered OAuth discoveries, 373 unclassified entries, and zero directory setup actions.
  • Passed: Stale OAuth metadata fingerprint is rejected by the generator.
  • Passed: Touched-file Biome checks and git diff --check.
  • Passed: Icon proxy returned 200 for an allowlisted domain and 400 for an unknown valid-looking domain.
  • Passed: Authenticated desktop/mobile browser inspection and conservative capability labels.
  • Passed: Public preview returned HTTP 200 and rendered the real app. Authentication cookies do not transfer to the public hostname, so the public screenshot shows login.
  • Partial: Repository-wide TypeScript checks remain blocked by unrelated existing errors outside the touched MCP files.
  • Partial: 111 entries intentionally retain deterministic fallback marks; endpoint-derived domains may not always be the canonical brand logo.
  • Blocked: Google rejected the local HTTP OAuth callback, so live Google Drive consent, callback, persistence, tool discovery, disconnect, and reconnect were not completed.

Public preview: https://ar8ruchhbi65.preview.us1.vorflux.com/configure/tools


Attached Images

[288.csv]

[mcp-directory-final.json]

mcp-directory-branding-desktop.png

mcp-directory-branding-mobile.png

mcp-directory-public-preview.png


Session Details


Note

Medium Risk
Changes how users pick MCP URLs and auth (OAuth vs API key) before hitting existing connect endpoints; no new backend auth logic in this diff, but misconfiguration or trusting bad URLs remains a user-risk surface.

Overview
Adds a browseable MCP directory on the Company Brain connectors page: the catalog is not bundled in JS—it loads from static /mcp-directory.json only after the user opens the directory (with validation, caching, and abort handling).

The new McpDirectoryBrowser supports search, category/availability filters, and progressive “show more” rendering. Supported remote entries route into the existing custom MCP flow via Set up, which pre-fills name/URL and opens the connector dialog with context-specific copy.

The custom connector dialog now uses an explicit OAuth vs API key toggle; API key fields only appear for API-key mode, and directory-backed connections get stable slugs (-dir- suffix) so names display cleanly on connected cards. Middleware excludes mcp-directory.json from the auth matcher so the asset can be fetched publicly.

Reviewed by Cursor Bugbot for commit 8b59bae. Bugbot is set up for automated code reviews on this repo. Configure here.

Dhravya commented Aug 13, 2026

Copy link
Copy Markdown
Member Author

How to use the Graphite Merge Queue

Add the label Main to this PR to add it to the merge queue.

You must have a Graphite account in order to use the merge queue. Sign up using this link.

An organization admin has enabled the Graphite Merge Queue in this repository.

Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue.

This stack of pull requests is managed by Graphite. Learn more about stacking.

@claude

claude Bot commented Aug 13, 2026

Copy link
Copy Markdown

Claude finished @Dhravya's task in 2m 13s —— View job


Code Review Complete

  • Loading review tools
  • Fetching PR diff and existing comments
  • Reviewing changed files for bugs and security issues
  • Submitting review

Summary: Reviewed all 6 changed files for bugs, security issues, and logic errors. The PR adds an MCP connector directory browser with proper validation, cleanup patterns, and type safety. No issues found — clean code ready to ship.

Score: 10/10

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Aug 13, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
✅ Deployment successful!
View logs
supermemory-mcp 62f2ba0 Aug 13 2026, 01:45 AM

@Dhravya
Dhravya marked this pull request as draft August 13, 2026 00:18

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

Overview: Adds an MCP connector directory browser that allows users to search and set up remote MCP servers from a curated list of 654 entries.

Issues found: None — this looks good to ship.

The code is well-structured with proper patterns:

  • Input validation happens before async operations
  • finally block ensures busy state cleanup on all exit paths
  • Runtime type validation (isDirectoryEntry) for JSON data
  • Dynamic import for the directory browser avoids loading 7KB+ of JSON on pages that don't use it
  • Module-level cache avoids redundant fetches
  • FNV-1a hash for stable slug generation prevents collisions between directory entries with the same name

Minor observations (not blocking):

  • The hardcoded "654 servers" count in the button text will drift from actual data over time, but the dynamic count shows once loaded

Score: 10/10

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Aug 13, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
supermemory-app 62f2ba0 Commit Preview URL

Branch Preview URL
Aug 13 2026, 01:47 AM

@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 default effort and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 8b59bae. Configure here.

)}

{customAdvancedOpen && (
{customAuthMethod === "api-key" && customAdvancedOpen && (

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

API key field stays collapsed

Medium Severity

Choosing API key still keeps the required key input behind the collapsed API key settings disclosure, and the field placeholder still says optional. Submit then fails with Enter an API key unless that secondary panel is opened first, so the new API-key auth path is easy to miss or appear broken.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 8b59bae. Configure here.

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.

Addressed in f6865d33. API-key mode now shows a required API key field immediately; only optional header configuration remains collapsed under Header settings.


function customConnectionName(slug: string) {
return titleCase(slug.replace(/-dir-[a-z0-9]{6}$/, "").replace(/-/g, " "))
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Custom names stripped incorrectly

Low Severity

customConnectionName strips any slug ending in -dir- plus six alphanumeric characters, not only directory-created connections. A manually added custom MCP whose slug naturally ends that way, such as names that slugify to …-dir-server or …-dir-client, shows a truncated label in the card and disconnect confirm copy.

Additional Locations (2)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 8b59bae. Configure here.

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.

Addressed in f6865d33. Directory connections now use a reserved -sm-dir-<hash> marker, ordinary custom names are preserved, and new manual names using the reserved suffix are rejected.

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.

1 participant