MCP tools reference

AccuLynx MCP tools

14 tools for AccuLynx on the Cotlet MCP server. Your agent picks them from tools/list.

MCP server
https://cotlet.dev/mcp/v1
Connects with
Your own AccuLynx account (the role you use in the app decides what the tools can do)
Integration page
AccuLynx
AccuLynx Endpoints
Endpoint Access Description
acculynx_list_jobs read Jobs in your location with name, address, current milestone, priority and dates.
acculynx_get_job read Full job: contacts, address, trade and work type, milestone history, sales owner and financial totals.
acculynx_find_contact read Contacts matching a name, email or phone number, with their jobs.
acculynx_list_estimates read Estimates on a job with name, total and date.
acculynx_get_estimate read One estimate with its sections, line items, quantities and prices.
acculynx_list_job_messages read Messages posted on a job, with author, date and replies.
acculynx_list_job_payments read Payments recorded on a job with date, method and amount.
acculynx_create_contact write New contact with name, phone, email and mailing address.
acculynx_create_job write New job for a contact, at the job site address.
acculynx_update_job_milestone write Move a job to another milestone, as you would in the job file, if your role allows it.
acculynx_upload_job_photo write Add a photo or video to the job file, with an optional tag and description.
acculynx_post_job_message write Post a message on a job for your team, or reply in a thread.
acculynx_add_contact_note write Add a note to a contact record.
acculynx_record_payment_received write Record a payment the customer made on a job. Nothing is charged.

List jobs

read

MCP tool acculynx_list_jobs

Lists jobs in one location, most recently modified first unless you sort otherwise. Filter by milestone or search by job name, address or contact name. Milestone is one of Lead, Prospect, Approved, Completed, Invoiced, Closed or Dead. Pages hold up to 100 jobs; pass next_cursor back as cursor for the next page.

Parameters

Parameters: list_jobs
NameTypeDescription
milestone enum Lead, Prospect, Approved, Completed, Invoiced, Closed or Dead. Default: all.
search string Job name, address or contact name.
sort_by enum created, milestone_date or modified. Default: modified.
limit integer 1 to 100. Default: 25.
cursor string Next page cursor from the previous call.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "acculynx_list_jobs",
    "arguments": {
      "milestone": "Prospect",
      "sort_by": "milestone_date",
      "limit": 100
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "jobs": [
      {
        "job_id": "b3f1c2a4-7d2e-4f0a-9c51-2e8a4d6f1b90",
        "job_name": "Miller - 48 Pine Ridge Rd",
        "address": "48 Pine Ridge Rd, Plano, TX 75074",
        "milestone": "Prospect",
        "priority": "Normal",
        "milestone_date": "2026-09-02T10:20:00-05:00",
        "modified_at": "2026-10-08T15:41:00-05:00"
      },
      {
        "job_id": "e91a47d3-5c60-4b2f-8d1e-0a7f3c9b5e24",
        "job_name": "Garcia - 310 Elm Ct",
        "address": "310 Elm Ct, Frisco, TX 75034",
        "milestone": "Prospect",
        "priority": "High",
        "milestone_date": "2026-09-11T08:05:00-05:00",
        "modified_at": "2026-10-06T09:12:00-05:00"
      }
    ],
    "next_cursor": null
  },
  "isError": false
}

Get job

read

MCP tool acculynx_get_job

Returns one job with its contacts, job site address, trade and work type, sales owner and the milestone history in order. Financial totals are the figures shown on the job in AccuLynx. Use the job_id from list_jobs.

Parameters

Parameters: get_job
NameTypeDescription
job_id required string Job ID from list_jobs.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "acculynx_get_job",
    "arguments": {
      "job_id": "job_8c41d2"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "job_id": "e91a47d3-5c60-4b2f-8d1e-0a7f3c9b5e24",
    "job_name": "Garcia - 310 Elm Ct",
    "address": "310 Elm Ct, Frisco, TX 75034",
    "milestone": "Completed",
    "priority": "Normal",
    "work_type": "Replacement",
    "trade_types": [
      "Roofing"
    ],
    "sales_owner": "Dana Whitfield",
    "contacts": [
      {
        "contact_id": "c2b8f6a1-90d4-4a37-b5e2-6f1d8a3c7e09",
        "name": "Luis Garcia",
        "role": "Primary"
      }
    ],
    "milestone_history": [
      {
        "milestone": "Lead",
        "date": "2026-08-14T11:02:00-05:00"
      },
      {
        "milestone": "Prospect",
        "date": "2026-08-16T09:30:00-05:00"
      },
      {
        "milestone": "Approved",
        "date": "2026-09-11T08:05:00-05:00"
      },
      {
        "milestone": "Completed",
        "date": "2026-10-05T16:48:00-05:00"
      }
    ],
    "totals": {
      "contract": "14850.00",
      "received": "7425.00",
      "currency": "USD"
    }
  },
  "isError": false
}

MCP tool acculynx_find_contact

Searches contacts by name, email or phone number and returns each match with the jobs linked to it. Run it before create_contact so you do not add the same person twice. Use the contact_id with create_job and add_contact_note.

Parameters

Parameters: find_contact
NameTypeDescription
query required string Name, email or phone.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "acculynx_find_contact",
    "arguments": {
      "query": "query"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "contacts": [
      {
        "contact_id": "c7d2a9f0-3b11-4e8c-a6d5-91f0e2b47c18",
        "name": "Jane Doe",
        "phone": "(214) 555-0142",
        "email": "jane.doe@example.com",
        "jobs": []
      }
    ]
  },
  "isError": false
}

MCP tool acculynx_list_estimates

Returns every estimate on one job with its name, total and date. Pass estimate_id to get_estimate for the sections and line items. Estimates are read only: Cotlet does not create or edit them.

Parameters

Parameters: list_estimates
NameTypeDescription
job_id required string Job ID from list_jobs.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "acculynx_list_estimates",
    "arguments": {
      "job_id": "job_8c41d2"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "estimates": [
      {
        "estimate_id": "a40d9e17-2f6b-4c83-b1a5-7e3c8d0f6291",
        "name": "Full replacement, architectural shingles",
        "total": "14850.00",
        "date": "2026-09-09"
      }
    ]
  },
  "isError": false
}

MCP tool acculynx_get_estimate

Returns one estimate with its sections in order and the line items in each section, with quantity and price. Line item totals add up to the estimate total. Use it to read back what was promised on a job.

Parameters

Parameters: get_estimate
NameTypeDescription
estimate_id required string Estimate ID from list_estimates.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "acculynx_get_estimate",
    "arguments": {
      "estimate_id": "estimate_8c41d2"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "estimate_id": "a40d9e17-2f6b-4c83-b1a5-7e3c8d0f6291",
    "name": "Full replacement, architectural shingles",
    "total": "14850.00",
    "sections": [
      {
        "name": "Materials",
        "items": [
          {
            "name": "Architectural shingles",
            "quantity": 32,
            "unit": "square",
            "price": "210.00",
            "total": "6720.00"
          }
        ]
      },
      {
        "name": "Labor",
        "items": [
          {
            "name": "Tear-off and install",
            "quantity": 32,
            "unit": "square",
            "price": "253.13",
            "total": "8100.00"
          },
          {
            "name": "Dumpster",
            "quantity": 1,
            "unit": "each",
            "price": "30.00",
            "total": "30.00"
          }
        ]
      }
    ]
  },
  "isError": false
}

MCP tool acculynx_list_job_messages

Returns the messages on one job, newest first, with replies nested under the message they answer. Use it to read what the crew and office said before you post.

Parameters

Parameters: list_job_messages
NameTypeDescription
job_id required string Job ID from list_jobs.
limit integer 1 to 100. Default: 25.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "acculynx_list_job_messages",
    "arguments": {
      "job_id": "job_8c41d2"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "messages": [
      {
        "message_id": "m-3a91",
        "author": "Dana Whitfield",
        "body": "Customer wants the ridge vent upgrade.",
        "posted_at": "2026-10-04T14:10:00-05:00",
        "replies": [
          {
            "message_id": "m-3a97",
            "author": "Crew lead",
            "body": "Added to the order.",
            "posted_at": "2026-10-04T15:02:00-05:00"
          }
        ]
      }
    ]
  },
  "isError": false
}

MCP tool acculynx_list_job_payments

Returns the payments recorded on one job, newest first, with the method and reference. Use it before record_payment_received to see whether a deposit is already there.

Parameters

Parameters: list_job_payments
NameTypeDescription
job_id required string Job ID from list_jobs.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "acculynx_list_job_payments",
    "arguments": {
      "job_id": "job_8c41d2"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "payments": [
      {
        "payment_id": "p-1182",
        "type": "received",
        "amount": "7425.00",
        "method": "Check",
        "reference": "#1043",
        "received_on": "2026-09-12"
      }
    ]
  },
  "isError": false
}

MCP tool acculynx_create_contact

Adds one contact to AccuLynx and returns its contact_id. It adds a record your team sees and sends nothing to the person, so it runs without asking. Use find_contact first to avoid duplicates.

Parameters

Parameters: create_contact
NameTypeDescription
first_name required string First name.
last_name required string Last name.
phone string Phone number.
email string Email address.
address object street, city, state, zip.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "acculynx_create_contact",
    "arguments": {
      "first_name": "first name",
      "last_name": "last name"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "contact_id": "c7d2a9f0-3b11-4e8c-a6d5-91f0e2b47c18",
    "name": "Jane Doe",
    "phone": "(214) 555-0142",
    "email": "jane.doe@example.com",
    "created_at": "2026-10-11T09:02:00-05:00"
  },
  "isError": false
}

Create job

write

MCP tool acculynx_create_job

Opens a job for an existing contact and returns it with the milestone it starts in. The job site address defaults to the contact address. It adds a record your team sees and sends nothing to the customer, so it runs without asking.

Parameters

Parameters: create_job
NameTypeDescription
contact_id required string Contact ID from find_contact or create_contact.
job_name string Default: contact name and street.
address object Job site: street, city, state, zip. Default: contact address.
priority enum Normal, High or Urgent. Default: Normal.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "acculynx_create_job",
    "arguments": {
      "contact_id": "c7d2a9f0-3b11-4e8c-a6d5-91f0e2b47c18",
      "job_name": "Doe - 12 Oak St",
      "address": {
        "street": "12 Oak St",
        "city": "Plano",
        "state": "TX",
        "zip": "75074"
      },
      "priority": "High"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "job_id": "f2a6c8d1-4e93-4b07-a1d5-3c9e7b0f5a62",
    "job_name": "Doe - 12 Oak St",
    "address": "12 Oak St, Plano, TX 75074",
    "milestone": "Lead",
    "priority": "High",
    "created_at": "2026-10-11T09:03:00-05:00"
  },
  "isError": false
}

Update job milestone

write Confirm

MCP tool acculynx_update_job_milestone

Moves one job to another milestone the way you do in the job file, and returns the previous milestone and the date of the new one. It fails if your AccuLynx role does not allow the move. A milestone change can set off your own AccuLynx workflow. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: update_job_milestone
NameTypeDescription
job_id required string Job ID from list_jobs.
milestone required enum Prospect, Approved, Completed, Invoiced, Closed or Dead.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "acculynx_update_job_milestone",
    "arguments": {
      "job_id": "b3f1c2a4-7d2e-4f0a-9c51-2e8a4d6f1b90",
      "milestone": "Approved"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "job_id": "b3f1c2a4-7d2e-4f0a-9c51-2e8a4d6f1b90",
    "job_name": "Miller - 48 Pine Ridge Rd",
    "milestone": "Approved",
    "previous_milestone": "Prospect",
    "milestone_date": "2026-10-12T09:14:00-05:00"
  },
  "isError": false
}

MCP tool acculynx_upload_job_photo

Adds one photo or video to the job file and returns its ID. The tag must be one of your company photo and video tags. The file goes into the job and nothing is sent to anyone, so it runs without asking.

Parameters

Parameters: upload_job_photo
NameTypeDescription
job_id required string Job ID from list_jobs.
file_url required string Image or video URL, or a file sent with the REST call.
tag string One of your company photo and video tags.
description string Caption shown with the photo.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "acculynx_upload_job_photo",
    "arguments": {
      "job_id": "job_8c41d2",
      "file_url": "https://example.com"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "photo_id": "ph-5530",
    "job_id": "b3f1c2a4-7d2e-4f0a-9c51-2e8a4d6f1b90",
    "tag": "Inspection",
    "description": "North slope, ridge cap damage",
    "uploaded_at": "2026-10-11T10:21:00-05:00"
  },
  "isError": false
}

Post job message

write Confirm

MCP tool acculynx_post_job_message

Posts a message on one job under your name, or a reply under an existing message when reply_to_id is set. Your team sees it on the job. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: post_job_message
NameTypeDescription
job_id required string Job ID from list_jobs.
body required string Message text.
reply_to_id string Message ID from list_job_messages to reply to.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "acculynx_post_job_message",
    "arguments": {
      "job_id": "job_8c41d2",
      "body": "body"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "message_id": "m-3b02",
    "job_id": "b3f1c2a4-7d2e-4f0a-9c51-2e8a4d6f1b90",
    "reply_to_id": null,
    "status": "posted",
    "posted_at": "2026-10-11T10:24:00-05:00"
  },
  "isError": false
}

MCP tool acculynx_add_contact_note

Adds a note to one contact record and returns its ID. The note shows on the contact in AccuLynx and is sent to no one, so it runs without asking.

Parameters

Parameters: add_contact_note
NameTypeDescription
contact_id required string Contact ID from find_contact or create_contact.
body required string Note text.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "acculynx_add_contact_note",
    "arguments": {
      "contact_id": "contact_8c41d2",
      "body": "body"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "note_id": "n-7741",
    "contact_id": "c7d2a9f0-3b11-4e8c-a6d5-91f0e2b47c18",
    "status": "added",
    "created_at": "2026-10-11T09:05:00-05:00"
  },
  "isError": false
}

Record payment received

write Confirm

MCP tool acculynx_record_payment_received

Records a payment the customer already made on one job, for example a deposit check, and returns the payment. Nothing is charged: it only writes the payment into the job. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: record_payment_received
NameTypeDescription
job_id required string Job ID from list_jobs.
amount required string Amount, e.g. "2500.00".
method required string Payment method as named in your AccuLynx account, e.g. Check.
received_on date Default: today.
reference string Check number or memo.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "acculynx_record_payment_received",
    "arguments": {
      "job_id": "job_8c41d2",
      "amount": "2500.00",
      "method": "method"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "payment_id": "p-1183",
    "job_id": "b3f1c2a4-7d2e-4f0a-9c51-2e8a4d6f1b90",
    "amount": "2500.00",
    "method": "Check",
    "reference": "#2218",
    "received_on": "2026-10-12",
    "status": "recorded"
  },
  "isError": false
}