Memberful MCP by usefulapi

Manage Memberful members, subscriptions, plans, passes and coupons via the GraphQL API.

Should I use this

Quality & Safety

A
Description quality
96%
Schema completeness
87%
Naming quality
78%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (2)

  • LOWTool 'memberful_change_subscription_expiration' description lacks action verbin memberful_change_subscription_expiration
  • LOWTool 'memberful_change_subscription_expiration' name length outside 3-30 rangein memberful_change_subscription_expiration

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,830Tokens (tool definitions)
~889 BTypical response size
Moderate attention impact (1.43% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "memberful": {
      "url": "https://memberful.usefulapi.io/mcp"
    }
  }
}

Remote endpoints

https://memberful.usefulapi.io/mcpstreamable-http

What it can do

Tool inventory

Tools (12)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢memberful_get_member(id)

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

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "The member id."
    }
  },
  "required": [
    "id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢memberful_list_members(first, after, last, before, activeOnly)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "first": {
      "description": "Max members to return, from the start (page size).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "after": {
      "description": "Cursor for the next page (the `cursor` of the last edge from a prior call).",
      "type": "string"
    },
    "last": {
      "description": "Max members to return, from the end.",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "before": {
      "description": "Cursor for the previous page.",
      "type": "string"
    },
    "activeOnly": {
      "description": "Only return members with an ACTIVE membership state.",
      "type": "boolean"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢memberful_get_subscription(id)

Fetch one subscription by id: status, activated/expires/trial timestamps, plan, member, orders, coupon. Memberful GraphQL: subscription(id).

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "The subscription id."
    }
  },
  "required": [
    "id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢memberful_list_subscriptions(first, after, last, before)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "first": {
      "description": "Max subscriptions to return, from the start (page size).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "after": {
      "description": "Cursor for the next page (the `cursor` of the last edge from a prior call).",
      "type": "string"
    },
    "last": {
      "description": "Max subscriptions to return, from the end.",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "before": {
      "description": "Cursor for the previous page.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢memberful_list_plans

List all plans (Memberful dashboard 'Prices'): name, interval, price (cents), for-sale flag, plan group. Memberful GraphQL: plans.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢memberful_list_passes

List all passes (Memberful dashboard 'Plans' — the access groups a member subscribes to): id, name. Memberful GraphQL: passes.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢memberful_query(query, variables)

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

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "A GraphQL query document (must be a query, not a mutation)."
    },
    "variables": {
      "description": "Variables object for the query.",
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    }
  },
  "required": [
    "query"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴memberful_create_member(email, fullName)

MUTATES Memberful data: create a new member with an email (and optional full name). Memberful GraphQL: memberCreate(email, fullName).

Input Schema

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "description": "The new member's email (required)."
    },
    "fullName": {
      "description": "The new member's full name.",
      "type": "string"
    }
  },
  "required": [
    "email"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴memberful_update_member(id, metadata)

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

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "The member id (required)."
    },
    "metadata": {
      "description": "Metadata as a JSON string (max 50 keys, 40-char keys, 500-char values).",
      "type": "string"
    }
  },
  "required": [
    "id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴memberful_change_subscription_expiration(id, expiresAt)

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

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "The subscription id (required)."
    },
    "expiresAt": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991,
      "description": "New expiration as a Unix timestamp in SECONDS (Int, required)."
    }
  },
  "required": [
    "id",
    "expiresAt"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴memberful_create_coupons(codes, discountId)

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

Input Schema

{
  "type": "object",
  "properties": {
    "codes": {
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Coupon code strings to create (at least one, required)."
    },
    "discountId": {
      "description": "The discount id to attach the coupons to.",
      "type": "string"
    }
  },
  "required": [
    "codes"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴memberful_graphql(query, variables)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "A GraphQL query or mutation document."
    },
    "variables": {
      "description": "Variables object for the operation.",
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    }
  },
  "required": [
    "query"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded12 tools
verifiedversion not recorded12 tools
verifiedversion not recorded12 tools
failed observationversion not recorded—
failed observationversion not recorded—