Skip to main content
Glama
kemosoft-team

@kemosoft/mcp-heymax-crm

@kemosoft/mcp-heymax-crm

CI

MCP server em TypeScript para a API de atendimento do HeyMax CRM hospedada em ms-crm-az.kemosoft.com.br.

Estado atual

Esta primeira versão expõe apenas ferramentas read-only. Foi uma decisão deliberada.

Revisão adversarial:

  • A OpenAPI da API está incompleta para operações de escrita.

  • Publicar tools destrutivas agora aumentaria risco operacional sem garantia de contrato estável.

  • O servidor já é útil para consulta, mas ainda não é um conector "completo" de CRM.

Related MCP server: pipedrive-pj

Fluxo

Cliente MCP
  -> Servidor (valida input com Zod)
  -> HeyMax CRM API (envia request com api-key)
  <- JSON ou erro HTTP
  -> Servidor (normaliza resposta/erro)
  -> Cliente (structuredContent + texto)

Para quem isso é utilizável

Hoje o servidor é utilizável por qualquer pessoa que tenha:

  • Node.js >= 22

  • acesso a um cliente MCP compatível com stdio

  • uma credencial válida em HEYMAX_CRM_API_KEY

Revisão adversarial:

  • Sem credencial válida, o pacote instala mas não entrega valor real.

  • Portanto o produto ainda não é "aberto para qualquer pessoa" no sentido de acesso irrestrito à API.

Requisitos

  • Node.js >= 22

  • npm

  • Credencial válida em HEYMAX_CRM_API_KEY

Variáveis de ambiente

Copie .env.example para .env ou exporte as variáveis no shell:

  • HEYMAX_CRM_API_KEY: obrigatório

  • HEYMAX_CRM_API_SOURCE: opcional nesta versão; será usado nas futuras operações de escrita

O timeout de request nao e configuravel pelo usuario. Ele e fixo em 30s. O host da API tambem nao e configuravel. O servidor so fala com https://ms-crm-az.kemosoft.com.br.

Guardrails de seguranca

  • respostas de erro upstream sao sanitizadas

  • payloads retornados ao modelo passam por redacao de campos sensiveis

  • conteudos potencialmente binarios ou base64 sao removidos do output

  • o markdown nao inclui mais dumps brutos de JSON

Instalação

Via npm local:

npm install
npm run build

Via npx depois da publicação no npm:

npx -y @kemosoft/mcp-heymax-crm

Execução

Modo local via stdio:

npm start

Desenvolvimento:

npm run dev

Pipeline de publicação

O release agora é automatizado pelo GitHub Actions depois que o CI passa em main.

  • fix: gera patch

  • feat: gera minor

  • feat!: ou BREAKING CHANGE gera major

  • commits que não alteram versão não disparam release

O fluxo faz:

  • o CI valida build, testes e smoke

  • semantic-release calcula a próxima versão

  • gera CHANGELOG.md

  • publica no npm como @kemosoft/mcp-heymax-crm

  • cria release no GitHub

  • commita os arquivos de release com [skip ci] para evitar loop

Secrets necessários no repositório:

  • NPM_TOKEN: token granular com permissão de publish no scope @kemosoft

  • GITHUB_TOKEN: o GitHub Actions fornece automaticamente

Para validar localmente antes de subir:

npm run prepack

Se você quiser publicar manualmente fora do pipeline, use o fluxo do semantic-release em vez de npm publish direto.

Tools disponíveis

  • heymax_crm_list_active_pipelines

  • heymax_crm_list_lost_reasons

  • heymax_crm_list_events

  • heymax_crm_list_tags

  • heymax_crm_validate_phone

  • heymax_crm_search_address_by_cep

  • heymax_crm_find_services_by_phone

  • heymax_crm_get_pipeline_flow

  • heymax_crm_get_service_status_by_id

  • heymax_crm_get_service_status_by_funnel_and_cpf

Exemplo de configuração em cliente MCP

Exemplo genérico de comando:

{
  "command": "node",
  "args": ["C:/caminho/para/mcp-heymax-crm/dist/index.js"],
  "env": {
    "HEYMAX_CRM_API_KEY": "sua-chave"
  }
}

Claude Desktop

{
  "mcpServers": {
    "heymax-crm": {
      "command": "npx",
      "args": ["-y", "@kemosoft/mcp-heymax-crm"],
      "env": {
        "HEYMAX_CRM_API_KEY": "sua-chave"
      }
    }
  }
}

Codex

{
  "mcpServers": {
    "heymax-crm": {
      "command": "npx",
      "args": ["-y", "@kemosoft/mcp-heymax-crm"],
      "env": {
        "HEYMAX_CRM_API_KEY": "sua-chave"
      }
    }
  }
}

Cursor

{
  "mcpServers": {
    "heymax-crm": {
      "command": "node",
      "args": ["/caminho/para/mcp-heymax-crm/dist/index.js"],
      "env": {
        "HEYMAX_CRM_API_KEY": "sua-chave"
      }
    }
  }
}

Estrutura do projeto

src/
  api-client.ts
  config.ts
  constants.ts
  format.ts
  index.ts
  schemas.ts
  tools.ts
  types.ts

Verificação

npm run build
npm run typecheck
npm run smoke

Limitações atuais

  • Sem tools de escrita

  • Sem transporte HTTP

  • Sem paginação real no backend; o limite atual corta o array retornado pela API

  • Alguns endpoints da API não possuem schema de resposta confiável na documentação

  • A utilidade prática ainda depende de distribuição controlada de HEYMAX_CRM_API_KEY

Available Tools

10 tools
heymax_crm_find_services_by_phoneFind Services by PhoneB
Read-onlyIdempotent

Find existing customer service records by phone number, grouped by CPF in the HeyMax CRM API.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to return, between 1 and 100.
phoneYesPhone number with or without punctuation.
response_formatNoResponse format. Use 'markdown' for readability or 'json' for structured output.markdown

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
itemsYes
truncatedYes
total_countYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds the useful detail that results are grouped by CPF, but says nothing about pagination behavior, result limits, or auth requirements beyond the annotation set.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no wasted words, but it is terse enough that it omits any usage or behavioral detail that would have earned the space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is not required, and annotations cover safety. However, for a search tool whose siblings share overlapping phone/CPF semantics, the description leaves selection criteria and result-shaping (grouping, limits) under-explained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all three parameters (phone, limit, response_format) are already documented in the schema. The description only echoes the phone filter and adds no syntax, format, or default-value nuance beyond structured data; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Find'), resource ('customer service records'), and filter ('by phone number'), plus the grouping behavior by CPF. It is distinguishable from siblings like validate_phone or get_service_status_by_id, though it does not name them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance is given, and no alternative is named. An agent must infer on its own that this differs from heymax_crm_validate_phone or heymax_crm_get_service_status_by_funnel_and_cpf, both of which also take phone/CPF input.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

heymax_crm_get_pipeline_flowGet Pipeline FlowB
Read-onlyIdempotent

Fetch workspace and flow data for a given HeyMax CRM funnel or pipeline slug.

ParametersJSON Schema
NameRequiredDescriptionDefault
funnelYesPipeline/funnel slug used by the API.
include_imagesNoInclude base64 image fields when the API supports them.
response_formatNoResponse format. Use 'markdown' for readability or 'json' for structured output.markdown

Output Schema

ParametersJSON Schema
NameRequiredDescription
funnelYes
resultNo
include_imagesYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered. The description adds no operational context beyond restating 'fetch'—nothing about auth, rate limits, payload size, or how include_images changes the response.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the verb first and no filler. It is efficient, though for a tool with three parameters and an output schema it is arguably terse to the point of omitting useful routing context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is not required, and the annotations cover the safety profile. What remains thin is routing guidance—why to pick this over the sibling pipeline/listing tools—which is only weakly implied.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters (funnel, include_images, response_format) are already documented in the schema. The description only echoes the funnel term ('funnel or pipeline slug') without adding format or constraint detail, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb (fetch) and resource (workspace and flow data) scoped to a funnel/pipeline slug, so the agent knows what it returns. It does not explicitly distinguish itself from siblings like heymax_crm_list_active_pipelines, leaving the single-item-by-slug vs. list distinction to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for a given ... slug' implies the tool is used when a funnel slug is already known, but no when-to-use statement, prerequisites, or named alternatives are given. Usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

heymax_crm_get_service_status_by_funnel_and_cpfGet Service Status by Funnel and CPFB
Read-onlyIdempotent

Fetch the current status of a customer service record by funnel slug and CPF.

ParametersJSON Schema
NameRequiredDescriptionDefault
cpfYesCPF with or without punctuation.
funnelYesPipeline/funnel slug used by the API.
response_formatNoResponse format. Use 'markdown' for readability or 'json' for structured output.markdown
include_customer_dataNoInclude customer data in the API response.

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNo

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so safety is covered structurally. The description adds nothing beyond that: it does not say what happens when no record matches the CPF/funnel pair, nor whether the funnel must exist beforehand.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the resource first and the two lookup keys last; zero filler and nothing that could be trimmed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation, and all four parameters are fully described in the schema. The only shortfall is the absence of sibling routing guidance, which is minor given the low complexity of a read-only two-key lookup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents CPF formatting flexibility, the funnel slug semantics, response_format and include_customer_data. The description merely restates the two required lookup keys without adding format or constraint detail, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ("Fetch") and resource ("customer service record status") and names both lookup keys, funnel slug and CPF. It is clear on its own, but it never distinguishes itself from the sibling heymax_crm_get_service_status_by_id, leaving the agent to guess which lookup path applies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus heymax_crm_get_service_status_by_id, nor any precondition such as needing a funnel slug already resolved via the list_pipelines sibling. Usage must be inferred entirely from the name and required parameters.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

heymax_crm_get_service_status_by_idGet Service Status by IDB
Read-onlyIdempotent

Fetch the current status of a customer service record by atendimento ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
service_idYesAtendimento identifier.
response_formatNoResponse format. Use 'markdown' for readability or 'json' for structured output.markdown
include_customer_dataNoInclude customer data in the API response.

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNo

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered. The description adds nothing beyond the annotations – no note on auth scope, rate limits, or whether 'current' means live versus cached data – so it contributes no behavioral value of its own.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single well-formed sentence with the resource and lookup key front-loaded and no filler. It is appropriately sized, though borderline terse given the tool's option parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and annotations cover safety. The remaining gap is sibling disambiguation against get_service_status_by_funnel_and_cpf, which the description does not address.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including the 'response_format' enum and 'include_customer_data' flag, so the baseline is 3. The description only restates that the lookup key is an atendimento ID, adding no semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Fetch'), resource ('current status of a customer service record') and key ('atendimento ID'), so an agent knows exactly what it retrieves. It does not differentiate itself from the close sibling get_service_status_by_funnel_and_cpf, but the lookup key is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the parameters: use this when you already hold an atendimento ID. However, the description never states when to prefer this tool over the near-identical sibling that resolves status by funnel and CPF, nor any prerequisites, leaving the routing decision to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

heymax_crm_list_active_pipelinesList Active PipelinesB
Read-onlyIdempotent

List active customer service funnels/pipelines configured in the HeyMax CRM API.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to return, between 1 and 100.
response_formatNoResponse format. Use 'markdown' for readability or 'json' for structured output.markdown

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
itemsYes
truncatedYes
total_countYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered without description help. The description adds only the 'active' filtering scope, a small amount of context beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence with the scope qualifier front-loaded and zero wasted words. Nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, zero-required-parameter list operation with a full output schema and complete annotation coverage, the description is nearly sufficient. It could note the 'active-only' filter's implications or how results relate to get_pipeline_flow, but the core need is met.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (limit, response_format) are fully documented in the schema itself. The description adds nothing about pagination, defaults, or format choices, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (list) and resource (active customer service funnels/pipelines) with the scoping qualifier 'active'. An agent can tell it apart from most siblings, though it doesn't explicitly differentiate from pipeline-related siblings like get_pipeline_flow beyond the implicit list-vs-detail distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this versus alternatives, nor any prerequisites or context. There is no mention that this is the entry point before calling heymax_crm_get_pipeline_flow, which would have been valuable routing information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

heymax_crm_list_eventsList EventsB
Read-onlyIdempotent

List customer service events available in the HeyMax CRM API.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to return, between 1 and 100.
response_formatNoResponse format. Use 'markdown' for readability or 'json' for structured output.markdown

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
itemsYes
truncatedYes
total_countYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare this as a read-only, open-world, idempotent, non-destructive operation. The description adds no behavioral context beyond that, such as pagination behavior, rate limits, authentication requirements, or the nature of returned events. It does not contradict the annotations, but it also does not enrich them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that states the core purpose without unnecessary detail. The phrase 'available in the HeyMax CRM API' is mildly redundant but not harmful, and no additional sentences are wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema, rich annotations, and full parameter documentation, so the description does not need to explain return values or safety behavior. Its main purpose statement is sufficient for an agent to identify the tool among siblings, though usage guidance would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema fully documents the 'limit' and 'response_format' parameters with defaults and constraints. The description adds no parameter meaning beyond what the schema provides, making 3 the appropriate baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a clear verb ('List') and a specific resource ('customer service events'), which distinguishes it from sibling list tools for pipelines, tags, and lost reasons. However, it does not explicitly differentiate itself from those siblings or clarify the exact scope of 'events'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states what the tool does but gives no guidance on when to use it versus alternatives. It does not mention prerequisites, appropriate contexts, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

heymax_crm_list_lost_reasonsList Lost ReasonsB
Read-onlyIdempotent

List available lost or closing reasons for customer service records in the HeyMax CRM API.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to return, between 1 and 100.
response_formatNoResponse format. Use 'markdown' for readability or 'json' for structured output.markdown

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
itemsYes
truncatedYes
total_countYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered elsewhere. The description adds only the scope ('available ... for customer service records'), with no mention of pagination behavior, ordering, or whether reasons are user-configurable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence that front-loads the verb and resource with no filler. It is efficient, though it is arguably under-specified rather than optimally concise given the documentation burden it carries.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only lookup tool with only two optional parameters, 100% schema coverage, full annotations, and an output schema to describe return values, the definition is largely complete. The missing piece is usage context relative to siblings, but nothing structurally required is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters (limit, response_format) carry their own descriptions with ranges and enum meanings, so the schema does the heavy lifting. The description adds no parameter-level detail, which is the expected baseline for a fully documented schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (List) and resource (lost or closing reasons for customer service records) scoped to the HeyMax CRM API, which is unambiguous. It doesn't explicitly distinguish itself from sibling list tools (list_active_pipelines, list_tags, list_events), but the resource noun is specific enough that an agent can tell them apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to call this versus sibling list tools, nor any mention of prerequisites or typical scenarios (e.g., populating a dropdown when closing a service record). The agent must infer usage entirely from the name and resource noun.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

heymax_crm_list_tagsList TagsB
Read-onlyIdempotent

List customer service tags configured in the HeyMax CRM API.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to return, between 1 and 100.
response_formatNoResponse format. Use 'markdown' for readability or 'json' for structured output.markdown

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
itemsYes
truncatedYes
total_countYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive, so the safety profile is covered. The description adds only that these are 'configured' tags (predefined configuration rather than per-ticket data) and nothing about pagination or ordering behaviour. Adequate but thin given annotations carry most of the disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with the resource and scope front-loaded and zero filler. Nothing to trim and nothing buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple zero-required-parameter list tool with an output schema, complete parameter documentation, and annotations covering safety, the description is sufficient for correct invocation. It would be stronger with a note on pagination or expected tag volume, but nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both `limit` and `response_format` are fully documented in the schema, including the enum options. The description adds no parameter meaning beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource: 'List customer service tags' scoped to the HeyMax CRM API. An agent can tell this apart from sibling list tools such as list_lost_reasons or list_active_pipelines by resource name, though the description never explicitly contrasts them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no conditions, no mention of alternatives among the nine sibling tools. The agent must infer that this is the tool for enumerating tag configuration, with nothing about when it is preferred over, say, search or lookup siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

heymax_crm_search_address_by_cepSearch Address by CEPC
Read-onlyIdempotent

Resolve a CEP into address data using the HeyMax CRM API.

ParametersJSON Schema
NameRequiredDescriptionDefault
cepYesCEP with or without punctuation.
response_formatNoResponse format. Use 'markdown' for readability or 'json' for structured output.markdown

Output Schema

ParametersJSON Schema
NameRequiredDescription
inputYes
resultNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint, covering the safety profile. The description adds only that it calls the HeyMax CRM API, with no note on external lookup latency, failure modes for invalid CEPs, or rate limits — so it contributes little beyond structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no waste. It is appropriately sized for a simple lookup tool, though it is arguably too terse to carry any routing or behavior information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering the safety profile, the description does not need to explain return values. However, for a tool that hits an external API and validates a Brazilian postal code, it omits error/not-found behavior, leaving a gap an agent would benefit from.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both parameters (cep, response_format) are fully documented in the schema including the enum and default. The description adds no parameter-level meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (resolve) and resource (CEP into address data), which is clearly distinct from sibling list/find tools. It stops short of naming an alternative or scope boundary, so it is clear but undifferentiated from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no indication of when to use this tool versus alternatives such as find_services_by_phone, nor any preconditions (e.g., valid CEP format needed). The agent must infer usage purely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

heymax_crm_validate_phoneValidate PhoneB
Read-onlyIdempotent

Validate whether a phone number exists on WhatsApp according to the HeyMax CRM API.

ParametersJSON Schema
NameRequiredDescriptionDefault
phoneYesPhone number with or without punctuation.
response_formatNoResponse format. Use 'markdown' for readability or 'json' for structured output.markdown

Output Schema

ParametersJSON Schema
NameRequiredDescription
inputYes
resultNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds one useful fact beyond them: validation is performed against WhatsApp through the HeyMax CRM API, i.e. an external system. It still omits what a positive/negative result means, rate limits, or cost.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no waste and no redundancy. The trailing clause about the HeyMax CRM API is slightly ceremonial but still conveys the external source.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation, and both parameters are schema-documented. What is missing is routing context versus find_services_by_phone and any statement of what constitutes a valid result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the description adds nothing about phone formatting (E.164, country code) or response_format beyond what the schema already states. Baseline 3 applies when the schema carries the parameter detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Validate) and resource (phone number on WhatsApp), which is unambiguous. However, it never differentiates itself from the sibling heymax_crm_find_services_by_phone, which also takes a phone and could be confused at selection time.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to reach for this tool: no mention that it should be used before a WhatsApp outreach, no condition that selects it over find_services_by_phone, and no exclusions. Usage is only implicit from the verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 10 tool updatesv1.0.0
    • First observedheymax_crm_find_services_by_phone
    • First observedheymax_crm_get_pipeline_flow
    • First observedheymax_crm_get_service_status_by_funnel_and_cpf
    • First observedheymax_crm_get_service_status_by_id
    • First observedheymax_crm_list_active_pipelines
    • First observedheymax_crm_list_events
    • First observedheymax_crm_list_lost_reasons
    • First observedheymax_crm_list_tags
    • First observedheymax_crm_search_address_by_cep
    • First observedheymax_crm_validate_phone

TDQS

A3.5/5.0

Scored across 10 tools

Disambiguation4/5

Each tool targets a distinct action or resource, but two tools retrieve pipeline data (list_active_pipelines vs get_pipeline_flow) and two fetch service status by different keys, which could cause slight confusion. The descriptions help differentiate them, so the overlap is minor.

Naming Consistency5/5

All tools share the 'heymax_crm_' prefix and follow a consistent snake_case verb_noun pattern (e.g., list_, get_, find_, validate_). The verb variations are appropriate to each action, maintaining predictable naming throughout.

Tool Count5/5

With 10 tools, the set is well-scoped for a CRM integration, covering metadata listing, validation, lookup, and status retrieval without bloat. Each tool appears to earn its place.

Completeness3/5

The surface is largely read-only: it can list metadata, validate phone numbers, search addresses, and fetch service status, but lacks operations to create, update, or delete service records, tags, or pipelines. This leaves notable gaps for a CRM integration, though core read workflows are covered.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Read-only MCP server that exposes the Poli Júnior Pipedrive CRM to Claude as composable tools.
    -
  • A
    license
    A
    quality
    D
    maintenance
    A read-only MCP server that exposes HubSpot CRM data (contacts, deals, companies, quotes) to AI agents, enabling natural language queries.
    9
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    MCP server to query Microsoft Dynamics 365 CRM records and support workflows using streamable HTTP transport.
    -