Skip to content

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.

Deletes · 5

12 tools: 5 can delete or cancel things and 7 only read.

Scanned Oct 21, 2026

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/mcp

Tools

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/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.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.