MemberRun MCP by usefulapi

Manage members, events and registrations; read invoices, resources and chapters in MemberRun.

Should I use this

Quality & Safety

A
Description quality
99%
Schema completeness
91%
Naming quality
76%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (5)

  • LOWTool 'memberrun_register_member_for_event' description lacks action verbin memberrun_register_member_for_event
  • LOWTool 'memberrun_list_event_registrations' name length outside 3-30 rangein memberrun_list_event_registrations
  • LOWTool 'memberrun_get_event_registration' name length outside 3-30 rangein memberrun_get_event_registration
  • LOWTool 'memberrun_register_member_for_event' name length outside 3-30 rangein memberrun_register_member_for_event
  • LOWTool 'memberrun_cancel_event_registration' name length outside 3-30 rangein memberrun_cancel_event_registration

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

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

Remote endpoints

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

What it can do

Tool inventory

Tools (21)

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

Show the association this key belongs to, its name and the key's scopes. Good first call to confirm the connection. API: GET /me.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢memberrun_list_members(status, role, email, limit, starting_after)

List the association's members, filtered by status, role or email. Returns a page with has_more and next_cursor. API: GET /members.

Input Schema

{
  "type": "object",
  "properties": {
    "status": {
      "description": "Only members with this status.",
      "type": "string",
      "enum": [
        "active",
        "suspended",
        "pending",
        "expired"
      ]
    },
    "role": {
      "description": "Only this role.",
      "type": "string",
      "enum": [
        "member",
        "staff"
      ]
    },
    "email": {
      "description": "Only this email (not case sensitive).",
      "type": "string"
    },
    "limit": {
      "description": "Objects per page (1-100, default 25).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "starting_after": {
      "description": "Cursor: the id of the last object on the previous page (next_cursor).",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢memberrun_get_member(member_id)

Get one member by id, with status, role, expiry and profile. API: GET /members/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "member_id": {
      "type": "string",
      "description": "The id, as returned by the list or create tools."
    }
  },
  "required": [
    "member_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢memberrun_list_events(status, start_after, start_before, limit, starting_after)

List events (conferences, webinars, workshops and so on), filtered by status and start date. API: GET /events.

Input Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "draft",
        "published",
        "cancelled",
        "completed"
      ]
    },
    "start_after": {
      "description": "Only events starting after this date.",
      "type": "string"
    },
    "start_before": {
      "description": "Only events starting before this date.",
      "type": "string"
    },
    "limit": {
      "description": "Objects per page (1-100, default 25).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "starting_after": {
      "description": "Cursor: the id of the last object on the previous page (next_cursor).",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢memberrun_get_event(event_id)

Get one event by id, with dates, location, capacity, prices and status. API: GET /events/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "event_id": {
      "type": "string",
      "description": "The id, as returned by the list or create tools."
    }
  },
  "required": [
    "event_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢memberrun_list_event_registrations(event_id, member_id, status, limit, starting_after)

List registrations, filtered by event, member or status (registered, waitlisted, attended, cancelled). API: GET /event_registrations.

Input Schema

{
  "type": "object",
  "properties": {
    "event_id": {
      "description": "Only registrations for this event id.",
      "type": "string"
    },
    "member_id": {
      "description": "Only registrations for this member id.",
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "registered",
        "waitlisted",
        "attended",
        "cancelled"
      ]
    },
    "limit": {
      "description": "Objects per page (1-100, default 25).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "starting_after": {
      "description": "Cursor: the id of the last object on the previous page (next_cursor).",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢memberrun_get_event_registration(registration_id)

Get one registration by id, with its status, payment status and attendance time. API: GET /event_registrations/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "registration_id": {
      "type": "string",
      "description": "The id, as returned by the list or create tools."
    }
  },
  "required": [
    "registration_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢memberrun_list_invoices(status, member_id, household_id, limit, starting_after)

List invoices (read only), filtered by status, member or household. Refunds and new invoices are not possible here. API: GET /invoices.

Input Schema

{
  "type": "object",
  "properties": {
    "status": {
      "description": "Only invoices with this status.",
      "type": "string"
    },
    "member_id": {
      "description": "Only invoices for this member id.",
      "type": "string"
    },
    "household_id": {
      "description": "Only invoices for this household id.",
      "type": "string"
    },
    "limit": {
      "description": "Objects per page (1-100, default 25).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "starting_after": {
      "description": "Cursor: the id of the last object on the previous page (next_cursor).",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢memberrun_get_invoice(invoice_id)

Get one invoice by id, with amount, currency, due date and paid date. API: GET /invoices/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "invoice_id": {
      "type": "string",
      "description": "The id, as returned by the list or create tools."
    }
  },
  "required": [
    "invoice_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢memberrun_list_resources(status, type, limit, starting_after)

List library resources (courses, webinars, articles, templates, guides, toolkits), filtered by status or type. Read only. API: GET /resources.

Input Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string"
    },
    "type": {
      "type": "string"
    },
    "limit": {
      "description": "Objects per page (1-100, default 25).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "starting_after": {
      "description": "Cursor: the id of the last object on the previous page (next_cursor).",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢memberrun_get_resource(resource_id)

Get one library resource by id. Read only. API: GET /resources/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "resource_id": {
      "type": "string",
      "description": "The id, as returned by the list or create tools."
    }
  },
  "required": [
    "resource_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢memberrun_list_chapters(is_active, limit, starting_after)

List the association's regional or topic chapters, optionally only active ones. Read only. API: GET /chapters.

Input Schema

{
  "type": "object",
  "properties": {
    "is_active": {
      "description": "true = only active chapters.",
      "type": "boolean"
    },
    "limit": {
      "description": "Objects per page (1-100, default 25).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "starting_after": {
      "description": "Cursor: the id of the last object on the previous page (next_cursor).",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢memberrun_get_chapter(chapter_id)

Get one chapter by id, with name, region and active flag. Read only. API: GET /chapters/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "chapter_id": {
      "type": "string",
      "description": "The id, as returned by the list or create tools."
    }
  },
  "required": [
    "chapter_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴memberrun_create_member(email, name, role, status, expires_at, ...)

Create a membership for an email address and change real records. If the person already has a membership here, the API returns 400. API: POST /members.

Input Schema

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "description": "Email address of the member."
    },
    "name": {
      "description": "Full name.",
      "type": "string"
    },
    "role": {
      "description": "Membership role. The API never grants admin access.",
      "type": "string",
      "enum": [
        "member",
        "staff"
      ]
    },
    "status": {
      "description": "active, suspended, pending or expired.",
      "type": "string",
      "enum": [
        "active",
        "suspended",
        "pending",
        "expired"
      ]
    },
    "expires_at": {
      "description": "Membership expiry, ISO 8601.",
      "type": "string"
    },
    "profile": {
      "description": "Profile fields (title, company, location, designation, bio, phone, linkedin_url, specializations).",
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "company": {
          "type": "string"
        },
        "location": {
          "type": "string"
        },
        "designation": {
          "type": "string"
        },
        "bio": {
          "type": "string"
        },
        "phone": {
          "type": "string"
        },
        "linkedin_url": {
          "type": "string"
        },
        "specializations": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "idempotency_key": {
      "description": "Optional. Reuse the same key only to retry the same create; the API then returns the first answer.",
      "type": "string",
      "maxLength": 255
    }
  },
  "required": [
    "email"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴memberrun_update_member(member_id, name, role, status, expires_at, ...)

Change a member's name, role, status, expiry or profile. Only the fields you send change. Set status to expired to archive. API: PATCH /members/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "member_id": {
      "type": "string",
      "description": "The id, as returned by the list or create tools."
    },
    "name": {
      "description": "Full name.",
      "type": "string"
    },
    "role": {
      "description": "Membership role. The API never grants admin access.",
      "type": "string",
      "enum": [
        "member",
        "staff"
      ]
    },
    "status": {
      "description": "active, suspended, pending or expired.",
      "type": "string",
      "enum": [
        "active",
        "suspended",
        "pending",
        "expired"
      ]
    },
    "expires_at": {
      "description": "Membership expiry, ISO 8601.",
      "type": "string"
    },
    "profile": {
      "description": "Profile fields (title, company, location, designation, bio, phone, linkedin_url, specializations).",
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "company": {
          "type": "string"
        },
        "location": {
          "type": "string"
        },
        "designation": {
          "type": "string"
        },
        "bio": {
          "type": "string"
        },
        "phone": {
          "type": "string"
        },
        "linkedin_url": {
          "type": "string"
        },
        "specializations": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    }
  },
  "required": [
    "member_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴memberrun_suspend_member(member_id)

Suspend a member (soft delete: the status becomes suspended and nothing is erased). Members with admin access cannot be changed through the API. API: DELETE /members/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "member_id": {
      "type": "string",
      "description": "The id, as returned by the list or create tools."
    }
  },
  "required": [
    "member_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴memberrun_create_event(title, type, start_at, end_at, location, ...)

Create an event with a title, type, start time and optional prices and capacity. Prices are whole cents. Creates a real record. API: POST /events.

Input Schema

{
  "type": "object",
  "properties": {
    "title": {
      "type": "string"
    },
    "type": {
      "type": "string",
      "enum": [
        "conference",
        "webinar",
        "workshop",
        "networking",
        "agm",
        "general"
      ],
      "description": "conference, webinar, workshop, networking, agm or general."
    },
    "start_at": {
      "type": "string",
      "description": "Start, ISO 8601 (for example 2027-09-15T13:00:00Z)."
    },
    "end_at": {
      "description": "End, ISO 8601.",
      "type": "string"
    },
    "location": {
      "type": "string"
    },
    "virtual_url": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "image_url": {
      "type": "string"
    },
    "max_capacity": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "cpd_credits": {
      "type": "number",
      "minimum": 0
    },
    "member_price_cents": {
      "description": "Member price in whole cents (49900 = 499.00).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "non_member_price_cents": {
      "description": "Non-member price in whole cents.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "registration_deadline": {
      "type": "string"
    },
    "slug": {
      "type": "string"
    },
    "is_public": {
      "type": "boolean"
    },
    "allow_non_member_registration": {
      "type": "boolean"
    },
    "registration_mode": {
      "type": "string"
    },
    "chapter_id": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "draft",
        "published",
        "cancelled",
        "completed"
      ]
    },
    "idempotency_key": {
      "description": "Optional. Reuse the same key only to retry the same create; the API then returns the first answer.",
      "type": "string",
      "maxLength": 255
    }
  },
  "required": [
    "title",
    "type",
    "start_at"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴memberrun_update_event(event_id, title, type, start_at, end_at, ...)

Change an event's fields or status. Only the fields you send change. To cancel, prefer memberrun_cancel_event. API: PATCH /events/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "event_id": {
      "type": "string",
      "description": "The id, as returned by the list or create tools."
    },
    "title": {
      "type": "string"
    },
    "type": {
      "type": "string",
      "enum": [
        "conference",
        "webinar",
        "workshop",
        "networking",
        "agm",
        "general"
      ]
    },
    "start_at": {
      "description": "Start, ISO 8601.",
      "type": "string"
    },
    "end_at": {
      "description": "End, ISO 8601.",
      "type": "string"
    },
    "location": {
      "type": "string"
    },
    "virtual_url": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "image_url": {
      "type": "string"
    },
    "max_capacity": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "cpd_credits": {
      "type": "number",
      "minimum": 0
    },
    "member_price_cents": {
      "description": "Member price in whole cents (49900 = 499.00).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "non_member_price_cents": {
      "description": "Non-member price in whole cents.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "registration_deadline": {
      "type": "string"
    },
    "slug": {
      "type": "string"
    },
    "is_public": {
      "type": "boolean"
    },
    "allow_non_member_registration": {
      "type": "boolean"
    },
    "registration_mode": {
      "type": "string"
    },
    "chapter_id": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "draft",
        "published",
        "cancelled",
        "completed"
      ]
    }
  },
  "required": [
    "event_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴memberrun_cancel_event(event_id)

Cancel an event (soft: the status becomes cancelled). This emails everyone registered and removes a linked Zoom meeting where it can. API: DELETE /events/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "event_id": {
      "type": "string",
      "description": "The id, as returned by the list or create tools."
    }
  },
  "required": [
    "event_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴memberrun_register_member_for_event(event_id, member_id, status, dietary_restrictions, accessibility_needs, ...)

Register an existing member for an event. The API cannot take payment: a paid seat is refused unless payment is external (the ticket was paid on another system). Guests cannot be registered here. API: POST /event_registrations.

Input Schema

{
  "type": "object",
  "properties": {
    "event_id": {
      "type": "string"
    },
    "member_id": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "registered",
        "waitlisted",
        "attended",
        "cancelled"
      ]
    },
    "dietary_restrictions": {
      "type": "string"
    },
    "accessibility_needs": {
      "type": "string"
    },
    "payment": {
      "description": "Send external only when the ticket was paid on another system.",
      "type": "string",
      "const": "external"
    },
    "idempotency_key": {
      "description": "Optional. Reuse the same key only to retry the same create; the API then returns the first answer.",
      "type": "string",
      "maxLength": 255
    }
  },
  "required": [
    "event_id",
    "member_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴memberrun_cancel_event_registration(registration_id)

Cancel one registration (soft: the status becomes cancelled). The next person on the waitlist moves up if there is one. API: DELETE /event_registrations/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "registration_id": {
      "type": "string",
      "description": "The id, as returned by the list or create tools."
    }
  },
  "required": [
    "registration_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded21 tools