Zellify MCP for Claude Code

For developers using Claude Code who want to wire their codebase to Zellify in one session. You'll have Claude Code reading your funnel schema, picking an integration path, and writing a verified webhook handler against your real funnel. You need Claude Code installed and a Zellify account.

The Zellify MCP is a Model Context Protocol server that gives Claude Code live context about your funnels — variable names, payload shapes, integration status — and a packaged skill that runs the full integration workflow on your codebase. Claude stops guessing and starts shipping.

What it does#

The MCP turns "integrate my product with Zellify" into a single command. Claude reads your package.json, detects your stack, picks the right integration recipe, pulls the exact funnel schema, and writes a webhook handler that compiles. Then it fires a test webhook against your endpoint and reports the result.

Without the MCP, Claude would have to ask you for funnel IDs, guess at variable names, and write generic boilerplate. With it, Claude works from your real data.

Install#

1. Generate an API key#

In the Zellify dashboard, go to Settings → Developers and create an MCP API key. Copy it — you'll paste it into the next command.

2. Register the MCP and install the skill#

From your project root, run these two commands:

Terminal
claude mcp add zellify -e ZELLIFY_API_KEY=YOUR_API_KEY -- npx -y @zellifyapp/mcp@latestnpx -y @zellifyapp/mcp@latest init

The first command registers the MCP server with Claude Code. The second copies the integration skill and the /integrationcheck slash command into your project's .claude/ directory.

Pass the API key as an env var, not on the command line: The -e ZELLIFY_API_KEY=… form passes your key through the environment. Don't use --api-key on the command line — argv leaks to ps, shell history, and process inspection. If you previously installed with --api-key, rotate that key in the dashboard and re-add the MCP with the form above.
Cross-platform install: The init command is pure Node, so it works on macOS, Linux, and Windows (PowerShell, cmd.exe, and Git Bash) without shell-specific tweaks. Re-run it any time to update the skill files to the latest version.

3. Restart Claude Code, then run the integration check#

Fully quit and reopen Claude Code (⌘Q on macOS — closing the window is not enough). MCP server registrations are loaded once at app start and do not hot-reload, so the new zellify MCP only becomes available after a full restart. Then run:

/integrationcheck

Claude will:

  1. Read your funnel list and integration status from Zellify.
  2. Scan your codebase to detect your framework, payment SDK, and entitlement provider.
  3. Ask any clarifying questions (account creation timing, free vs. paid funnel).
  4. Pick the best integration path for your stack.
  5. Show you the full plan before writing any code.
  6. With your approval, generate the webhook handler, fire a test webhook, and verify the round trip.

The /integrationcheck command#

/integrationcheck is the cold-start command. It runs the full seven-phase workflow from the bundled zellify-integration skill: gather context, discover the stack, pick the path, build the plan, implement, verify.

You can also pass a specific funnel ID:

/integrationcheck                  # uses the first published funnel
/integrationcheck funnel_abc123    # uses a specific funnel

After Claude shows you the chosen path, you can stop there and review, or continue to implementation. The skill explicitly pauses for approval at each phase boundary.

Available tools#

The MCP exposes six tools to Claude. You don't call these directly — Claude picks the right ones for whatever you're asking.

ToolWhat it returns
validate_setupA pass/fail checklist for the MCP itself: is the API key in the environment, does it authenticate, is the backend reachable, are there any published funnels. Run this first if anything else fails.
list_funnelsEvery funnel in your account with IDs, names, published status, and last-updated date.
get_funnel_schemaA funnel's variables — names, question types, option ID-to-label mappings — so Claude can write code that reads the right fields.
get_example_payloadA realistic example webhook payload plus a ready-to-paste TypeScript interface for the funnel's exact shape.
get_integrationsYour configured integrations: payment provider, RevenueCat status, the registration webhook's configured URL, and active campaign count.
send_test_webhookFires a signed test webhook to your configured endpoint and reports the HTTP response and any errors.

Example prompts#

Once the MCP is registered, you can drop into any conversation in Claude Code and ask things like:

Build me a webhook handler for my Zellify funnel
Send a test webhook to my endpoint and debug any errors
Check my integration setup — is my webhook configured?
Generate TypeScript types and a Zod schema for my funnel's payload
Wire up RevenueCat for my React Native app using my published funnel

Claude will route to the right tools, read the funnel data, and either explain or generate code.

Configuration#

The MCP server reads its configuration from environment variables. The claude mcp add -e KEY=VALUE form sets these in the MCP registration:

VariableRequiredDescription
ZELLIFY_API_KEYYesYour MCP API key. Pass with -e ZELLIFY_API_KEY=… on claude mcp add.
ZELLIFY_API_URLNoAPI base URL. Defaults to https://standalone-api.zellify.app. Override with -e ZELLIFY_API_URL=… for staging environments.

To rotate or revoke a key, regenerate it in the dashboard, remove the existing MCP registration with claude mcp remove zellify, and re-add it with the new key. Old keys are immediately invalidated.

Troubleshooting#

Before working through specific symptoms, ask Claude to run validate_setup. It checks the env var, key validity, network reachability, and whether your org has any published funnels in one call, and tells you exactly which one failed.

ZELLIFY_API_KEY is not set on every tool call#

The MCP server can't see the env var. Two common causes:

  • You used --api-key on the command line. Older versions of this page documented that form, but the server reads strictly from env. Remove and re-add the MCP with -e ZELLIFY_API_KEY=…:

    Terminal
    claude mcp remove zellifyclaude mcp add zellify -e ZELLIFY_API_KEY=YOUR_KEY -- npx -y @zellifyapp/mcp@latest

    Then fully quit and reopen Claude Code (⌘Q on macOS). Closing the window is not enough — MCP server registrations only load at app start.

  • You added the MCP correctly but didn't restart Claude Code. Same fix: ⌘Q from the menu bar, then reopen.

Auth error on list_funnels or validate_setup#

Your API key is rejected. Generate a fresh one at Settings → Developers, then claude mcp remove zellify and re-add with the new key as above.

"No published funnels" error#

The MCP only operates on published funnels. Open the funnel builder and publish at least one. Draft funnels do not have a stable schema and cannot be wired up.

/integrationcheck says the skill isn't installed#

The slash command lives at .claude/commands/integrationcheck.md and the skill at .claude/skills/zellify-integration/SKILL.md. Both are dropped into place by the init command. From your project root:

Terminal
npx -y @zellifyapp/mcp@latest init

claude mcp list shows zellify twice#

Two registrations with the same name (typically one in user scope and one in project scope) cause non-deterministic tool routing. Remove the stale one:

Terminal
claude mcp remove zellifyclaude mcp add zellify -e ZELLIFY_API_KEY=YOUR_KEY -- npx -y @zellifyapp/mcp@latest

Then ⌘Q + reopen Claude Code.

Test webhook fails with ECONNREFUSED or ETIMEDOUT#

Your endpoint isn't reachable from Zellify's network. If you're developing locally, expose it with a tunnel (ngrok, cloudflared, the Stripe CLI). The webhook handler also has to respond in under 10 seconds — slow startup or cold starts will time out. See Webhooks → delivery guarantees.

Test webhook returns 200 but my handler doesn't see the request#

The webhook URL configured in Zellify points at a different deployment than the one you're inspecting. Ask Claude to run get_integrations — the response includes the url field for the registration webhook. Compare it against the URL of the deployment you actually expect to receive traffic; if they don't match, update the webhook URL in Settings → Integrations → Registration Webhook.

Quickstart
The same steps without the AI assistant — code samples for Node and Python.
Integration guides
The recipe book the MCP picks from. Read these to understand the tradeoffs.
Registration webhook
The payload Claude will write a handler for.
app_user_id
The identifier every recipe uses. Worth reading once.