Review: E2E verify + claude.ai integration for notion-mcp-remote
Verdict: NEEDS_REFINEMENT
Note: Minor scope gap — one missing backing note for the
arch:tailscale-funnel label. Everything else is in order. The ticket itself is well-scoped as a verification-only validation pass for the claude-ai-connect user story.Template Completeness
Issue type: Feature (Type header = "Feature"). Routed against
template-issue-feature.- [x] Type — "Feature"
- [x] Lineage — standalone E2E verification ticket, proves Milestone M1
- [x] Repo —
forgejo_admin/notion-mcp-remote - [x] User Story — inline, matches
story-notion-mcp-remote-claude-ai-connect - [x] Context — explains dependency chain + references
sop-validation - [x] File Targets — explicitly "No repo file changes; verification + validation-note creation only" (appropriate for this ticket type)
- [x] Acceptance Criteria — 11 checks across Platform / E2E / Recordkeeping
- [x] Test Expectations — present with concrete pass conditions
- [x] Constraints — present, including "do not begin until all upstream tickets closed"
- [x] Checklist — present
- [x] Related — links to project, user story, ops-deploy-gitops story, sop-validation
Traceability
- [x]
story:claude-ai-connectlabel — story "Connect Notion to claude.ai" - [x] story note verified —
story-notion-mcp-remote-claude-ai-connectexists and is listed in theproject-notion-mcp-remoteuser-stories section - [x]
arch:tailscale-funnellabel present on board item - [ ] arch note MISSING — no
arch-tailscale-funnelnote exists in pal-e-docs. Tailscale Funnel behavior is covered piecewise inarch-deployment-notion-mcp-remote,arch-deployment-gdocs-daily-mcp-remote,arch-deployment-westside-mcp, andhost-inventory-archbox, but there is no shared architecture note backing thearch:tailscale-funnellabel. This is a recurring gap — the same finding was raised onreview-788-2026-04-03(playme2k funnel + kustomize). [SCOPE] Create sharedarch-tailscale-funnelnote documenting the Funnel proxy pattern (proxy pod intailscalenamespace,*.tail5b443a.ts.nethostnames, TLS termination, ingress handoff) so all services using that label link to one canonical diagram. - [x]
type:featurelabel — appropriate (new capability, not a bug fix) - [x] Forgejo issue — forgejo_admin/notion-mcp-remote#9 — open, body matches template
File Targets
Not applicable — ticket is verification-only. Deliverables are a validation note (per
sop-validation) and a milestone mark on the project page Status section. This is the correct shape for the claude-ai-connect validation ticket.Repo Placement
OK. The Forgejo issue is filed on
forgejo_admin/notion-mcp-remote, which is the correct owning service for the E2E validation. The validation note will live in pal-e-docs, and the milestone mark lands on project-notion-mcp-remote — both are separate surfaces, not file changes in the repo.Dependencies
Seven prerequisite tickets must close before this ticket executes. All are currently open / in backlog:
- pal-e-platform#296 — tofu apply to provision notion-mcp-remote (open)
- pal-e-services#57 — add notion-mcp-remote to var.services (open)
- pal-e-deployments#132 — add overlays/notion-mcp-remote/prod kustomize overlay (open)
- notion-mcp-remote#5 — switch Woodpecker image push to internal Harbor URL (open)
- notion-mcp-remote#6 — register public Notion OAuth integration for remote proxy (open)
- notion-mcp-remote#7 — provision app secrets in notion-mcp-remote namespace (open)
- notion-mcp-remote#8 — activate repo in Woodpecker + add Harbor push secrets (open)
Dependencies are documented correctly in the Constraints section ("Do not begin this ticket until all upstream tickets closed"). The review->todo gate on backlog is fine for now; execution must not start until upstream work closes. No refinement needed on dependency documentation itself.
Acceptance Criteria
AC are testable with concrete commands and tool calls:
- Platform checks (6): Woodpecker pipeline status, ArgoCD sync+health, pod Running,
/health200,/.well-known/oauth-authorization-serverJSON, Prometheus scrape. All verifiable viamcp__woodpecker__list_pipelines,kubectl,curl, and Prometheus UI. Thenotion_mcp_remote_upmetric referenced in AC is confirmed present inserver.py. - E2E checks (4): claude.ai accepts URL, Notion OAuth consent < 60s, search tool returns real results, second tool call (get_page) succeeds. Matches all 6 AC of the user story.
- Recordkeeping (3): validation note per
sop-validation, Milestone M1 marked on project page Status, all prior tickets closed.
One small tightening opportunity — [BODY] The AC currently say "
curl https://notion-mcp-remote.tail5b443a.ts.net/.well-known/oauth-authorization-server returns valid JSON with the expected issuer, authorization_endpoint, token_endpoint." Consider also asserting the registration_endpoint is present since Dynamic Client Registration is how claude.ai onboards. Minor; not a blocker.Blast Radius
Small. Ticket is observational — no config changes, no code merges. Risk is only that a failing check here exposes a real defect in upstream tickets (which is the point). If any check fails, the validation verdict is PARTIAL/FAIL and the appropriate upstream ticket gets reopened, not this one.
Decomposition Assessment
AC count is 11, which exceeds the default 5-AC threshold — but this is the explicit, intended shape of a validation ticket: one pass that exercises every AC of the user story, per
sop-validation. Estimated time is 15–20 minutes of browser + kubectl + curl work, not 5, but decomposing a validation ticket defeats its purpose (it would split cross-cutting concerns back into per-layer checks that already belong on the upstream tickets). Points=2 reflects this correctly.No decomposition recommended.
Recommendation
Verdict: NEEDS_REFINEMENT — one concrete gap to close before this moves to todo:
[SCOPE]Create shared architecture notearch-tailscale-funneldocumenting the Funnel proxy pattern used by this and other MCP services. This unblocks not just #1049 but every current/future ticket labeledarch:tailscale-funnel. Can reuse content already inhost-inventory-archbox,doc-network-traffic-map, andarch-deployment-notion-mcp-remote.[BODY](optional, nice-to-have) Addregistration_endpointto the list of OAuth metadata fields asserted in the Platform checks AC, since DCR is on the handshake hot path.
Upstream dependencies (7 open tickets) are correctly documented; no action on those from this review — they will be closed by their own tracks.
Related
- Board item 1049 —
board-notion-mcp-remotecolumn=backlog - Forgejo:
forgejo_admin/notion-mcp-remote#9 story-notion-mcp-remote-claude-ai-connectproject-notion-mcp-remotesop-validation- Prior funnel-arch-missing finding:
review-788-2026-04-03