Access
MCP and Claude
The MCP server hands an assistant the API as tools: the same endpoints, the same scopes, the same limits and the same attribution. Stateless, Streamable HTTP, JSON-RPC per request.
The address
The server is at https://partyppl.nl/mcp. It speaks the protocol versions 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05. Sign-in is OAuth; a ppl_live_ token as bearer works too, for a client that cannot do OAuth.
Connecting Claude
- In claude.ai or Claude Desktop: Customize, Connectors, Add custom connector.
- URL:
https://partyppl.nl/mcp. Leave client ID and secret empty; Claude registers itself. - Add, then Connect. You land on partyppl.nl: sign in, choose on whose behalf (Read only, or one of your organisations) and choose Allow.
- In a conversation, switch PartyPPL on under + and Connectors.
In Claude Code, add the server with claude mcp add --transport http partyppl https://partyppl.nl/mcp and sign in with /mcp. The connection then shows under Connected apps in your settings on partyppl.nl, where you revoke it too.
The tools
Every endpoint of the API is also a tool, named by its operationId, except what is deliberately missing below. A token only sees the tools its scopes allow. With Read only that is 17:
An endpoint, but not a tool
An assistant may call a tool on its own, from something it read somewhere. These endpoints are therefore not tools, with the reason the server gives itself:
| Endpoint | Why not a tool |
|---|---|
scanTicket | Scanning marks a ticket used, which is irreversible at the door, and the answer carries the name of the visitor holding it. Use POST /v1/scan from your own scanner, or the door page in the organiser portal. |
getOpenApi | The specification describes the tools you already have. Read it at /v1/openapi.json if you are building a client. |
deliverExternalTickets | A ticket list is personal data of visitors (addresses and names), and nothing about individual visitors goes through a tool. Send the export from the organiser portal (Tickets koppelen) or POST /v1/events/:id/external-tickets from your own shop integration. |
getExternalTickets | The counts behind a delivered ticket list are read in the organiser portal or with GET /v1/events/:id/external-tickets; the list itself is about individual visitors and stays out of the tools. |
The Claude plugin
There is a Claude plugin, PartyPPL agenda-team, with working instructions for filling in the agenda: genres, bills, tickets, drink token prices, posters and artist profiles. It uses this server's admin tools and is therefore only usable by the PartyPPL team, with the admin scope. For everyone else the connector above is the way to use PartyPPL in Claude.
Even with admin some things are deliberately not a tool:
- Deleting anything permanently
- News posts, accounts and events can be removed in the admin and there is no way back from it. Unpublishing a post, rejecting an event and putting one back in the queue are all reversible, so those are here and deletion is not. Merging two venues (mergeVenues) removes the second row but nothing a person would miss: everything moves to the room that stays, and its old name and address keep pointing there.
- Suspending or banning a person
- A judgement about a human being, with their account and their tickets attached to it. It belongs to somebody who can be asked why, on /admin/meldingen.
- Anything to do with money
- Payouts, refunds, Stripe and the fees. A wrong call moves real money out of somebody's account, and the answer would carry order and payout details a connector has no business holding.
- Featured slots that are sold
- A booked slot is a paid agreement with an organiser. Editing it is changing what somebody bought. Empty slots and editorial picks stay on /admin/uitgelicht.
- Scanning tickets
- Marking a ticket used is irreversible at the door and the answer carries the name of the visitor holding it. Same reason it is not a tool for organisers either.
Updated