civicrm-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CIVICRM_CMS | Yes | The CMS type (drupal, wordpress, standalone, backdrop). | |
| CIVICRM_API_KEY | Yes | The API key for the bot contact. | |
| CIVICRM_BASE_URL | Yes | The base URL of your CiviCRM installation. | |
| CIVICRM_SITE_KEY | No | The site key if the site-key guard is enabled. | |
| CIVICRM_AUTH_MODE | No | Authentication mode: authx or legacy. | |
| CIVICRM_ALLOW_WRITES | No | Enable write tools. | false |
| CIVICRM_ALLOW_DELETES | No | Enable delete tools. | false |
| CIVICRM_TOOLS_ENABLED | No | Comma-separated allowlist of tool names; empty = all. | |
| CIVICRM_TOOLS_DISABLED | No | Comma-separated denylist of tool names; wins over enabled. | |
| CIVICRM_DRY_RUN_DEFAULT | No | Set to true to make every write/delete a dry-run. | false |
| CIVICRM_ALLOW_GENERIC_API | No | Enable generic API passthrough. | false |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| civicrm_system_infoA | Connectivity sanity check — returns CiviCRM version (via Domain entity), the authenticated bot contact, and a count of installed extensions. Run first when debugging auth or URL setup. |
| civicrm_whoamiA | Resolves the authenticated bot contact and probes which CiviCRM entities it can read. Use this first when setting up the server — it surfaces the most common misconfigurations (wrong API key, missing 'authenticate with api key' permission, bot contact lacks 'access CiviCRM'). Does not probe writes. |
| civicrm_find_contactsA | Search CiviCRM contacts by name or primary email. Returns id, display name, type, primary email and phone. |
| civicrm_get_contactA | Fetch a single CiviCRM contact by id. Returns core profile plus primary email/phone/address; pass |
| civicrm_get_relationshipsA | List relationships (family, employer, membership, custom types) for a contact. Resolves the other party's display name and direction automatically. |
| civicrm_get_contributionsA | List contributions (donations, dues, event fees) with optional filters by contact, date window, status, and financial type. Resolves donor display name and human-readable status labels. |
| civicrm_list_eventsA | List CiviEvent events. Defaults to upcoming only. Returns id, title, type, dates, public/online flags. |
| civicrm_list_saved_searchesA | List SavedSearch records (the SearchKit queries an admin has built in the UI). Use this to discover what's available to run via civicrm_run_saved_search. |
| civicrm_run_saved_searchA | Execute a SavedSearch and return its rows via SearchDisplay.run. Pair with civicrm_list_saved_searches to discover available searches. This is the safest and cheapest way to run complex queries — the admin curates the query in the UI, the agent just calls it by name. |
| civicrm_list_entitiesA | List all CiviCRM APIv4 entities available on this install (including those added by extensions). Optional substring filter. |
| civicrm_describe_entityA | Introspect an APIv4 entity — returns available fields (incl. custom fields) and actions. Call this before civicrm_api4 when unsure of field names or action support. |
| civicrm_describe_field_optionsA | Return the option list (pseudoconstant values) for a single field on an entity. Far cheaper than civicrm_describe_entity when you only need to know the valid values for one enum-like field — e.g. 'what are the legal activity_type values'. |
| civicrm_create_contactB | Create a new CiviCRM contact. Chains email and phone creation when provided. Requires CIVICRM_ALLOW_WRITES=true. |
| civicrm_update_contactA | Update fields on a single CiviCRM contact by id. Requires CIVICRM_ALLOW_WRITES=true. |
| civicrm_log_activityB | Record an Activity against a target contact. Requires CIVICRM_ALLOW_WRITES=true. |
| civicrm_record_contributionB | Record a donation / contribution for a contact. Requires CIVICRM_ALLOW_WRITES=true. |
| civicrm_add_to_groupA | Add a contact to a group (GroupContact status='Added'). Idempotent — updates an existing row rather than creating duplicates. Requires CIVICRM_ALLOW_WRITES=true. |
| civicrm_remove_from_groupA | Mark a contact as Removed from a group (GroupContact status='Removed'). Preserves history — does not hard-delete. Requires CIVICRM_ALLOW_WRITES=true. |
| civicrm_register_for_eventA | Create a Participant record registering a contact for an event. Requires CIVICRM_ALLOW_WRITES=true. |
| civicrm_create_membershipA | Create a Membership record for a contact. CiviCRM will auto-calculate start/end dates from the membership type's duration if omitted. Requires CIVICRM_ALLOW_WRITES=true. |
| civicrm_add_noteA | Attach a free-text Note to a contact, contribution, activity, case, or relationship. Requires CIVICRM_ALLOW_WRITES=true. Notes are the right place for unstructured context that doesn't belong in a custom field. |
| civicrm_tag_contactsA | Add a tag to one or more contacts in a single call. Idempotent — re-tagging an already-tagged contact is a no-op. Requires CIVICRM_ALLOW_WRITES=true. |
| civicrm_untag_contactsA | Remove a tag from one or more contacts in a single call. Requires CIVICRM_ALLOW_WRITES=true AND CIVICRM_ALLOW_DELETES=true (EntityTag rows are hard-deleted). |
| civicrm_send_contribution_receiptA | Send (or re-send) the standard receipt email for a contribution. Wraps Contribution.sendconfirmation. Requires CIVICRM_ALLOW_WRITES=true because the call triggers an outbound email. |
| civicrm_api4A | Generic APIv4 call. Accepts entity + action + params. Disabled unless CIVICRM_ALLOW_GENERIC_API=true; writes additionally need CIVICRM_ALLOW_WRITES and deletes need CIVICRM_ALLOW_DELETES. Use civicrm_describe_entity first if unsure of field names. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/YogiAdhik/civicrm-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server