Files
PaperClipAI/ui/public/brands/apps/parallel.svg
T
DottaandPaperclip 2b688a8fe3 feat(connections): add verified MCP providers and setup fixes (#15621)
## Thinking Path

> - Paperclip is the open source app people use to manage AI agents for
work.
> - Apps give agents governed access to external tools.
> - Several provider MCP servers lacked a supported catalog entry or
failed during setup.
> - Real browser tests identified specific registration, session, and
form defects.
> - This pull request adds seven catalog entries and fixes the shared
paths used by eleven verified providers.
> - Users can connect these providers through the existing Apps flow and
control each action.

## Linked Issues or Issue Description

**What existing behavior does this improve?**

The Apps catalog and remote MCP setup, discovery, and action tester.

**Subsystem affected**

Shared app definitions, the server tool services, and the Apps UI.

**Current behavior**

Seven providers lack a catalog entry. Airtable can select an advertised
client-metadata flow that fails. Calendly rejects the registration name.
Tavily needs an initialized session before a call. Firecrawl exposes
invalid defaults for optional nested form objects. HTTPS setup can
display a callback that differs from the server callback.

**Proposed behavior**

Add Calendly, Exa, Firecrawl, GSC Wizard, Parallel Search, Tavily, and
Windsor.ai. Preserve Airtable, Linear, Make, and PostHog. Use reviewed
provider options through the shared MCP and OAuth paths. Display the
callback supplied by the server. Omit untouched optional object inputs.

**Reason and benefit**

Eleven providers passed bounded reads through the real Paperclip browser
action tester. This PR includes that verified set and its required
shared fixes. Unfinished providers remain outside this change. AgentMail
keeps its existing integration.

**Breaking changes**

No database migration. Existing OAuth credentials and action policies
keep their ownership and access rules. Airtable's reviewed method
re-registers a retained client-metadata binding through DCR. Tavily's
reviewed method initializes sessions before dispatch. The existing
customer, managed, and Vercel OAuth gateway paths now refresh on
upstream 401 and return `oauth_refreshed_retry_required` (409),
requiring an explicit caller retry. They do not replay the rejected call
automatically; the next invocation initializes a fresh credential-scoped
session when required.

Related catalog work: #15545. This branch preserves current master
catalog entries and does not add another Google Workspace integration.
Open and closed provider PRs and public MCP issues were searched. No
duplicate for this verified set was found. The change extends the
shipped Connected Apps roadmap item.

## What Changed

- Add seven catalog entries with official provider branding and reviewed
permissions.
- Update Airtable, Linear, and Make metadata and show Make in Apps.
- Add authoritative provider source overrides that use the existing
generation and review checks.
- Add the reviewed Airtable DCR option and compatible Calendly
registration names.
- Initialize Tavily sessions before discovery and calls, including
retained connections. Keep credential-scoped session caching and single
call dispatch.
- Use the server's callback URL in the OAuth setup UI.
- Omit untouched optional object defaults; keep supplied empty strings,
false, zero, and object values intact in the action tester, with strict
required-child validation.
- Require an explicit retry after OAuth refresh instead of replaying a
tools/call with missing session headers.
- Record all eleven successful reads, write policies, auth-method
limits, and qualification caveats. Omit credentials and private account
data.
- Find chat connector cards through catalog search in browser tests, so
pagination does not hide Slack or other later entries.

## Verification

- Real browser qualification: eleven bounded reads passed. Catalog
refresh and reload proof are recorded in
`doc/connections/verified-mcp-qualification-2026-10-08.md`.
- Provider writes and actual agent-adapter sessions were not run.
Alternative documented auth methods and expiry refresh remain
unqualified.
- `pnpm -r typecheck`: passed.
- `pnpm build`: passed.
- Focused shared/catalog tests: 41 passed. Source override tests: 3
passed. Catalog regeneration fixture suite: 9 passed. Latest form
regression suites: 31 passed. Gateway suite: 38 passed. Other focused UI
suites passed before these last fixes.
- UI token gates and both token sync checks: passed.
- The catalog regeneration fixture includes the authoritative provider
overrides; its full suite passes. The focused OAuth socket case passed
on isolated rerun.
- Complete local UI suite: 7,866 passed. CLI suite: 511 passed, 6
skipped. Complete shared suite: 892 passed.
- The unchanged AgentMail/ClickUp discovery fallback suite passes all 45
cases. An OpenAI login test passed on isolated rerun.
- Local broad database coverage is limited by macOS PostgreSQL
shared-memory exhaustion (`shmget: No space left on device`, not disk
space). The broad run was interrupted after diagnosis; no host settings
or other running services were changed.
- CI found that the Slack browser test assumed its catalog card was on
the first page. The test now uses catalog search; the Slack case passes
locally. Adjacent GitHub and iMessage cases could not start locally
because embedded PostgreSQL initialization failed before browser
assertions.
- Final commit
[`febe4520e`](https://github.com/paperclipai/paperclip/commit/febe4520e13d4b3a4121eafc3d22540c2b11379d):
all 54 checks passed, with none pending or failed. [CI
run](https://github.com/paperclipai/paperclip/actions/runs/37847182065)
passed typecheck, build, all general and serialized test suites, all
eight browser shards, runner checks, canary dry run, and the aggregate
verification gate.
- Greptile reviewed that exact final commit at 2026-10-08 21:33 UTC and
returned 5/5 with no outstanding findings or unresolved threads.
- PR UI preview against the existing local test server: Calendly
catalog/setup observed; Firecrawl read passed after expanding More
options with nested optional inputs untouched. This retest proves
frontend behavior, not the revised OAuth backend against a live
provider.

<details>
<summary>Browser evidence</summary>

![Calendly
catalog](https://raw.githubusercontent.com/paperclipai/paperclip/codex/verified-mcp-connectors/doc/connections/verified-mcp-qualification-2026-10-08/calendly-catalog.jpg)

![Calendly
setup](https://raw.githubusercontent.com/paperclipai/paperclip/codex/verified-mcp-connectors/doc/connections/verified-mcp-qualification-2026-10-08/calendly-setup.jpg)

![Firecrawl
read](https://raw.githubusercontent.com/paperclipai/paperclip/codex/verified-mcp-connectors/doc/connections/verified-mcp-qualification-2026-10-08/firecrawl-read.jpg)

</details>

## Risks

- Provider registration and consent behavior can change. Airtable's DCR
option is explicit and keeps the existing issuer, resource, redirect,
and PKCE checks.
- Tavily uses initialized sessions without automatic call retries. After
a successful OAuth refresh following 401, callers now receive a
retry-required result. A later explicit retry can still require
reauthorization if the provider rejects the refreshed token. Provider
writes are not live-qualified.
- Optional object cleanup affects the shared action tester. Regression
tests cover absent objects, required children, defaults, and populated
values.
- GSC Wizard's underlying Google data scopes and Google flow completion
were not independently verified. Its account reported paid/trial
metadata of unknown origin. No purchase was performed.
- No database migration, new AgentMail integration, or change to
existing action grants is included.

## Model Used

OpenAI GPT-6 through Codex assisted with implementation, research, tool
use, and code execution. The root backend model ID and context window
are not exposed in this session. The cheaper subagents used OpenAI
`gpt-6-luna`. No model context size is inferred.

## 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
- [ ] I have run tests locally and they pass — targeted checks and
complete UI/CLI/shared suites passed; the broad local database run was
blocked by the macOS PostgreSQL startup limitation documented above. The
full database/workspace suite passed in CI.
- [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

---------

Co-authored-by: Paperclip <noreply@paperclip.ing>
2026-10-09 08:10:46 -05:00

12 lines
3.1 KiB
XML

<svg width="270" height="270" viewBox="0 0 270 270" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="270" height="270" rx="44.6943" fill="#1D1C1A"/>
<path d="M214.682 117.391H170.297C170.415 118.089 170.512 118.798 170.609 119.507H100.002C99.8728 120.442 99.7433 121.387 99.6355 122.322H54.9801C54.7643 123.719 54.5702 125.126 54.4192 126.555H99.2256C99.1501 127.49 99.0961 128.436 99.0422 129.37H171.569C171.602 130.069 171.634 130.778 171.656 131.487H216.408V129.231C216.117 125.191 215.545 121.237 214.682 117.391Z" fill="#FCFBFA"/>
<path d="M171.569 140.642H99.0422C99.0854 141.587 99.1501 142.522 99.2256 143.457H54.4192C54.5702 144.875 54.7536 146.283 54.9801 147.69H99.6355C99.7433 148.636 99.862 149.57 100.002 150.505H170.609C170.512 151.214 170.405 151.913 170.297 152.622H214.682C215.545 148.775 216.117 144.821 216.408 140.782V138.525H171.656C171.634 139.235 171.602 139.933 171.569 140.642Z" fill="#FCFBFA"/>
<path d="M168.377 161.785H102.214C102.451 162.73 102.71 163.665 102.969 164.6H59.586C60.1469 166.028 60.7509 167.436 61.3873 168.833H104.252C104.565 169.778 104.878 170.713 105.212 171.648H165.357C165.098 172.357 164.839 173.055 164.569 173.764H206.711C209.16 169.305 211.188 164.589 212.763 159.668H168.873C168.711 160.377 168.539 161.075 168.366 161.785H168.377Z" fill="#FCFBFA"/>
<path d="M160.6 182.929H110.001C110.465 183.875 110.95 184.82 111.446 185.744H71.9254C73.1011 187.195 74.3199 188.602 75.5819 189.977H113.798C114.359 190.923 114.93 191.868 115.513 192.792H155.099C154.656 193.501 154.203 194.21 153.74 194.909H190.057C194.685 190.708 198.816 185.97 202.375 180.812H161.614C161.279 181.522 160.956 182.231 160.611 182.929H160.6Z" fill="#FCFBFA"/>
<path d="M146.966 204.063H123.635C124.422 205.019 125.221 205.954 126.04 206.878H97.8126C108.966 212.658 121.629 215.967 135.058 216C135.144 216 135.22 216 135.295 216C135.371 216 135.457 216 135.532 216C152.424 215.946 168.107 210.767 181.083 201.936H148.649C148.088 202.645 147.527 203.354 146.955 204.052L146.966 204.063Z" fill="#FCFBFA"/>
<path d="M123.635 65.9475H146.966C147.538 66.6458 148.099 67.3549 148.66 68.0641H181.094C168.107 59.2324 152.435 54.0537 135.543 54C135.457 54 135.382 54 135.306 54C135.231 54 135.144 54 135.069 54C121.629 54.043 108.977 57.3414 97.8236 63.1218H126.051C125.232 64.0458 124.433 64.9912 123.646 65.9367L123.635 65.9475Z" fill="#FCFBFA"/>
<path d="M110.001 87.093H160.6C160.945 87.7913 161.28 88.5005 161.603 89.2096H202.365C198.805 84.0524 194.674 79.3142 190.047 75.1133H153.729C154.193 75.8116 154.646 76.5208 155.088 77.2299H115.502C114.92 78.1646 114.348 79.0994 113.787 80.0448H75.5714C74.2986 81.4093 73.0797 82.8168 71.9148 84.278H111.436C110.94 85.2128 110.465 86.1475 109.991 87.093H110.001Z" fill="#FCFBFA"/>
<path d="M102.224 108.226H168.388C168.56 108.924 168.733 109.633 168.895 110.342H212.784C211.209 105.422 209.181 100.705 206.733 96.2461H164.591C164.86 96.9445 165.119 97.6536 165.378 98.3627H105.234C104.899 99.2974 104.576 100.232 104.274 101.178H61.4088C60.7724 102.564 60.1683 103.971 59.6075 105.411H102.99C102.731 106.346 102.472 107.28 102.235 108.226H102.224Z" fill="#FCFBFA"/>
</svg>