Commit graph

38 commits

Author SHA1 Message Date
Dhravya
3487666481
feat(web): add MCP connector directory (#1461)
<!-- VORFLUX_AGENT_PR_BODY_BEGIN -->
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.
  ```bash
  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](https://api.us1.vorflux.com/assets/artifacts/c3VwZXJtZW1vcnk6Zjo4MDA0.3_UzR_OP9Jk228FYbrAPTXyqybRBlqwn5Uv4tksf_Y0.png)

![mcp-directory-branding-mobile.png](https://api.us1.vorflux.com/assets/artifacts/c3VwZXJtZW1vcnk6Zjo4MDA1.b5G6nsOBVm2s6DlEFWFiMFCcULAkV0MCCGZ8XVsA5js.png)

![mcp-directory-public-preview.png](https://api.us1.vorflux.com/assets/artifacts/c3VwZXJtZW1vcnk6Zjo4MDA2.ZrBAeBi62JX1xavAtaDLQ0fuixgBjN7x1NrqIxtdmKw.png)
<!-- VORFLUX_AGENT_PR_BODY_END -->

---
**Session Details**
- Session: [View Session](https://supermemory.us1.vorflux.com/agent-sessions/1cd0aab9-2a45-4818-aa13-f9bfe032ddba)
- Requested by: Dhravya Shah (dhravya@supermemory.com)
- Address comments on this PR. Add `(aside)` to your comment to have me ignore it.

<!-- CURSOR_SUMMARY -->
---

> [!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.
>
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 8b59bae84a. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2026-08-20 22:58:39 +00:00
ishaanxgupta
dda56e766e Add plugin CLI command guide to integrations (#1534)
## Summary

- add an “Install plugins with one command” action beside the Plugins section

<img width="1280" height="651" alt="image" src="https://github.com/user-attachments/assets/a2e19a91-c94c-4a56-87c4-b72c4dbe89ba" />
<img width="1280" height="554" alt="image" src="https://github.com/user-attachments/assets/2cd4b3a4-ac30-4411-8221-baca09e90b0f" />
2026-08-20 18:07:31 +00:00
ishaanxgupta
e2be9c9edd Fix integrations layout and mobile promo responsiveness (#1481)
## Summary

- Reorder Apps & extensions so Import X bookmarks appears in the top row and Apple Shortcuts uses the open space below.
- Keep both Apple Shortcut actions inline on larger screens while allowing the card to grow only as much as needed.
- Rework the Company Brain promo on phones so its logo, copy, close control, and CTA remain readable and aligned.
2026-08-17 18:47:36 +00:00
Dhravya Shah
d14b209f7c
feat(web): support discount code checkout (#1523) 2026-08-16 13:43:53 -07:00
Ishaan Gupta
e651045ac5
Remove paid plugin UI (#1403) 2026-08-15 18:41:46 +05:30
Dhravya Shah
f882f1104d
docs: restructure documentation site and update integration UI (#1331)
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-07-21 20:19:30 -07:00
MaheshtheDev
42f3aec885 feat(web): company brain onboarding redesign + connector entitlement (#1178)
- onboarding: unified About step, mode-aware Sources, Slack-focused Flows step, connect feedback (toast + connected state), auto-draft company description from domain
- brain-home: Active members stat + invite, real OneDrive icon
- useConnectorAccess hook so company_brain unlocks pro-tier connectors across onboarding + integrations
- fix company-brain-connections crash on empty connections

---
**Session Details**
- Session: [View Session](https://supermemory.us1.vorflux.com/agent-sessions/64a15b29-0848-42d1-af4c-138c5a27136f)
- Requested by: Unknown
- Address comments on this PR. Add `(aside)` to your comment to have me ignore it.
2026-06-30 22:01:20 +00:00
ishaanxgupta
603d0512fd Show MCP connection status in integrations (#1135)
## Summary
- Parse enabled MCP OAuth API keys from the integrations page key list.
- Show MCP as connected in MCP integration cards, the Active filter count, featured CTA, and active connections rail.
- Reuse the existing MCP metadata signal used elsewhere in the app (`sm_source: "mcp"` or `sm_kind: "mcp_oauth_exchange"`).

<img width="1918" height="657" alt="image" src="https://github.com/user-attachments/assets/0dc4dace-9d47-4f05-8aad-55bd947dfe1c" />
2026-06-28 19:33:51 +00:00
MaheshtheDev
1e1b0b1a37 feat(web): make /integrations a real route with connect deeplinks (#1155)
- Promote integrations from ?view=integrations to real /integrations and nested /integrations/[card] routes; the page body is shared via AppExperience and useViewMode is path-aware.
- Legacy ?view= URLs (and /settings/integrations) redirect to the new routes for back-compat; middleware/ensure-workspace allow the public routes.
- Add ?connect=<plugin|provider> deeplink that opens a card's connect modal instantly with a loading state (e.g. Hermes API key).
2026-06-23 20:42:29 +00:00
sreedharsreeram
313a8df6a6 feat(web): show import status on X bookmarks integration card (#1130)
## What

The X bookmarks ("Import X bookmarks") card on the integrations page never reflected any state, even after importing tweets — unlike connectors and plugins, which show "Connected"/"Active".

After this change, once you've imported at least one tweet the card shows an **"Imported · {last import time}"** pill (mirroring the plugin "Active · {time}" style) and is included in the **Connected** filter.

Since importing X bookmarks is a one-time/occasional action rather than a live connection, it intentionally says **"Imported"** with the last-import timestamp, not "Connected".

## Why

The page's status logic (`isItemConnected` + `renderStatus`) only handled the `plugin` and `connector` item kinds. The X bookmarks card is an `import` kind, so it always rendered just "Connect". This was a regression from #979 (the integrations overhaul), which rebuilt the page around item kinds and dropped the previous "{N} tweets imported" indicator.

## How

- Add a single documents query (`@post/documents/documents`, `categories: ["tweet"]`, `limit: 1`, newest first) that yields both the org-wide tweet count (`pagination.totalItems`) and the latest tweet's `createdAt`.
- `isItemConnected` returns `true` for `import` when the count is `> 0`.
- `renderStatus` renders a new `ImportedPill` ("Imported · {relative time}") for `import` when there's ≥1 tweet.

## Testing

- `tsc` and Biome pass; no new errors introduced by this change.
- Verified the status source of truth against a local backend by seeding `type='tweet'` documents — the count/latest-timestamp the pill renders reflect them.

> Note: `tsc` reports two **pre-existing**, unrelated `granola` errors in this file (`CONNECTOR_META` + an icon record missing the `granola` provider). They exist on `main` and are not touched by this PR.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-18 04:43:06 +00:00
sreedharsreeram
d4a3a57a42 fix(web): remove duplicate "Connected" text on connector cards (#1131)
## Problem
On the integrations page → **Knowledge bases** section, a connected connector card (e.g. Google Drive) rendered the green **"Connected"** pill **twice** — once on the bottom-left, and again on the bottom-right next to the `+` button.

## Cause
The `ConnectionsCountPill` was rendered in two slots of the card:
- `renderStatus()` → left `statusSlot`
- `renderRight()` → right `actionSlot` (alongside the `+` add-source button)

The `renderStatus` connector case was added recently (#1065) and duplicated the pill that `renderRight` already shows.

## Fix
Removed the `connector` case from `renderStatus()` so the pill renders **only on the right**, in place of the Connect button. The logic is keyed on `kind === "connector"`, so this fixes every Knowledge-bases card uniformly — **Google Drive, Notion, OneDrive, Granola**.

- Non-connected cards still show the **Connect** button (unchanged).
- The info modal is unaffected — it renders `infoActionSlot ?? actionSlot` and never `statusSlot`.

```diff
-			case "connector": {
-				const count = connectionsByProvider[item.provider].length
-				if (count <= 0) return null
-				return <ConnectionsCountPill count={count} />
-			}
 			default:
 				return null
```

## Testing
Minimal, self-contained deletion (no new code, no unused symbols). Local `tsc` not run in this worktree because `node_modules` isn't installed here; the change leaves valid syntax and `ConnectionsCountPill`/`connectionsByProvider` remain used by `renderRight`.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-17 18:07:25 +00:00
sreedharsreeram
00d481e8c0 Move Granola connector to Pro plan (#1132)
## Summary
- move Granola from Max-gated to Pro-gated in Nova integrations and add-connection flows
- add Granola to Pro plan card connector copy in billing
- update Granola connector docs to say Pro Plan or higher

## Testing
- bunx biome check apps/web/components/settings/billing.tsx apps/web/components/integrations-view.tsx apps/web/components/add-document/connections.tsx apps/docs/connectors/granola.mdx
- git diff --check

Note: onboarding-brain was intentionally left unchanged.
2026-06-17 17:48:04 +00:00
ishaanxgupta
24eb5a4367 Fix Granola Max upgrade gating (#1095)
## Summary

- Keep the Granola integration card in Upgrade state unless the active plan includes Max or above.
- Prevent the Granola API-key modal from opening unless the active plan is Max or above in both the integrations grid and add-document connections UI.
2026-06-17 06:22:41 +00:00
ishaanxgupta
9c5a5d4991 Improve mobile integrations layout (#1097)
## Summary
- Add a mobile-only Activity panel with Active and Recent tabs near the top of the integrations page.
- Switch mobile integration cards from horizontal carousel cards to compact vertical list rows.
- Keep the existing desktop right-column layout unchanged.

<img width="366" height="800" alt="image" src="https://github.com/user-attachments/assets/04dc04a0-ae7b-4fe5-b54f-5d730220a90c" />
2026-06-17 04:06:59 +00:00
Ishaan Gupta
925be7c6c5
Add Antigravity MCP setup (#1119) 2026-06-16 12:10:36 +05:30
MaheshtheDev
f1c98c161c feat(shortcuts): merge use-case modal with shortcut actions (#1091)
Remove intermediate use-case screen; Apple Shortcuts card now opens a single modal with use cases + Add/Search memory shortcut buttons inline. Fixes res.data.key bug (was reading res.key which is always undefined). Buttons stack on mobile, no 'I'm good' dismiss.
2026-06-11 00:33:21 +00:00
Ishaan Gupta
6efb4ec3c2
fix(web): harden integrations upgrade plan id (#1088) 2026-06-10 11:11:03 -07:00
Vedant Mahajan
23c43bd27d
fix(web): prevent upgrade click event as plan id (#1086) 2026-06-10 21:02:42 +05:30
Ishaan Gupta
464a2b16b1
Add Cursor & granola plugin card in Integrations page (#1070) 2026-06-10 20:23:24 +05:30
Vedant Mahajan
fec9334782
Fix integrations info modal dismissal and CTA label (#1084) 2026-06-10 20:12:03 +05:30
MaheshtheDev
8a9e3ff3b0 feat(integrations): active connections rail + recently added (#1075)
> **_Demo Video_**: https://www.tella.tv/video/integrations-page-layout-with-active-connections-1-g9p4

- Right rail listing active plugins/connectors with status, counts, and expandable detail
- Recently added card: latest docs tagged by source, opens in the doc viewer
- Loading skeletons, empty states, header fetch spinner; fix guest-view flash on reload

ENG-784
2026-06-10 05:00:59 +00:00
ved015
c71acbe8ae Make integrations page public for guests (#1073)
## Summary
- Allow logged-out users to load `/?view=integrations` without being redirected to login
- Add a public integrations header with Supermemory branding and a login CTA
- Run IntegrationsView in guest mode with static catalog data only, no auth-backed queries
- Route all guest Connect actions to login with a redirect back to the integrations page

<img width="1680" height="1009" alt="Screenshot 2026-06-09 at 9 32 33 PM" src="https://github.com/user-attachments/assets/111f2b1a-5224-47ae-8152-e1349c05842d" />
2026-06-09 17:32:00 +00:00
ved015
7c2bd19cd8 Update integrations info modal (#1065)
## Summary
- Replace percard Docs links with hover only info buttons and card click info modals
- Add doc backed use cases inside setupstyle info modals, with Docs access and the same card action in the footer
- Track all info modal close behavior through one analytics event with a close reason
- Keep Active/Connected status in the card footer, align the info icon to the card action margin, and fix the Settings modal Integrations linkout

<h3>Normal no hovering</h3>
<img width="1029" height="529" alt="Screenshot 2026-06-09 at 1 21 38 PM" src="https://github.com/user-attachments/assets/ea817984-34a2-437e-9590-addea0f8d4a1" />

<h3>On hovering</h3>
<img width="466" height="340" alt="Screenshot 2026-06-09 at 1 21 23 PM" src="https://github.com/user-attachments/assets/765c6132-9f91-4a9a-8141-6d61e24b688e" />

<img width="846" height="549" alt="Screenshot 2026-06-09 at 1 34 43 PM" src="https://github.com/user-attachments/assets/aaa10604-98e0-4139-b32f-b19e230210a2" />

<h3>Info modal</h3>
<img width="1303" height="788" alt="Screenshot 2026-06-09 at 1 22 29 PM" src="https://github.com/user-attachments/assets/18b6228f-3a3b-481b-8459-392a39eccb1a" />

<img width="724" height="415" alt="Screenshot 2026-06-09 at 1 22 46 PM" src="https://github.com/user-attachments/assets/5e25e68b-53a9-4fa1-a5cf-1980ede7661a" />
2026-06-09 15:29:38 +00:00
Mahesh Sanikommu
3a3324cee3
feat(settings): settings modal overhaul (#1069) 2026-06-09 12:07:47 +05:30
MaheshtheDev
819090ae9d feat(integrations): add Poke integration (#1066)
- New Poke card in Apps & extensions linking to the Poke recipe (OAuth, no manual MCP URL)
- Featured hero slot for Poke with palm-tree emoji
- Reusable NEW badge, applied to Poke
- Poke logo asset, full-cover icon styling
- POKE_RECIPE_URL constant; guard Chrome-only analytics on external cards
2026-06-08 18:00:07 +00:00
Ishaan Gupta
c606f76f6d
Refine Codex and OpenCode OAuth integration status (#1048)
Co-authored-by: Mahesh Sanikommu <maheshthedev@gmail.com>
2026-06-04 15:15:20 -07:00
MaheshtheDev
ab068e2ba5 fix(web): restore Nova onboarding analytics events (#1023)
The onboarding rework moved the flow to app/(app)/onboarding and dropped the funnel tracking, so onboarding_completed stopped firing on 2026-05-02.

- Wire onboarding_step_viewed across idle/processing/done/error transitions
- Fire onboarding_completed on real completion (status=done) with source + memories_count
- onboarding_profile_submitted now carries { source }
- Add onboarding_skipped { from_step }
- Remove dead onboardingCompleted() from InitialHeader and unused name/relatable helpers
2026-05-29 19:54:13 +00:00
MaheshtheDev
9fa626cf17 feat(web): overhaul integrations page with featured hero, category rails and MCP setup modal (#979)
- Rebuild the integrations catalog as horizontally-scrollable category rails
  (MCP, Plugins, Knowledge bases, Apps & extensions) with header chevrons
- Add an auto-rotating Featured hero with problem-led headlines, backdrop
  imagery and a gradient FEATURED badge
- Surface all 9 MCP clients as individual cards that open a setup modal
  styled like the plugin connect flow (reuses MCPSteps embedded variant)
- Align MCP setup steps and the Claude Desktop timeline to the design system
- Merge the Integrations and Connections settings tabs into one entry
2026-05-27 01:10:12 +00:00
Ishaan Gupta
06d5bbfefa
add codex plugin logo and add in description (#943) 2026-05-15 08:25:43 -07:00
MaheshtheDev
debac33eba feat: autumn migration (#902) 2026-05-08 22:42:55 +00:00
MaheshtheDev
9584d98d6b feat: Unify connections into the Add Memory modal; redesign disconnect dialog (#900)
- Consolidate Drive/Notion/OneDrive management into the Add Memory → Connect tab and remove the standalone `view=connections` page
(deleted `connections-detail.tsx`; redirected the Integrations tile and onboarding spotlight to `?add=connect`).

- Replace the duplicated provider tile row when connections exist with a single `+ Add a connection` dropdown styled to match the
home-page space selector.
- Rebuild the disconnect dialog as a single-decision flow: keep-memories is the default, with an inline `(optional)` checkbox to
also delete imported memories — primary button label/color flips to red when opted in.
- Memory-of-day card now deep-links the source document via `?doc=<id>` instead of just routing to the memories list.
- Refactored the Pro paywall on the connections surface into a focused, contained card matching the rest of the dashboard's visual
language.
2026-05-05 22:33:09 +00:00
MaheshtheDev
805cf3cb93 feat: enhanced the integration page for more conversion (#899) 2026-05-04 17:41:52 +00:00
MaheshtheDev
68b6c66321 feat: major iteration on the app (#896)
feat: major iteration on the app

add: dashboard improvements

few more improvements

add few more improvements

add few more changes

home improvmeents

few more improvements

add lot of modifications

fix few things
2026-05-02 23:58:58 +00:00
MaheshtheDev
3cf7e77872 fix: pro plugin and free plugin confusion (#843) 2026-04-09 15:42:25 +00:00
MaheshtheDev
0638f65bc3 feat(nova): add hermes plugin instructions (#832) 2026-04-06 23:18:38 +00:00
vorflux[bot]
5a63ebc996
chore: rename ClawdBot to OpenClaw across web and docs (#811)
Co-authored-by: Vorflux AI <noreply@vorflux.com>
2026-03-26 22:10:57 -07:00
Mahesh Sanikommu
962fb85cd3
feat: empty state action for new spaces (#780)
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-15 11:02:14 -07:00
Mahesh Sanikommu
1b1b34fb66
chore: remove the new folder and fix imports (#740) 2026-02-16 14:30:29 -07:00
Renamed from apps/web/components/new/integrations-view.tsx (Browse further)