Members.dev MCP by usefulapi

Read members, subscriptions, bookings, invoices, payments; create and update members in Members.dev.

Should I use this

Quality & Safety

A
Description quality
94%
Schema completeness
91%
Naming quality
79%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'membersdev_get_member_by_external_id' name length outside 3-30 rangein membersdev_get_member_by_external_id

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~3,949Tokens (tool definitions)
~1.5 KBTypical response size
Significant attention impact (3.09% 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": {
    "members-dev": {
      "url": "https://members-dev.usefulapi.io/mcp"
    }
  }
}

Remote endpoints

https://members-dev.usefulapi.io/mcpstreamable-http

What it can do

Tool inventory

Tools (23)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢membersdev_get_account

Get the account that owns the API key (id, email, role, organizations). Members.dev API: GET /v1/accounts/me.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢membersdev_list_organizations(page, size)

List the organizations (venues, clubs) the key can reach. Use an organization id as the optional 'Organization id' at login to scope the key. GET /v1/organizations.

Input Schema

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number (default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "size": {
      "description": "Items per page (max 100).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢membersdev_list_members(search, email, external_id, status, group_id, ...)

List and search members. Filter by text search, email, external id, status, group or product. Newest first by default. GET /v1/members.

Input Schema

{
  "type": "object",
  "properties": {
    "search": {
      "description": "Free-text search over name and email.",
      "type": "string"
    },
    "email": {
      "description": "Exact email address.",
      "type": "string"
    },
    "external_id": {
      "description": "Your own id stored on the member.",
      "type": "string"
    },
    "status": {
      "description": "Member statuses to include.",
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "draft",
          "pending",
          "active",
          "archived",
          "rejected"
        ]
      }
    },
    "group_id": {
      "description": "Only members in these group ids.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "product_id": {
      "description": "Only members with these membership product ids.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "account_id": {
      "description": "Only members linked to this account id.",
      "type": "string"
    },
    "country_code": {
      "description": "Address country code.",
      "type": "string"
    },
    "city": {
      "description": "Address city.",
      "type": "string"
    },
    "sort_by": {
      "description": "Field to sort by.",
      "type": "string"
    },
    "sort_order": {
      "description": "Sort direction.",
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ]
    },
    "page": {
      "description": "Page number (default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "size": {
      "description": "Items per page (max 100).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢membersdev_get_member(member_id)

Get one member with subscriptions, groups and custom fields. GET /v1/members/{member_id}.

Input Schema

{
  "type": "object",
  "properties": {
    "member_id": {
      "type": "string",
      "description": "Member id."
    }
  },
  "required": [
    "member_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢membersdev_get_member_by_external_id(external_id)

Get one member by the external id you stored. GET /v1/members/external/{external_id}.

Input Schema

{
  "type": "object",
  "properties": {
    "external_id": {
      "type": "string",
      "description": "External id."
    }
  },
  "required": [
    "external_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢membersdev_list_products(page, size)

List membership products (plans) with price, billing period and status. GET /v1/products.

Input Schema

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number (default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "size": {
      "description": "Items per page (max 100).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢membersdev_get_product(product_id)

Get one membership product. GET /v1/products/{product_id}.

Input Schema

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string",
      "description": "Product id."
    }
  },
  "required": [
    "product_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢membersdev_list_subscriptions(product_ids, member_ids, page, size)

List member subscriptions with status, period dates and product. GET /v1/subscriptions.

Input Schema

{
  "type": "object",
  "properties": {
    "product_ids": {
      "description": "Only these product ids.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "member_ids": {
      "description": "Only these member ids.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "page": {
      "description": "Page number (default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "size": {
      "description": "Items per page (max 100).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢membersdev_get_subscription(subscription_id)

Get one subscription with invoices, credit notes and billing periods. GET /v1/subscriptions/{subscription_id}.

Input Schema

{
  "type": "object",
  "properties": {
    "subscription_id": {
      "type": "string",
      "description": "Subscription id."
    }
  },
  "required": [
    "subscription_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢membersdev_list_events(starts_at, ends_at, single_events, limit, tags, ...)

List events and classes in a time window. Use single_events to expand recurring events. GET /v1/events.

Input Schema

{
  "type": "object",
  "properties": {
    "starts_at": {
      "description": "Window start, ISO 8601 date-time.",
      "type": "string"
    },
    "ends_at": {
      "description": "Window end, ISO 8601 date-time.",
      "type": "string"
    },
    "single_events": {
      "description": "Expand recurring events into single occurrences.",
      "type": "boolean"
    },
    "limit": {
      "description": "Maximum events (1-500).",
      "type": "integer",
      "minimum": 1,
      "maximum": 500
    },
    "tags": {
      "description": "Only events with these tags.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "hosts": {
      "description": "Only events with these host ids.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "resource_id": {
      "description": "Only events using this resource.",
      "type": "string"
    },
    "category_id": {
      "description": "Only events in this category.",
      "type": "string"
    },
    "page": {
      "description": "Page number (default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "size": {
      "description": "Items per page (max 100).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢membersdev_get_event(event_id)

Get one event. GET /v1/events/{event_id}.

Input Schema

{
  "type": "object",
  "properties": {
    "event_id": {
      "type": "string",
      "description": "Event id."
    }
  },
  "required": [
    "event_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢membersdev_list_bookings(member_id, event_id, resource_id, starts_at_local, ends_at_local, ...)

List event bookings, filtered by member, event, status or time. GET /v1/bookings.

Input Schema

{
  "type": "object",
  "properties": {
    "member_id": {
      "description": "Only this member.",
      "type": "string"
    },
    "event_id": {
      "description": "Only this event.",
      "type": "string"
    },
    "resource_id": {
      "description": "Only this resource.",
      "type": "string"
    },
    "starts_at_local": {
      "description": "Start of window (local time, ISO 8601).",
      "type": "string"
    },
    "ends_at_local": {
      "description": "End of window (local time, ISO 8601).",
      "type": "string"
    },
    "status": {
      "description": "Booking status.",
      "type": "string",
      "enum": [
        "held",
        "confirmed",
        "cancelled",
        "expired",
        "waitlisted"
      ]
    },
    "attendance_status": {
      "description": "Attendance status.",
      "type": "string",
      "enum": [
        "attended",
        "no_show",
        "unmarked"
      ]
    },
    "sort_by": {
      "description": "Field to sort by.",
      "type": "string"
    },
    "sort_order": {
      "description": "Sort direction.",
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ]
    },
    "page": {
      "description": "Page number (default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "size": {
      "description": "Items per page (max 100).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢membersdev_get_booking(booking_id)

Get one booking. GET /v1/bookings/{event_booking_id}.

Input Schema

{
  "type": "object",
  "properties": {
    "booking_id": {
      "type": "string",
      "description": "Booking id."
    }
  },
  "required": [
    "booking_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢membersdev_list_invoices(status, member_id, subscription_id, sort_by, sort_order, ...)

List invoices, filtered by status, member or subscription. Amounts are in the smallest currency unit. GET /v1/invoices.

Input Schema

{
  "type": "object",
  "properties": {
    "status": {
      "description": "Invoice status.",
      "type": "string",
      "enum": [
        "draft",
        "open",
        "partially_paid",
        "past_due",
        "paid",
        "void",
        "deleted"
      ]
    },
    "member_id": {
      "description": "Only these member ids.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "subscription_id": {
      "description": "Only this subscription.",
      "type": "string"
    },
    "sort_by": {
      "description": "Field to sort by.",
      "type": "string"
    },
    "sort_order": {
      "description": "Sort direction.",
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ]
    },
    "page": {
      "description": "Page number (default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "size": {
      "description": "Items per page (max 100).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢membersdev_get_invoice(invoice_id)

Get one invoice with its lines and payment allocations. GET /v1/invoices/{invoice_id}.

Input Schema

{
  "type": "object",
  "properties": {
    "invoice_id": {
      "type": "string",
      "description": "Invoice id."
    }
  },
  "required": [
    "invoice_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢membersdev_list_payments(member_id, invoice_id, status, page, size)

List payments, filtered by member, status or invoice. GET /v1/payments.

Input Schema

{
  "type": "object",
  "properties": {
    "member_id": {
      "description": "Only this member.",
      "type": "string"
    },
    "invoice_id": {
      "description": "Only this invoice.",
      "type": "string"
    },
    "status": {
      "description": "Payment status.",
      "type": "string",
      "enum": [
        "pending",
        "requires_payment_method",
        "requires_action",
        "processing",
        "succeeded",
        "failed",
        "canceled"
      ]
    },
    "page": {
      "description": "Page number (default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "size": {
      "description": "Items per page (max 100).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢membersdev_list_credit_notes(member_id, subscription_id, page, size)

List credit notes, filtered by member or subscription. GET /v1/credit-notes.

Input Schema

{
  "type": "object",
  "properties": {
    "member_id": {
      "description": "Only these member ids.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "subscription_id": {
      "description": "Only this subscription.",
      "type": "string"
    },
    "page": {
      "description": "Page number (default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "size": {
      "description": "Items per page (max 100).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢membersdev_list_groups(page, size)

List member groups. GET /v1/groups.

Input Schema

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number (default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "size": {
      "description": "Items per page (max 100).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢membersdev_list_benefits(page, size)

List benefits (entitlements) that products can grant. GET /v1/benefits.

Input Schema

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number (default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "size": {
      "description": "Items per page (max 100).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢membersdev_list_benefit_grants(member_ids, statuses, benefit_ids, subscription_ids, product_ids, ...)

List benefit grants (what each member holds and has left). GET /v1/grants.

Input Schema

{
  "type": "object",
  "properties": {
    "member_ids": {
      "description": "Only these member ids.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "statuses": {
      "description": "Grant statuses.",
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "scheduled",
          "open",
          "depleted",
          "expired",
          "revoked"
        ]
      }
    },
    "benefit_ids": {
      "description": "Only these benefit ids.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "subscription_ids": {
      "description": "Only these subscription ids.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "product_ids": {
      "description": "Only these product ids.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "page": {
      "description": "Page number (default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "size": {
      "description": "Items per page (max 100).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢membersdev_list_guests(status, member_id, guest_policy_id, page, size)

List guest registrations, filtered by status or host member. GET /v1/guests.

Input Schema

{
  "type": "object",
  "properties": {
    "status": {
      "description": "Guest statuses.",
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "pending",
          "active",
          "rejected",
          "cancelled",
          "expired"
        ]
      }
    },
    "member_id": {
      "description": "Only guests of these member ids.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "guest_policy_id": {
      "description": "Only this guest policy.",
      "type": "string"
    },
    "page": {
      "description": "Page number (default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "size": {
      "description": "Items per page (max 100).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡membersdev_create_member(name, email, external_id, status, phone, ...)

WRITE: create a new member record. Does not charge anyone or send an invite. Creating twice makes two members, so check with membersdev_list_members first. POST /v1/members.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "description": "Full name."
    },
    "email": {
      "description": "Email address.",
      "type": "string"
    },
    "external_id": {
      "description": "Your own unique id for the member.",
      "type": "string"
    },
    "status": {
      "description": "Initial status.",
      "type": "string",
      "enum": [
        "draft",
        "pending",
        "active",
        "archived",
        "rejected"
      ]
    },
    "phone": {
      "description": "Phone object as the API defines it (MemberPhoneInput).",
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "address": {
      "description": "Address object as the API defines it (AddressInput).",
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "custom_fields": {
      "description": "Custom field values keyed by field key.",
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    }
  },
  "required": [
    "name"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡membersdev_update_member(member_id, name, email, external_id, status, ...)

WRITE: change fields of an existing member (only the fields you pass). Setting status to archived or rejected changes the member's access. Repeating the same call has the same result. PATCH /v1/members/{member_id}.

Input Schema

{
  "type": "object",
  "properties": {
    "member_id": {
      "type": "string",
      "description": "Member id."
    },
    "name": {
      "description": "New full name.",
      "type": "string"
    },
    "email": {
      "description": "New email address.",
      "type": "string"
    },
    "external_id": {
      "description": "New external id.",
      "type": "string"
    },
    "status": {
      "description": "New status.",
      "type": "string",
      "enum": [
        "draft",
        "pending",
        "active",
        "archived",
        "rejected"
      ]
    },
    "phone": {
      "description": "Phone object as the API defines it (MemberPhoneInput).",
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "address": {
      "description": "Address object as the API defines it (AddressInput).",
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "custom_fields": {
      "description": "Custom field values keyed by field key.",
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    }
  },
  "required": [
    "member_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded23 tools