Skip to content

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/mcp
the first call
do {  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.

  1. 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
  2. 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 key
    • api_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
  3. 03

    Make the first call. Check before a write.

    Ask in plain words; Claude picks the action. Before anything changes, check validates 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.3api.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
  1. Finance

    39

    14 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

  2. Events

    18

    6 read · 9 write · 3 destructive

    Events list · Create a new event record · Retrieve information about specific event · Update information about existing event

  3. Email

    17

    10 read · 5 write · 2 destructive

    Get count of real email recipients (unique addresses) · Email drafts · Get preview version of email · Send draft

  4. Contacts

    15

    6 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

  5. Store

    11

    4 read · 5 write · 2 destructive

    store orders list · Create a new product · Get list of products · Upload product pictures

  6. Membership

    8

    6 read · 1 write · 1 destructive

    Get list of all membership levels · Approve pending membership · Retrieve information about specific membership level · Reject pending membership

  7. Ceu

    6

    2 read · 3 write · 1 destructive

    Add new CEU record · Get list of CEU records · Get CEU record by ID · Update CEU record by ID

  8. Account

    2

    2 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.

ActionWhat it doesEffectSame name in
wild_apricot.invoices_listGet list of invoices by criteriaGet list of invoices by criteria.readfinance.invoice.list101 connectors
wild_apricot.payments_listGet list of payments by criteriaGet list of payments by criteria.readfinance.payment.list75 connectors
wild_apricot.events_listEvents listEvents listreadcomm.event.list61 connectors
wild_apricot.invoices_createCreates a new invoiceCreates a new invoice.writefinance.invoice.create74 connectors
wild_apricot.contacts_listContacts listContacts listreadcrm.contact.list177 connectors
wild_apricot.payments_createCreates a new paymentCreates a new payment.writefinance.payment.create67 connectors
wild_apricot.events_createCreate a new event recordCreate a new event recordwritecomm.event.create52 connectors
wild_apricot.contacts_createCreate a new contact or member recordCreate a new contact or member recordwritecrm.contact.create161 connectors
wild_apricot.refunds_listGet list of refunds by criteriaGet list of refunds by criteria.readfinance.refund.list23 connectors
wild_apricot.refunds_createCreates a new refundCreates a new refund.destructivefinance.refund.create19 connectors
wild_apricot.events_cloneClone existed eventClone existed event.writethis connector
wild_apricot.contacts_send_2fa_codeSend 2FA code to current user emailSend 2FA code to current user email.writethis 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.

  1. Readread

    Which Wild Apricot invoices are more than 30 days overdue? Group them by customer with the total owed.

    callswild_apricot.invoices_list

  2. Writewrite

    Creates a new invoice in Wild Apricot. Show me exactly what you will send before you save it.

    callswild_apricot.invoices_create

  3. Across systemsread

    Which contacts are in both Wild Apricot and HaloPSA, and how many are in only one of them?

    callswild_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, on crm.contact · HaloPSA

  • Which 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, on crm.contact · HubSpot CRM

Also mapped by other connectorscrm.contact 192finance.invoice 91finance.payment 53comm.event 47
ask
ask {  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"]    } }  ]}
Example. Run it through check first: it validates the steps and prices them, and it is free.

Governance for Wild Apricot

Destructive actions wait for a yes.

20 Wild Apricot actions are destructive. These are all of them:

  • Delete existing invoicewild_apricot.invoices_delete
  • Delete existing paymentwild_apricot.payments_delete
  • Void active invoicewild_apricot.invoices_void
  • Completely delete event from systemwild_apricot.events_delete
  • Delete an archived contactwild_apricot.contacts_delete
  • Creates a new refundwild_apricot.refunds_create
  • Delete existing refundwild_apricot.refunds_delete
  • Allocate refund to specific paymentwild_apricot.payments_allocate_refund
  • Reject pending membershipwild_apricot.membership_reject_pending
  • Sends a refund notification emailwild_apricot.email_send_refund
  • Allocate refund to specific donationwild_apricot.donations_allocate_refund
  • Delete existing tenderwild_apricot.tenders_delete
  • Delete CEU record by IDwild_apricot.ceu_records_delete
  • Delete email draftwild_apricot.email_drafts_delete
  • removes existing field by idwild_apricot.contact_fields_delete
  • Delete product by IDwild_apricot.store_products_delete
  • removes existing field by idwild_apricot.donation_fields_delete
  • Event registrationwild_apricot.event_registrations_delete
  • Completely delete event registration type from the systemwild_apricot.event_registration_types_delete
  • Delete product by source reference IDwild_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.

dowild_apricot.invoices_deleteconfirm_policy: human

Delete existing invoice?

intent: the user asked me to delete existing invoice

run suspended · waiting for a named person · key wild-apricot-agent cannot confirm itself
In the console, or from an emailed signed link.
a key for this connector
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]" }  ]}
Illustrative. Scoped to Wild Apricot only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

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

See pricing

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 itemread
  • wild_apricot.audit_log_items_listList of Audit log itemsread
  • wild_apricot.donation_fields_createCreates a new donation fieldwrite
  • wild_apricot.donation_fields_deleteremoves existing field by iddestructive
  • wild_apricot.donation_fields_listList of custom fields related to donationsread
  • wild_apricot.donation_fields_updateUpdates an existing donation fieldwrite
  • wild_apricot.donations_allocate_refundAllocate refund to specific donationdestructive
  • wild_apricot.donations_createCreates a new donationwrite
  • wild_apricot.donations_getRetrieve information about specific donationread
  • wild_apricot.donations_listGet list of donations by criteriaread
  • wild_apricot.donations_unallocateUnallocate finance document from specific donationwrite
  • wild_apricot.donations_updateUpdate existing donation informationwrite
  • wild_apricot.invoices_createCreates a new invoicewrite
  • wild_apricot.invoices_deleteDelete existing invoicedestructive
  • wild_apricot.invoices_generate_for_event_registrationGenerate or update invoice for existing event registrationwrite
  • wild_apricot.invoices_generate_for_pending_membershipGenerate or update invoice for pending membershipwrite
  • wild_apricot.invoices_getRetrieve information about specific invoiceread
  • wild_apricot.invoices_listGet list of invoices by criteriaread
  • wild_apricot.invoices_updateUpdate existing invoice informationwrite
  • wild_apricot.invoices_voidVoid active invoicedestructive
  • wild_apricot.payment_allocations_listGet list describing how payments are allocated among invoicesread
  • wild_apricot.payments_allocate_invoiceAllocate invoice to specific paymentwrite
  • wild_apricot.payments_allocate_refundAllocate refund to specific paymentdestructive
  • wild_apricot.payments_createCreates a new paymentwrite
  • wild_apricot.payments_deleteDelete existing paymentdestructive
  • wild_apricot.payments_getRetrieve information about specific paymentread
  • wild_apricot.payments_listGet list of payments by criteriaread
  • wild_apricot.payments_unallocateUnallocate finance document from specific paymentwrite
  • wild_apricot.payments_updateUpdate existing payment informationwrite
  • wild_apricot.refunds_createCreates a new refunddestructive
  • wild_apricot.refunds_deleteDelete existing refunddestructive
  • wild_apricot.refunds_getRetrieve information about specific refundread
  • wild_apricot.refunds_listGet list of refunds by criteriaread
  • wild_apricot.refunds_updateUpdate existing refund informationwrite
  • wild_apricot.tenders_createCreates a new tenderwrite
  • wild_apricot.tenders_deleteDelete existing tenderdestructive
  • wild_apricot.tenders_getRetrieve information about specific tenderread
  • wild_apricot.tenders_listGet list of tendersread
  • wild_apricot.tenders_updateUpdate existing tender informationwrite
Events18
  • wild_apricot.event_registration_types_createCreates a new event registration typewrite
  • wild_apricot.event_registration_types_deleteCompletely delete event registration type from the systemdestructive
  • wild_apricot.event_registration_types_getEvent registration type detailsread
  • wild_apricot.event_registration_types_listEvent registration types listread
  • wild_apricot.event_registration_types_updateUpdate information about existing event registration typewrite
  • wild_apricot.event_registrations_check_inMark event attendee as checked-in (or remove check-in flag)write
  • wild_apricot.event_registrations_createCreates a new event registrationwrite
  • wild_apricot.event_registrations_deleteEvent registrationdestructive
  • wild_apricot.event_registrations_getEvent Registration Detailsread
  • wild_apricot.event_registrations_listEvent Registrations listread
  • wild_apricot.event_registrations_register_from_waitlistAdd waitlisted person as event attendeewrite
  • wild_apricot.event_registrations_updateUpdate event registrationwrite
  • wild_apricot.events_cloneClone existed eventwrite
  • wild_apricot.events_createCreate a new event recordwrite
  • wild_apricot.events_deleteCompletely delete event from systemdestructive
  • wild_apricot.events_getRetrieve information about specific eventread
  • wild_apricot.events_listEvents listread
  • wild_apricot.events_updateUpdate information about existing eventwrite
Email17
  • wild_apricot.email_drafts_count_unique_recipientsGet count of real email recipients (unique addresses)read
  • wild_apricot.email_drafts_deleteDelete email draftdestructive
  • wild_apricot.email_drafts_getEmail draft detailsread
  • wild_apricot.email_drafts_listEmail draftsread
  • wild_apricot.email_drafts_previewGet preview version of emailread
  • wild_apricot.email_drafts_schedulePause or resume scheduled draftwrite
  • wild_apricot.email_drafts_sendSend draftwrite
  • wild_apricot.email_drafts_unique_addressesGet unique addresses of real email recipientsread
  • wild_apricot.email_recipients_count_uniqueGet count of real email recipients (unique addresses)read
  • wild_apricot.email_recipients_unique_addressesGet unique addresses of real email recipientsread
  • wild_apricot.email_sendSend draftwrite
  • wild_apricot.email_send_invoiceSends an invoice email based on provided parameterswrite
  • wild_apricot.email_send_paymentSends a payment confirmation emailwrite
  • wild_apricot.email_send_refundSends a refund notification emaildestructive
  • wild_apricot.sent_email_recipients_listSent email recipientsread
  • wild_apricot.sent_emails_getSent email detailsread
  • wild_apricot.sent_emails_listSent emailsread
Contacts15
  • wild_apricot.contact_fields_createCreates a new contact / membership fieldwrite
  • wild_apricot.contact_fields_deleteremoves existing field by iddestructive
  • wild_apricot.contact_fields_listList of custom fields related to contacts and membersread
  • wild_apricot.contact_fields_updateUpdates an existing contact / membership fieldwrite
  • wild_apricot.contacts_accept_terms_of_useAccepts Terms of Usewrite
  • wild_apricot.contacts_createCreate a new contact or member recordwrite
  • wild_apricot.contacts_deleteDelete an archived contactdestructive
  • wild_apricot.contacts_getRetrieve information about specific member or contactread
  • wild_apricot.contacts_listContacts listread
  • wild_apricot.contacts_meRetrieve information about current contactread
  • wild_apricot.contacts_send_2fa_codeSend 2FA code to current user emailwrite
  • wild_apricot.contacts_updateUpdate information about existing member or contactwrite
  • wild_apricot.contacts_verify_2fa_codeVerify 2FA code from user emailwrite
  • wild_apricot.saved_searches_getSaved Search and found contactsread
  • wild_apricot.saved_searches_listList of Saved Searchesread
Store11
  • wild_apricot.store_orders_getstore orders getread
  • wild_apricot.store_orders_liststore orders listread
  • wild_apricot.store_orders_set_statusstore orders set statuswrite
  • wild_apricot.store_products_createCreate a new productwrite
  • wild_apricot.store_products_deleteDelete product by IDdestructive
  • wild_apricot.store_products_delete_by_sourceDelete product by source reference IDdestructive
  • wild_apricot.store_products_getstore products getread
  • wild_apricot.store_products_listGet list of productsread
  • wild_apricot.store_products_updateUpdate product by IDwrite
  • wild_apricot.store_products_update_by_sourceUpdate product by source reference IDwrite
  • wild_apricot.store_products_upload_picturesUpload product pictureswrite
Membership8
  • wild_apricot.bundles_getGet membership bundle detailsread
  • wild_apricot.bundles_listGet list of membership bundlesread
  • wild_apricot.member_groups_getAd Hoc member groupread
  • wild_apricot.member_groups_listList of Ad Hoc member groupsread
  • wild_apricot.membership_approve_pendingApprove pending membershipwrite
  • wild_apricot.membership_levels_getRetrieve information about specific membership levelread
  • wild_apricot.membership_levels_listGet list of all membership levelsread
  • wild_apricot.membership_reject_pendingReject pending membershipdestructive
Ceu6
  • wild_apricot.ceu_records_createAdd new CEU recordwrite
  • wild_apricot.ceu_records_deleteDelete CEU record by IDdestructive
  • wild_apricot.ceu_records_getGet CEU record by IDread
  • wild_apricot.ceu_records_listGet list of CEU recordsread
  • wild_apricot.ceu_records_updateUpdate CEU record by IDwrite
  • wild_apricot.ceu_records_update_by_external_idUpdate CEU record by source reference Idwrite
Account2
  • wild_apricot.accounts_getDetails for specific accountread
  • wild_apricot.accounts_listList of available accountsread
Files2
  • wild_apricot.attachments_get_infosGet attachments infosread
  • wild_apricot.attachments_uploadUpload attachmentswrite
Platform2
  • wild_apricot.api_resources_listBase URL for specific API versionread
  • wild_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.