Memberful MCP by usefulapi
by usefulapi.io · remote · no sign-in to list tools · v1.16.3 · published by io.usefulapi
Manage Memberful members, subscriptions, plans, passes and coupons via the GraphQL API.
12 tools: 5 can delete or cancel things and 7 only read.
Scanned Oct 21, 2026
- Deletes or cancels5Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things0Claude Code: ask
- Only reads7Claude Code: allow: see these tools
No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http memberful https://memberful.usefulapi.io/mcpTools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
12 tools
Deletes or cancels 5Claude Code: deny
change_subscription_expirationMUTATES Memberful data: change WHEN a subscription expires (extend or shorten access).No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it MUTATES Memberful data: change WHEN a subscription expires (extend or shorten access). expiresAt is a Unix timestamp in SECONDS (Int). Memberful GraphQL: subscriptionChangeExpirationTime(id, expiresAt).
Annotations the server declares
- title: Change subscription expiration
- destructiveHint: true
create_couponsMUTATES Memberful data: create one or more coupon codes for a discount.No findings
Why it is in this group
- The name "create_coupons" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it MUTATES Memberful data: create one or more coupon codes for a discount. Provide the discount id (discountId) and the coupon code strings. Memberful GraphQL: createCoupons(discountId, coupons).
Annotations the server declares
- title: Create coupons
- destructiveHint: true
create_memberMUTATES Memberful data: create a new member with an email (and optional full name).No findings
Why it is in this group
- The name "create_member" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it MUTATES Memberful data: create a new member with an email (and optional full name). Memberful GraphQL: memberCreate(email, fullName).
Annotations the server declares
- title: Create a member
- destructiveHint: true
memberful_graphqlMUTATES Memberful data (potentially): escape hatch to run an arbitrary Memberful GraphQL operation — including any mutation — against your account's /api/graphql endpoint with opti…No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it MUTATES Memberful data (potentially): escape hatch to run an arbitrary Memberful GraphQL operation — including any mutation — against your account's /api/graphql endpoint with optional variables. Prefer memberful_query for read-only calls.
Annotations the server declares
- title: Run a GraphQL operation (query or mutation)
- destructiveHint: true
update_memberMUTATES Memberful data: update a member's metadata (a JSON string; max 50 keys, 40-char keys, 500-char values).No findings
Why it is in this group
- The name "update_member" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it MUTATES Memberful data: update a member's metadata (a JSON string; max 50 keys, 40-char keys, 500-char values). Only metadata is supported here; for other inline member fields use memberful_graphql. Memberful GraphQL: memberUpdate(id, metadata).
Annotations the server declares
- title: Update a member
- destructiveHint: true
Only reads 7Claude Code: allow
get_memberFetch one Memberful member by id: profile, Stripe customer id, unrestricted-access flag, total spend, metadata, address, and their subscriptions (each with plan).No findings
Why it is in this group
- The name "get_member" says "get": a word for reading.
Description, as the server wrote it Fetch one Memberful member by id: profile, Stripe customer id, unrestricted-access flag, total spend, metadata, address, and their subscriptions (each with plan). Memberful GraphQL: member(id).
Annotations the server declares
- title: Get a member
- readOnlyHint: true
get_subscriptionFetch one subscription by id: status, activated/expires/trial timestamps, plan, member, orders, coupon.No findings
Why it is in this group
- The name "get_subscription" says "get": a word for reading.
Description, as the server wrote it Fetch one subscription by id: status, activated/expires/trial timestamps, plan, member, orders, coupon. Memberful GraphQL: subscription(id).
Annotations the server declares
- title: Get a subscription
- readOnlyHint: true
list_membersList members (Relay connection): each edge has a cursor + node (profile, Stripe customer id, unrestricted-access flag, total spend, and their subscriptions).No findings
Why it is in this group
- The name "list_members" says "list": a word for reading.
Description, as the server wrote it List members (Relay connection): each edge has a cursor + node (profile, Stripe customer id, unrestricted-access flag, total spend, and their subscriptions). Paginate with `first` + `after` (pass the last edge's `cursor`); `first` defaults to 50. Set `activeOnly` to return only members with an ACTIVE membership state. For member-state filters beyond active, use memberful_query. Memberful GraphQL: members connection.
Annotations the server declares
- title: List members
- readOnlyHint: true
list_passesList all passes (Memberful dashboard 'Plans' — the access groups a member subscribes to): id, name.No findings
Why it is in this group
- The name "list_passes" says "list": a word for reading.
Description, as the server wrote it List all passes (Memberful dashboard 'Plans' — the access groups a member subscribes to): id, name. Memberful GraphQL: passes.
Annotations the server declares
- title: List passes
- readOnlyHint: true
list_plansList all plans (Memberful dashboard 'Prices'): name, interval, price (cents), for-sale flag, plan group.No findings
Why it is in this group
- The name "list_plans" says "list": a word for reading.
Description, as the server wrote it List all plans (Memberful dashboard 'Prices'): name, interval, price (cents), for-sale flag, plan group. Memberful GraphQL: plans.
Annotations the server declares
- title: List plans
- readOnlyHint: true
list_subscriptionsList subscriptions (Relay connection): each edge has a cursor + node (status, expires/created timestamps, plan, member).No findings
Why it is in this group
- The name "list_subscriptions" says "list": a word for reading.
Description, as the server wrote it List subscriptions (Relay connection): each edge has a cursor + node (status, expires/created timestamps, plan, member). Paginate with `first` + `after` (pass the last edge's `cursor`); `first` defaults to 50. NOTE: this uses the top-level `subscriptions` connection, which is sourced from the community SDK — validate against a live account. Memberful GraphQL: subscriptions connection.
Annotations the server declares
- title: List subscriptions
- readOnlyHint: true
memberful_queryEscape hatch: run an arbitrary Memberful GraphQL QUERY (read-only) against your account's /api/graphql endpoint with optional variables.No findings
Why it is in this group
- The name "memberful_query" says "query": a word for reading.
Description, as the server wrote it Escape hatch: run an arbitrary Memberful GraphQL QUERY (read-only) against your account's /api/graphql endpoint with optional variables. Mutations are REJECTED — use the dedicated write tools or memberful_graphql for those. Useful for fields not covered by the curated read tools (e.g. member-state filters beyond active).
Annotations the server declares
- title: Run a GraphQL query (read-only)
- readOnlyHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.16.3. Values in angle brackets are yours to fill in.
claude mcp add --transport http memberful https://memberful.usefulapi.io/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__memberful__get_member",
"mcp__memberful__list_members",
"mcp__memberful__get_subscription",
"mcp__memberful__list_subscriptions",
"mcp__memberful__list_plans",
"mcp__memberful__list_passes",
"mcp__memberful__memberful_query"
],
"ask": [],
"deny": [
"mcp__memberful__create_member",
"mcp__memberful__update_member",
"mcp__memberful__change_subscription_expiration",
"mcp__memberful__create_coupons",
"mcp__memberful__memberful_graphql"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as memberful. Review it before you use it.