feat: add redis-backed shadow mcp access API#2763
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
🦋 Changeset detectedLatest commit: d1f9e60 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
b086721 to
abfd621
Compare
b4a2811 to
8f1501b
Compare
There was a problem hiding this comment.
Claude Code Review
This repository is configured for manual code reviews. Comment @claude review to trigger a review and subscribe this PR to future pushes, or @claude review once for a one-time review.
Tip: disable this comment in your organization's Code Review settings.
abfd621 to
1b0805e
Compare
8f1501b to
b619982
Compare
1b0805e to
bc5a5f1
Compare
b619982 to
3c1bdba
Compare
bc5a5f1 to
d456533
Compare
3c1bdba to
8f8b84d
Compare
8f8b84d to
7f980c0
Compare
b3c104d to
2903f2e
Compare
5ea662b to
02a9375
Compare
There was a problem hiding this comment.
2 issues found across 92 files
Partial review: This PR has more than 50 files, so cubic reviewed the highest-priority files first. During the trial, paid plans get a higher file limit.
You can try an ultrareview to bypass the file limit, comment @cubic-dev-ai ultrareview. Learn more.
Fix all with cubic | Re-trigger cubic
df986c6 to
c27ea56
Compare
c27ea56 to
d1f9e60
Compare
Summary
This PR adds the Shadow MCP access management API, with request/rule persistence backed by the temporary generic Redis access-control store instead of database tables.
The public API is still Shadow MCP-specific because that is the alpha product surface, but the internal backing model is generic:
accesscontrol.Storeowns access requests and access rulesresource_type = "shadow_mcp"matchvalueThe API provides:
This PR also moves the risk approval endpoints onto the new access-rule store and restores the AI integrations service mount that was dropped during the stack work. It intentionally does not add access-control database tables or migrations.
Verification
mise run test:server ./internal/aiintegrationspassed, 14 testsmise run test:server ./internal/risk ./internal/shadowmcp -run 'TestApproveShadowMCP|TestListShadowMCPApprovals|TestRevokeShadowMCPApproval|TestAddAndListShadowMCPApprovals|TestIsShadowMCPApproved' -count=1passed, 25 testsrg -n "shadow-mcp-allow|AddShadowMCPApproval|RemoveShadowMCPApproval|IsShadowMCPApproved|func CanonicalizeMatch\(" server/internal client/dashboardreturned no matchesmise run test:server ./internal/accesscontrol ./internal/access ./internal/risk ./internal/shadowmcp ./internal/hooks -count=1passed, 458 testsmise run lint:serverpassedpnpm --dir client/dashboard type-checkpassedpnpm --dir client/dashboard exec vitest run src/components/access/ShadowMCPAccessContent.test.tsxpassed, 3 testsgit diff --checkpassedStack
https://linear.app/speakeasy/issue/AGE-2585/feat-add-redis-backed-shadow-mcp-access-api