Kylas CRM MCP Server
OfficialClick on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Kylas CRM MCP Serverfind leads from company 'TechCorp'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Kylas CRM MCP Server (Lead Only)
Model Context Protocol server for Kylas CRM lead operations. Use it from Cursor, Claude Desktop, or any MCP client to create leads, search and filter leads, and look up users, products, and pipelines.
Features
get_lead_field_instructions – Get lead schema (standard + custom fields, picklist IDs)
create_lead – Create a lead with dynamic fields from user context
search_leads – Search/filter leads by multiple criteria
lookup_users – Resolve user names to IDs (for owner, created by, etc.)
lookup_products – Resolve product names to IDs
lookup_pipelines / get_pipeline_stages – Resolve pipeline and stage for open/closed/won leads
search_idle_leads – Find leads with no activity for N days
Related MCP server: Klaviyo MCP Server
Requirements
Python 3.10+
Kylas account and API key
Installation
pip install -e .
# or from PyPI (after publish): pip install kylas-crm-mcp-serverConfiguration
Set environment variables (or use a .env file):
Variable | Required | Description |
| Yes | Your Kylas API key |
| No | API base URL (default: https://api.kylas.io/v1) |
Running the server
The server uses stdio transport (default for MCP). Run:
python -m kylas_crm_mcp
# or: python main.py (when developing from repo root)MCP clients (e.g. Cursor) typically start this process and communicate via stdin/stdout.
Docker
docker build -t kylas-crm-mcp .
docker run -e KYLAS_API_KEY=your_key -i kylas-crm-mcpDevelopment
pip install -e ".[dev]"
pytestPublishing to the MCP Marketplace
To publish this server to the official MCP Registry (so it appears in Cursor and other MCP clients):
Publish the package to PyPI (the registry verifies ownership via your README).
Install mcp-publisher and run
mcp-publisher login github, thenmcp-publisher publish.
See PUBLISHING.md for the full step-by-step guide.
License
See repository for license information.
Available Tools
14 toolscreate_leadA
Create a lead in Kylas CRM with only the fields the user wants (no static field list).
You MUST call get_lead_field_instructions FIRST to get valid API names and Field IDs. Infer from user context which fields to send; include only those in field_values.
field_values: Map of field identifier to value.
Standard fields: use API name as key at top level (e.g. firstName, lastName, companyName, emails, phoneNumbers, leadSource, isNew).
Custom fields: MUST be under "customFieldValues" with internal name as key (e.g. "customFieldValues": {"cfLeadCheck": "Checked"}). Do not use field ID as key—Kylas expects internal names. If you pass a field ID (e.g. "1210985"), the server will resolve it to the internal name (e.g. cfLeadCheck) automatically.
For a single email use "email": "user@example.com". For phones use "phone": "5551234567" (or "phoneNumbers" array) and you MUST include "phone_country_code": "IN" or "+91" at top level. If the user provided phone(s) but did not specify country or dial code, do NOT call create_lead—ask the user (e.g. which country/dial code for these numbers?) and only call after they respond. Do not infer from currency or other context. Email types: OFFICE, PERSONAL. Phone types: MOBILE, WORK, HOME, PERSONAL. Exactly one email and at most one phone should be primary; first entry is primary by default.
For picklists use the Option ID (number) from the cheat sheet.
For date/datetime fields: the user gives a time in their timezone (e.g. "11th Feb 2026 at 7:30 AM"). Call get_current_user, then parse_datetime_to_utc_iso_tool(local_datetime, timezone) and put the returned UTC ISO string in field_values.
| Name | Required | Description | Default |
|---|---|---|---|
| field_values | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description discloses important behavioral traits: the structure of field_values, handling of custom fields via internal names, phone country code requirement, and email/phone type conventions. Missing details on error handling or side effects but still strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured: high-level purpose, then prerequisites, then detailed field instructions. Each sentence adds value, though some details (e.g., email/phone types) could be more compact. Mostly earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (mutation tool, no annotations, one parameter with 0% schema coverage, nested objects), the description is remarkably complete. It covers prerequisites, field structures, edge cases, and references to other tools. Output schema exists, so return value details are not needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter field_values is a freeform object with 0% schema description coverage. The description adds extensive meaning: how to structure standard fields, custom fields, emails, phones, picklists, and dates. This far exceeds the schema's minimal definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a lead in Kylas CRM' with a specific verb and resource. It also notes the flexible field approach, distinguishing it from sibling tools like 'update_lead' or 'search_leads'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit prerequisites: 'You MUST call get_lead_field_instructions FIRST'. It also gives conditions to avoid calling (e.g., if phone country code is missing, ask user) and context on when to infer fields.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_current_userA
Get the current authenticated user's profile from Kylas (GET /users/me). Call this whenever a date or datetime-related query is involved. Returns timezone (IANA, e.g. Asia/Calcutta), recordActions (call, email, sms, etc.), name, and other profile fields.
For filtering (search_leads, search_idle_leads): use the returned timezone as the timeZone in date/datetime filters; keep the user's date/datetime as-is (do not convert to UTC).
For create_lead: when the user provides a datetime in their own words (e.g. "11th Feb 2026 at 7:30 AM"), interpret it in this timezone, convert to UTC using parse_datetime_to_utc_iso, and send the UTC ISO string in field_values.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries full burden. It discloses the tool is read-only and returns profile fields including timezone, recordActions, name, etc. It does not mention destructive behavior or side effects, which is appropriate. The description is transparent about the return value and its usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear main sentence followed by bullet-point usage guidelines. It is fairly long but every sentence adds value. Slight improvement could be more concise grouping, but overall effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, an output schema exists, and the description thoroughly covers when and how to use the tool, it is fully complete. It provides all necessary context for an AI agent to correctly invoke and use the output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0 parameters, the baseline is 4. The description does not need to add parameter info, and it provides context on what the tool returns, which is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool's purpose: 'Get the current authenticated user's profile from Kylas (GET /users/me).' It clearly identifies the resource and action, distinguishing it from sibling tools by focusing on the returned timezone and profile fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'Call this whenever a date or datetime-related query is involved.' It then gives specific instructions for using the returned timezone in filtering (search_leads, search_idle_leads) and lead creation (create_lead), effectively telling when and how to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_leadA
Get full details of a lead by ID (GET /leads/{id}). Use when the user asks for complete lead info, lead details, or to view a specific lead. lead_id: The lead ID (e.g. from search_leads or search_leads_by_term results).
| Name | Required | Description | Default |
|---|---|---|---|
| lead_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description implies read-only behavior through 'Get full details' but does not explicitly state absence of side effects, auth requirements, or rate limits. Adequate for a simple read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences plus a parameter line. No wasted words, front-loaded with main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return value explanation is unnecessary. Description covers purpose, usage, and parameter source. No annotation gaps, but missing explicit behavioral transparency. Still complete for a simple getter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has one parameter (lead_id) with no description. Description adds meaningful context: 'The lead ID (e.g. from search_leads or search_leads_by_term results).' This clarifies the source of the ID. Since schema coverage is 0%, description compensates well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Get full details of a lead by ID' and specifies the REST endpoint. Distinguishes from sibling search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use when the user asks for complete lead info, lead details, or to view a specific lead.' Provides positive guidance but does not list alternative tools for when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_lead_field_instructionsA
Get all lead fields for the current tenant. CALL THIS FIRST before creating a lead. Returns a cheat sheet with API names (standard fields), Field IDs (custom fields), and Picklist Option IDs. Use this to build field_values for create_lead based on what the user wants—do not use static fields.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It explains that the tool returns a 'cheat sheet' with specific data types (API names, Field IDs, Picklist Option IDs). This is sufficient for a read-only tool with no parameters, though it could mention idempotency or lack of side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each delivering distinct value: action, ordering, output detail, usage. Front-loaded with primary purpose. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, existence of output schema, and sibling tools including create_lead, description fully covers what an agent needs: what it does, why call it first, what it returns, and how to use the result. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has zero parameters (schema coverage 100%). Baseline is 4 as per instructions. No parameter info needed in description; it correctly omits any.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Get', resource 'all lead fields', and scope 'current tenant'. Distinguishes from siblings like create_lead, search_leads by emphasizing it is a preliminary step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs 'CALL THIS FIRST before creating a lead' and 'Use this to build field_values for create_lead'. Also advises 'do not use static fields', providing clear when-to-use and how-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pipeline_detailsA
Get full pipeline details by ID (GET /pipelines/{id}): stages plus unqualifiedReasons and lostReasons. Call this when moving a lead to Closed Lost or Closed Unqualified. Present the relevant reasons list to the user, ask them to pick one, then call update_lead with pipelineStageReason set to that exact string (e.g. "No followup", "Booked with competitor"). pipeline_id: The pipeline ID (from the lead's current pipeline or from lookup_pipelines).
| Name | Required | Description | Default |
|---|---|---|---|
| pipeline_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read operation via GET and mentions response fields, which is good. However, it could explicitly state idempotency or that the tool is safe to call multiple times without side effects. Still, the intent is clear enough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient: it starts with the core purpose, then gives usage context, and ends with parameter guidance. Every sentence contributes to understanding without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists (not shown but referenced), the description need not detail return values. It already mentions key fields. For the intended workflow (fetch reasons, select one, update lead), the description is completely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does so by explaining that pipeline_id comes from the lead's current pipeline or from lookup_pipelines, providing practical context for using the parameter. This adds significant value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns full pipeline details (stages, unqualifiedReasons, lostReasons) by ID, with the HTTP method. This distinguishes it from sibling tools like get_pipeline_stages or lookup_pipelines by specifying exactly what data is returned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to call this tool ('when moving a lead to Closed Lost or Closed Unqualified'), how to use the result (present reasons to user, ask for a pick), and the follow-up action (call update_lead with the exact string). This is comprehensive guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pipeline_stagesA
Get stages for a pipeline. Call this only after the user has confirmed which pipeline to use (from lookup_pipelines). Do not call before pipeline confirmation. Returns pipeline name and list of stages for that pipeline only, with id, name, and forecastingType (OPEN, CLOSED_WON, CLOSED_LOST, CLOSED_UNQUALIFIED). Use the stage IDs in search_leads: filters [{"field": "pipeline", "operator": "equal", "value": pipeline_id}, {"field": "pipelineStage", "operator": "equal", "value": stage_id}]. If the user said "open leads" or "closed leads" and more than one stage has the same forecastingType, ask which stage they mean. pipeline_id: The pipeline ID (from lookup_pipelines).
| Name | Required | Description | Default |
|---|---|---|---|
| pipeline_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Fully describes return values (pipeline name, list of stages with id, name, forecastingType) and constraints. With no annotations, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence serves a purpose: purpose, usage guidance, return format, parameter description. No wasted words, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one parameter and existing output schema, the description covers all needed context: preconditions, return structure, and downstream usage. Complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description explains pipeline_id as 'The pipeline ID (from lookup_pipelines)', adding crucial context beyond the schema's type-only definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Get stages for a pipeline' with specific verb and resource. Distinguishes from siblings like lookup_pipelines and search_leads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to call only after pipeline confirmation from lookup_pipelines, and provides detailed guidance on using stage IDs in search_leads and handling ambiguities.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_pipelinesA
Look up pipelines by name (for leads). Use when the user asks for leads by stage (e.g. open/closed/won/lost) but does not specify which pipeline.
Call this first; do NOT call get_pipeline_stages until after the user confirms the pipeline.
Present the pipeline(s) (id and name) and ask the user which pipeline they mean. If only one pipeline is found, still ask for confirmation.
Only after the user confirms, call get_pipeline_stages with that pipeline ID to get stages for that pipeline, then search_leads. query: Search string. Use "name:" or just the pipeline name; empty string returns all pipelines for the entity. entity_type: Entity type (default LEAD). page: 0-based page (default 0). size: Max 50 (default 50).
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| entity_type | No | LEAD | |
| page | No | ||
| size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It describes the lookup behavior and workflow, but does not explicitly state that it is read-only or mention authorization needs. However, the context (lookup) implies read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured: purpose, usage guidelines, parameter details. Slightly verbose but every sentence adds value. Could be slightly more concise, but is clear and organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No annotations or output schema details, but description covers the essential workflow. Sibling tools are listed, and the tool's role is clear. Missing some details like permissions or error cases, but sufficient for basic use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema coverage, the description details all four parameters: query (format and behavior), entity_type (default LEAD), page (0-based), size (max 50). This fully compensates for missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Look up pipelines by name (for leads)' and specifies when to use it: 'when the user asks for leads by stage but does not specify which pipeline.' It distinguishes itself from sibling tools like get_pipeline_stages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit step-by-step instructions: 'Call this first; do NOT call get_pipeline_stages until after the user confirms.' Describes when to call and what to do with results (present, ask confirmation).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_productsA
Look up products by name. Use this BEFORE filtering leads by product when the user gives a product name.
If one product is found, use that product's ID in search_leads (e.g. {"field": "products", "operator": "equal", "value": }).
If multiple products are found, ask the user which product they mean (list the options), then use the chosen product's ID in search_leads. query: Search string. Use "name:" (e.g. "name:Widget") or just the product name (e.g. "Widget"); the server will send name:value to the API. page: 0-based page (default 0). size: Max 50 (default 50).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| page | No | ||
| size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It does not disclose authentication, rate limits, or error handling. It mentions server behavior (sending name:value) but lacks deeper behavioral traits. Output schema may cover return values, but overall transparency is moderate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with bullet points and clear separation of usage and parameter details. Slightly verbose but each sentence adds value. Could be trimmed slightly but maintains clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 parameters, no annotations, and presence of output schema, description covers usage workflow and parameter constraints comprehensively. Does not discuss output format but output schema likely handles that. Adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but description compensates well. Explains query parameter format ('name:<product_name>' or plain name), and clarifies page/size defaults and bounds. Adds meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Look up products by name.' It provides a specific verb and resource, and distinguishes from sibling tools like search_leads by indicating it's a precursor to filtering leads by product.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'Use this BEFORE filtering leads by product when the user gives a product name.' Provides clear guidance on handling single vs multiple results and how to proceed with search_leads calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_usersA
Look up users by name, or list all users in the system.
Use return_all=True (with query "name:" or empty) to fetch all users in one response (all pages combined).
For name search: query in field:value form (e.g. "firstName:last", "name:Last"). If one user is found, use that ID in search_leads; if multiple, ask which one. query: Search string (e.g. "firstName:last", "name:Last"). Use "name:" or leave default to list all when return_all=True. page: 0-based page (default 0). Ignored when return_all=True. size: Page size, max 50 (default 50). Used per page when return_all=True. return_all: If True, fetch all pages and return every user in one response (cap 500).
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | name: | |
| page | No | ||
| size | No | ||
| return_all | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses pagination behavior, cap of 500 for return_all, and parameter interactions. Could mention error conditions or rate limits, but still strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise with no wasted words. Front-loaded purpose, then bullet-point parameter details. Two sentences cover behavior and cross-reference.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity and existence of an output schema, the description fully covers input behavior, pagination, limits, and cross-tool usage. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. It explains each parameter: query format (e.g., 'firstName:last'), page as 0-based, size max 50, return_all behavior. Adds significant value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Look up users by name, or list all users in the system.' This is a specific verb and resource, and it distinguishes this tool from siblings which deal with leads, pipelines, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use return_all=True, how to format the query, and even cross-references search_leads for the user ID. This helps the agent decide when to use this tool vs alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_datetime_to_utc_iso_toolA
Parse a datetime string in the user's timezone and return UTC ISO string for the Kylas API. Call get_current_user first to get the user's timezone. Use the returned string in create_lead field_values for date/datetime fields. Example: user says "create lead with follow-up 11th Feb 2026 at 7:30 AM" → get_current_user → timezone Asia/Calcutta → parse_datetime_to_utc_iso_tool("11 Feb 2026 7:30 AM", "Asia/Calcutta") → use result in field_values. local_datetime: Datetime as the user said it (e.g. "11 Feb 2026 7:30 AM", "11th Feb 2026 at 7:30 am"). timezone: IANA timezone from get_current_user (e.g. Asia/Calcutta).
| Name | Required | Description | Default |
|---|---|---|---|
| local_datetime | Yes | ||
| timezone | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It describes the tool as a pure datetime parsing and conversion utility with no side effects. However, it does not explicitly state that it is non-destructive or has no side effects. The example implies a stateless operation, which is sufficient but could be more explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with the main purpose in the first sentence, followed by usage guidance, example, and parameter details. It is slightly verbose due to the example, but every sentence adds value. The example is helpful for an agent to understand the expected input format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (though not shown), the description explains the output as 'return UTC ISO string'. It covers the workflow dependency (calling get_current_user first), input format, and integration with create_lead. For a simple parsing tool, this is complete and leaves no gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does so effectively: 'local_datetime: Datetime as the user said it (e.g. "11 Feb 2026 7:30 AM", "11th Feb 2026 at 7:30 am").' and 'timezone: IANA timezone from get_current_user (e.g. Asia/Calcutta).' This adds critical meaning beyond the schema's type-only definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Parse a datetime string in the user's timezone and return UTC ISO string for the Kylas API.' It specifies the action (parse), resource (datetime string), and output (UTC ISO string). It is distinct from sibling tools like create_lead and get_current_user by showing its specific role in the workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs to 'Call get_current_user first to get the user's timezone' and provides an example workflow. It also states where the result is used: 'Use the returned string in create_lead field_values for date/datetime fields.' This gives clear when-to-use and dependencies, effectively guiding the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_idle_leadsA
Search for idle/stagnant leads: no activity for at least the given number of days. Uses both updatedAt and latestActivityCreatedAt; a lead is returned only when BOTH dates are on or before (today − days), so the effective last activity is before the threshold.
days: Minimum days with no activity (e.g. 10 for "no activity since 10 days"). time_zone: IANA timezone for threshold (e.g. America/New_York). Default: Asia/Calcutta. page: 0-based page (default 0). size: Page size, max 100 (default 20). sort: Sort e.g. "createdAt,desc" (default).
| Name | Required | Description | Default |
|---|---|---|---|
| days | Yes | ||
| time_zone | No | ||
| page | No | ||
| size | No | ||
| sort | No | createdAt,desc |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the behavioral nuance of using both updatedAt and latestActivityCreatedAt, enforcing that both must be before the threshold. It also mentions pagination defaults. Missing are any authentication needs or error behavior, but the core behavior is well explained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise—just a few sentences—with no wasted words. It front-loads the purpose and then efficiently explains the dual-date logic and each parameter. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with an output schema, the description covers all parameters, explains the selection logic, and provides defaults. It is complete enough for an agent to correctly invoke the tool without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides meaning for all parameters: days with usage example, time_zone with default and example, page with '0-based', size with max 100 and default, and sort with default value. This adds significant value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Search' and the resource 'idle/stagnant leads'. It explains the precise logic using both updatedAt and latestActivityCreatedAt. This distinguishes it from sibling tools like search_leads and search_leads_by_term which search by other criteria.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Search for idle/stagnant leads: no activity for at least the given number of days', providing clear when-to-use context. It explains the dual-date condition but does not explicitly state when not to use or mention alternatives. However, the context is sufficient for an agent to understand when to select this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_leadsA
Search/filter leads. Only fields marked [FILTERABLE] in get_lead_field_instructions can be used. Call get_lead_field_instructions first to get filterable fields and their types.
filters: List of filter objects. Each must have:
field (str): Field internal/API name (e.g. firstName, country, source, createdAt).
operator (str): One of the allowed operators for that field type (e.g. equal, contains, greater).
value: Value to compare. For PICK_LIST/MULTI_PICKLIST use Option ID (number), except requirementCurrency, companyBusinessType, country, timezone, companyIndustry — use internal name (string). For date/datetime (incl. custom e.g. cfDateField): value null for today/is_null/is_not_null; single ISO string for greater/greater_or_equal/less/less_or_equal e.g. "2026-02-02T18:30:00.000Z"; for between use [startISO, endISO].
timeZone (str, optional): For date/datetime filters only; default from server or env.
type (str, optional): Field type from cheat sheet. If omitted, inferred from schema. For user look-up fields (createdBy, updatedBy, convertedBy, ownerId, importedBy): value must be user ID (number). Call lookup_users first. For the products field: value must be product ID (number). Call lookup_products first; if multiple matches, ask which product, then use that ID here. For pipeline / pipelineStage (e.g. open leads, closed leads): call lookup_pipelines first, ask the user to confirm which pipeline, then call get_pipeline_stages for that pipeline only; if stage is ambiguous ask which stage, then use pipeline + pipelineStage filters here. page: 0-based page (default 0). size: Page size, max 100 (default 20). sort: Sort e.g. "createdAt,desc" (default).
Operators by type (examples): TEXT_FIELD: equal, contains, is_empty. NUMBER: equal, greater, between, is_null. PICK_LIST: equal, in, is_null. DATETIME_PICKER: today, yesterday, between, is_not_null, greater, less, current_week, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| filters | Yes | ||
| page | No | ||
| size | No | ||
| sort | No | createdAt,desc |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not explicitly state that the operation is read-only, but it is implied by 'search'. The description does not disclose potential side effects, rate limits, or response size constraints. It does, however, thoroughly explain the filter constraints and special cases, which adds some transparency but omits behavioral aspects like data freshness or timeout behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but well-structured with clear sections and examples. It is front-loaded with the main purpose and prerequisites. While some repetition exists (e.g., multiple 'call...first' patterns), the complexity of the tool justifies the length. The bullet-point formatting aids readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters, nested filter objects, high parameter logic), the description is extremely comprehensive. It covers all filtering variations, special handling for different field types, and pagination. No critical input aspect is missing. Since an output schema exists, the description does not need to explain return values. The description fully contextualizes the tool's usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate entirely. It does so excellently by explaining each parameter in depth: the filters array structure, field types, operators, special cases for dates, picklists, user lookups, products, and pipelines. It also covers pagination and sorting defaults. This goes far beyond what the schema provides, enabling the agent to use the tool correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Search/filter leads.' However, it does not distinguish this tool from sibling tools like search_leads_by_term or search_idle_leads, which are likely more specialized. The lack of differentiation prevents the agent from knowing when to use this tool over alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides detailed step-by-step instructions for constructing filters (e.g., calling get_lead_field_instructions first, special handling for user lookups, pipelines, etc.), but it offers no guidance on when to use this tool vs. other search tools. There is no mention of scenarios where this tool is appropriate or inappropriate compared to alternatives, leaving the agent without comparative context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_leads_by_termA
Search leads by a single term across multiple fields (firstName, lastName, companyName, phoneNumbers, emails, etc.). Use this when the user asks for "leads with X", "leads containing Y", or "leads named Z" without specifying which field to filter on. For filtering by a specific field (e.g. "leads where phone number is X"), use search_leads instead.
search_term: The term to search for (e.g. "akshay", "acme"). page: 0-based page (default 0). size: Page size, max 100 (default 20). sort: Sort e.g. "updatedAt,desc" (default).
| Name | Required | Description | Default |
|---|---|---|---|
| search_term | Yes | ||
| page | No | ||
| size | No | ||
| sort | No | updatedAt,desc |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It does not disclose behavioral traits like case sensitivity, search behavior (exact match, fuzzy), or what happens on no results. Lacks authorization or rate limit info. Minimal transparency beyond basic operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured, starting with purpose, then usage guideline, then parameter details. Not overly long, but some repetition (defaults stated twice). Every sentence adds value. Could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists (not shown), return values are covered. Complexity moderate with 4 params. Description covers parameter meanings and usage context but lacks behavioral details (case sensitivity, pagination behavior beyond defaults). Adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds meaning for all 4 parameters: search_term with examples, page as 0-based, size with max, and sort with format example. Provides defaults and constraints. Could mention sortable fields but is still helpful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search leads by a single term across multiple fields', specifying the verb, resource, and scope. It distinguishes from sibling tool 'search_leads' which filters by specific field, so purpose is distinct and precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use: when user asks for 'leads with X', 'leads containing Y', 'leads named Z' without field specification. Also explicitly directs to search_leads for specific field filtering. Excellent guidance with a clear alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_leadA
Update a lead in Kylas CRM. Fetches the lead first, merges your field_values into it, then PUTs the full body. Same field_values format as create_lead. Call get_lead_field_instructions first for API names and custom field internal names. For owner: use lookup_users to get the user ID, then pass ownerId: in field_values.
lead_id: The lead ID to update (e.g. from search_leads or search_leads_by_term results). field_values: Map of field identifier to value (same as create_lead: firstName, lastName, email, phone with phone_country_code, customFieldValues, picklist Option IDs, date/datetime in UTC ISO, etc.). These are merged over the existing lead; other fields are left unchanged.
| Name | Required | Description | Default |
|---|---|---|---|
| lead_id | Yes | ||
| field_values | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description fully handles transparency. It explains the fetch-merge-PUT pattern, that other fields are left unchanged, and provides details on field handling. It could mention that this is a mutation (update) but the action itself implies it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: start with high-level purpose, then details on prerequisites and parameters. Each sentence adds value, though slightly dense. Not overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given two parameters, no annotations, and an existing output schema, the description covers the main aspects: what the tool does, how it works, parameter details, prerequisites, and special cases. It is comprehensive and leaves little ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain parameters. It provides detailed meaning for lead_id (source e.g., search_leads) and field_values (format, examples like phone with country code, custom fields, picklists). This adds significant value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates a lead in Kylas CRM, using precise verbs ('Update') and specifying the resource ('lead'). It distinguishes itself from siblings like create_lead (create vs. update) and get_lead (read vs. write).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit prerequisites (call get_lead_field_instructions first, for owner use lookup_users) and references create_lead for field format. It does not explicitly state when not to use it, but the context is clear enough. Lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
All tools have distinct and clearly defined purposes. There is no overlap; even search tools are differentiated by search term vs. filter-based search, and pipeline tools are separated by granularity. An agent can easily select the correct tool.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., create_lead, get_current_user, search_leads). Even longer names like parse_datetime_to_utc_iso_tool adhere to the pattern. No mixing of styles.
With 14 tools, the server is well-scoped for a CRM. It provides sufficient coverage of lead management, search, pipeline stages, and utility functions without being bloated. Each tool serves a necessary purpose.
The tool surface covers core lead lifecycle (create, get, update, search) and supporting operations (pipeline lookup, user/product lookup, datetime parsing). The only noticeable gap is the absence of a delete_lead tool, which agents would need for full CRUD. Otherwise, completeness is strong.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Model Context Protocol server for Studex tools, notifications, and profile integrations
API-first CRM for LLMs - contacts, companies, deals and activities over a native MCP server.
A Model Context Protocol server for Wix AI tools
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that integrates with Prospeo API to find work emails and enrich LinkedIn profiles.1
- FlicenseDqualityCmaintenanceA comprehensive Model Context Protocol server that enables interaction with the Klaviyo API, providing tools and resources for managing customer profiles, lists, segments, campaigns, flows, and various marketing automation features.473

DevRev MCP Serverofficial
AlicenseBqualityNot gradedmaintenanceA Model Context Protocol server that enables searching, retrieving, creating, and updating issues and tickets using DevRev APIs.1610- AlicenseNot gradedqualityFmaintenanceA Model Context Protocol server that provides AI coding assistants (Claude, Cursor, etc.) with access to SmartLead's cold email automation platform through 116+ API endpoints for campaign management, lead tracking, and email delivery.26621MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/kylastech/kylas-crm-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server