From 8cbd21b3e7c5fc4f229ed48bb261a4f5a0b1e68c Mon Sep 17 00:00:00 2001 From: Devin Foley Date: Tue, 6 Oct 2026 15:57:16 -0700 Subject: [PATCH] feat(apps): add Superagent connection (#15394) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Thinking Path > - Paperclip is the open source app people use to manage AI agents for work. > - Agents reach external services through the Apps catalog. Each catalog entry is a reviewed `AppDefinition` that connects a provider's hosted MCP server to Paperclip's shared vault, grants, policies, gateway, and audit trail. > - Superagent (`superagent.sh`) is a security platform. Its hosted MCP server lets agents read and triage security findings, start red-team reports, run Contributor Trust and dependency update jobs, and score web pages, email, files, skills, MCP repositories, and packages before an agent trusts them. > - Superagent is not in the catalog. Operators must use the generic "Connect your own MCP server" flow. That flow has no branding, no key guidance, and no warning about billable or destructive tools. > - The connector playbook supports this provider with existing definition fields. The server accepts an organization API key as a bearer header. It publishes no OAuth authorization-server metadata, so browser sign-in is not possible. > - This pull request adds the Superagent definition, its artwork, the research and permission-review ledger rows, documentation, deterministic tests, and one reviewed risk-classification rule. > - The benefit is a branded, governed Superagent connection with clear key guidance and a warning about tools that cost credits or delete data. ## Linked Issues or Issue Description **Problem or motivation** Teams that use Superagent for PR security, red teaming, and agent guardrails want their Paperclip agents to read findings, return structured reports, and score content before they use it. Superagent is not in the Apps catalog. Operators must paste the MCP URL and an `Authorization` header into the generic remote-MCP flow. That flow gives no branding and no provider guidance. It also does not tell the operator that the key reaches the whole organization, or that some tools consume credits or permanently delete findings. **Proposed solution** Add a catalog-only Superagent connection that follows the connector playbook. It has one method: a customer organization API key (`sk_live_...`), sent as an `Authorization: Bearer` header to `https://www.superagent.sh/mcp`. The field helper text explains that Superagent keys are not scoped. The method warning tells operators to set billable and destructive actions to Ask first before agents run unattended. All discovered tools stay governed by the normal per-action policies. **Alternatives considered** A browser sign-in method was not added. The server's protected-resource metadata names `https://superagent.sh` as its authorization server, but that origin publishes no `oauth-authorization-server` or `openid-configuration` document, so Paperclip cannot discover OAuth endpoints. A plugin was not needed because the connection needs no custom UI, tables, workers, or webhooks. Relying on the generic risk classifier was not enough. Several Superagent mutations (`triage_finding`, `scan_*`, `restore_agent_builtin_rule`) use names that it reads as reads, so a narrow reviewed Superagent rule was added instead. **Roadmap alignment** This extends the existing self-serve remote-MCP connection catalog. It does not overlap planned core work. ## What Changed - Added the `superagent` row to `packages/shared/src/self-serve-mcp-research.json` (API-key auth, risk tier S4). - Added the `superagent` provider to `scripts/ingest-app-definitions.mjs` (category, key placement and placeholder, console links, guidance, description). Regenerated `packages/shared/src/app-definitions/superagent.json` and the generated registry. - Added the `superagent/mcp-api-key` permission review to `doc/connections/tool-method-permission-reviews.json`, with key-permission text and evidence links. - Added Superagent's official mark (`ui/public/brands/apps/superagent.png`, the 460×460 avatar of the official `superagent-ai` GitHub organization) and the brand manifest entry. - Added gallery copy for the Superagent card. - Added a reviewed Superagent rule to `classifyRisk` in `server/src/services/tool-access.ts`. Only `list_*` and `get_*` tools, and tools that Superagent marks read-only, are reads. `delete_*` and `revoke_agent_client` are destructive. All other tools are writes, so billable and rule-changing tools can be set to Ask first. - Put the Ask-first advice in the API-key helper text, because the key form shows helper text and not method warnings. - Added `doc/connections/SUPERAGENT.md` (transport and auth, why there is no OAuth, administrator setup, capabilities and policy, manifest, brand provenance, validation hook). Linked it from the connections README and the permission audit. - Tests: definition shape, store visibility and artwork, URL recognition, the bearer header on discovery with the key kept out of connection config, read/write/destructive classification of fixture tools, the Superagent risk rule (including `triage_finding` and `restore_agent_builtin_rule`), the visible Ask-first advice and API-key gating of the connect form, and the pinned catalog counts. ## Verification - `pnpm exec vitest run packages/shared/src/app-definitions.test.ts packages/shared/src/app-definitions-url.test.ts ui/src/pages/apps/AppsConnect.test.tsx ui/src/pages/apps/Browse.test.tsx ui/src/lib/app-brand-assets.test.ts ui/src/pages/apps/AppLogo.brand-assets.test.tsx`: 317 passed. - `pnpm exec vitest run server/src/__tests__/tool-access-service.test.ts`: 385 passed. - `node scripts/check-app-brand-assets.mjs` and `node --test scripts/app-brand-validation.test.mjs`: passed. - `pnpm --filter @paperclipai/shared typecheck`, `pnpm --filter @paperclipai/server typecheck`, and `pnpm --filter @paperclipai/ui typecheck`: clean. - Manual: in a local instance, open Apps → Browse and confirm the Superagent card and icon. Open `/apps/connect?source=superagent`. Confirm the single API-key method, and confirm that Connect enables only after a key is entered. - Live metadata probe on 2026-10-06: an unauthenticated `initialize` on `https://www.superagent.sh/mcp` returns 401 with `resource_metadata="https://www.superagent.sh/.well-known/oauth-protected-resource"`. That document returns 200. No authorization-server metadata exists at the named issuer. ## Risks - Low risk to existing providers. The change is additive catalog data plus tests. The generated registry only gains one import. The new risk rule runs only for Superagent connections. - A Superagent key reaches its whole organization. Some tools consume credits (`create_*_report`, `triage_finding`) or delete data permanently (`delete_finding`). Every action starts Allowed under the current product default. The key helper text tells operators to set these actions to Ask first. - The permission-review ledger records live proof as not run. No Superagent account was used. The lifecycle checklist in `doc/connections/SUPERAGENT.md` needs a documented pass before the entry is fully qualified. > For core feature work, check [`ROADMAP.md`](ROADMAP.md) first and discuss it in `#dev` before opening the PR. Feature PRs that overlap with planned core work may need to be redirected — check the roadmap first. See `CONTRIBUTING.md`. ## Model Used - Claude Opus 5.5 (`claude-opus-5-5`, 1M context) in Claude Code, with extended thinking and tool use (shell, file editing, web fetch, browser checks). ## Checklist - [x] I have included a thinking path that traces from project context to this change - [x] I have specified the model used (with version and capability details) - [x] I have checked ROADMAP.md and confirmed this PR does not duplicate planned core work - [x] I have searched GitHub for duplicate or related PRs and linked them above - [x] I have either (a) linked existing issues with `Fixes: #` / `Closes #` / `Refs #` OR (b) described the issue in-PR following the relevant issue template - [x] I have not referenced internal/instance-local Paperclip issues or links (only public GitHub `#NNN` / `github.com/paperclipai/paperclip` URLs) - [x] My branch name describes the change (e.g. `docs/...`, `fix/...`) and contains no internal Paperclip ticket id or instance-derived details - [x] I have run tests locally and they pass - [x] I have added or updated tests where applicable - [x] I have updated relevant documentation to reflect my changes - [x] I have considered and documented any risks above - [x] All Paperclip CI gates are green - [x] Greptile is 5/5 with no open P2s, recommendations, or follow-ups - [x] I will address all Greptile and reviewer comments before requesting merge --- doc/connections/CONNECTOR-PERMISSION-AUDIT.md | 3 +- doc/connections/README.md | 2 +- doc/connections/SUPERAGENT.md | 162 ++++++++++++++++++ .../tool-method-permission-reviews.json | 17 ++ .../shared/src/app-definitions-url.test.ts | 1 + .../shared/src/app-definitions.generated.ts | 39 +++-- packages/shared/src/app-definitions.test.ts | 60 ++++++- .../src/app-definitions/superagent.json | 57 ++++++ .../shared/src/self-serve-mcp-research.json | 3 +- scripts/ingest-app-definitions.mjs | 14 +- .../src/__tests__/tool-access-service.test.ts | 72 +++++++- server/src/services/tool-access.ts | 9 + ui/public/brands/apps/manifest.json | 6 + ui/public/brands/apps/superagent.png | Bin 0 -> 96301 bytes ui/src/lib/app-gallery-copy.ts | 4 + ui/src/pages/apps/AppsConnect.test.tsx | 32 ++++ 16 files changed, 452 insertions(+), 29 deletions(-) create mode 100644 doc/connections/SUPERAGENT.md create mode 100644 packages/shared/src/app-definitions/superagent.json create mode 100644 ui/public/brands/apps/superagent.png diff --git a/doc/connections/CONNECTOR-PERMISSION-AUDIT.md b/doc/connections/CONNECTOR-PERMISSION-AUDIT.md index 8b41d07f228..57f72332831 100644 --- a/doc/connections/CONNECTOR-PERMISSION-AUDIT.md +++ b/doc/connections/CONNECTOR-PERMISSION-AUDIT.md @@ -8,7 +8,8 @@ separate contracts and were not changed. Methods reviewed after this audit carry their own `reviewedAt` date in the same ledger; the counts above are not restated. Later additions: [Neon](./NEON.md) -(`mcp-oauth`, `mcp-api-key`; 2026-10-02). +(`mcp-oauth`, `mcp-api-key`; 2026-10-02), [Superagent](./SUPERAGENT.md) +(`mcp-api-key`; 2026-10-06). ## Shared credential failure diff --git a/doc/connections/README.md b/doc/connections/README.md index 8046e3d8e4c..2b7f9b33878 100644 --- a/doc/connections/README.md +++ b/doc/connections/README.md @@ -13,7 +13,7 @@ Runtime authentication: [AI Connections](./AI-CONNECTIONS.md). Long-term memory: [Experimental memory connectors](./MEMORY.md). Provider notes: [Google Workspace](./GOOGLE-WORKSPACE.md), -[Gmail](./GMAIL.md), [Asana](./ASANA.md), [PostHog](./POSTHOG.md), [Neon](./NEON.md), +[Gmail](./GMAIL.md), [Asana](./ASANA.md), [PostHog](./POSTHOG.md), [Neon](./NEON.md), [Superagent](./SUPERAGENT.md), [AgentMail](./AGENTMAIL.md), [iMessage Photon](./IMESSAGE-PHOTON.md), and [Enterpret](./ENTERPRET.md). Optional credential custody: [Vercel Connect](./VERCEL-CONNECT.md). diff --git a/doc/connections/SUPERAGENT.md b/doc/connections/SUPERAGENT.md new file mode 100644 index 00000000000..4353bd5d34a --- /dev/null +++ b/doc/connections/SUPERAGENT.md @@ -0,0 +1,162 @@ +# Superagent + +Updated: 2026-10-06. Status: catalog definition reviewed against official +documentation and live provider metadata; live account qualification +outstanding. + +Superagent (`superagent.sh`) is a security platform: PR security scans, +dependency updates, red-team reports, context guardrails that score content +before agents consume it, and runtime guardrails for coding agents. It appears +in Apps and uses Paperclip's shared remote-MCP connection, vault, catalog, +grants, policies, gateway, and audit trail. It is a resource connection, not +Paperclip sign-in. No plugin or database migration is required. The only +provider-specific runtime code is a reviewed risk-classification rule. + +Paperclip connects to Superagent's hosted MCP server at +`https://www.superagent.sh/mcp` (Streamable HTTP) with one method: an +organization API key stored as a Paperclip secret and sent as an +`Authorization: Bearer sk_live_...` header. + +The `www` host is pinned deliberately. The bare `superagent.sh` domain +redirects to `www`, and Superagent documents that some MCP clients fail on +that redirect for POST requests. + +This curated connection is the polished route: it provides branding, key +guidance, and a billable/destructive-tool warning. None of it is *required* to +reach Superagent's server. It can also be connected generically from +**Connect your own MCP server** with the same URL and header. See +[Connecting any remote MCP server](./GENERIC-REMOTE-MCP.md). + +## Service involvement + +Superagent hosts the MCP resource. Paperclip stores the key as a secret +reference, discovers tools with `tools/list`, and sends the key on every +governed call. No Paperclip-operated vendor relay is involved; cloud and +self-hosted instances use the same path. + +## Administrator setup + +1. In Superagent, open **Settings → API keys** (`/app/settings#api-keys`) and + create a key for Paperclip. Use a separate key so it can be revoked + independently. +2. In Paperclip, open **Apps → Browse → Superagent**, paste the key, and click + **Connect**. +3. On the connection's **Permissions** screen, set the billable and + destructive actions listed below to **Ask first** or **Off** if agents run + unattended. + +Revoke the key in Superagent, then remove the connection in Paperclip, to +disconnect. + +## Capabilities and policy + +The server exposes roughly 70 tools that mirror the Superagent REST API: +findings and triage, red-team reports, Contributor Trust scans, dependency +update runs, context-guardrail scoring (web pages, email, messages, files, +skills, MCP repositories, packages), Applications, Agents and endpoint +clients, runtime guardrail groups, rules and alerts, OpenTelemetry +destinations, and the structured agent report return path. + +Superagent's documentation calls out these tools: + +- Billable: `create_repository_report`, `create_web_app_report`, + `create_agent_report`, `create_package_report`, `triage_finding`. +- Permanent deletes: `delete_finding`, `delete_telemetry_endpoint`. The + `delete_agent_group` and `delete_agent_rule` tools also delete. +- Immediate endpoint-policy changes: `set_agent_builtin_rule_mode`, + `restore_agent_builtin_rule`. + +Paperclip applies a reviewed Superagent risk rule in `classifyRisk`, because +several mutations use names the generic classifier reads as reads +(`triage_finding`, `scan_*`, `restore_agent_builtin_rule`). Only `list_*` and +`get_*` tools, and tools Superagent marks `readOnlyHint: true`, are reads. +`delete_*` and `revoke_agent_client` are destructive. Everything else is a +write. The API-key helper text tells operators to put billable and +destructive tools behind Ask first. + +## Vendor + +- Product: Superagent, `https://www.superagent.sh`. +- MCP documentation: `https://www.superagent.sh/docs/mcp`. +- API keys: `https://www.superagent.sh/docs/reference/settings`. +- Rate limits: per key per minute; HTTP 429 with `Retry-After`. + +## Transport and auth + +- Transport: `mcp_remote`, Streamable HTTP. +- Auth: `api_key`, `Authorization: Bearer `. Keys use the `sk_live_` + prefix. +- Key permissions: not scoped. A key reaches everything in its organization. + Paperclip cannot narrow an issued key. +- OAuth: not offered. The server returns + `WWW-Authenticate: Bearer ... resource_metadata="https://www.superagent.sh/.well-known/oauth-protected-resource"`, + and that document names `https://superagent.sh` as its authorization + server, but neither `/.well-known/oauth-authorization-server` nor + `/.well-known/openid-configuration` exists there, so browser sign-in + cannot be discovered. Add an OAuth method if Superagent publishes + authorization-server metadata. + +## Resource filters + +None. Superagent documents no query or header options that narrow the hosted +server. Narrowing is done with per-action policies. + +## Manifest + +| Field | Value | +| --- | --- | +| Slug | `superagent` | +| Category | `developer` | +| Method | `mcp-api-key` (`customer` ownership, risk tier S4) | +| Server URL | `https://www.superagent.sh/mcp` | +| Credential | `authorization`, password, required, placeholder `sk_live_...` | +| Key placement | header `Authorization`, prefix `Bearer ` | +| Console links | keys `https://www.superagent.sh/app/settings#api-keys`, docs `https://www.superagent.sh/docs/mcp` | + +The definition is generated from the `superagent` row in +`packages/shared/src/self-serve-mcp-research.json` and the `superagent` branch +of `specialMethodsFor` in `scripts/ingest-app-definitions.mjs`. + +## Wizard path + +`/apps/connect?source=superagent` opens a single-method form: the API key +field and **Connect**, which stays disabled until a key is entered. A +successful key check and tool discovery lead to the connection's +Permissions screen. + +## Governance defaults + +- Default profile and bindings: the standard connection profile; every + discovered action starts Allowed under the current product default. +- Policies: operators narrow billable and destructive tools to Ask first or + Off on the Permissions screen. +- Risk: the reviewed Superagent rule in `classifyRisk` described above. +- Quarantine rules: the shared defaults; no Superagent-specific exceptions. + +## Brand provenance + +Superagent's site publishes its pyramid mark only as 32×32 WebP favicons +(light and dark), below the catalog's 128px minimum. The same mark is the +avatar of Superagent's official GitHub organization (`superagent-ai`, whose +profile links `https://superagent.sh`), published as a 460×460 transparent +PNG. That file is used unchanged in both themes. + +| File | Source | SHA-256 | +| --- | --- | --- | +| `ui/public/brands/apps/superagent.png` (460×460) | `https://avatars.githubusercontent.com/u/152537519?v=4&s=512` | `2c731c7a4cdaabe2ed341b141dc75608e23b362b9a6e5ee81d1c7a373154fbcf` | + +## Validation hook + +- Environment: definition review on 2026-10-06 against `origin/master`; no + Superagent account was used. +- Metadata probe: an unauthenticated `initialize` on `/mcp` returned HTTP 401 + with the `resource_metadata` header above; the protected-resource document + returned HTTP 200; no authorization-server metadata was found. +- Deterministic tests: manifest shape, store visibility, artwork, URL + recognition, bearer-header projection with the key kept out of connection + config, risk classification of read, write and destructive fixture tools, + and the connect form's API-key gating. +- Connect evidence, catalog evidence, allowed read, governed write, denied + case, revoke, audit: not run. The API-key method still needs the full live + lifecycle with a Superagent organization before this connection is + considered qualified. diff --git a/doc/connections/tool-method-permission-reviews.json b/doc/connections/tool-method-permission-reviews.json index 9d6f6cae72b..2c96d442544 100644 --- a/doc/connections/tool-method-permission-reviews.json +++ b/doc/connections/tool-method-permission-reviews.json @@ -2005,6 +2005,23 @@ "liveProof": "not-run", "keyPermissions": "Project/database/environment/storage changes and Edge Function deployment. Project selection and optional read-only configuration remain authoritative. Create a key with read and write permissions for these actions; Paperclip cannot increase an existing key\u2019s permissions." }, + { + "app": "superagent", + "method": "mcp-api-key", + "auth": "api_key", + "policy": "provider-key", + "requestedScopes": [], + "capability": "provider-controlled", + "supportedActions": "List, read, triage and permanently delete findings; start billable repository, application, agent and package red-team reports; run Contributor Trust scans and dependency update runs; score web pages, email, messages, files, skills, MCP repositories and packages; manage Applications, Agents, endpoint clients, groups, runtime guardrail rules and alerts; manage OpenTelemetry destinations; return structured agent reports.", + "evidence": [ + "https://www.superagent.sh/docs/mcp", + "https://www.superagent.sh/docs/reference/settings", + "https://www.superagent.sh/.well-known/oauth-protected-resource" + ], + "reviewedAt": "2026-10-06", + "liveProof": "not-run", + "keyPermissions": "Superagent organization keys are not scoped: a key reaches everything in its organization, including permanently deleting findings and starting billable report and triage work. Create a separate key for Paperclip so it can be revoked independently, and set billable and destructive actions to Ask first before agents run unattended." + }, { "app": "supermemory", "method": "mcp-oauth", diff --git a/packages/shared/src/app-definitions-url.test.ts b/packages/shared/src/app-definitions-url.test.ts index eec26f63dd3..153a509f844 100644 --- a/packages/shared/src/app-definitions-url.test.ts +++ b/packages/shared/src/app-definitions-url.test.ts @@ -12,6 +12,7 @@ describe("tool app gallery URL matching", () => { expect(getAppDefinitionForUrl("https://docs.google.com/spreadsheets/d/sheet_123/edit")?.slug).toBe("google-sheets"); expect(getAppDefinitionForUrl("https://gmailmcp.googleapis.com/mcp/v1")?.slug).toBe("gmail"); expect(getAppDefinitionForUrl("https://mcp.neon.tech/mcp")?.slug).toBe("neon"); + expect(getAppDefinitionForUrl("https://www.superagent.sh/mcp")?.slug).toBe("superagent"); }); it("returns null for invalid or unknown links", () => { diff --git a/packages/shared/src/app-definitions.generated.ts b/packages/shared/src/app-definitions.generated.ts index e29716053dd..6e729faa890 100644 --- a/packages/shared/src/app-definitions.generated.ts +++ b/packages/shared/src/app-definitions.generated.ts @@ -69,23 +69,24 @@ import a67 from "./app-definitions/zep.json" with { type: "json" }; import a68 from "./app-definitions/supermemory.json" with { type: "json" }; import a69 from "./app-definitions/honcho.json" with { type: "json" }; import a70 from "./app-definitions/neon.json" with { type: "json" }; -import a71 from "./app-definitions/gmail.json" with { type: "json" }; -import a72 from "./app-definitions/google-drive.json" with { type: "json" }; -import a73 from "./app-definitions/google-docs.json" with { type: "json" }; -import a74 from "./app-definitions/google-sheets.json" with { type: "json" }; -import a75 from "./app-definitions/google-slides.json" with { type: "json" }; -import a76 from "./app-definitions/google-calendar.json" with { type: "json" }; -import a77 from "./app-definitions/google-chat.json" with { type: "json" }; -import a78 from "./app-definitions/google-people.json" with { type: "json" }; -import a79 from "./app-definitions/google-workspace-search.json" with { type: "json" }; -import a80 from "./app-definitions/openai.json" with { type: "json" }; -import a81 from "./app-definitions/openrouter.json" with { type: "json" }; -import a82 from "./app-definitions/xai.json" with { type: "json" }; -import a83 from "./app-definitions/google.json" with { type: "json" }; -import a84 from "./app-definitions/bedrock.json" with { type: "json" }; -import a85 from "./app-definitions/responses-api.json" with { type: "json" }; -import a86 from "./app-definitions/messages-api.json" with { type: "json" }; -import a87 from "./app-definitions/chat-completions-api.json" with { type: "json" }; -import a88 from "./app-definitions/local.json" with { type: "json" }; +import a71 from "./app-definitions/superagent.json" with { type: "json" }; +import a72 from "./app-definitions/gmail.json" with { type: "json" }; +import a73 from "./app-definitions/google-drive.json" with { type: "json" }; +import a74 from "./app-definitions/google-docs.json" with { type: "json" }; +import a75 from "./app-definitions/google-sheets.json" with { type: "json" }; +import a76 from "./app-definitions/google-slides.json" with { type: "json" }; +import a77 from "./app-definitions/google-calendar.json" with { type: "json" }; +import a78 from "./app-definitions/google-chat.json" with { type: "json" }; +import a79 from "./app-definitions/google-people.json" with { type: "json" }; +import a80 from "./app-definitions/google-workspace-search.json" with { type: "json" }; +import a81 from "./app-definitions/openai.json" with { type: "json" }; +import a82 from "./app-definitions/openrouter.json" with { type: "json" }; +import a83 from "./app-definitions/xai.json" with { type: "json" }; +import a84 from "./app-definitions/google.json" with { type: "json" }; +import a85 from "./app-definitions/bedrock.json" with { type: "json" }; +import a86 from "./app-definitions/responses-api.json" with { type: "json" }; +import a87 from "./app-definitions/messages-api.json" with { type: "json" }; +import a88 from "./app-definitions/chat-completions-api.json" with { type: "json" }; +import a89 from "./app-definitions/local.json" with { type: "json" }; import type { AppDefinition } from "./types/app-definition.js"; -export const APP_DEFINITIONS=[a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23,a24,a25,a26,a27,a28,a29,a30,a31,a32,a33,a34,a35,a36,a37,a38,a39,a40,a41,a42,a43,a44,a45,a46,a47,a48,a49,a50,a51,a52,a53,a54,a55,a56,a57,a58,a59,a60,a61,a62,a63,a64,a65,a66,a67,a68,a69,a70,a71,a72,a73,a74,a75,a76,a77,a78,a79,a80,a81,a82,a83,a84,a85,a86,a87,a88] as AppDefinition[]; +export const APP_DEFINITIONS=[a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23,a24,a25,a26,a27,a28,a29,a30,a31,a32,a33,a34,a35,a36,a37,a38,a39,a40,a41,a42,a43,a44,a45,a46,a47,a48,a49,a50,a51,a52,a53,a54,a55,a56,a57,a58,a59,a60,a61,a62,a63,a64,a65,a66,a67,a68,a69,a70,a71,a72,a73,a74,a75,a76,a77,a78,a79,a80,a81,a82,a83,a84,a85,a86,a87,a88,a89] as AppDefinition[]; diff --git a/packages/shared/src/app-definitions.test.ts b/packages/shared/src/app-definitions.test.ts index cff22a088fa..24ac23bdb49 100644 --- a/packages/shared/src/app-definitions.test.ts +++ b/packages/shared/src/app-definitions.test.ts @@ -273,7 +273,7 @@ describe("AppDefinition catalog", () => { "google-workspace-search", ]), ); - expect(SELF_SERVE_MCP_CANDIDATES).toHaveLength(50); + expect(SELF_SERVE_MCP_CANDIDATES).toHaveLength(51); expect(BLOCKED_MCP_PROVIDERS.map((entry) => entry.slug)).toEqual([ "g2", "vercel", @@ -437,15 +437,15 @@ describe("AppDefinition catalog", () => { expect(channel("slack")?.guidanceMd).toContain("reactions"); expect(channel("slack")?.guidanceMd).toContain("direct messages"); }); - it("keeps a complete, unique, dated evidence ledger for all 53 researched MCP providers", () => { + it("keeps a complete, unique, dated evidence ledger for all 54 researched MCP providers", () => { // Ledger-wide date reflects the last full re-verification (2026-08-26); // later provider additions carry their own research evidence, but // bumping the shared date would overstate freshness for the other providers. expect(SELF_SERVE_MCP_RESEARCH.verifiedAt).toBe("2026-08-26"); - expect(SELF_SERVE_MCP_RESEARCH.entries).toHaveLength(53); + expect(SELF_SERVE_MCP_RESEARCH.entries).toHaveLength(54); expect( new Set(SELF_SERVE_MCP_RESEARCH.entries.map((entry) => entry.slug)), - ).toHaveProperty("size", 53); + ).toHaveProperty("size", 54); for (const entry of SELF_SERVE_MCP_RESEARCH.entries) { expect(new URL(entry.docsUrl).protocol).toBe("https:"); expect(new URL(entry.serverUrl).protocol).toBe("https:"); @@ -817,7 +817,7 @@ describe("AppDefinition catalog", () => { "ticktick", "xero", ]); - expect(APP_STORE_DEFINITIONS).toHaveLength(66); + expect(APP_STORE_DEFINITIONS).toHaveLength(67); const connectableSlugs = new Set( CONNECTABLE_APP_DEFINITIONS.map((entry) => entry.slug), ); @@ -1102,6 +1102,56 @@ describe("AppDefinition catalog", () => { expect(method.warnings?.length).toBe(2); } }); + it("connects Superagent's hosted server with an organization API key only", () => { + const superagent = APP_DEFINITIONS.find((app) => app.slug === "superagent")!; + expect(superagent).toMatchObject({ + name: "Superagent", + categories: ["developer"], + urlPatterns: ["https://www.superagent.sh/*"], + docsUrl: "https://www.superagent.sh/docs/mcp", + branding: { logoUrl: "/brands/apps/superagent.png" }, + }); + // The hosted server publishes no OAuth authorization-server metadata, so + // there is no browser sign-in method and no OAuth redirect constraint. + expect(superagent.redirectConstraints).toBeUndefined(); + expect(superagent.branding.darkLogoUrl).toBeUndefined(); + expect(APP_STORE_DEFINITIONS.some((app) => app.slug === "superagent")).toBe(true); + expect(superagent.methods).toHaveLength(1); + const [apiKey] = superagent.methods; + expect(apiKey).toMatchObject({ + key: "mcp-api-key", + transport: "mcp_remote", + auth: "api_key", + ownershipModes: ["customer"], + riskTier: "S4", + // The bare superagent.sh domain redirects, and some clients drop POST + // bodies on redirect, so the www host is pinned. + defaults: { serverUrl: "https://www.superagent.sh/mcp" }, + keyPlacement: { + location: "header", + name: "Authorization", + prefix: "Bearer ", + }, + consoleLinks: { + keys: "https://www.superagent.sh/app/settings#api-keys", + docs: "https://www.superagent.sh/docs/mcp", + }, + }); + expect(apiKey!.tenantFields ?? []).toEqual([]); + expect(apiKey!.credentialFields).toEqual([ + expect.objectContaining({ + key: "authorization", + type: "password", + placeholder: "sk_live_...", + secret: true, + required: true, + }), + ]); + expect(apiKey!.credentialFields?.[0]?.helperMd).toContain("not scoped"); + expect(apiKey!.warnings).toEqual([ + expect.stringContaining("consume organization credits"), + ]); + }); it("requires only reviewed provider or safety-boundary configuration on the default path", () => { const required = APP_DEFINITIONS.flatMap((app) => app.methods.flatMap((method) => diff --git a/packages/shared/src/app-definitions/superagent.json b/packages/shared/src/app-definitions/superagent.json new file mode 100644 index 00000000000..6e1a847cc0c --- /dev/null +++ b/packages/shared/src/app-definitions/superagent.json @@ -0,0 +1,57 @@ +{ + "schemaVersion": 1, + "slug": "superagent", + "name": "Superagent", + "description": "Review security findings, start red-team reports, and score content and packages before agents trust them.", + "categories": [ + "developer" + ], + "featured": false, + "branding": { + "logoUrl": "/brands/apps/superagent.png" + }, + "urlPatterns": [ + "https://www.superagent.sh/*" + ], + "docsUrl": "https://www.superagent.sh/docs/mcp", + "methods": [ + { + "key": "mcp-api-key", + "transport": "mcp_remote", + "auth": "api_key", + "ownershipModes": [ + "customer" + ], + "whenToUse": "Connect with a Superagent organization API key.", + "defaults": { + "serverUrl": "https://www.superagent.sh/mcp" + }, + "guidanceMd": "Open Superagent Settings → API keys, create a separate key for Paperclip, and paste it below.", + "riskTier": "S4", + "label": "Use an API key", + "credentialFields": [ + { + "key": "authorization", + "label": "Superagent API key", + "type": "password", + "required": true, + "placeholder": "sk_live_...", + "secret": true, + "helperMd": "Superagent organization keys are not scoped: a key reaches everything in its organization, including permanently deleting findings and starting billable report and triage work. Create a separate key for Paperclip so it can be revoked independently, and set billable and destructive actions to Ask first before agents run unattended." + } + ], + "keyPlacement": { + "location": "header", + "name": "Authorization", + "prefix": "Bearer " + }, + "consoleLinks": { + "keys": "https://www.superagent.sh/app/settings#api-keys", + "docs": "https://www.superagent.sh/docs/mcp" + }, + "warnings": [ + "Superagent report and triage tools consume organization credits, and deleting a finding is permanent. Set those actions to Ask first before agents run unattended." + ] + } + ] +} diff --git a/packages/shared/src/self-serve-mcp-research.json b/packages/shared/src/self-serve-mcp-research.json index ff278480b80..a60fefce38a 100644 --- a/packages/shared/src/self-serve-mcp-research.json +++ b/packages/shared/src/self-serve-mcp-research.json @@ -58,6 +58,7 @@ {"slug": "zep", "name": "Zep", "wave": 3, "status": "self_serve", "docsUrl": "https://help.getzep.com/memory-mcp-server", "serverUrl": "https://api.getzep.com/mcp", "authMode": "dcr_cimd", "prerequisite": "A Zep project with Memory MCP enabled, available MCP seats, and Google Workspace or enterprise OIDC configured by its administrator. Project API keys do not authenticate Memory MCP.", "riskTier": "S3"}, {"slug": "supermemory", "name": "Supermemory", "wave": 3, "status": "self_serve", "docsUrl": "https://supermemory.ai/docs/supermemory-mcp/mcp", "serverUrl": "https://mcp.supermemory.ai/mcp", "authMode": "dcr", "prerequisite": "Sign in to Supermemory and select the spaces this connection may access. The hosted MCP uses OAuth, not a developer API key.", "riskTier": "S3"}, {"slug": "honcho", "name": "Honcho", "wave": 3, "status": "self_serve", "docsUrl": "https://honcho.dev/docs/v3/guides/integrations/mcp", "serverUrl": "https://mcp.honcho.dev", "authMode": "api_key", "prerequisite": "An API key from the Honcho dashboard. Memory is stored in your Honcho account; select workspace and peer identifiers when calling tools.", "riskTier": "S3"}, - { "slug": "neon", "name": "Neon", "wave": 4, "status": "self_serve", "docsUrl": "https://neon.com/docs/ai/neon-mcp-server", "serverUrl": "https://mcp.neon.tech/mcp", "authMode": "dcr_or_api_key", "prerequisite": "A Neon account. The hosted server grants broad project and database management, so use a development project and review write actions before connecting production data.", "riskTier": "S4" } + { "slug": "neon", "name": "Neon", "wave": 4, "status": "self_serve", "docsUrl": "https://neon.com/docs/ai/neon-mcp-server", "serverUrl": "https://mcp.neon.tech/mcp", "authMode": "dcr_or_api_key", "prerequisite": "A Neon account. The hosted server grants broad project and database management, so use a development project and review write actions before connecting production data.", "riskTier": "S4" }, + { "slug": "superagent", "name": "Superagent", "wave": 4, "status": "self_serve", "docsUrl": "https://www.superagent.sh/docs/mcp", "serverUrl": "https://www.superagent.sh/mcp", "authMode": "api_key", "prerequisite": "Superagent report and triage tools consume organization credits, and deleting a finding is permanent. Set those actions to Ask first before agents run unattended.", "riskTier": "S4" } ] } diff --git a/scripts/ingest-app-definitions.mjs b/scripts/ingest-app-definitions.mjs index 65cff958116..ec81b7ea61e 100644 --- a/scripts/ingest-app-definitions.mjs +++ b/scripts/ingest-app-definitions.mjs @@ -1043,6 +1043,7 @@ const categoryBySlug = { sentry: "developer", similarweb: "analytics", stripe: "commerce", + superagent: "developer", supabase: "data", "ticket-tailor": "commerce", ticktick: "productivity", @@ -1143,6 +1144,7 @@ const apiKeySpec = { prefix: "Bearer ", placeholder: "sbp_...", }, + superagent: { name: "Authorization", prefix: "Bearer ", placeholder: "sk_live_..." }, youcom: { name: "Authorization", prefix: "Bearer ", @@ -1221,6 +1223,16 @@ const specialMethodsFor = (entry) => { }] } : {}), }), ]; + // Superagent's hosted server advertises protected-resource metadata, but its + // authorization server publishes no OAuth metadata, so organization API keys + // are the only working credential. + if (entry.slug === "superagent") return [ + apiKeyMethodFor(entry, "mcp-api-key", entry.serverUrl, { + whenToUse: "Connect with a Superagent organization API key.", + guidanceMd: "Open Superagent Settings → API keys, create a separate key for Paperclip, and paste it below.", + consoleLinks: { keys: "https://www.superagent.sh/app/settings#api-keys", docs: entry.docsUrl }, + }), + ]; if (entry.slug === "zep") return [oauthMethodFor(entry, "mcp-oauth", entry.serverUrl, { grantKinds: ["user"], defaults: { serverUrl: entry.serverUrl, scopesHint: ["graph:read", "graph:write"] }, @@ -1665,7 +1677,7 @@ for (const entry of researchManifest.entries) { schemaVersion: 1, slug: entry.slug, name: entry.name, - description: ({ neon: "Manage Postgres projects and branches, run SQL, and inspect schemas in Neon.", mem0: "Remember preferences, conversations, events, and agent state.", zep: "Retrieve temporal graph memory and authorized business context.", supermemory: "Search and save shared memories, documents, and profiles.", honcho: "Remember conversations and retrieve context about peers." })[entry.slug] ?? (entry.slug === "fireflies" + description: ({ neon: "Manage Postgres projects and branches, run SQL, and inspect schemas in Neon.", superagent: "Review security findings, start red-team reports, and score content and packages before agents trust them.", mem0: "Remember preferences, conversations, events, and agent state.", zep: "Retrieve temporal graph memory and authorized business context.", supermemory: "Search and save shared memories, documents, and profiles.", honcho: "Remember conversations and retrieve context about peers." })[entry.slug] ?? (entry.slug === "fireflies" ? "Search meeting transcripts, read summaries and action items, and connect meeting-ready routines." : `Connect ${entry.name}'s provider-hosted MCP server.`), categories: [categoryBySlug[entry.slug] ?? "other"], diff --git a/server/src/__tests__/tool-access-service.test.ts b/server/src/__tests__/tool-access-service.test.ts index ac7f1c845d7..21f60559df0 100644 --- a/server/src/__tests__/tool-access-service.test.ts +++ b/server/src/__tests__/tool-access-service.test.ts @@ -5183,7 +5183,7 @@ describeEmbeddedPostgres("tool access service", () => { "local", ]), ); - expect(res.body.apps).toHaveLength(66); + expect(res.body.apps).toHaveLength(67); for (const slug of ["openrouter", "bedrock", "responses-api", "messages-api", "chat-completions-api", "local"]) { expect(res.body.apps.find((app: { slug: string }) => app.slug === slug).tags).toContain("model-provider"); } @@ -6309,6 +6309,52 @@ describeEmbeddedPostgres("tool access service", () => { ).rejects.toMatchObject({ status: 400 }); }); + it("connects Superagent with an organization API key sent as a bearer header", async () => { + const company = await createCompany(db); + const service = createTestToolAccessService(db); + const fetchMock = mockToolsList([ + { name: "list_findings", annotations: { readOnlyHint: true } }, + { name: "create_repository_report" }, + { name: "delete_finding", annotations: { destructiveHint: true } }, + ]); + + const result = await service.connectGalleryApp( + company.id, + { + galleryKey: "superagent", + credentialValues: { "credentials.authorization": "sk_live_test-secret" }, + }, + { actorType: "user", actorId: "board" }, + ); + + expect(fetchMock).toHaveBeenCalledWith( + "https://www.superagent.sh/mcp", + expect.objectContaining({ + headers: expect.objectContaining({ + Authorization: "Bearer sk_live_test-secret", + }), + }), + ); + expect(result.connection).toMatchObject({ + authKind: "api_key", + config: { + url: "https://www.superagent.sh/mcp", + sourceTemplateKey: "superagent", + connectionMethodKey: "mcp-api-key", + }, + }); + expect(JSON.stringify(result.connection.config)).not.toContain( + "sk_live_test-secret", + ); + expect(result.catalog).toEqual( + expect.arrayContaining([ + expect.objectContaining({ toolName: "list_findings", riskLevel: "read", status: "active" }), + expect.objectContaining({ toolName: "create_repository_report", riskLevel: "write", status: "active" }), + expect.objectContaining({ toolName: "delete_finding", riskLevel: "destructive", status: "active" }), + ]), + ); + }); + it("projects Neon's optional project pin and read-only mode into the hosted server URL", async () => { const company = await createCompany(db); const service = createTestToolAccessService(db); @@ -19191,6 +19237,30 @@ describe("classifyRisk", () => { expect(classifyRisk({ name: "fireflies_share_meeting", annotations: { destructiveHint: true } }, "fireflies")).toBe("destructive"); }); + it("classifies Superagent mutations whose names read like reads as writes", () => { + for (const name of ["list_findings", "get_finding", "get_context_score", "list_agent_alerts"]) + expect(classifyRisk({ name }, "superagent")).toBe("read"); + for (const name of [ + "triage_finding", + "restore_agent_builtin_rule", + "scan_package", + "discover_application_inventory", + "trigger_dependency_updates", + "test_telemetry_endpoint", + "create_repository_report", + "set_agent_builtin_rule_mode", + ]) + expect(classifyRisk({ name }, "superagent")).toBe("write"); + for (const name of ["delete_finding", "delete_agent_rule", "revoke_agent_client"]) + expect(classifyRisk({ name }, "superagent")).toBe("destructive"); + // A provider write hint wins over a read-looking name; a read-only hint + // opts a tool outside list/get into reads. + expect(classifyRisk({ name: "get_finding", annotations: { readOnlyHint: false } }, "superagent")).toBe("write"); + expect(classifyRisk({ name: "validate_agent_rule", annotations: { readOnlyHint: true } }, "superagent")).toBe("read"); + // Without the provider rule, the generic classifier treats these as reads. + expect(classifyRisk({ name: "triage_finding" })).toBe("read"); + }); + it("classifies Enterpret run_graph_query as write despite readOnlyHint", () => { expect( classifyRisk( diff --git a/server/src/services/tool-access.ts b/server/src/services/tool-access.ts index 24229ef17f4..86475ecf27d 100644 --- a/server/src/services/tool-access.ts +++ b/server/src/services/tool-access.ts @@ -2406,6 +2406,15 @@ export function classifyRisk( return "write"; if (sourceTemplateKey === "posthog" && normalizedToolName === "exec") return "destructive"; + // Superagent mirrors its REST API, and several mutations use verbs the + // generic classifier reads as reads: billable triage_finding, scans, + // restore_agent_builtin_rule, and credential-revoking revoke_agent_client. + // Only list/get tools and tools the provider marks read-only are reads. + if (sourceTemplateKey === "superagent") { + if (verbMatches(tool.name, "delete|remove|destroy|revoke")) return "destructive"; + if (annotations.readOnlyHint === false || annotations.writeHint === true) return "write"; + return /^(list|get)-/.test(normalizedToolName) || annotations.readOnlyHint === true ? "read" : "write"; + } if ( sourceTemplateKey === "shopify" && SHOPIFY_DESTRUCTIVE_TOOLS.has(normalizedToolName) diff --git a/ui/public/brands/apps/manifest.json b/ui/public/brands/apps/manifest.json index 1355cd95545..48771802c04 100644 --- a/ui/public/brands/apps/manifest.json +++ b/ui/public/brands/apps/manifest.json @@ -409,6 +409,12 @@ "catalogVisible": true, "localAsset": "/brands/apps/supabase.svg" }, + { + "slug": "superagent", + "provider": "Superagent", + "catalogVisible": true, + "localAsset": "/brands/apps/superagent.png" + }, { "slug": "telegram", "provider": "Telegram", diff --git a/ui/public/brands/apps/superagent.png b/ui/public/brands/apps/superagent.png new file mode 100644 index 0000000000000000000000000000000000000000..f8e3b7b45762b8e2fae064521125a525b7baccbf GIT binary patch literal 96301 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%0Ar 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 UY&BL-8V2}$`=TgSBViQsKmX0D;s5{u literal 0 HcmV?d00001 diff --git a/ui/src/lib/app-gallery-copy.ts b/ui/src/lib/app-gallery-copy.ts index cfb964f727d..33ae068ac07 100644 --- a/ui/src/lib/app-gallery-copy.ts +++ b/ui/src/lib/app-gallery-copy.ts @@ -78,6 +78,10 @@ const APP_COPY: Record = { tagline: "Manage Postgres projects, branches, and queries.", short: "Sign in with Neon. Project pinning and read-only mode are optional.", }, + superagent: { + tagline: "Review security findings and run red-team checks.", + short: "Connect with a Superagent API key. Billable and destructive tools stay under action policies.", + }, linear: { tagline: "Create, update and read tickets.", short: "Create, update and read tickets.", diff --git a/ui/src/pages/apps/AppsConnect.test.tsx b/ui/src/pages/apps/AppsConnect.test.tsx index 4d8b0dd1cc2..eea8a1fc6fc 100644 --- a/ui/src/pages/apps/AppsConnect.test.tsx +++ b/ui/src/pages/apps/AppsConnect.test.tsx @@ -64,6 +64,7 @@ const ASANA_MANAGED = { const BOX = CONNECTABLE_APP_DEFINITIONS.find((app) => app.slug === "box")!; const POSTHOG = CONNECTABLE_APP_DEFINITIONS.find((app) => app.slug === "posthog")!; const NEON = CONNECTABLE_APP_DEFINITIONS.find((app) => app.slug === "neon")!; +const SUPERAGENT = CONNECTABLE_APP_DEFINITIONS.find((app) => app.slug === "superagent")!; const POSTMAN = CONNECTABLE_APP_DEFINITIONS.find((app) => app.slug === "postman")!; const SHOPIFY = CONNECTABLE_APP_DEFINITIONS.find((app) => app.slug === "shopify")!; const GOOGLE_SHEETS = CONNECTABLE_APP_DEFINITIONS.find((app) => app.slug === "google-sheets")!; @@ -2024,6 +2025,37 @@ describe("AppsConnect — Connect with a link (M4 frame)", () => { expect(container.textContent).not.toContain("Pick the app you want your agents to use."); }); + it("connects Superagent with only an organization API key", async () => { + mockParams.appKey = "superagent"; + listGalleryMock.mockResolvedValueOnce({ apps: [SUPERAGENT] }); + await render(); + + expect(radioContaining("Sign in with")).toBeFalsy(); + // The Ask-first advice must be visible on the key form, which renders the + // credential helper text rather than method warnings. + expect(container.textContent).toContain("set billable and destructive actions to Ask first"); + const keyInput = container.querySelector('input[type="password"]'); + expect(keyInput).toBeTruthy(); + expect(buttonByText("Connect")?.disabled).toBe(true); + + await act(async () => { + setInputValue(keyInput!, "sk_live_test-key"); + }); + await flushReact(); + const submit = buttonByText("Connect"); + expect(submit?.disabled).toBe(false); + await act(async () => { + submit?.dispatchEvent(new MouseEvent("click", { bubbles: true })); + }); + await flushReact(); + + expect(connectAppMock).toHaveBeenCalledWith("company-1", expect.objectContaining({ + galleryKey: "superagent", + connectionMethodKey: "mcp-api-key", + credentialValues: { "credentials.authorization": "sk_live_test-key" }, + })); + }); + it("enables Neon's Connect button only once the API key is entered, with pin and read-only optional", async () => { mockParams.appKey = "neon"; listGalleryMock.mockResolvedValueOnce({ apps: [NEON] });