Skip to content

Less Annoying CRM MCP by usefulapi

by usefulapi.io · remote · no sign-in to list tools · v1.16.3 · published by io.usefulapi

Read and write Less Annoying CRM contacts, notes, tasks, events, pipelines and groups.

Deletes · 9

23 tools: 9 can delete or cancel things and 14 only read.

Scanned Oct 21, 2026

No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http less-annoying-crm https://less-annoying-crm.usefulapi.io/mcp

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

23 tools

Deletes or cancels 9Claude Code: deny
  • lacrm_add_contact_to_groupAdd a contact or company to a group (creates a group membership).No findings

    Why it is in this group

    • The name "lacrm_add_contact_to_group" says "add": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Add a contact or company to a group (creates a group membership). Identify the group by group_id (preferred) or group_name — not both. LACRM: CreateGroupMembership.

    Annotations the server declares

    • title: Add a contact to a group
    • destructiveHint: true
  • lacrm_create_contactCreate a new contact (person) or company record.No findings

    Why it is in this group

    • The name "lacrm_create_contact" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Create a new contact (person) or company record. For a person, company_name links them to that company (creating it if needed). Company names must be unique. If assigned_to is omitted, the record is assigned to the API key's own user (one extra GetUser call). Returns { ContactId }. LACRM: CreateContact.

    Annotations the server declares

    • title: Create a contact or company
    • destructiveHint: true
  • lacrm_create_eventCreate a timed (or all-day) event on your calendar, optionally with contacts/users as attendees.No findings

    Why it is in this group

    • The name "lacrm_create_event" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Create a timed (or all-day) event on your calendar, optionally with contacts/users as attendees. The timezone of start_date becomes the event's timezone. Returns { EventId }. LACRM: CreateEvent.

    Annotations the server declares

    • title: Schedule a calendar event
    • destructiveHint: true
  • lacrm_create_noteAttach a plain-text note to a contact or company's history (newlines kept, HTML/markdown escaped).No findings

    Why it is in this group

    • The name "lacrm_create_note" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Attach a plain-text note to a contact or company's history (newlines kept, HTML/markdown escaped). Returns { NoteId }. LACRM: CreateNote.

    Annotations the server declares

    • title: Add a note to a contact
    • destructiveHint: true
  • lacrm_create_pipeline_itemCreate a pipeline item (deal, lead...) on a contact in a given pipeline and status, with an optional note.No findings

    Why it is in this group

    • The name "lacrm_create_pipeline_item" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Create a pipeline item (deal, lead...) on a contact in a given pipeline and status, with an optional note. Returns { PipelineItemId }. LACRM: CreatePipelineItem.

    Annotations the server declares

    • title: Add a contact to a pipeline
    • destructiveHint: true
  • lacrm_create_taskCreate a to-do on a user's task list (date only, no time — use lacrm_create_event for timed things).No findings

    Why it is in this group

    • The name "lacrm_create_task" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Create a to-do on a user's task list (date only, no time — use lacrm_create_event for timed things). Optionally attach it to a contact. Returns { TaskId }. LACRM: CreateTask.

    Annotations the server declares

    • title: Create a task
    • destructiveHint: true
  • lacrm_edit_contactUpdate fields on an existing contact or company.No findings

    Why it is in this group

    • The name "lacrm_edit_contact" says "edit": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Update fields on an existing contact or company. Only the fields you pass change; omitted fields are left alone. Multi-value fields (email, phone, address, website) are REPLACED by the list you pass. Set is_company=true when renaming a company. LACRM: EditContact.

    Annotations the server declares

    • title: Edit a contact or company
    • destructiveHint: true
  • lacrm_edit_taskUpdate a task — including marking it complete (is_complete=true) or re-opening it (false).No findings

    Why it is in this group

    • The name "lacrm_edit_task" says "edit": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Update a task — including marking it complete (is_complete=true) or re-opening it (false). Only passed fields change. LACRM: EditTask.

    Annotations the server declares

    • title: Edit or complete a task
    • destructiveHint: true
  • lacrm_update_pipeline_itemMove a pipeline item to another status (e.g.No findings

    Why it is in this group

    • The name "lacrm_update_pipeline_item" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Move a pipeline item to another status (e.g. Prospect → Won) and/or add a note to its history. LACRM: EditPipelineItem.

    Annotations the server declares

    • title: Move or annotate a pipeline item
    • destructiveHint: true
Only reads 14Claude Code: allow
  • lacrm_get_contactFetch one contact or company record with all its fields (emails, phones, addresses, custom fields, owner).No findings

    Why it is in this group

    • The name "lacrm_get_contact" says "get": a word for reading.
    Description, as the server wrote it
    Fetch one contact or company record with all its fields (emails, phones, addresses, custom fields, owner). LACRM: GetContact.

    Annotations the server declares

    • title: Get a contact or company
    • readOnlyHint: true
  • lacrm_get_contact_groupsList the groups one contact or company belongs to.No findings

    Why it is in this group

    • The name "lacrm_get_contact_groups" says "get": a word for reading.
    Description, as the server wrote it
    List the groups one contact or company belongs to. LACRM: GetGroupsAttachedToContact.

    Annotations the server declares

    • title: Get a contact's groups
    • readOnlyHint: true
  • lacrm_get_contact_pipeline_itemsAll pipeline items attached to one contact or company, grouped by pipeline.No findings

    Why it is in this group

    • The name "lacrm_get_contact_pipeline_items" says "get": a word for reading.
    Description, as the server wrote it
    All pipeline items attached to one contact or company, grouped by pipeline. LACRM: GetPipelineItemsAttachedToContact.

    Annotations the server declares

    • title: Get a contact's pipeline items
    • readOnlyHint: true
  • lacrm_get_userReturn the user who owns this API key — UserId, name, email and timezone.No findings

    Why it is in this group

    • The name "lacrm_get_user" says "get": a word for reading.
    Description, as the server wrote it
    Return the user who owns this API key — UserId, name, email and timezone. A cheap way to confirm the key works, and the UserId to use for AssignedTo. LACRM: GetUser.

    Annotations the server declares

    • title: Get the current user
    • readOnlyHint: true
  • lacrm_list_contacts_in_groupList the contacts that are members of one group.No findings

    Why it is in this group

    • The name "lacrm_list_contacts_in_group" says "list": a word for reading.
    Description, as the server wrote it
    List the contacts that are members of one group. Identify the group by group_id (preferred) or group_name — not both. LACRM: GetContactsInGroup.

    Annotations the server declares

    • title: List contacts in a group
    • readOnlyHint: true
  • lacrm_list_custom_fieldsList the account's field definitions (name, type, options) for contacts, companies or pipelines — use the Name values as keys in custom_fields when creating/editing contacts.No findings

    Why it is in this group

    • The name "lacrm_list_custom_fields" says "list": a word for reading.
    Description, as the server wrote it
    List the account's field definitions (name, type, options) for contacts, companies or pipelines — use the Name values as keys in custom_fields when creating/editing contacts. LACRM: GetCustomFields.

    Annotations the server declares

    • title: List custom fields
    • readOnlyHint: true
  • lacrm_list_eventsList calendar events in a date range, filterable by user or calendar.No findings

    Why it is in this group

    • The name "lacrm_list_events" says "list": a word for reading.
    Description, as the server wrote it
    List calendar events in a date range, filterable by user or calendar. If contact_id is given, all events attached to that contact are returned and other filters are ignored. LACRM: GetEvents.

    Annotations the server declares

    • title: List calendar events
    • readOnlyHint: true
  • lacrm_list_groupsList the contact groups you can see (GroupId, Name, Sharing, Color), optionally with member counts.No findings

    Why it is in this group

    • The name "lacrm_list_groups" says "list": a word for reading.
    Description, as the server wrote it
    List the contact groups you can see (GroupId, Name, Sharing, Color), optionally with member counts. LACRM: GetGroups.

    Annotations the server declares

    • title: List groups
    • readOnlyHint: true
  • lacrm_list_notesList notes, newest first by default — across the whole CRM, or for one contact.No findings

    Why it is in this group

    • The name "lacrm_list_notes" says "list": a word for reading.
    Description, as the server wrote it
    List notes, newest first by default — across the whole CRM, or for one contact. Filter by date range and author. LACRM: GetNotes.

    Annotations the server declares

    • title: List notes
    • readOnlyHint: true
  • lacrm_list_pipeline_itemsList the items in one pipeline (deals, leads...), optionally only in given statuses or for given users.No findings

    Why it is in this group

    • The name "lacrm_list_pipeline_items" says "list": a word for reading.
    Description, as the server wrote it
    List the items in one pipeline (deals, leads...), optionally only in given statuses or for given users. An empty status filter returns items in all ACTIVE statuses. LACRM: GetPipelineItems.

    Annotations the server declares

    • title: List pipeline items
    • readOnlyHint: true
  • lacrm_list_pipelinesList the account's pipelines (e.g.No findings

    Why it is in this group

    • The name "lacrm_list_pipelines" says "list": a word for reading.
    Description, as the server wrote it
    List the account's pipelines (e.g. Sales Leads) with their statuses (StatusId, Name, IsActive) and optionally their custom fields. This is the setup, not the items — use lacrm_list_pipeline_items for those. LACRM: GetPipelines.

    Annotations the server declares

    • title: List pipelines
    • readOnlyHint: true
  • lacrm_list_tasksList tasks due in a date range, optionally only incomplete/complete, for given users.No findings

    Why it is in this group

    • The name "lacrm_list_tasks" says "list": a word for reading.
    Description, as the server wrote it
    List tasks due in a date range, optionally only incomplete/complete, for given users. If contact_id is given, ALL of that contact's tasks are returned regardless of dates or status. LACRM: GetTasks.

    Annotations the server declares

    • title: List tasks
    • readOnlyHint: true
  • lacrm_list_usersList the users on the account that you can see (admins see all), with their UserIds — needed to assign contacts, tasks or filter by owner.No findings

    Why it is in this group

    • The name "lacrm_list_users" says "list": a word for reading.
    Description, as the server wrote it
    List the users on the account that you can see (admins see all), with their UserIds — needed to assign contacts, tasks or filter by owner. LACRM: GetUsers.

    Annotations the server declares

    • title: List users
    • readOnlyHint: true
  • lacrm_search_contactsSearch (or list) contacts and companies.No findings

    Why it is in this group

    • The name "lacrm_search_contacts" says "search": a word for reading.
    Description, as the server wrote it
    Search (or list) contacts and companies. With no search_terms, returns everything visible, paged. Returns { HasMoreResults, Results }. LACRM: GetContacts.

    Annotations the server declares

    • title: Search contacts and companies
    • readOnlyHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.16.3. Values in angle brackets are yours to fill in.

claude mcp add --transport http less-annoying-crm https://less-annoying-crm.usefulapi.io/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__less-annoying-crm__lacrm_get_user",
      "mcp__less-annoying-crm__lacrm_list_users",
      "mcp__less-annoying-crm__lacrm_search_contacts",
      "mcp__less-annoying-crm__lacrm_get_contact",
      "mcp__less-annoying-crm__lacrm_list_notes",
      "mcp__less-annoying-crm__lacrm_list_tasks",
      "mcp__less-annoying-crm__lacrm_list_events",
      "mcp__less-annoying-crm__lacrm_list_pipelines",
      "mcp__less-annoying-crm__lacrm_list_pipeline_items",
      "mcp__less-annoying-crm__lacrm_get_contact_pipeline_items",
      "mcp__less-annoying-crm__lacrm_list_groups",
      "mcp__less-annoying-crm__lacrm_list_contacts_in_group",
      "mcp__less-annoying-crm__lacrm_get_contact_groups",
      "mcp__less-annoying-crm__lacrm_list_custom_fields"
    ],
    "ask": [],
    "deny": [
      "mcp__less-annoying-crm__lacrm_create_contact",
      "mcp__less-annoying-crm__lacrm_edit_contact",
      "mcp__less-annoying-crm__lacrm_create_note",
      "mcp__less-annoying-crm__lacrm_create_task",
      "mcp__less-annoying-crm__lacrm_edit_task",
      "mcp__less-annoying-crm__lacrm_create_event",
      "mcp__less-annoying-crm__lacrm_create_pipeline_item",
      "mcp__less-annoying-crm__lacrm_update_pipeline_item",
      "mcp__less-annoying-crm__lacrm_add_contact_to_group"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as less-annoying-crm. Review it before you use it.