Connectors · Accounting & finance
Wild Apricot MCP server for AI agents.
actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Wild Apricot and the rest of your systems. It gives your agent 120 Wild Apricot actions (53 reads, 47 writes and 20 that wait for a confirmation) and holds the Wild Apricot credential itself, so the agent never does. It paces Wild Apricot's limits and records every call.
100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.
claude mcp add --transport http actionlake https://connect.actionlake.com/mcpdo { action: "wild_apricot.invoices_list", intent: "check which Wild Apricot account is connected"}# Get list of invoices by criteria · read · 1 upstream call- 120actionsin one signed file
- 53readlook, never change
- 47writecreate and update
- 20wait for a yesdestructive, confirmed first
Set up
Connect Wild Apricot in three steps.
- 01
Add actionlake to Claude.
Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.
https://connect.actionlake.com/mcp - 02
Connect Wild Apricot.
OAuth 2.0, client credentials. Paste the app's client id and secret; actionlake fetches and renews the token, and nobody has to sign in. actionlake stores what you paste write-only, sealed under your tenant's key.
client_idClient id: enter the literal word APIKEY to authenticate with an API keyapi_keyAPI key (Settings > Security > Authorized applications)account_idYour Wild Apricot account id
account { op: "connections.requirements", service: "wild_apricot" } # free: exactly what to paste, and what is found for you - 03
Make the first call. Check before a write.
Ask in plain words; Claude picks the action. Before anything changes,
checkvalidates the call and prices it, for free.do { action: "wild_apricot.invoices_list" }# get list of invoices by criteria · read · 1 upstream callcheck { action: "wild_apricot.invoices_create", input: { … } }# free: inputs, permissions, cost and confirmations, nothing sent
Wild Apricot at a glance
- Sign-in
- OAuth 2.0, client credentials. Paste the app's client id and secret; actionlake fetches and renews the token, and nobody has to sign in.
- You provide
client_idapi_key- Setup fields
account_id- Limits we pace to
- 100 calls a minute, per connection
- API covered
- Wild Apricot (Personify) API v2.3
api.wildapricot.org/v2.3 - Built from
- Wild Apricot's documentation, read 23 October 2026app.swaggerhub.com
- Service file
- Version 1.0.0, signed (Ed25519)
- Cached reads
- 53 of 53 reads, for up to an hour; a write clears what it affects
- Shared entities
- 4, so ask can line Wild Apricot up with your other systems
- Data
- Processed and stored in Sydney, Australia. No US region yet
Capabilities
What an AI agent can do in Wild Apricot.
120 actions in 10 areas. Every one carries its effect, so a key can allow the reads and hold the rest.
- 53readlook, never change
- 47writecreate and update
- 20destructivewait for a confirmation
Finance
3914 read · 16 write · 9 destructive
Get list of invoices by criteria · Get list of payments by criteria · Creates a new invoice · Creates a new payment
Events
186 read · 9 write · 3 destructive
Events list · Create a new event record · Retrieve information about specific event · Update information about existing event
Email
1710 read · 5 write · 2 destructive
Get count of real email recipients (unique addresses) · Email drafts · Get preview version of email · Send draft
Contacts
156 read · 7 write · 2 destructive
Contacts list · Create a new contact or member record · Retrieve information about specific member or contact · Update information about existing member or contact
Store
114 read · 5 write · 2 destructive
store orders list · Create a new product · Get list of products · Upload product pictures
Membership
86 read · 1 write · 1 destructive
Get list of all membership levels · Approve pending membership · Retrieve information about specific membership level · Reject pending membership
Ceu
62 read · 3 write · 1 destructive
Add new CEU record · Get list of CEU records · Get CEU record by ID · Update CEU record by ID
Account
22 read · 0 write · 0 destructive
List of available accounts · Details for specific account
2 more areas · 4 actions
- Files 2
- Platform 2
Top actions
The Wild Apricot API, shaped for agents.
The ids your agent types, what each does, and the one name it shares with other systems. 26 of Wild Apricot's 26 action names are shared with at least one other connector, so an agent learns them once.
| Action | What it does | Effect | Same name in |
|---|---|---|---|
wild_apricot.invoices_listGet list of invoices by criteria | Get list of invoices by criteria. | read | finance.invoice.list101 connectors |
wild_apricot.payments_listGet list of payments by criteria | Get list of payments by criteria. | read | finance.payment.list75 connectors |
wild_apricot.events_listEvents list | Events list | read | comm.event.list61 connectors |
wild_apricot.invoices_createCreates a new invoice | Creates a new invoice. | write | finance.invoice.create74 connectors |
wild_apricot.contacts_listContacts list | Contacts list | read | crm.contact.list177 connectors |
wild_apricot.payments_createCreates a new payment | Creates a new payment. | write | finance.payment.create67 connectors |
wild_apricot.events_createCreate a new event record | Create a new event record | write | comm.event.create52 connectors |
wild_apricot.contacts_createCreate a new contact or member record | Create a new contact or member record | write | crm.contact.create161 connectors |
wild_apricot.refunds_listGet list of refunds by criteria | Get list of refunds by criteria. | read | finance.refund.list23 connectors |
wild_apricot.refunds_createCreates a new refund | Creates a new refund. | destructive | finance.refund.create19 connectors |
wild_apricot.events_cloneClone existed event | Clone existed event. | write | this connector |
wild_apricot.contacts_send_2fa_codeSend 2FA code to current user email | Send 2FA code to current user email. | write | this connector |
Try it
Prompts to paste into Claude.
Each one names the Wild Apricot actions it will call, so you know what it reads and what it changes before you send it.
- Readread
Which Wild Apricot invoices are more than 30 days overdue? Group them by customer with the total owed.
calls
wild_apricot.invoices_list - Writewrite
Creates a new invoice in Wild Apricot. Show me exactly what you will send before you save it.
calls
wild_apricot.invoices_create - Across systemsread
Which contacts are in both Wild Apricot and HaloPSA, and how many are in only one of them?
calls
wild_apricot.contacts_listhalopsa.users.list
Across your systems
Wild Apricot, joined to the rest of your business.
One ask fetches from Wild Apricot and another system, joins the rows on the same customer on our side, and hands your agent the answer, not every row.
Which contacts are in both Wild Apricot and HaloPSA, and how many are in only one of them?
wild_apricot.contacts_list+halopsa.users.list, oncrm.contact· HaloPSAWhich contacts are in both Wild Apricot and HubSpot CRM, and how many are in only one of them?
wild_apricot.contacts_list+hubspot_crm.contacts.list, oncrm.contact· HubSpot CRM
crm.contact 192finance.invoice 91finance.payment 53comm.event 47ask { intent: "which contacts are in both Wild Apricot and HaloPSA, and how many are in only one of them", steps: [ { action: "wild_apricot.contacts_list", as: "people", input: {}, limit: 100, max_pages: 5 }, { action: "halopsa.users.list", as: "people2", input: {}, limit: 100, max_pages: 5 }, { join: { left: "people", right: "people2", on: "crm.contact", group_by: "people.email", select: ["people.email", "count(people2.id) as in_halopsa"] } } ]}Governance for Wild Apricot
Destructive actions wait for a yes.
20 Wild Apricot actions are destructive. These are all of them:
- Delete existing invoice
wild_apricot.invoices_delete - Delete existing payment
wild_apricot.payments_delete - Void active invoice
wild_apricot.invoices_void - Completely delete event from system
wild_apricot.events_delete - Delete an archived contact
wild_apricot.contacts_delete - Creates a new refund
wild_apricot.refunds_create - Delete existing refund
wild_apricot.refunds_delete - Allocate refund to specific payment
wild_apricot.payments_allocate_refund - Reject pending membership
wild_apricot.membership_reject_pending - Sends a refund notification email
wild_apricot.email_send_refund - Allocate refund to specific donation
wild_apricot.donations_allocate_refund - Delete existing tender
wild_apricot.tenders_delete - Delete CEU record by ID
wild_apricot.ceu_records_delete - Delete email draft
wild_apricot.email_drafts_delete - removes existing field by id
wild_apricot.contact_fields_delete - Delete product by ID
wild_apricot.store_products_delete - removes existing field by id
wild_apricot.donation_fields_delete - Event registration
wild_apricot.event_registrations_delete - Completely delete event registration type from the system
wild_apricot.event_registration_types_delete - Delete product by source reference ID
wild_apricot.store_products_delete_by_source
A destructive action runs only with confirm: true. Under the human policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.
Delete existing invoice?
intent: the user asked me to delete existing invoice
account { op: "keys.create", name: "wild-apricot-agent", allowed_actions: ["wild_apricot.*"], cap_calls: 2000, confirm_policy: "human_for_writes", approval_rules: [ { match: "wild_apricot.invoices_delete", approver: "[email protected]" }, { match: "wild_apricot.payments_delete", approver: "[email protected]" }, { match: "wild_apricot.invoices_void", approver: "[email protected]" } ]}Cost
What Wild Apricot costs on actionlake.
Every Wild Apricot action is one upstream call, the only thing actionlake bills. Searching, check, cost, account and any call Wild Apricot refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.
- 1upstream call per actionall 120 Wild Apricot actions
- 14actions pageeach page of a long list is one call
- 53reads can be cacheda cache hit costs nothing
- 100,000calls a month, freepaid plans from US$49 a month for 250,000
Action index
Every Wild Apricot action.
120 actions by area: the id your agent calls, what it does, and its effect.
Finance39
wild_apricot.audit_log_items_getSingle audit log itemreadwild_apricot.audit_log_items_listList of Audit log itemsreadwild_apricot.donation_fields_createCreates a new donation fieldwritewild_apricot.donation_fields_deleteremoves existing field by iddestructivewild_apricot.donation_fields_listList of custom fields related to donationsreadwild_apricot.donation_fields_updateUpdates an existing donation fieldwritewild_apricot.donations_allocate_refundAllocate refund to specific donationdestructivewild_apricot.donations_createCreates a new donationwritewild_apricot.donations_getRetrieve information about specific donationreadwild_apricot.donations_listGet list of donations by criteriareadwild_apricot.donations_unallocateUnallocate finance document from specific donationwritewild_apricot.donations_updateUpdate existing donation informationwritewild_apricot.invoices_createCreates a new invoicewritewild_apricot.invoices_deleteDelete existing invoicedestructivewild_apricot.invoices_generate_for_event_registrationGenerate or update invoice for existing event registrationwritewild_apricot.invoices_generate_for_pending_membershipGenerate or update invoice for pending membershipwritewild_apricot.invoices_getRetrieve information about specific invoicereadwild_apricot.invoices_listGet list of invoices by criteriareadwild_apricot.invoices_updateUpdate existing invoice informationwritewild_apricot.invoices_voidVoid active invoicedestructivewild_apricot.payment_allocations_listGet list describing how payments are allocated among invoicesreadwild_apricot.payments_allocate_invoiceAllocate invoice to specific paymentwritewild_apricot.payments_allocate_refundAllocate refund to specific paymentdestructivewild_apricot.payments_createCreates a new paymentwritewild_apricot.payments_deleteDelete existing paymentdestructivewild_apricot.payments_getRetrieve information about specific paymentreadwild_apricot.payments_listGet list of payments by criteriareadwild_apricot.payments_unallocateUnallocate finance document from specific paymentwritewild_apricot.payments_updateUpdate existing payment informationwritewild_apricot.refunds_createCreates a new refunddestructivewild_apricot.refunds_deleteDelete existing refunddestructivewild_apricot.refunds_getRetrieve information about specific refundreadwild_apricot.refunds_listGet list of refunds by criteriareadwild_apricot.refunds_updateUpdate existing refund informationwritewild_apricot.tenders_createCreates a new tenderwritewild_apricot.tenders_deleteDelete existing tenderdestructivewild_apricot.tenders_getRetrieve information about specific tenderreadwild_apricot.tenders_listGet list of tendersreadwild_apricot.tenders_updateUpdate existing tender informationwrite
Events18
wild_apricot.event_registration_types_createCreates a new event registration typewritewild_apricot.event_registration_types_deleteCompletely delete event registration type from the systemdestructivewild_apricot.event_registration_types_getEvent registration type detailsreadwild_apricot.event_registration_types_listEvent registration types listreadwild_apricot.event_registration_types_updateUpdate information about existing event registration typewritewild_apricot.event_registrations_check_inMark event attendee as checked-in (or remove check-in flag)writewild_apricot.event_registrations_createCreates a new event registrationwritewild_apricot.event_registrations_deleteEvent registrationdestructivewild_apricot.event_registrations_getEvent Registration Detailsreadwild_apricot.event_registrations_listEvent Registrations listreadwild_apricot.event_registrations_register_from_waitlistAdd waitlisted person as event attendeewritewild_apricot.event_registrations_updateUpdate event registrationwritewild_apricot.events_cloneClone existed eventwritewild_apricot.events_createCreate a new event recordwritewild_apricot.events_deleteCompletely delete event from systemdestructivewild_apricot.events_getRetrieve information about specific eventreadwild_apricot.events_listEvents listreadwild_apricot.events_updateUpdate information about existing eventwrite
Email17
wild_apricot.email_drafts_count_unique_recipientsGet count of real email recipients (unique addresses)readwild_apricot.email_drafts_deleteDelete email draftdestructivewild_apricot.email_drafts_getEmail draft detailsreadwild_apricot.email_drafts_listEmail draftsreadwild_apricot.email_drafts_previewGet preview version of emailreadwild_apricot.email_drafts_schedulePause or resume scheduled draftwritewild_apricot.email_drafts_sendSend draftwritewild_apricot.email_drafts_unique_addressesGet unique addresses of real email recipientsreadwild_apricot.email_recipients_count_uniqueGet count of real email recipients (unique addresses)readwild_apricot.email_recipients_unique_addressesGet unique addresses of real email recipientsreadwild_apricot.email_sendSend draftwritewild_apricot.email_send_invoiceSends an invoice email based on provided parameterswritewild_apricot.email_send_paymentSends a payment confirmation emailwritewild_apricot.email_send_refundSends a refund notification emaildestructivewild_apricot.sent_email_recipients_listSent email recipientsreadwild_apricot.sent_emails_getSent email detailsreadwild_apricot.sent_emails_listSent emailsread
Contacts15
wild_apricot.contact_fields_createCreates a new contact / membership fieldwritewild_apricot.contact_fields_deleteremoves existing field by iddestructivewild_apricot.contact_fields_listList of custom fields related to contacts and membersreadwild_apricot.contact_fields_updateUpdates an existing contact / membership fieldwritewild_apricot.contacts_accept_terms_of_useAccepts Terms of Usewritewild_apricot.contacts_createCreate a new contact or member recordwritewild_apricot.contacts_deleteDelete an archived contactdestructivewild_apricot.contacts_getRetrieve information about specific member or contactreadwild_apricot.contacts_listContacts listreadwild_apricot.contacts_meRetrieve information about current contactreadwild_apricot.contacts_send_2fa_codeSend 2FA code to current user emailwritewild_apricot.contacts_updateUpdate information about existing member or contactwritewild_apricot.contacts_verify_2fa_codeVerify 2FA code from user emailwritewild_apricot.saved_searches_getSaved Search and found contactsreadwild_apricot.saved_searches_listList of Saved Searchesread
Store11
wild_apricot.store_orders_getstore orders getreadwild_apricot.store_orders_liststore orders listreadwild_apricot.store_orders_set_statusstore orders set statuswritewild_apricot.store_products_createCreate a new productwritewild_apricot.store_products_deleteDelete product by IDdestructivewild_apricot.store_products_delete_by_sourceDelete product by source reference IDdestructivewild_apricot.store_products_getstore products getreadwild_apricot.store_products_listGet list of productsreadwild_apricot.store_products_updateUpdate product by IDwritewild_apricot.store_products_update_by_sourceUpdate product by source reference IDwritewild_apricot.store_products_upload_picturesUpload product pictureswrite
Membership8
wild_apricot.bundles_getGet membership bundle detailsreadwild_apricot.bundles_listGet list of membership bundlesreadwild_apricot.member_groups_getAd Hoc member groupreadwild_apricot.member_groups_listList of Ad Hoc member groupsreadwild_apricot.membership_approve_pendingApprove pending membershipwritewild_apricot.membership_levels_getRetrieve information about specific membership levelreadwild_apricot.membership_levels_listGet list of all membership levelsreadwild_apricot.membership_reject_pendingReject pending membershipdestructive
Ceu6
wild_apricot.ceu_records_createAdd new CEU recordwritewild_apricot.ceu_records_deleteDelete CEU record by IDdestructivewild_apricot.ceu_records_getGet CEU record by IDreadwild_apricot.ceu_records_listGet list of CEU recordsreadwild_apricot.ceu_records_updateUpdate CEU record by IDwritewild_apricot.ceu_records_update_by_external_idUpdate CEU record by source reference Idwrite
Account2
wild_apricot.accounts_getDetails for specific accountreadwild_apricot.accounts_listList of available accountsread
Files2
wild_apricot.attachments_get_infosGet attachments infosreadwild_apricot.attachments_uploadUpload attachmentswrite
Platform2
wild_apricot.api_resources_listBase URL for specific API versionreadwild_apricot.features_getGet information about feature availability for specific accountread
Questions
The Wild Apricot MCP server, answered.
Is there a Wild Apricot MCP server for Claude?
Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 120 Wild Apricot actions across finance, events, email and contacts, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Wild Apricot.
What do I need to connect Wild Apricot?
Client id: enter the literal word APIKEY to authenticate with an API key and API key (Settings > Security > Authorized applications). Plus your account id. The free call account { op: "connections.requirements", service: "wild_apricot" } lists exactly what to paste.
Can an AI agent delete or change things in Wild Apricot?
Only if its key allows it, and only with an explicit confirmation. 20 Wild Apricot actions are destructive, including delete existing invoice, delete existing payment and void active invoice. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.
Will an AI agent use up my Wild Apricot API limit?
actionlake paces every call to the limits in the Wild Apricot service file: 100 calls a minute per connection. Repeated reads are answered from cache (53 Wild Apricot actions can be), which never reaches Wild Apricot.
What does a Wild Apricot action cost?
One upstream call, the only unit actionlake bills. A list that pages bills one call per page (14 Wild Apricot actions page). Cache hits, searches, dry runs and calls Wild Apricot refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.
Which Wild Apricot API does it cover?
The Wild Apricot (Personify) API v2.3 at api.wildapricot.org/v2.3. It is built from Wild Apricot's documentation as read on 23 October 2026. 120 actions in 10 areas, each one in the signed service file (version 1.0.0).
Can I combine Wild Apricot with my other systems?
Yes. ask joins Wild Apricot to HaloPSA or HubSpot CRM on the same customer and returns the answer rather than every row. Wild Apricot maps crm.contact, which 192 other connectors also map.
Does actionlake keep my Wild Apricot data, and where?
actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to an hour, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your Wild Apricot credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.
Which AI clients can use it?
Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.
Give your agent Wild Apricot today.
Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.