# EveryAction MCP connector

The EveryAction connector brings supporters, contributions, events, and survey questions into Claude, ChatGPT, Cursor, and the Elaichi Agent, so each person on your team can search, record, and update EveryAction records as themselves, with every action logged.

Source: https://elaichi.ai/connectors/everyaction/

## Facts

| | |
| --- | --- |
| Application | EveryAction |
| Category | CRM |
| AI tools | 29 |
| Authentication | Connects with an API key |
| Needs your own OAuth app | No |
| MCP endpoint | https://api.elaichi.ai/mcp |
| Works with | Claude, ChatGPT, Cursor, any MCP client, and the Elaichi Agent |
| Tools advertised by name | Yes |

## What you can ask once EveryAction is connected

- Search EveryAction people in Ohio added this week.
- Total contributions logged this month by activist code.
- Create an EveryAction event for the Saturday canvass.

## Connect EveryAction in Elaichi

This happens once for the organization, before any client is involved.

1. Open Connections, choose Add connection, and pick EveryAction.
2. Optionally set Share with, then press Connect.
3. Paste an EveryAction API key. One person generates a token in EveryAction and pastes it once. Everyone else works through Share with, and never sees it.

Credentials are vaulted and nobody, including the AI, reads them back. The connection becomes a toolbox immediately, so you can curate which EveryAction tools are exposed, rename them, or freeze arguments before anyone points a client at it.

## Connect EveryAction to Claude

Endpoint: https://api.elaichi.ai/mcp

1. Open Customize, then Connectors.
2. Press Add.
3. Name it, paste the MCP server URL, then Continue.
4. Sign in and approve.

On Team and Enterprise, an Owner adds it once. Everyone else turns it on for themselves.

## Connect EveryAction to ChatGPT

Endpoint: https://api.elaichi.ai/mcp

1. Open Plugins, then press the + button.
2. Name it and paste the endpoint into Server URL.
3. Leave Authentication on OAuth, then tick the risk acknowledgement.
4. Press Create, then sign in and approve.

Works on the web today. The plugin directory lives at chatgpt.com/plugins.

## Connect EveryAction to Cursor

Endpoint: https://api.elaichi.ai/mcp

1. Open `~/.cursor/mcp.json`.
2. Add the endpoint under `mcpServers`.
3. Reload Cursor, then sign in and approve.

Set up per machine, so repeat it on each computer you work from.

## Connect EveryAction to any MCP client

Endpoint: https://api.elaichi.ai/mcp

1. Add the endpoint as a remote MCP server.
2. Sign in and approve.

The Elaichi Agent already has these tools, with nothing to set up.

## What the consent screen decides

Only Read is granted by default, which is not enough to call a EveryAction tool. Over MCP there is no trusted place to confirm a write in the moment, so the consent screen is the standing approval rather than a formality. Grant Read and Run tools. Think hard before granting Delete, which reaches into connected apps and cannot be undone.

## What teams do with EveryAction through Elaichi

### Log a gift right after the call

Development. After a donor conversation, record the contribution in EveryAction and set up their pledge as a commitment, without leaving the conversation you are already in.

### Look up a supporter before you call

Organizing. Search EveryAction for a person by name or email and see the activist codes and scores attached to them before you pick up the phone or knock on the door.

### Set up a canvass or house party

Events. Create the event in EveryAction from the details in your planning notes, so it is ready for shifts and sign-ups the moment the date is confirmed.

### Keep the survey script current

Field. Add a new survey question or reword an existing one in EveryAction as the script changes, and update a worksite when its details move.

### Submit registration forms as a batch

Voter registration. Turn a stack of completed voter registration forms into a batch in EveryAction, and check the early vote fields your program tracks.

### Reconcile contributions against disbursements

Finance. Pull the contributions and disbursements recorded in EveryAction for a period and check them against your books before the filing deadline.

## Frequently asked questions

### How do I connect EveryAction to Claude?

There are two steps. First, in Elaichi, choose EveryAction and paste the API key from your EveryAction account; there is no OAuth application to register and no client ID or secret to generate. Then in Claude go to Customize, then Connectors, then Add, and paste https://api.elaichi.ai/mcp. Sign in as yourself and EveryAction is available in your next conversation.

### Does EveryAction work with ChatGPT and Cursor as well as Claude?

Yes. Once EveryAction is connected in Elaichi, the same endpoint, https://api.elaichi.ai/mcp, works in Claude, ChatGPT, Cursor, any other MCP client, and the Elaichi Agent. You connect EveryAction once and every client uses it, with the same access and the same log.

### What can an AI agent actually do with my EveryAction data?

An agent can search EveryAction for a supporter and read the activist codes and scores on their record, record a contribution or a pledge commitment, and create an event. It can add or reword survey questions, submit a batch of voter registration forms, update a worksite, and start a bulk import from a list you already have. It can also list contributions, disbursements, folders, printed lists, and MiniVAN exports so you can ask questions about them in plain language.

### Does connecting EveryAction give the AI access to my whole committee database?

No. The agent works inside what the connected EveryAction account is allowed to see, and each person signs in to Elaichi as themselves, so every request runs under their own access. Elaichi can narrow that further by team or by action, and it can never widen it beyond what EveryAction itself allows.

### Can my team share one EveryAction connection?

Yes. One person connects EveryAction in Elaichi and shares the connection with a team, and nobody else ever handles the API key. Each teammate still signs in to Elaichi as themselves, so the audit log names the person who searched for a supporter or recorded a contribution, not the person who set up the connection.

### Can I stop an agent from deleting or changing things in EveryAction?

Yes. Restrictions in Elaichi work per action, so you can allow searching people and listing contributions in EveryAction while blocking deleting employers, creating contributions, or changing survey questions. A blocked action is never shown to Claude, ChatGPT, Cursor, or any other client at all, so no prompt can reach it.

### What happens to an EveryAction connection when someone leaves?

Offboarding the person in Elaichi ends their access to EveryAction at once, in every client they used. A shared EveryAction connection keeps working for everyone else on the team. If you want to remove EveryAction entirely, disconnecting it once in Elaichi removes it from Claude, ChatGPT, Cursor, and every other client together.

## All 29 EveryAction tools

Every tool below is callable through https://api.elaichi.ai/mcp once EveryAction is connected, subject to the toolbox it is in and the restrictions on the caller.

- **List all EveryAction API key profiles** (List). List API key profiles via the EveryAction introspection endpoint, which returns information about the API key currently in use. Returns: databaseName, hasMyVoters, hasMyCampaign, committeeName, apiKeyTypeName, keyReference, userFirstName, userLastName, username, userId.
- **EveryAction people search** (Search). Search for a person in EveryAction using a match candidate such as name, date of birth, phone, or email. Returns: vanId, firstName, lastName, middleName, party, employer, occupation, sex, dateOfBirth, person, customProperties. Providing a valid vanId overrides other search criteria.
- **Get single EveryAction activist code by ID** (Get). Get a specific Activist Code in EveryAction by its id. Returns: activistCodeId, type, name, mediumName, shortName, description, scriptQuestion, status. Required: id (either an integer or a VAN encoded identifier such as EID28CG).
- **Create a EveryAction bulk import job** (Create). Create a bulk import job in EveryAction by specifying a zipped, delimited file URL and the actions to perform on its data. Supports creating and/or updating Contacts, Contributions, ActivistCodes, and ContactsActivistCodes. Returns: jobId, file, actions. Required: description, file, actions. The zipped file must be no more than 20 MB and the source URL must use SFTP, FTPS, or HTTPS.
- **Create a EveryAction commitment** (Create). Create a Recurring Commitment record in EveryAction and process or initiate the first installment contribution with payment details in the request body. Returns: commitmentId, contributionId. Required: contact, designation, gatewayId, startDate, frequency, amount, paymentMethod. Amount must be $0.01–$999,999.99; an Idempotency-Key header is required.
- **List all EveryAction contributions** (List). List recent contributions in EveryAction filtered by vanId. Returns: contactsContributionId, vanId, donorName, donorNameFirstLast, designationId, designationName, dateReceived, amount, amountRemaining, amountRefunded, period, cycle, sourceCodeId, sourceCodeName, sourceCodeDescription, sourceCodeStaticPath, type. Required: vanId.
- **Create a EveryAction contribution** (Create). Create and process a contribution payment in EveryAction with the provided payment information. Returns the integer ID of the created contribution. Required: contact, designation, gatewayId, amount, paymentMethod. Amount must be between $0.01 and $999,999.99 inclusive.
- **List all EveryAction disbursements** (List). List recent disbursements in EveryAction filtered by vanId. Returns: contactsDisbursementId, vanId, designationId, date, amount, purpose, period, cycle, sourceCodeName, sourceCodeDescription, sourceCodeStaticPath. Required: vanId. Default page size of 6.
- **List all EveryAction early vote fields** (List). List early vote fields in EveryAction with optional status filtering. Returns: earlyVoteFieldId, name, type, status, values. The statuses parameter accepts a comma-delimited list of Active and Inactive. Defaults to Active,Inactive.
- **Get single EveryAction early vote field by ID** (Get). Get a single early vote field by id in EveryAction. Returns: earlyVoteFieldId, name, type, status, values, openapi, info, servers, components, security, paths, x-readme, x-readme-fauxas. Required: id.
- **Delete a EveryAction employer by ID** (Delete). Delete the relationship or link between an Employer and a BargainingUnit in EveryAction by proxy id. This only removes the relation between them, not the entities themselves. Returns an empty 200 response on success. Required: employer_id, id.
- **Create a EveryAction event** (Create). Create a new Event in EveryAction. Returns the integer ID of the newly created Event in the response body. Required: event.
- **Create a EveryAction file loading job** (Create). Create a file-loading job in EveryAction by specifying a zipped CSV source file and the action(s) to perform on it. Returns: jobId, listeners, file, actions. Required: description, file (including fileName, sourceUrl, and columns), and actions. Supports Score Load, AV/EV Data File, Saved List Load, and Phones File action types.
- **List all EveryAction folders** (List). List all Map Regions in an EveryAction folder. Returns: mapRegionId, name, description, dateCreated, dateRefreshed, mapRoutes. Required: folder_id.
- **Get single EveryAction folder by ID** (Get). Get a specific Map Region in an EveryAction folder by id. Returns: mapRegionId, name, description, dateCreated, dateRefreshed, mapRoutes, openapi, info, servers, components, security, paths, x-readme, x-readme-fauxas. Required: folder_id, id.
- **EveryAction folders refresh** (Refresh). Refresh all Map Regions in an EveryAction folder. Returns an empty object on success. Required: folder_id.
- **EveryAction folders refresh item** (Refresh). Refresh a specific Map Region in an EveryAction folder. Returns an empty object on success. Required: folder_id, map_region_id.
- **List all EveryAction minivan exports** (List). List all available MiniVAN Exports in EveryAction. Returns: minivanExportId, name, dateCreated, createdBy, canvassers, eventSignups, databaseMode.
- **List all EveryAction printed lists** (List). List all available Printed Lists in EveryAction, with optional filters by generation date, creator, folder, or turf. Returns: number, name, eventSignups, listSize, folders, dateCreated, createdBy.
- **List all EveryAction scores** (List). List committee access details for a specific Score in EveryAction. Returns: scoreId, scoreName, ownerCommittee, committeesWithAccess. Required: score_id.
- **Create a EveryAction survey question** (Create). Create a new Survey Question in EveryAction. Returns an empty object on success. Required: type, cycle, name, nameOtherLanguage, mediumName, mediumNameOtherLanguage, shortName, shortNameOtherLanguage, scriptQuestion, scriptQuestionOtherLanguage, status, scope, and responses.
- **Update a EveryAction survey question by ID** (Update). Update an existing Survey Question in EveryAction by id. Returns an empty object on success. Required: id, surveyQuestionId, type, cycle, name, nameOtherLanguage, mediumName, mediumNameOtherLanguage, shortName, shortNameOtherLanguage, scriptQuestion, scriptQuestionOtherLanguage, status, and responses.
- **Create a EveryAction voter registration batch** (Create). Add registrants to a Voter Registration Batch in EveryAction. Returns an array of per-registrant result objects with alternateId, vanId, result, and errors. Required: batch_id. Up to 25 registrants per request; the body must be a bare JSON array without a wrapping key.
- **Update a EveryAction worksite by ID** (Update). Update an existing Worksite in EveryAction. Returns: worksiteId, name, isPreferred, address, employer, workAreas, openapi, info, servers, components, security, paths, x-readme, x-readme-fauxas. Required: id, isPreferred.
- **Delete a EveryAction worksite by ID** (Delete). Delete an existing Worksite in EveryAction by id. Returns an empty 200 response on success. Required: id.
- **Delete a EveryAction employer bargaining unit job class by ID** (Delete). Delete the relationship or link between an Employer, BargainingUnit, and JobClass in EveryAction. This removes only the association between the three entities, not the entities themselves. Returns an empty 200 response on success. Required: employer_id, bargaining_unit_id, id.
- **Delete a EveryAction employer shift type by ID** (Delete). Delete the relationship between an Employer and a ShiftType in EveryAction. This removes the link without modifying either the Employer or the ShiftType itself. Returns an empty 200 response on success. Required: employer_id, id.
- **Update a EveryAction work area by ID** (Update). Update an existing WorkArea in EveryAction. Returns: workAreaId, name, openapi, info, servers, components, security, paths, x-readme, x-readme-fauxas. Required: id, worksite_id.
- **Delete a EveryAction work area by ID** (Delete). Delete an existing WorkArea in EveryAction. Returns an empty 204 response on success. Required: id, worksite_id.
