Members.dev MCP by usefulapi
Read members, subscriptions, bookings, invoices, payments; create and update members in Members.dev.
Should I use this
Quality & Safety
Findings (1)
- LOWin membersdev_get_member_by_external_id
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
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-httpWhat it can do
Tool inventory
Tools (23)
🟢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
Evidence