Skip to main content
Glama
optimize-overseas

LACRM MCP Server

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
LACRM_API_KEYYesYour Less Annoying CRM API key (required). Can also be provided via config file at ~/.lacrm-config.json.
LACRM_BULK_RUNS_DIRNoDirectory for bulk run state files (default: a 'lacrm-bulk-runs' folder under the OS temp dir)<temp_dir>/lacrm-bulk-runs

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

CapabilityDetails
tools
{
  "listChanged": true
}
resources
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_workflow_guideA

START HERE: Get the workflow guide for using this LACRM MCP effectively.

This tool explains:

  • What schema tools to call BEFORE any create/edit operation

  • Required fields for contacts, companies, and pipeline items

  • Example workflows for common operations

  • How to interpret schema responses

Call this tool first when connecting to understand how to use the MCP correctly.

get_custom_fieldsA

Retrieve custom field definitions for this LACRM account. Use this tool FIRST when you need to work with contacts or pipeline items that have custom fields.

IMPORTANT: Returns field details including:

  • name: The field name to use as key when setting values

  • required: Whether this field must be provided

  • type: The field type (Text, Number, Dropdown, etc.)

  • input_format: Description of expected value format

  • valid_options: For Dropdown/RadioList/Checkbox, the allowed values

Filter options:

  • record_type: "Contact", "Company", or "Pipeline" to filter by type

  • pipeline_id: Get fields for a specific pipeline (required when record_type is "Pipeline")

Example: To create a pipeline item, first call get_custom_fields with record_type="Pipeline" and the pipeline_id. Then use the field names as keys in custom_fields: { "FieldName": "value" }

get_pipeline_custom_fieldsA

Get custom fields for a specific pipeline - use this before creating or editing pipeline items.

Returns all custom fields configured for the pipeline with:

  • name: The field name to use as key in custom_fields parameter

  • required: Whether this field MUST be provided when creating pipeline items

  • type: Field type (Text, Number, Dropdown, etc.)

  • input_format: Description of the expected value format

  • valid_options: For Dropdown/RadioList fields, the exact values you can use

WORKFLOW:

  1. Call get_pipelines to find the PipelineId

  2. Call get_pipeline_custom_fields with the pipeline_id

  3. Note all required fields and their valid options

  4. Call create_pipeline_item with custom_fields: { "FieldName": "value", ... }

Example response interpretation: { "name": "Deal Stage", "required": true, "type": "Dropdown", "valid_options": ["Prospect", "Qualified", "Proposal"] } → You MUST include this field, value must be exactly "Prospect", "Qualified", or "Proposal"

get_pipelinesA

Retrieve all pipeline definitions for this LACRM account. Use this tool to discover available pipelines and their statuses before creating or editing pipeline items. Returns pipeline IDs, names, icons, and status definitions with sort order.

Each pipeline has multiple statuses that represent stages (e.g., "Lead", "Qualified", "Closed"). Use the PipelineId and StatusId values when creating or editing pipeline items.

WORKFLOW for pipeline items:

  1. Call get_pipelines to find the PipelineId

  2. Call get_pipeline_custom_fields with that pipeline_id to see required fields

  3. Create/edit pipeline items with the correct PipelineId, StatusId, and custom_fields

get_groupsA

Retrieve all contact groups defined in this LACRM account. Use this tool to discover available groups before adding contacts to groups. Returns group IDs, names, and descriptions.

Groups are used to organize contacts (e.g., "VIP Customers", "Newsletter Subscribers"). Use the GroupId when managing group memberships.

get_usersA

Retrieve all users in this LACRM account. Use this tool to discover user IDs when you need to assign contacts, tasks, or events to specific users. Returns user IDs, names, emails, and roles.

User IDs are required when creating events on a specific user's calendar or assigning tasks.

get_calendarsA

Retrieve all calendars in this LACRM account. Use this tool to discover calendar IDs when creating events. Returns calendar IDs, names, and associated user IDs.

Each user typically has their own calendar. Use CalendarId when creating calendar events.

get_contact_schemaA

Get complete field schema for creating/editing contacts.

Returns ALL fields (both fixed system fields and custom fields) with:

  • name: The parameter name to use in create_contact/edit_contact

  • required: Whether this field must be provided

  • type: Field type (Text, Array, Date, etc.)

  • input_format: Exact format expected for the value

  • is_custom_field: Whether this is a custom field (true) or built-in (false)

  • notes: Additional guidance for using this field

ALWAYS call this before creating a contact to understand what data is needed.

get_company_schemaA

Get complete field schema for creating/editing companies.

Returns ALL fields (both fixed system fields and custom fields) with:

  • name: The parameter name to use in create_contact (with is_company=true)

  • required: Whether this field must be provided

  • type: Field type (Text, Array, etc.)

  • input_format: Exact format expected for the value

  • is_custom_field: Whether this is a custom field (true) or built-in (false)

  • notes: Additional guidance for using this field

ALWAYS call this before creating a company to understand what data is needed. Note: Companies are created using create_contact with is_company=true.

get_pipeline_item_schemaA

Get complete field schema for creating/editing pipeline items.

Requires pipeline_id because each pipeline has different custom fields.

Returns ALL fields (both fixed system fields and custom fields) with:

  • name: The parameter name to use in create_pipeline_item/edit_pipeline_item

  • required: Whether this field must be provided

  • type: Field type (Text, Dropdown, etc.)

  • input_format: Exact format expected for the value

  • valid_options: For dropdowns, the exact values you can use

  • is_custom_field: Whether this is a custom field (true) or built-in (false)

WORKFLOW:

  1. Call get_pipelines to find the pipeline_id and its status_ids

  2. Call get_pipeline_item_schema with the pipeline_id

  3. Use the schema to construct a valid create_pipeline_item call

create_contactA

Create a new contact or company in Less Annoying CRM.

PREREQUISITES (call these first):

  1. get_contact_schema (or get_company_schema for companies) → see ALL fields (required and optional), their types, and formats

  2. get_users → get valid user IDs for the required assigned_to field

Use this tool when you need to add a new person or company to the CRM. Set is_company to true to create a company record instead of a person.

Supports flat-string shortcuts: use email_address, phone_number, or website_url for single values instead of the array format. Supports custom_field_names for name-based custom field resolution.

Returns the new ContactId on success.

edit_contactA

Update an existing contact or company in Less Annoying CRM.

PREREQUISITES (call these first):

  1. get_contact_schema (or get_company_schema) → see available fields, their types, and formats

  2. search_contacts or get_contact → find/verify valid contact_id

Use this tool to modify contact details like name, email, phone, etc. Only include fields you want to change - other fields remain unchanged.

Supports flat-string shortcuts: use email_address, phone_number, or website_url for single values. Supports custom_field_names for name-based custom field resolution.

delete_contactA

Permanently delete a contact or company from Less Annoying CRM. WARNING: This action cannot be undone. The contact and all associated data will be removed.

Required: contact_id. Use search_contacts or get_contact to find valid contact IDs before deleting.

get_contactA

Retrieve a single contact or company by ID. Use this when you already have a ContactId and need the record.

NOTE: search_contacts returns the same full data for each match. Only use get_contact when you have an ID but not the data (e.g., from a webhook or external reference).

get_contacts_by_idsA

Retrieve multiple contacts or companies by their IDs. Use this when you have a list of ContactIds (e.g., from webhooks or external references).

RETURNS FULL DATA: Each result includes all contact fields - same as search_contacts or get_contact. Maximum 10,000 results per call.

search_contactsA

Search for contacts and companies with filters and sorting. Use this tool to find contacts by name, email, or other criteria.

RETURNS FULL DATA: Each result includes all contact fields (name, email, phone, address, company, custom fields, timestamps, etc.) - no need to call get_contact afterward.

Supports:

  • Free text search across all fields

  • Filter by contacts only, companies only, or both

  • Filter by assigned user

  • Sort by name, date created, last update, or relevance

  • Advanced filters on standard and custom fields

IMPORTANT: For geographic searches (by state, city, zip), use advanced_filters with the address fields (AddressState, AddressCity, AddressZip, etc.) instead of search_terms. Free-text search_terms scans all fields and can be very slow on broad terms.

Use count_only=true for accurate counts on large datasets without returning the full result set. Use get_custom_fields to learn available custom field names for advanced filtering.

bulk_generate_templateA

Generate a ready-to-fill CSV template for a bulk operation, plus a per-field report describing exactly what happens when each column is populated, left blank, or omitted.

The template is generated from the SAME field configuration the validate/execute tools use, so it always reflects the rules that will actually be applied. Supply the field configuration as arguments; nothing about any specific CRM is built in.

Returns: { csv, columns, report } where report[].behavior explains each field's merge strategy. Columns are ordered LACRM built-in fields first (key, owner name, address block, then other standard fields), then custom fields.

bulk_validate_csvA

Validate a bulk CSV against a field configuration WITHOUT making any changes.

Reports row count, which configured columns are present (will be acted on) vs absent (left unchanged), unknown columns, missing required columns/values, duplicate keys, and a rough time estimate (runs are paced at ~1 request/second). Always run this and review it before bulk_execute.

Provide the CSV as csv_content (inline) or csv_path (a readable file path).

bulk_executeA

Execute a bulk create/update by launching a detached background worker that paces calls at ~1 request/second (LACRM's agreement). Returns a run_id immediately.

SAFETY: this performs LIVE writes. It re-validates first and refuses to run if validation fails. You must pass confirm=true to proceed (omitting it returns the validation only). Always show the user a bulk_validate_csv preview and obtain explicit approval before passing confirm=true.

ASYNC COMPLETION (optional): pass channel + requestor_email + identifier (and request_summary) and the finished result - including the report delivered as an editable Google Sheet - is posted back on the originating channel automatically when the run completes; no polling needed. Without them, poll bulk_run_status as before.

Update mode uses per-field merge strategies (see fields[].strategy); an absent column is left unchanged. Provide the CSV as csv_content or csv_path.

bulk_run_statusA

Get the status of a bulk run started by bulk_execute. Returns progress (processed/total), success/failure counts, per-row errors, and the path to the final report CSV when complete.

bulk_run_resumeA

Continue a bulk run whose worker stopped before finishing (host restart, killed process). Progress is persisted after every row, so the run resumes at the first unprocessed row and rows that were already applied are never applied again. Refuses if the run is already finished or still actively running.

create_eventA

Create a calendar event in Less Annoying CRM. Use this tool to schedule meetings, calls, or other time-specific activities. Events can be attached to contacts and assigned to specific calendars.

Required: name, start_date, end_date. Use get_calendars to find valid calendar IDs. Use get_users to find valid user IDs for attendees.

Supports recurring events with RFC 5545 recurrence rules (e.g., "FREQ=WEEKLY;BYDAY=MO,WE,FR").

edit_eventA

Update an existing calendar event in Less Annoying CRM. Only include fields you want to change - other fields remain unchanged.

Required: event_id. Use search_events or get_event to find valid event IDs.

delete_eventA

Delete a calendar event from Less Annoying CRM. WARNING: This permanently removes the event from all attendee calendars.

Required: event_id.

get_eventA

Retrieve a single calendar event by ID. Use this when you already have an EventId and need the record.

NOTE: search_events returns the same full data for each match. Only use get_event when you have an ID but not the data.

search_eventsA

Search for calendar events within a date range. Use this tool to find events by date, user, calendar, or contact.

RETURNS FULL DATA: Each result includes all event fields (name, dates, location, attendees, recurrence, etc.) - no need to call get_event afterward.

Supports filtering by:

  • Date range (start_date and end_date)

  • Specific users (by ID or name)

  • Specific calendars (by ID or name)

  • Specific contact

Use count_only=true for accurate counts on large datasets without returning the full result set.

get_events_attached_to_contactA

Retrieve all calendar events for a specific contact. RETURNS FULL DATA: Each result includes all event fields - no need to call get_event afterward. Use count_only=true for accurate counts without returning the full result set.

create_taskA

Create a new task in Less Annoying CRM. Tasks are reminders that appear on user task lists and daily agenda emails. Unlike events, tasks are date-only (no time component).

Required: name. Optional: due_date, assigned_to, contact_id for linking to a contact. Use get_users to find valid user IDs for assigned_to. Use get_calendars to find valid calendar IDs.

edit_taskA

Update an existing task in Less Annoying CRM. Use this tool to modify task details or mark tasks as complete. Only include fields you want to change.

Required: task_id. Use is_complete=true to mark a task as done (preferred over deleting). Pass contact_id=null to detach from a contact.

delete_taskA

Permanently delete a task from Less Annoying CRM. WARNING: Consider using edit_task with is_complete=true instead to preserve history.

Required: task_id.

get_taskA

Retrieve a single task by ID. Use this when you already have a TaskId and need the record.

NOTE: search_tasks returns the same full data for each match. Only use get_task when you have an ID but not the data.

search_tasksA

Search for tasks within a date range. Use this tool to find tasks by date, user, contact, or completion status.

RETURNS FULL DATA: Each result includes all task fields (name, due date, description, completion status, linked contact, etc.) - no need to call get_task afterward.

Required: start_date, end_date. Supports filtering by completion status (Both, Incomplete, Complete). Supports name-based user filter: use user_name_filter instead of user_filter. Use count_only=true for accurate counts on large datasets without returning the full result set.

get_tasks_attached_to_contactA

Retrieve all tasks for a specific contact. RETURNS FULL DATA: Each result includes all task fields - no need to call get_task afterward. Use count_only=true for accurate counts without returning the full result set.

create_noteA

Create a new note attached to a contact in Less Annoying CRM. Notes are timestamped text entries that appear in contact history.

Required: contact_id, note. The note text preserves newlines but escapes HTML/markdown.

edit_noteA

Update an existing note in Less Annoying CRM. Only include fields you want to change.

Required: note_id. Note content is completely replaced when updated.

delete_noteA

Delete a note from a contact's profile in Less Annoying CRM. WARNING: This permanently removes the note.

Required: note_id.

get_noteA

Retrieve a single note by ID. Use this when you already have a NoteId and need the record.

NOTE: search_notes returns the same full data for each match. Only use get_note when you have an ID but not the data.

search_notesA

Search for notes with optional date and user filters. Use this tool to find notes across all contacts or for specific users.

RETURNS FULL DATA: Each result includes all note fields (content, timestamps, linked contact, etc.) - no need to call get_note afterward.

Supports filtering by date range, user, and specific contact. Use count_only=true for accurate counts on large datasets without returning the full result set.

get_notes_attached_to_contactA

Retrieve all notes for a specific contact. RETURNS FULL DATA: Each result includes all note fields - no need to call get_note afterward. Use count_only=true for accurate counts without returning the full result set.

create_pipeline_itemA

Create a new pipeline item attached to a contact in Less Annoying CRM.

PREREQUISITES (call these first):

  1. get_pipelines → find pipeline_id and valid status_ids

  2. get_pipeline_item_schema(pipeline_id) → see required custom fields and their valid options

  3. search_contacts → find/verify valid contact_id

Pipeline items track contacts through sales stages or workflows. Optionally run status automation when creating (e.g., send emails, create tasks).

Supports name-based resolution: use status_name instead of status_id, and custom_field_names instead of custom_fields.

edit_pipeline_itemA

Update an existing pipeline item in Less Annoying CRM.

PREREQUISITES (call these first):

  1. get_pipeline_item_schema(pipeline_id) → see available custom fields and their valid options

  2. search_pipeline_items or get_pipeline_item → find/verify valid pipeline_item_id

  3. get_pipelines → find valid status_ids (if changing status)

Use this to change status, add notes, or update custom field values. Supports name-based resolution: use status_name instead of status_id, and custom_field_names instead of custom_fields.

delete_pipeline_itemA

Delete a single pipeline item from Less Annoying CRM. WARNING: This permanently removes the item.

Required: pipeline_item_id.

delete_pipeline_items_bulkA

Delete multiple pipeline items at once from Less Annoying CRM. All items must belong to the same pipeline. Maximum 5000 items per call.

Returns count of processed and skipped items.

get_pipeline_itemA

Retrieve a single pipeline item by ID. Use this when you already have a PipelineItemId and need the record.

NOTE: search_pipeline_items returns the same full data for each match. Only use get_pipeline_item when you have an ID but not the data.

search_pipeline_itemsA

Search for pipeline items within a specific pipeline. Use this to find items by status, user, or custom field values.

RETURNS FULL DATA: Each result includes all pipeline item fields (status, contact info, custom fields, timestamps, etc.) - no need to call get_pipeline_item afterward.

Required: pipeline_id (use get_pipelines to find valid IDs). Supports advanced filters for custom fields. Supports name-based filters: use status_name_filter or user_name_filter instead of IDs. Use count_only=true for accurate counts on large datasets without returning the full result set.

get_pipeline_items_attached_to_contactA

Retrieve all pipeline items for a specific contact. RETURNS FULL DATA: Each result includes all pipeline item fields - no need to call get_pipeline_item afterward. Returns items across all pipelines that the contact is in. Use count_only=true for accurate counts without returning the full result set.

create_emailA

Log an email in Less Annoying CRM. Use this to record email correspondence with contacts for tracking purposes.

Required: contact_ids, from, to, body, date. The email is attached to the specified contacts' history.

get_emailA

Retrieve a single logged email by ID. Use this when you already have an EmailId and need the record.

NOTE: search_emails returns the same full data for each match. Only use get_email when you have an ID but not the data.

search_emailsA

Search for logged emails with optional filters. Use this to find emails by date range, user, or contact.

RETURNS FULL DATA: Each result includes all email fields (sender, recipients, subject, body, timestamps, etc.) - no need to call get_email afterward.

Use count_only=true for accurate counts on large datasets without returning the full result set.

get_emails_attached_to_contactA

Retrieve all logged emails for a specific contact. RETURNS FULL DATA: Each result includes all email fields - no need to call get_email afterward. Use count_only=true for accurate counts without returning the full result set.

delete_emailA

Delete a logged email from a contact's profile. WARNING: This permanently removes the email record.

create_fileA

Upload a file and attach it to a contact in Less Annoying CRM. Supports two input methods:

  1. file_base64: Base64-encoded file content (for smaller files)

  2. file_path: Local file path (server reads and uploads)

Required: contact_id, and either file_base64 or file_path. Maximum file size: 50MB.

get_fileA

Retrieve file information and a temporary download URL. NOTE: The download URL expires after 5 minutes. Call this again if you need a fresh URL.

Returns file metadata including name, size, type, and download link.

get_files_attached_to_contactA

Retrieve all files attached to a specific contact. Optionally include previous file versions. NOTE: Does not include files attached via File Link custom fields.

create_relationshipA

Create a relationship between two contacts or companies. Relationships are bi-directional and visible on both contact records. Use the note field to describe the relationship type (e.g., "Spouse", "Referred by").

edit_relationshipA

Update the note on an existing relationship. The note describes the nature of the relationship between contacts.

delete_relationshipA

Delete a relationship between two contacts. WARNING: This permanently removes the relationship from both contact records.

get_relationshipA

Retrieve details about a specific relationship. Returns both contact IDs, the note, and metadata about both contacts.

get_relationships_attached_to_contactA

Retrieve all relationships for a specific contact. Returns all contacts linked to this contact with their relationship notes.

add_contact_to_groupA

Add a contact to a group in Less Annoying CRM. Use either group_id or group_name to identify the group (not both).

Use get_groups to find valid group IDs.

remove_contact_from_groupA

Remove a contact from a group in Less Annoying CRM. Use either group_id or group_name to identify the group (not both).

get_groups_for_contactB

Retrieve all groups a contact belongs to.

get_contacts_in_groupA

Retrieve all contacts that belong to a specific group. Use either group_id or group_name to identify the group (not both). Use count_only=true for accurate counts without returning the full result set.

create_custom_fieldA

Create a new custom field definition in Less Annoying CRM. Use this to add new fields for contacts, companies, or pipelines.

Field types: Currency, Date, Dropdown, RadioList, Checkbox, Number, Text, TextArea, ContactLink, FileLink, Signature, Section, SectionHeader, TextBlock.

For Dropdown/RadioList/Checkbox fields, provide options array. For Pipeline fields, pipeline_id is required.

edit_custom_fieldA

Update an existing custom field definition. Use get_custom_fields to find field IDs first.

Note: You cannot change the field type after creation.

delete_custom_fieldA

Delete a custom field definition. WARNING: This permanently removes the field and all data stored in it across all records.

get_custom_fieldA

Get detailed information about a single custom field definition. Returns field name, type, options, display settings, and archived status.

create_groupA

Create a new group in Less Annoying CRM. Groups are used to segment contacts for easy retrieval.

Sharing options:

  • Public: Visible to all users

  • Private: Only visible to creator

  • Teams: Visible to specified teams (requires team_ids)

edit_groupA

Update an existing group's properties. Use get_groups to find group IDs first.

delete_groupA

Delete a group from the account. WARNING: This removes the group but does not delete the contacts in it.

get_groupA

Get details for a single group. Returns group name, sharing settings, team IDs, and color. Does not include contact membership data - use get_contacts_in_group for that.

create_pipelineA

Create a new pipeline in Less Annoying CRM. Pipelines track deals, opportunities, or any workflow with stages.

Permissions:

  • Public: Visible to all users

  • TeamSharing: Only visible to specified teams (requires team_ids)

edit_pipelineA

Update an existing pipeline's configuration. Use get_pipelines to find pipeline IDs first.

delete_pipelineA

Delete a pipeline from the account. WARNING: This permanently removes the pipeline configuration. Pipeline items may become orphaned.

get_pipelineA

Get detailed information about a single pipeline configuration. Returns pipeline name, icon, statuses, permissions, and sharing settings. Does not return pipeline items - use search_pipeline_items for that.

create_pipeline_statusA

Create a new status for an existing pipeline. Statuses represent stages in your pipeline workflow.

is_active:

  • true: Status represents an active/in-progress stage

  • false: Status represents a closed/completed stage

Colors: Blue, LightBlue, Cyan, Teal, Green, LimeGreen, Yellow, Orange, Red, Pink, Magenta, Purple, Indigo, Gray, or hex codes like #486581

edit_pipeline_statusA

Update an existing pipeline status. This modifies the status definition, not individual pipeline items. Only include fields you want to change. Use get_pipeline_statuses to find status IDs.

delete_pipeline_statusB

Delete a pipeline status. WARNING: Pipeline items using this status may become orphaned.

get_pipeline_statusesA

Get all statuses for a specific pipeline or all pipelines. Returns status IDs, names, active/closed state, colors, and creation dates.

create_teamA

Create a new team in Less Annoying CRM. Teams organize users for permission management. Use get_users first to find user IDs for team membership.

edit_teamA

Update a team's name and/or membership. Use get_teams to find team IDs first.

Note: Passing user_ids completely replaces team membership. Pass empty array to remove all users.

delete_teamA

Delete a team from the account. Only account owners and administrators can delete teams. WARNING: This removes the team but does not affect the users in it.

get_teamA

Get detailed information about a single team. Returns team name, creation date, and member user IDs.

get_teamsA

Get all teams accessible to the current user. Admins see all account teams; regular users only see teams they belong to.

create_webhookA

Create a new webhook in Less Annoying CRM. Webhooks send POST requests to your URL when events occur.

Requirements:

  • endpoint_url must be HTTPS

  • Your endpoint must respond to an initial handshake request

Scope:

  • User: Only triggers for actions by the authenticated user

  • Account: Triggers for actions by any user in the account

Common events: Contact.Create, Contact.Edit, Contact.Delete, PipelineItemStatus.Create, PipelineItemStatus.Edit

get_webhookA

Get detailed information about a single webhook. Returns endpoint URL, last send date, subscribed events, and archive status.

get_webhooksA

Get all webhooks on the account. Optionally include archived webhooks.

delete_webhookA

Delete a webhook from the account. The webhook will stop sending events immediately.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription
workflow_overviewSTART HERE: Overview of LACRM MCP workflows - explains what tools to call before any operation
workflow_contactsDetailed workflow for creating and editing contacts and companies
workflow_pipeline_itemsDetailed workflow for creating and editing pipeline items (deals/opportunities)

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/optimize-overseas/lacrm-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server