Kommo Kiro MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| KOMMO_CLIENT_ID | No | OAuth client ID (only for the OAuth flow) | |
| KOMMO_SUBDOMAIN | No | Kommo account subdomain (the part before .kommo.com) | |
| KOMMO_ACCESS_TOKEN | No | Long-lived access token from a Kommo private integration | |
| KOMMO_REDIRECT_URI | No | OAuth redirect URI (only for the OAuth flow) | |
| KOMMO_CLIENT_SECRET | No | OAuth client secret (only for the OAuth flow) | |
| KOMMO_REFRESH_TOKEN | No | OAuth refresh token (only for the OAuth flow) |
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 | {
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_leadsA | List leads, optionally filtered by pipeline and stage. Read-only. Returns an array of lead objects with embedded contacts and tags, up to |
| get_leadA | Fetch one lead by ID. Read-only. Returns the full lead object including embedded contacts, tags, and custom_fields_values. Use list_leads instead to browse or find lead IDs. |
| create_leadA | Create one lead in Kommo. Not idempotent: each call creates a new lead. Tag names that do not exist yet are created automatically. Returns the created lead object. To create the contact and company in the same call, use create_lead_complex. |
| update_leadA | Update fields on an existing lead by sending |
| delete_leadA | Delete a lead. Sends PATCH /leads/{id} with is_deleted=true, so the lead is soft-deleted rather than removed through a hard-delete call. Destructive: the lead disappears from normal lists. Confirm the lead_id with get_lead first. |
| move_lead_stageA | Move a lead to another stage by setting its status_id (and optionally pipeline_id). Returns the updated lead. Use this instead of update_lead for pipeline moves. Pass pipeline_id when moving to a stage in a different pipeline. |
| bulk_update_leadsA | Update many leads in a single PATCH /leads request. Each item merges its |
| create_lead_complexA | Create a lead together with a new contact and/or company in one request (POST /leads/complex). Not idempotent; Kommo may merge a duplicate (merged=true). Returns {id, contact_id, company_id, merged}. Contact phone and email are sent as Kommo's built-in PHONE and EMAIL fields. Use create_lead if no contact or company is needed. |
| add_tagA | Attach a tag to a lead by name. Creates the tag if it does not exist. Reads the lead's current tags and writes back the full list plus the new one, so existing tags are kept. Safe to repeat. Returns the updated lead. See list_tags for existing tag names. |
| remove_tagA | Detach a tag from a lead by name. Reads the lead's tags and writes back the list without that tag; other tags are kept. The tag itself is not deleted from the account. If no tag with that name exists, nothing changes and the lead is returned as is. Safe to repeat. Returns the updated lead. |
| list_tagsA | List tags defined in the account for one entity type (up to 250). Read-only. Returns tag objects with id and name. Use it to check exact tag names before add_tag or remove_tag. |
| create_taskA | Create a follow-up task (type 1) attached to a lead. Not idempotent: each call creates a new task. Returns the created task. Use list_tasks to review existing tasks and add_note for non-actionable remarks. |
| list_tasksA | List tasks, optionally for one lead or only overdue ones. Read-only. Returns an array (Kommo default page size unless |
| add_noteA | Add a plain text (common) note to a lead's timeline. Not idempotent: repeated calls add duplicate notes. Notes are internal and are not sent to the customer; use send_chat_message for that. Returns the created note. |
| send_chat_messageA | Send an outgoing chat message to the customer in a lead's conversation. Finds a conversation (talk) whose entity is this lead and posts to it; fails with an error if the lead has none. The message is delivered externally and cannot be recalled by this server, and repeated calls send duplicates. Use add_note for internal notes. |
| list_chat_templatesA | List the account's chat message templates. Read-only. Returns template objects as provided by Kommo. This server cannot send a template; it only lists them (send_chat_message sends plain text). |
| list_contactsA | Search or list contacts. Read-only. Returns an array of up to |
| get_contactA | Fetch one contact by ID. Read-only. Returns the contact with embedded tags and custom_fields_values (phone, email, and others). Use list_contacts to find the ID. |
| create_contactA | Create one contact. Not idempotent: it does not check for duplicates, so search with list_contacts first. Phone and email are sent as Kommo's built-in PHONE and EMAIL fields (WORK values). Returns the created contact. To create a lead and contact together, use create_lead_complex. |
| update_contactA | Update fields on an existing contact by sending |
| list_pipelinesA | List all sales pipelines in the account. Read-only. Returns pipeline objects (id, name, sort, embedded stages as provided by Kommo). Results are cached for 10 minutes, so very recent changes may not show. Start here to obtain the pipeline_id and stage IDs used by most lead tools. |
| create_pipelineA | Create a new sales pipeline with the given name (sort order 99). Not idempotent: each call creates another pipeline. Returns the created pipeline. Add stages afterwards with create_stage. Clears the pipelines cache. |
| update_pipelineA | Rename an existing pipeline. Only the name can be changed with this tool. Returns the updated pipeline. Safe to repeat. Clears the pipelines cache. To change a stage use update_stage. |
| list_stagesA | List the stages (statuses) of one pipeline. Read-only. Returns stage objects with id, name, sort, color, and is_editable. Results are cached for 10 minutes. Use the stage IDs with list_leads, create_lead, and move_lead_stage. |
| create_stageA | Add a stage to a pipeline. It is placed after the pipeline's existing editable stages (sort is computed automatically). Not idempotent: each call creates another stage. Returns the created stage. Clears the stage and pipeline caches. |
| update_stageA | Change a stage's name, sort order, or color. Only the provided fields are sent; supply at least one of name, sort, or color. Returns the updated stage. Safe to repeat. Clears the stage and pipeline caches. Get IDs from list_stages. |
| list_custom_fieldsA | List custom field definitions for leads, contacts, or companies. Read-only. Returns field objects with id, name, code, type, and enum options. Cached for 1 hour. Use the field IDs in custom_fields_values when calling update_lead or update_contact. |
| create_custom_fieldA | Create a custom field on leads, contacts, or companies. Not idempotent: each call creates another field, so check list_custom_fields first. Returns the created field. Clears the custom-field cache for that entity. Provide enum_values for select-type fields. |
| create_companyA | Create a company record with a name only. Not idempotent: duplicates are not checked, so look with list_companies first. Returns the created company. To create a company alongside a new lead, use create_lead_complex. |
| list_companiesA | List companies. Read-only. Returns an array of up to |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 30 tools
Every tool targets a distinct entity+action, and the descriptions proactively resolve the few natural overlaps (update_lead vs move_lead_stage vs bulk_update_leads, create_lead vs create_lead_complex, add_note vs send_chat_message). Cross-references like 'use X instead of Y' make selection unambiguous. No two tools appear to do the same thing.
Consistent verb_noun snake_case throughout (create_lead, update_lead, delete_lead, list_leads, create_stage, update_pipeline, add_tag, remove_tag, send_chat_message). Pluralization is applied sensibly for list operations. No mixed conventions or vague verbs.
30 tools is on the heavy side, but the domain genuinely spans leads, contacts, companies, pipelines, stages, tasks, tags, notes, chat, and custom fields, so most tools earn their place. It is comprehensive rather than padded, though a few operations could be consolidated.
Leads have full lifecycle coverage (create/get/list/update/delete/move/bulk), but other entities are partial: contacts lack delete, companies have only create/list (no get/update/delete), tasks lack get/update/delete, and pipelines/stages/custom fields lack delete/update in places. These gaps will force workarounds for maintenance workflows.