capsulemcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CAPSULE_API_TOKEN | Yes | Your Capsule API token | |
| CAPSULE_MCP_READONLY | No | Set to '1' to enable read-only mode (disables write tools) | 0 |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_partiesA | Free-text search or list people and organisations in Capsule CRM. Returns results in Capsule's default order (no sort parameter is supported here). For structured queries — 'most recent', 'tagged X', 'added this month' — use filter_parties instead. |
| filter_partiesA | Filter parties by structured conditions (date ranges, tags, fields). Use this — not search_parties — for questions like 'most recent client', 'parties added this week', 'parties tagged VIP'. Capsule's API does not support ad-hoc sort, but for 'most recent X' you can filter by a date field (e.g. {field: 'addedOn', operator: 'is within last', value: 30}) and pick the highest-id row from the result — Capsule IDs are monotonic, so newest id = newest record. |
| get_partyA | Fetch a single party (person or organisation) by its numeric ID. |
| get_partiesA | Batch-fetch up to 10 parties by ID in a single call. Use this when Claude already knows several party IDs to avoid N round trips of get_party. |
| list_party_opportunitiesC | List all opportunities linked to a given party. |
| list_party_projectsC | List all projects (cases) linked to a given party. |
| list_employeesA | List the people who work at a given organisation party. Returns the parties whose |
| list_custom_fieldsA | List custom field DEFINITIONS for an entity type (parties, opportunities, or projects/kases). Returns the schema — name, type, options for list-type fields, etc. — NOT the values on any specific record. To read values on a record, use get_party / get_opportunity / get_project with embed=fields. |
| get_custom_fieldA | Show a single custom field DEFINITION by id. Use list_custom_fields first to discover field ids. |
| list_deleted_partiesA | Audit feature: list parties deleted on or after a given timestamp. The |
| create_partyA | Create a new person or organisation in Capsule CRM. For type='person', firstName or lastName is required (one suffices); the |
| update_partyA | Update top-level fields on an existing party (about, firstName/lastName/name/title/jobTitle, ownerId). Only the fields you provide are changed. Child arrays (emailAddresses / phoneNumbers / addresses / websites) on this tool are APPEND-ONLY: items are merged into the existing list, not replaced. For surgical changes — replacing one email, removing one phone number, fixing the type on one address — use the dedicated atomic tools: add_party_email_address / remove_party_email_address_by_id (and the phone/address/website equivalents). |
| delete_partyA | DESTRUCTIVE & IRREVERSIBLE: permanently delete a party (person or organisation). Cascades to all linked notes, tasks, opportunities, AND projects (kases). Deleting an organisation does NOT delete people linked to it via organisationId — their |
| add_party_email_addressA | Append a single email address to a party. Atomic — one PUT to Capsule. Use this instead of update_party.emailAddresses when you want to add exactly one entry; the bulk array on update_party is append-only and won't replace. |
| remove_party_email_address_by_idA | Remove one email-address entry from a party by its row id. Atomic and reversible — no |
| add_party_phone_numberA | Append a single phone number to a party. Atomic — one PUT to Capsule. Use this instead of update_party.phoneNumbers for single-entry adds. |
| remove_party_phone_number_by_idA | Remove one phone-number entry from a party by its row id. Atomic and reversible — no |
| add_party_addressA | Append a single postal address to a party. Atomic — one PUT to Capsule. Use this instead of update_party.addresses for single-entry adds. |
| remove_party_address_by_idA | Remove one address entry from a party by its row id. Atomic and reversible — no |
| add_party_websiteA | Append a single website / social handle to a party. Atomic — one PUT to Capsule. Use this instead of update_party.websites for single-entry adds. The 'address' field is a URL when service='URL' or a handle (e.g. '@acmeco') for social services. |
| remove_party_website_by_idA | Remove one website entry from a party by its row id. Atomic and reversible — no |
| search_opportunitiesA | Free-text search or list opportunities in Capsule CRM. Returns results in Capsule's default order (no sort parameter is supported here). For structured queries — 'most recent', 'won this quarter', 'in pipeline X at milestone Y' — use filter_opportunities instead. |
| filter_opportunitiesA | Filter opportunities by structured conditions (milestone, value, close date, tags). Use this — not search_opportunities — for questions like 'last won deal', 'opportunities closed this month', 'pipeline X at milestone Y'. Capsule's API does not support ad-hoc sort, but for 'most recent X' you can filter by a date field (e.g. {field: 'closedOn', operator: 'is within last', value: 90}) and pick the highest-id row — Capsule IDs are monotonic, so newest id = newest record. |
| get_opportunityB | Fetch a single opportunity by its numeric ID. |
| get_opportunitiesA | Batch-fetch up to 10 opportunities by ID in a single call. |
| list_deleted_opportunitiesA | Audit feature: list opportunities deleted on or after a given timestamp. The |
| list_additional_partiesA | List secondary party links on an opportunity or project. The 'main' party is on the entity itself (opportunity.party); additional parties are e.g. partners, consultants, or referrers also involved in the deal. Set entity to 'opportunities' or 'kases' (Capsule's term for projects). |
| list_associated_projectsB | List projects (cases) associated with a given opportunity. The inverse direction (project → opportunity) is on each project's |
| create_opportunityC | Create a new opportunity linked to a party and a pipeline milestone. |
| update_opportunityA | Update fields on an existing opportunity. Only the fields you provide are changed. Closed (Won/Lost) opportunities ARE editable — Capsule does not enforce closed-record immutability, so |
| delete_opportunityA | DESTRUCTIVE & IRREVERSIBLE: permanently delete an opportunity. Requires confirm=true. Always read the opportunity first with get_opportunity and confirm with the user before calling. Idempotent on retry: response is |
| list_projectsA | List projects (cases) in Capsule CRM, optionally filtered by status. Returns results in Capsule's default order (no sort parameter is supported here). For structured queries — 'most recent project', 'projects opened this month', 'projects tagged X' — use filter_projects instead. |
| filter_projectsA | Filter projects (cases) by structured conditions (date ranges, status, tags, owner). Use this — not list_projects — for questions like 'most recent project', 'projects opened this month'. Capsule's API does not support ad-hoc sort, but for 'most recent X' you can filter by a date field and pick the highest-id row — Capsule IDs are monotonic, so newest id = newest record. |
| get_projectA | Fetch a single project (case) by its numeric ID. |
| get_projectsA | Batch-fetch up to 10 projects (cases) by ID in a single call. |
| list_deleted_projectsA | Audit feature: list projects deleted on or after a given timestamp. The |
| create_projectB | Create a new project (case) in Capsule CRM linked to a party. |
| update_projectA | Update fields on an existing project. Only the fields you provide are changed. Use status='CLOSED' to close a project. CLOSED projects remain fully editable — Capsule does not enforce closed-record immutability. Stage moves and description edits on a CLOSED project are accepted without warning. |
| delete_projectA | DESTRUCTIVE & IRREVERSIBLE: permanently delete a project (case). Prefer update_project with status='CLOSED' to close a project while preserving history. Requires confirm=true. Always read the project first with get_project and confirm with the user before calling. Idempotent on retry: response is |
| add_additional_partyA | Link an existing party as an additional (secondary) party on an opportunity or project. The 'main' party is set via update_opportunity / update_project; this adds additional parties beyond the main one. Idempotent — re-adding a linked party is harmless. Response: |
| remove_additional_partyA | Remove an additional-party link between an opportunity/project and a party. The party itself is NOT deleted. Requires confirm=true. Reversible by re-adding via add_additional_party. Idempotent on retry: response is |
| apply_trackA | Apply a track definition to an opportunity or project. Creates a track instance and auto-creates tasks per the track's task definitions; tasks' |
| update_trackA | Update a track instance. Capsule's PUT semantics are partial — provide only the fields you want to change in |
| remove_trackA | Remove a track instance from its entity. Capsule also deletes the auto-tasks the track created when it was applied; copy any task details you need before removing the track. Requires confirm=true. Idempotent on retry: response is |
| list_tasksA | List tasks in Capsule CRM. Defaults to OPEN tasks; pass status to broaden. Optionally filter to a specific owner via ownerId. Capsule does not expose a due-date filter on this endpoint — for that use filter_* tools elsewhere or iterate. |
| get_taskB | Fetch a single task by its numeric ID. |
| get_tasksA | Batch-fetch up to 10 tasks by ID in a single call. |
| create_taskA | Create a new task, optionally linked to a party, opportunity, or project. Pass at most ONE of partyId / opportunityId / projectId — the connector rejects multi-target inputs before the HTTP call. Omitting all three is also valid: Capsule creates the task as a STANDALONE task (no parent link), useful for personal reminders or workflow tasks that aren't tied to a specific CRM record. |
| update_taskA | Update fields on an existing task. Only the fields you provide are changed. To mark a task done prefer complete_task. |
| complete_taskA | Mark a task as done / completed / finished. Sets status=COMPLETED on the task, populating completedBy and completedAt while preserving the task in history (unlike delete_task which removes it permanently). Use this whenever a user says 'mark done', 'complete', 'finish', or similar — equivalent to update_task with status:COMPLETED but more discoverable. |
| delete_taskA | DESTRUCTIVE & IRREVERSIBLE: permanently delete a task. Prefer complete_task to mark a task done while keeping it in history. Requires confirm=true. Idempotent on retry: response is |
| list_party_entriesA | List timeline entries (notes, captured emails, completed-task records) for a party. Use this to read the conversation history with a contact or organisation. |
| list_opportunity_entriesB | List timeline entries (notes, captured emails, completed-task records) for an opportunity. |
| list_project_entriesB | List timeline entries (notes, captured emails, completed-task records) for a project (case). |
| get_entryA | Fetch a single timeline entry by its numeric ID. Returns full content (note body, email subject + body, etc.). |
| list_entriesA | Global timeline feed: every note, captured email, and completed-task record across the whole Capsule account, paginated. Default order is most-recent-first. Use this for 'what activity happened today/this week across the company?' rather than iterating list_party_entries / list_opportunity_entries / list_project_entries. |
| get_attachmentA | Download an attachment by id. Returns image content for image/* types (Claude can describe it natively); decoded text for text/* and application/json (small files); JSON metadata + base64 payload for other binary types (PDF, Office docs, etc.). Files exceeding maxSizeBytes (default 5MB) return metadata only with a |
| add_noteA | Add a note to a party, opportunity, or project. Provide exactly one of partyId, opportunityId, or projectId. The note is always attributed to the API-token owner — there is no override for the author (a |
| update_entryA | Edit an existing timeline entry — typically a note. Provide the entry id plus the fields you want to change (content, subject). Only the fields you supply are modified; other fields keep their current values. Cannot change the entry's type. Use this to correct or extend a note added previously. |
| upload_attachmentA | Upload a file as a new note attachment, linked to a party, opportunity, or project. Provide the file as base64-encoded |
| delete_entryA | DESTRUCTIVE & IRREVERSIBLE: permanently delete a note (or other entry) by its ID. Requires confirm=true. Idempotent on retry: response is |
| list_pipelinesB | List all sales pipelines defined in Capsule CRM. |
| list_milestonesC | List all milestones (stages) within a specific opportunity pipeline. |
| list_boardsB | List all project (kase) boards defined in Capsule. A board is a grouping of stages that projects flow through — the project equivalent of an opportunity pipeline. |
| list_stagesA | List project stages. Without arguments returns every stage across every board (each carries a .board reference). Pass boardId to scope to one specific board. |
| list_teamsA | List all teams configured in the Capsule account. Useful as input for filter_* queries that scope by team, and for reporting. LIMITATION: returns team identity only (id, name, description, timestamps). Capsule's v2 API does not expose team↔user membership through any endpoint — |
| list_lostreasonsA | List all configured opportunity-loss reasons (e.g. 'Poor Qualification', 'Lost to competitor'). Useful for analysing closed-lost opportunities by reason. |
| list_activitytypesB | List all configured activity types (e.g. Call, Meeting, Email). These are the categories used when logging timeline entries. |
| list_categoriesA | List configured entry/task categories (Call, Email, Meeting, Follow-up, etc.) with their colours. Used to label and filter timeline entries and tasks. |
| list_track_definitionsA | List workflow track definitions: reusable templates that auto-create tasks at configured intervals when applied to an opportunity or project. Each track includes nested taskDefinitions specifying what to create and when. Use this to understand what automations exist. |
| list_entity_tracksA | List track INSTANCES on a specific record — i.e., which tracks have been applied to this opportunity / project / party. Distinct from list_track_definitions, which lists the templates. NOTE: some boards have stage-triggered automation that auto-applies tracks when an entity enters specific stages — tracks returned here may include BOTH manually-applied tracks (via apply_track) and auto-applied tracks from Capsule board rules. To distinguish, compare each track's |
| show_trackA | Fetch a single track instance by id. Returns the minimal Capsule projection: id, description, trackDateOn, direction, and the array of tasks attached to the track. Capsule's GET /tracks/{id} does NOT include a trackDefinition link, an entity reference, or a completion field — to find the entity a track is applied to, use list_entity_tracks (which lists track instances by their parent entity); to check completion, the track-tasks' own statuses are the proxy. |
| list_goalsA | List sales / activity goals configured in the account (per-user or per-team revenue or activity targets). Returns an empty list for accounts that don't use the Goals feature. |
| get_siteA | Return the Capsule account this connector is currently authenticated against (subdomain, display name, URL). Diagnostic for 'which Capsule account is this?'. For the PAT owner's user identity, use get_current_user. |
| list_saved_filtersA | List all filters that users have saved in Capsule's web UI for an entity type. Saved filters are reusable — they bundle conditions, columns, and (importantly) sort. Use this to discover what queries are already configured before building a one-off filter_* call. |
| run_saved_filterA | Run a saved filter by id and return its results, paginated. Unlike filter_parties / filter_opportunities / filter_projects (which use the ad-hoc filter endpoint and CANNOT sort), saved filters DO support sort — the orderBy is configured in Capsule's web UI when the filter is created. So 'most recent X by Y' questions are answerable in one call IF a saved filter exists; use list_saved_filters first to find one. |
| list_tagsB | List all tags available for a given entity type (parties, opportunities, or kases). |
| add_tagA | Attach a tag to a party, opportunity, or project (kase) by NAME. Capsule resolves to an existing tag in the tenant or creates a fresh one with this name. Matching is case-insensitive — 'VIP' and 'vip' attach the same tag, preserving the canonical casing from whichever variant was created first. To avoid creating a genuinely-distinct near-duplicate (e.g. 'VIP' vs 'V.I.P.'), call list_tags first and reuse the exact name. Idempotent — re-attaching an already-attached tag is harmless. To DETACH a tag, use remove_tag_by_id with the tag's id (read via get_party/get_opportunity/get_project with embed='tags'). |
| remove_tag_by_idA | Detach a tag from a party, opportunity, or project (kase). Atomic — one PUT to Capsule. Reversible — no |
| list_usersC | List all users in the Capsule account. |
| get_current_userA | Show the user owning the API token this connector is using. Useful for audit ('under whose Capsule identity is the connector running?') and for confirming a token rotation moved ownership to the expected account. Wraps Capsule's GET /users/current — note the endpoint is /users/current, not /users/me. |
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
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/soil-dev/capsulemcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server