MCP Clint CRM
Click on "Deploy 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., "@MCP Clint CRMlist all contacts"
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.
MCP Clint CRM
Servidor MCP (Model Context Protocol) para integração com o Clint CRM. Gerencie contatos, negócios, tags, organizações e toda a configuração do seu CRM diretamente através de assistentes de IA compatíveis com MCP.
Aviso: Este é um projeto open source mantido pela comunidade. Não é uma ferramenta oficial do Clint CRM. Utilize por sua conta e risco. Consulte a documentação oficial da API do Clint CRM para informações sobre a API.
Pré-requisitos
Plano Elite do Clint CRM — O acesso à API requer o plano Elite ativo na sua conta Clint.
API Key do Clint CRM — Chave de acesso gerada na sua conta Clint para autenticação na API.
Python 3.14+ — O projeto utiliza recursos modernos do Python.
UV — Gerenciador de pacotes e ambientes virtuais para Python. Instalar UV.
Links Úteis
Related MCP server: Cloze MCP Server
Instalação e Configuração
1. Clonar o repositório
git clone https://github.com/seu-usuario/mcp-clint-crm.git
cd mcp-clint-crm2. Configurar as variáveis de ambiente
Crie um arquivo .env na raiz do projeto:
# Obrigatório — sua chave da API do Clint CRM
CLINT_API_KEY=sua_chave_api_aqui
# Opcional — necessário apenas para modo HTTP (ver seção "Deploy via HTTP")
CLINT_MCP_TRANSPORT=stdio
CLINT_MCP_HOST=0.0.0.0
CLINT_MCP_PORT=8001
# Opcional — Google OAuth (necessário para autenticação via Cowork/Claude.ai)
GOOGLE_CLIENT_ID=seu_client_id.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=GOCSPX-xxx
GOOGLE_AUTH_BASE_URL=https://seu-servidor.com
# Opcional — Controle de acesso (requer Google OAuth ativo)
CLINT_MCP_RESTRICT_BY_EMAIL=false
CLINT_MCP_ALLOWED_EMAILS=usuario1@gmail.com,usuario2@gmail.com
CLINT_MCP_RESTRICT_BY_DOMAIN=false
CLINT_MCP_ALLOWED_DOMAINS=suaempresa.comVariável | Obrigatória | Descrição |
| Sim | Chave da API do Clint CRM (plano Elite) |
| Não | Transporte do servidor: |
| Não | Host do servidor HTTP (padrão: |
| Não | Porta do servidor HTTP (padrão: |
| Não | Client ID do Google OAuth (ver seção "Autenticação") |
| Não | Client Secret do Google OAuth |
| Não | URL pública do servidor (padrão: |
| Não |
|
| Não | Emails permitidos (separados por vírgula) |
| Não |
|
| Não | Domínios permitidos (separados por vírgula) |
3. Instalar dependencias
uv sync4. Executar o servidor (modo stdio)
uv run src/server.pyConfiguracao via stdio (Claude Desktop, Cursor, etc.)
Para utilizar o servidor MCP com assistentes de IA que suportam o protocolo MCP via stdio, adicione a seguinte configuração no arquivo de configuração do seu cliente MCP.
Claude Desktop
No arquivo claude_desktop_config.json:
{
"mcpServers": {
"clint-crm": {
"command": "uv",
"args": [
"run",
"--directory",
"/caminho/absoluto/para/mcp-clint-crm",
"src/server.py"
],
"env": {
"CLINT_API_KEY": "sua_chave_api_aqui"
}
}
}
}Cursor
No arquivo de configuração MCP do Cursor (.cursor/mcp.json):
{
"mcpServers": {
"clint-crm": {
"command": "uv",
"args": [
"run",
"--directory",
"/caminho/absoluto/para/mcp-clint-crm",
"src/server.py"
],
"env": {
"CLINT_API_KEY": "sua_chave_api_aqui"
}
}
}
}Claude Code (CLI)
claude mcp add clint-crm -- uv run --directory /caminho/absoluto/para/mcp-clint-crm src/server.pyNota: Substitua
/caminho/absoluto/para/mcp-clint-crmpelo caminho real do projeto no seu sistema. A variávelCLINT_API_KEYpode ser definida no.envdo projeto ou diretamente na configuraçãoenvdo cliente MCP.
Autenticação (Google OAuth)
O servidor suporta autenticação via Google OAuth, permitindo controlar quem pode acessar o MCP server via HTTP. A autenticação é opcional — se as variáveis GOOGLE_CLIENT_ID e GOOGLE_CLIENT_SECRET não estiverem definidas, o servidor aceita qualquer conexão.
Configurar o Google OAuth
Acesse o Google Cloud Console
Crie ou selecione um projeto
Vá em APIs & Services → Credentials → Create Credentials → OAuth Client ID
Tipo: Web application
Adicione a Redirect URI:
https://seu-servidor.com/auth/callbackCopie o Client ID e Client Secret para o
.env
Controle de acesso
Você pode restringir quem pode usar o servidor com duas opções (podem ser usadas juntas):
Por email — apenas emails específicos:
CLINT_MCP_RESTRICT_BY_EMAIL=true
CLINT_MCP_ALLOWED_EMAILS=frank@gmail.com,colega@empresa.comPor domínio — qualquer email de um domínio:
CLINT_MCP_RESTRICT_BY_DOMAIN=true
CLINT_MCP_ALLOWED_DOMAINS=suaempresa.com,parceiro.comSe ambos estiverem habilitados, o usuário precisa estar em pelo menos uma das listas para ter acesso.
Se nenhuma restrição estiver habilitada (false), qualquer conta Google autenticada terá acesso.
Deploy via HTTP (Servidor remoto / VPS / Cloud)
Para disponibilizar o MCP server via rede (ex: para uso com Claude.ai, Cowork, ChatGPT), o servidor roda em modo HTTP com transport Streamable HTTP.
Opção 1: Docker (recomendado)
git clone https://github.com/seu-usuario/mcp-clint-crm.git
cd mcp-clint-crmConfigure o .env:
CLINT_API_KEY=sua_chave_api_aquiSuba o container:
docker compose up -dO servidor estará disponível em http://seu-servidor:8001/mcp com health check automático em /health.
Opção 2: Uvicorn direto
cd mcp-clint-crm && uv sync
CLINT_MCP_TRANSPORT=streamable-http uv run uvicorn server:app --host 0.0.0.0 --port 8001 --app-dir srcOpção 3: VPS com PM2
cd mcp-clint-crm && uv sync
pm2 start "uv run uvicorn server:app --host 0.0.0.0 --port 8001 --app-dir src" --name clint-mcpConfiguração dos clientes MCP (HTTP)
Após o deploy, configure o cliente MCP com a URL do servidor.
Claude.ai / Cowork:
Adicione como custom connector na interface, ou no claude_desktop_config.json:
{
"mcpServers": {
"clint-crm": {
"type": "http",
"url": "https://seu-servidor.com/mcp"
}
}
}ChatGPT / Codex:
{
"mcpServers": {
"clint-crm": {
"url": "https://seu-servidor.com/mcp"
}
}
}Importante: Em produção, use HTTPS (TLS) com um reverse proxy (Nginx, Caddy, etc.) na frente do servidor MCP. O servidor em si não faz terminação TLS.
Tools Disponíveis
O servidor expõe 27 tools organizadas por domínio. Cada tool é anotada com metadados de segurança (somente leitura / destrutiva) para que o assistente de IA solicite confirmação antes de executar ações perigosas.
Resumo
Domínio | Tools | Operações |
Contatos | 7 | Listar, buscar, criar, atualizar, deletar, adicionar/remover tags |
Negócios (Deals) | 5 | Listar, buscar, criar, atualizar, deletar |
Tags | 4 | Listar, buscar, criar, deletar |
Organizações | 2 | Buscar, atualizar |
Origens | 2 | Listar, buscar |
Grupos | 2 | Listar, buscar |
Usuários | 2 | Listar, buscar |
Status de Perda | 2 | Listar, buscar |
Conta | 1 | Listar campos personalizados |
Contatos
list_contacts
Lista todos os contatos do CRM com filtros opcionais. Retorna até 1000 contatos por chamada com suporte a paginação.
Parâmetro | Tipo | Descrição |
|
| Deslocamento para paginação (padrão: 0) |
|
| Filtrar por nome do contato |
|
| Filtrar por telefone (sem código do país) |
|
| Filtrar por e-mail |
|
| Filtrar por tags (separadas por vírgula) |
|
| Filtrar por origem (use |
get_contact
Retorna os detalhes completos de um contato pelo UUID.
Parâmetro | Tipo | Descrição |
|
| ID do contato (obtenha via |
create_contact
Cria um novo contato no CRM.
Parâmetro | Tipo | Descrição |
|
| Nome do contato (obrigatório) |
|
| Código DDI do país |
|
| Telefone |
|
| |
|
| Nome de usuário |
|
| Campos personalizados (JSON). Use |
update_contact
Atualiza um contato existente. Envie apenas os campos que deseja alterar.
Parâmetro | Tipo | Descrição |
|
| ID do contato (obrigatório) |
|
| Novo nome |
|
| Novo DDI |
|
| Novo telefone |
|
| Novo e-mail |
|
| Novo nome de usuário |
|
| Campos personalizados (JSON) |
delete_contact
Remove permanentemente um contato. Ação destrutiva — requer confirmação.
Parâmetro | Tipo | Descrição |
|
| ID do contato (obrigatório) |
add_tags
Adiciona uma ou mais tags a um contato.
Parâmetro | Tipo | Descrição |
|
| ID do contato (obrigatório) |
|
| Lista de nomes de tags para adicionar |
remove_tags
Remove uma tag de um contato. Ação destrutiva — requer confirmação.
Parâmetro | Tipo | Descrição |
|
| ID do contato (obrigatório) |
|
| Nome da tag para remover |
Negócios (Deals)
list_deals
Lista negócios com filtros avançados por data, status, usuário e tags. Retorna até 1000 negócios por chamada.
Parâmetro | Tipo | Descrição |
|
| Deslocamento para paginação (padrão: 0) |
|
| Data inicial de criação (ISO 8601) |
|
| Data final de criação (ISO 8601) |
|
| Data inicial de atualização (ISO 8601) |
|
| Data final de atualização (ISO 8601) |
|
| Filtrar por e-mail do usuário responsável |
|
| Filtrar por telefone |
|
| Filtrar por e-mail |
|
| Filtrar por tags (separadas por vírgula) |
|
| Status: |
|
| Data inicial de ganho (ISO 8601) |
|
| Data final de ganho (ISO 8601) |
|
| Data inicial de perda (ISO 8601) |
|
| Data final de perda (ISO 8601) |
|
| Filtrar por etapa do funil |
get_deal
Retorna os detalhes completos de um negócio pelo ID.
Parâmetro | Tipo | Descrição |
|
| ID do negócio (obtenha via |
create_deal
Cria um novo negócio no CRM. Requer obrigatoriamente uma origem.
Parâmetro | Tipo | Descrição |
|
| ID da origem (obrigatório, use |
|
| Nome do contato |
|
| Telefone |
|
| |
|
| Nome de usuário |
|
| Valor do negócio |
|
| ID da etapa do funil |
|
| ID do usuário responsável |
|
| ID do contato existente |
|
| Campos personalizados (JSON) |
update_deal
Atualiza um negócio existente, incluindo mudanças de status e etapa do funil.
Parâmetro | Tipo | Descrição |
|
| ID do negócio (obrigatório) |
|
| Novo nome |
|
| Novo telefone |
|
| Novo e-mail |
|
| Novo valor |
|
| Nova etapa do funil |
|
| Novo status: |
|
| Novo usuário responsável |
|
| Nova origem |
|
| Campos personalizados (JSON) |
remove_deal
Remove permanentemente um negócio. Ação destrutiva — requer confirmação.
Parâmetro | Tipo | Descrição |
|
| ID do negócio (obrigatório) |
Tags
list_tags
Lista todas as tags com filtro opcional por nome.
Parâmetro | Tipo | Descrição |
|
| Deslocamento para paginação (padrão: 0) |
|
| Filtrar por nome da tag |
get_tag
Retorna os detalhes de uma tag pelo ID.
Parâmetro | Tipo | Descrição |
|
| ID da tag (obtenha via |
create_tag
Cria uma nova tag com nome e cor.
Parâmetro | Tipo | Descrição |
|
| Nome da tag (obrigatório) |
|
| Cor em hexadecimal (padrão: |
Cores disponíveis:
Cor | Código |
Vermelho |
|
Rosa |
|
Roxo |
|
Roxo escuro |
|
Azul |
|
Laranja |
|
Marrom |
|
Cinza azulado |
|
delete_tag
Remove permanentemente uma tag. Ação destrutiva — requer confirmação.
Parâmetro | Tipo | Descrição |
|
| ID da tag (obrigatório) |
Organizações
get_organization
Retorna os detalhes de uma organização pelo ID.
Parâmetro | Tipo | Descrição |
|
| ID da organização |
update_organization
Atualiza uma organização existente. Ação destrutiva — requer confirmação.
Parâmetro | Tipo | Descrição |
|
| ID da organização (obrigatório) |
|
| Novo nome |
|
| Campos personalizados (JSON) |
Origens
list_origins
Lista as origens filtradas por grupo. Cada origem contém suas etapas (stages) do funil.
Parâmetro | Tipo | Descrição |
|
| ID do grupo (obrigatório, use |
|
| Deslocamento para paginação (padrão: 0) |
get_origin
Retorna os detalhes de uma origem pelo ID.
Parâmetro | Tipo | Descrição |
|
| ID da origem (obtenha via |
Grupos
list_groups
Lista todos os grupos disponíveis no CRM.
Parâmetro | Tipo | Descrição |
|
| Deslocamento para paginação (padrão: 0) |
get_group
Retorna os detalhes de um grupo pelo ID.
Parâmetro | Tipo | Descrição |
|
| ID do grupo (obtenha via |
Usuários
list_users
Lista todos os usuários do sistema.
Parâmetro | Tipo | Descrição |
|
| Deslocamento para paginação (padrão: 0) |
get_user
Retorna os detalhes de um usuário pelo ID.
Parâmetro | Tipo | Descrição |
|
| ID do usuário (obtenha via |
Status de Perda
list_lost_status
Lista todos os motivos de perda de negócios.
Parâmetro | Tipo | Descrição |
|
| Deslocamento para paginação (padrão: 0) |
get_lost_status
Retorna os detalhes de um status de perda pelo ID.
Parâmetro | Tipo | Descrição |
|
| ID do status (obtenha via |
Conta
list_fields
Lista todos os campos personalizados configurados na conta. Use esta tool antes de criar ou atualizar contatos e negócios para descobrir os campos disponíveis e seus tipos.
Não requer parâmetros adicionais.
Campos Personalizados (Custom Fields)
Contatos, negócios e organizações suportam campos personalizados. O fluxo recomendado é:
Chame
list_fieldspara descobrir os campos disponíveis, seus nomes-chave, tipos e opções.Ao criar ou atualizar um registro, passe os campos no parâmetro
fieldscomo um objeto JSON:
{
"campo_personalizado_1": "valor",
"campo_personalizado_2": 123
}Os campos podem ser passados como dict do Python ou como uma string JSON válida.
Paginação
Todas as operações de listagem retornam até 1000 registros por chamada. Para obter mais resultados, use o parâmetro offset:
Primeira chamada:
offset=0(padrão)Segunda chamada:
offset=1000Terceira chamada:
offset=2000E assim por diante...
O servidor retorna o total de registros disponíveis e sugere o próximo offset quando há mais dados.
Stack Técnica
Tecnologia | Versão | Propósito |
Python | 3.14+ | Linguagem principal |
FastMCP | 3.1.1+ | Framework MCP |
httpx | 0.28.1+ | Cliente HTTP assíncrono |
Pydantic | 2.12.5+ | Validação de dados e modelos |
UV | - | Gerenciador de pacotes |
Docker | - | Containerização (opcional) |
Contribuindo
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues e pull requests. Se você está utilizando o projeto, favor considere marcar a estrela ⭐️.
Licença
Este projeto é open source. Consulte o arquivo de licença para mais detalhes.
Este projeto não é afiliado ao Clint CRM.
Available Tools
27 toolsadd_tagsA
Add tags to a single contact. Use list_contacts first to find the contact ID. Use list_tags to find tags IDs or names.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | ||
| tag_names | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read-only (write) operation and non-destructive behavior. The description adds that it modifies a contact by adding tags, which is consistent. It does not detail idempotency or what happens if a tag already exists, but overall behavior is clear.
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 only two sentences with no extraneous words. It front-loads the purpose and follows with pragmatic guidance. However, it could be more precise about parameter formats without adding 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 zero schema descriptions and a write operation, the description covers the workflow (list_contacts, list_tags) and basic purpose. However, it omits key details like whether multiple tags can be added in one call (implied by array) and the exact format expected for tag_names. Output schema exists, so return values are less critical, but missing parameter behavior reduces completeness.
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 schema has 0% description coverage, so the description must clarify parameter meaning. It mentions 'contact ID' for uuid and 'tags IDs or names' for tag_names, but ambiguously: does tag_names accept IDs, names, or both? The parameter is named 'tag_names' implying names, yet the text says 'IDs or names,' causing confusion. This adds limited clarity.
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 'Add tags to a single contact,' specifying the verb and resource. It distinguishes from sibling remove_tags by the action 'add' vs 'remove.' The purpose is instantly understood.
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: 'Use list_contacts first to find the contact ID' and 'Use list_tags to find tags IDs or names.' This guides the workflow but does not explicitly exclude alternatives or contrast with sibling tools beyond the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_contactA
Creates a contact. fields: custom fields as a JSON object (e.g. {"field_key": "value"}). Call list_fields first to discover available field keys.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| ddi | No | ||
| phone | No | ||
| No | |||
| username | No | ||
| fields | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, which is consistent with creation behavior. The description adds transparency by specifying that 'fields' is a JSON object and directing to list_fields for available keys. This goes beyond the annotation by detailing parameter 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 extremely concise: three sentences that pack essential information. No filler or unnecessary details. Each sentence serves a purpose (action, parameter guidance, prerequisite).
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 6 parameters and 1 required, the description explains only the custom fields parameter and its prerequisite. With an output schema present, return values need no explanation. However, the purpose and behavior of other parameters (e.g., validation, defaults) are omitted, leaving the description slightly incomplete for a creation tool.
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%, meaning no parameter descriptions in the schema. The description only explains the 'fields' parameter fully, leaving name, ddi, phone, email, and username undocumented. While the 'fields' guidance is helpful, the majority of parameters lack semantic context, necessitating higher compensation.
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 states 'Creates a contact' with a clear verb and resource. While it doesn't explicitly differentiate from sibling tools like create_deal or create_tag, the context of sibling names and the action itself make it clear. A more explicit statement of what constitutes a 'contact' might elevate to 5.
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 includes a key guideline: 'Call list_fields first to discover available field keys.' This provides a clear prerequisite when using the 'fields' parameter. However, it doesn't mention when to use this tool versus alternatives like update_contact, but that omission is minor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_dealA
Create a new deal in the CRM. origin_id is required — use list_origins to find valid origin IDs. fields: custom fields as a JSON object (e.g. {"field_key": "value"}). Call list_fields first to discover available field keys.
| Name | Required | Description | Default |
|---|---|---|---|
| origin_id | Yes | ||
| name | No | ||
| phone | No | ||
| No | |||
| username | No | ||
| value | No | ||
| stage_id | No | ||
| user_id | No | ||
| contact_id | No | ||
| fields | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false (mutation) and destructiveHint=false. The description adds that it creates a new deal, which is consistent but adds no additional behavioral traits like side effects, rate limits, or error conditions beyond the 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?
The description is three succinct sentences with no wasted words. It front-loads the main purpose and provides essential usage guidance efficiently.
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?
Despite the complexity of 10 parameters and zero schema coverage, the description only covers 2 parameters (origin_id and fields). It omits mention of other optional parameters like stage_id, user_id, etc., leaving the agent underinformed. An output schema exists, which explains return values, but parameter coverage is insufficient.
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 description explains origin_id (required) and fields (custom JSON object), but ignores 8 other parameters (name, phone, email, etc.). With 0% schema description coverage, the description should compensate by covering more parameters, but it does not. This leaves many parameters undocumented.
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 new deal in the CRM,' which is a specific verb and resource. It distinguishes from sibling create tools like create_contact by explicitly naming the resource. It also provides context about required origin_id and custom 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 advises using list_origins to find valid origin IDs and list_fields to discover field keys, offering clear prerequisites. However, it does not explicitly state when not to use this tool versus alternatives like update_deal, but the context is sufficient for a create operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_tagB
Create a new tag. Available colors: #f44336, #e91e63, #9c27b0, #673ab7, #2196f3, #faa200, #795548, #607d8b
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| color | No | #f44336 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-read-only and non-destructive. The description adds the constraint of available colors, which is useful behavioral context. However, no mention of permissions, idempotency, or 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?
Two concise sentences: first states purpose, second lists valid color values. No extraneous 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 an output schema exists, description need not detail return values. It covers the primary action and a key constraint, though omits potential duplication or side-effect behavior.
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 has 0% description coverage. Description only defines the color parameter's allowed values, but the name parameter remains undocumented beyond type and requirement.
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 'Create a new tag' clearly states the action and resource. While it does not explicitly differentiate from siblings, the verb implies creation, distinguishing it from 'add_tags' (likely adding existing tags) and 'delete_tag'.
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?
No guidance on when to use this tool versus alternatives. No mention of prerequisites, context, or 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.
delete_contactADestructive
WARNING: This is a destructive action, ask user permission to execute. Deletes a contact by its ID. Use list_contacts first to find the contact ID.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true. The description adds a warning and a permission guideline, providing context beyond annotations. It explains what the tool does (delete) and the need for user approval.
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?
Three concise sentences: warning, action, prerequisite. No unnecessary words. Information is front-loaded.
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 simplicity (one param, no nested objects), the description covers purpose, usage, and behavior. Output schema exists, so return values are handled. 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?
The schem has one required param 'uuid' with string type, no description. The description mentions 'by its ID' but doesn't explicitly map to the uuid parameter. However, the param name is self-explanatory, so the description adds minimal value. Baseline 3 due to schema having 0% coverage, but single param clarity keeps it adequate.
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 'Deletes a contact by its ID.' The verb (delete) and resource (contact) are explicit. It distinguishes from siblings like update_contact or list_contacts by specifying the action is deletion.
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 advises 'Use list_contacts first to find the contact ID,' providing a clear prerequisite. It also instructs to ask user permission due to destructive nature. It does not explicitly state when not to use, but the warning implies caution.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_tagADestructive
WARNING: This is a destructive action, ask user permission to execute. Remove a single tag by ID. Use list_tags to find the tag ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set destructiveHint=true and readOnlyHint=false. Description reinforces the destructive nature with a warning and permission requirement, adding necessary context beyond annotations.
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 sentences plus a warning; each sentence serves a purpose: alerting about destructiveness, describing action, and providing guidance. No 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?
For a simple one-parameter delete tool, the description covers key aspects: destructive action, permission requirement, and ID retrieval method. Output schema exists (not shown) but doesn't need explanation. Slight gap in parameter details.
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?
Only parameter is 'id' with 0% schema coverage. Description mentions 'by ID' but does not clarify format, source, or constraints. Schema coverage is low, and description fails to compensate meaningfully.
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 'Remove a single tag by ID,' specifying the action and resource. It distinguishes from sibling tools like 'remove_tags' which handles multiple tags.
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 to 'Use list_tags to find the tag ID' and warns about destructive action, asking for user permission. Could mention when not to use (e.g., for batch removal use remove_tags).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contactARead-only
Get full details of a single contact by UUID. Use list_contacts first to find the contact ID.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. Description adds 'full details' and 'by UUID' but does not disclose any other behavioral traits. No contradiction.
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 sentences, no redundancy, front-loaded with key verb and resource. Every word 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?
Tool is simple with one parameter, output schema exists, and the description covers the prerequisite workflow. No gaps given the context signals.
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%, but the description mentions the parameter (uuid) with context ('by UUID'). Given only one simple parameter, the description provides sufficient additional meaning over the schema alone.
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 the action (Get), resource (full details of a single contact), and identifier (by UUID). Differentiates from list_contacts and other sibling 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 advises to use list_contacts first to find the contact ID, providing clear context for use. Does not mention when not to use or alternative tools, but the guidance is helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dealARead-only
Retrieve a single deal by ID. Use list_deals to find the deal ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds no further behavioral context, such as error handling or authentication needs.
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 sentences, front-loaded with the core purpose. Every sentence is essential and 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 the tool's low complexity, presence of annotations, and an output schema, the description adequately covers how to use it and where to get the required ID.
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% for the only parameter 'id', but the description implies it is the deal identifier. No additional details on format or constraints are provided.
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 'Retrieve a single deal by ID' uses a specific verb and resource, clearly distinguishing it from sibling tools like list_deals.
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 instruction 'Use list_deals to find the deal ID' provides explicit context for when to use this tool, though it does not state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_groupARead-only
Retrieve a single group by ID. Use list_groups to find the group ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's simple 'Retrieve' is consistent but adds no extra detail. With annotations covering safety, the description meets the minimum bar.
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 sentences, no wasted words. The first sentence states the action and resource, the second provides a prerequisite. Perfectly 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?
For a simple get-by-ID tool with only one parameter and an output schema, the description covers the essential purpose and prerequisite. It could mention the return type, but the output schema makes that unnecessary.
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 schema has 0% description coverage for the single parameter 'id'. The description does not explain the format or expected value of the ID parameter, only indirectly suggests using list_groups to find it. This is insufficient compensation for the 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 'Retrieve a single group by ID', with a specific verb and resource, and distinguishes from the sibling list_groups tool.
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 guidance on how to find the group ID by referencing list_groups, which is a clear prerequisite. It does not explicitly mention when not to use this tool, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_lost_statusARead-only
Retrieve a single lost status by ID. Use list_lost_status to find the status ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so description adds no extra behavioral context. However, it is a simple retrieval with no side effects, so description is adequate.
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 sentences, no wasted words, front-loaded with core purpose and usage guidance.
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?
Complete for a single-resource retrieval: parameters are minimal, output schema exists, annotations cover safety, and sibling tools are listed. 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?
The description mentions 'by ID' which aligns with the required id parameter, but does not provide additional detail beyond what the parameter name suggests. Schema coverage is 0%, but the parameter is self-explanatory.
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 the verb 'Retrieve' and resource 'lost status' with scope 'by ID'. Distinguishes from sibling list_lost_status by directing to it for finding IDs.
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 tells when to use (when you have an ID) and directs to list_lost_status to find the ID, providing clear context and an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_organizationBRead-only
Retrieve details of a single organization by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds minimal context beyond the verb 'Retrieve', which aligns with the annotations. No additional behavioral traits (e.g., rate limits) are disclosed.
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 very short (one sentence) and front-loads the key information. However, it could be structured more informatively, e.g., by adding bullet points or clarifying the output. It earns its place but lacks depth.
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 simplicity (one parameter, read-only, output schema exists), the description is minimally adequate. It does not mention the return format or that the output schema contains details, but the output schema itself covers that. The description could be more helpful with usage 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?
With 0% schema description coverage, the description must compensate. It mentions 'by ID' but does not explain the format or expected value of the 'id' parameter (e.g., UUID, numeric). The description adds little beyond the schema's type declaration.
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 action ('Retrieve'), the resource ('details of a single organization'), and the identifier method ('by ID'). It clearly distinguishes from sibling tools like 'list_contacts' or 'update_organization'.
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?
No guidance on when to use this tool versus alternatives (e.g., when a list is needed). The description implies that a specific ID is required but gives no context on prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_originARead-only
Retrieve a single origin by ID. Use list_origins to find the origin ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false, so no contradiction. The description adds no additional behavioral details beyond purpose, which is acceptable given the annotations cover safety profile.
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, front-loaded with verb and resource, 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?
With an output schema present, the return structure is documented. Description covers core purpose and discovery of input. Lacks mention of error handling or edge cases, but still adequate for a simple retrieval tool.
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%, and the description only says 'by ID'—minimal additional meaning beyond the parameter name. No format or constraints explained.
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 action ('Retrieve a single origin by ID') and the resource, distinguishing it from siblings like list_origins which is mentioned as a means to find the ID.
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 tells users to use list_origins to find the origin ID, providing clear guidance on prerequisite step. Does not explicitly say when not to use, but context implies this tool is for when ID is already known.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tagARead-only
Retrieve a single tag by ID. Use list_tags to find the tag ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with readOnlyHint and destructiveHint annotations, adding minimal new information beyond that it retrieves a single item.
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, front-loaded with core purpose, no extraneous 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 the simple tool (one parameter, output schema present), the description sufficiently covers what it does and how to use it.
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 schema description coverage at 0%, the description adds 'by ID' but does not further clarify that the parameter is the tag's unique identifier.
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 'retrieve' and resource 'single tag by ID', and distinguishes from sibling tools like list_tags and create_tag.
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 clear guidance to use list_tags to find the tag ID, helping the agent decide when to use this tool, though does not explicitly mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_userARead-only
Retrieve a single user by ID. Use list_users to find the user ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description adds no further behavioral details (e.g., rate limits, response format), but is adequate given the annotations.
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 sentences, no fluff, front-loaded with the action. Every word adds value.
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 simple retrieval tool with one parameter and an output schema, the description provides the necessary context: what it does, how to use it, and a pointer to a sibling for ID lookup.
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 description does not add meaning beyond the parameter name 'id' (e.g., what kind of ID, format). The schema coverage is 0%, so the description should compensate, but it only repeats 'by ID'.
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 'Retrieve' and the resource 'a single user by ID', which is specific and distinguishes it from sibling tools like list_users.
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 the user to use list_users to find the ID if they don't have it, providing clear context. However, it does not explicitly mention when not to use this tool versus other get tools, but the resource distinction is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_contactsARead-only
List all contacts from the CRM. Optionally filter by name, email, phone (without country code), tag_names, or origin_id (use list_origins to find valid origin IDs). Returns up to 1000 per call. Use offset to paginate (e.g., offset=1000 for next batch).
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | ||
| name | No | ||
| phone | No | ||
| tag_names | No | ||
| No | |||
| origin_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint), the description adds essential behavioral details: returns up to 1000 per call, pagination via offset, optional filters, and phone format note. No contradictions.
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 three sentences, front-loaded with purpose, and every sentence adds value. No redundant or verbose content.
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 6 optional parameters and an output schema, the description covers purpose, filtering, pagination limit, and pagination method. It is fully complete for agent decision-making.
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 fully explains all 6 parameters: name, email, phone (without country code), tag_names, origin_id, and offset for pagination. This adds significant meaning 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 'List all contacts from the CRM' with a specific verb and resource. It distinguishes from siblings like get_contact (single) and create_contact by focusing on listing multiple with optional filters.
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 clear context for when to use (retrieve multiple contacts with optional filters, pagination) and references list_origins for valid origin IDs. It does not explicitly mention when not to use it or alternatives like get_contact for a single contact, but the sibling tool names make this implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dealsARead-only
Retrieve a list of deals. Optionally filter by date ranges (ISO 8601), user_email, phone, email, tag_names (comma-separated), status (OPEN, WON, LOST), or stage_id. Defaults to status=OPEN if not specified. Returns up to 1000 per call. Use offset to paginate (e.g., offset=1000 for next batch).
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | ||
| created_at_start | No | ||
| created_at_end | No | ||
| updated_at_start | No | ||
| updated_at_end | No | ||
| user_email | No | ||
| phone | No | ||
| No | |||
| tag_names | No | ||
| status | No | ||
| won_at_start | No | ||
| won_at_end | No | ||
| lost_at_start | No | ||
| lost_at_end | No | ||
| stage_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds useful behavioral details beyond annotations: default status, 1000 limit, offset pagination. Consistent with readOnlyHint and no destructive 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 with a distinct purpose: general retrieval, filters, defaults, pagination. 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?
Covers filters, defaults, pagination limitations. No output schema needed since it exists externally. Lacks mention of ordering, but overall complete for a list tool.
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 has 0% description coverage, but description explains all major filter categories (date ranges, user_email, phone, email, tag_names, status, stage_id, offset). Some date parameters not individually listed but covered by 'date ranges (ISO 8601)'. Adds significant semantic value.
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 'Retrieve a list of deals' with explicit verb and resource. Distinguishes well from siblings like get_deal (single), create_deal, 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 clear context: defaults to status=OPEN, pagination limit, offset usage. Does not explicitly mention when not to use (e.g., for a single deal use get_deal), but context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_fieldsARead-only
Get all custom fields available in the account. Use this to discover field names before creating or updating contacts and deals.
| 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?
Annotations already provide readOnlyHint=true and destructiveHint=false. The description confirms it's a read-only operation with 'Get'. It does not add extra behavioral context beyond the annotations, but also does not contradict them.
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 sentences: first states the purpose, second provides usage guidance. No unnecessary words. Front-loaded and efficient.
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?
The tool is simple with no parameters. The description covers purpose and usage. An output schema exists (not shown), so return values are documented elsewhere. Complete for its complexity.
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 tool has no parameters, and schema coverage is 100%. The description does not need to add parameter information. Baseline score of 4 is appropriate for zero-parameter tools.
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 it 'Get all custom fields available in the account.' This is a specific verb and resource. It distinguishes from sibling tools by focusing on fields, and adds context about discovering field names for contacts and deals.
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 'Use this to discover field names before creating or updating contacts and deals.' This provides clear guidance on when to use it. While there is no explicit when-not, the simple nature of the tool makes it sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_groupsARead-only
Retrieve a list of all groups. Returns up to 1000 per call. Use offset to paginate (e.g., offset=1000 for next batch).
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to cover those. It adds value by disclosing the 1000-per-call limit and pagination requirement, which are behavioral traits beyond annotations.
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 two sentences with no wasted words. The purpose is stated first (front-loaded), followed by essential pagination details. 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?
Given the presence of an output schema, the description does not need to explain return values. It covers pagination limit and offset usage. However, it could mention that groups are different from other entities (e.g., contacts), but that is implied by the tool name and siblings. Overall, sufficient for correct invocation.
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, leaving the single 'offset' parameter undocumented. The description compensates by explaining its purpose ('Use offset to paginate') and providing a concrete example ('offset=1000 for next batch'), adding crucial semantic meaning.
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 'Retrieve a list of all groups', specifying the verb (Retrieve) and resource (groups). This distinguishes it from sibling list tools (e.g., list_contacts, list_deals) which target different resources.
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 pagination guidance ('Returns up to 1000 per call. Use offset to paginate'), which is helpful but does not explicitly state when to use this tool over alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_lost_statusARead-only
Retrieve a list of all lost status reasons. Returns up to 1000 per call. Use offset to paginate (e.g., offset=1000 for next batch).
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate read-only and non-destructive behavior. The description adds valuable detail on pagination and the 1000-item limit, going beyond annotations.
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 sentences, no wasted words; purpose is front-loaded followed by essential pagination detail.
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 an output schema exists, the description covers the necessary aspects: purpose, pagination, and limit. 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?
With 0% schema description coverage, the description fully explains the offset parameter's purpose and usage with a concrete example, adding meaning 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 uses the verb 'retrieve' and specifies the resource 'all lost status reasons', clearly distinguishing from the sibling get_lost_status which likely returns a single item.
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 pagination guidance with limit and offset example, but does not mention when to use this tool over the sibling get_lost_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_originsARead-only
Retrieve a list of origins filtered by group. group_id is required — use list_groups to find valid group IDs. Returns up to 1000 per call. Use offset to paginate (e.g., offset=1000 for next batch).
| Name | Required | Description | Default |
|---|---|---|---|
| group_id | Yes | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint), the description adds behavioral traits: returns up to 1000 per call and pagination via offset. This provides valuable context for invocation.
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 sentences front-loaded with purpose, followed by required parameter and limits. No wasted words, 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?
Given the simple tool (2 parameters, no nested objects, output schema exists), the description fully covers filtering, required parameter, pagination limits. 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?
With 0% schema description coverage, the description compensates by explaining group_id is required and offset is for pagination with an example (offset=1000). This adds significant meaning 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 verb 'Retrieve' and the resource 'list of origins filtered by group'. It is distinct from siblings like list_contacts or list_groups, though it doesn't explicitly differentiate from get_origin.
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 states that group_id is required and directs the agent to use list_groups to find valid IDs. This provides clear context for when to use the tool and a prerequisite, but lacks when-not scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsARead-only
Retrieve a list of tags. Optionally filter by name. Returns up to 1000 per call. Use offset to paginate (e.g., offset=1000 for next batch).
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | ||
| name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations: it mentions the 1000-result limit, optional name filtering, and pagination via offset. Annotations already indicate read-only and non-destructive behavior, so the description enriches that with operational details without contradiction.
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 three concise sentences: the first states the core purpose, the second adds optional filtering, and the third explains pagination. No redundant or unnecessary information; 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?
Given the existence of an output schema (which documents return values), the description covers all necessary aspects: purpose, filtering, pagination, and result limit. For a simple list tool with two parameters, this is 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?
With schema description coverage at 0%, the description must compensate. It explains the 'name' parameter for filtering and implicitly explains 'offset' through the pagination example. However, it does not specify the matching behavior of the name filter (e.g., exact or partial) or the default value behavior. Still, it provides adequate functional meaning for both parameters.
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 'Retrieve' and resource 'list of tags', with optional filtering by name. It distinguishes from sibling tools like get_tag (single tag) and add_tags (add operation). The purpose is specific and unambiguous.
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 explains when to use filtering and pagination (using offset for batches of up to 1000). However, it does not explicitly contrast with get_tag (single tag retrieval) or specify when not to use the tool. The guidance is clear but lacks explicit exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_usersARead-only
Retrieve a list of all users. Returns up to 1000 per call. Use offset to paginate (e.g., offset=1000 for next batch).
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the 1000-item limit and pagination behavior, which are critical for agent planning.
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, front-loaded with the core purpose, followed by essential pagination details. 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 the output schema exists (covering return values) and the tool is a straightforward read-only list operation, the description fully covers usage, limits, and pagination. No gaps for this complexity level.
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 single parameter 'offset' has 0% schema description coverage, but the description explains its purpose (pagination) with a concrete example, adding value beyond the schema's type/default.
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?
Explicitly states 'Retrieve a list of all users' – a specific verb and resource. This clearly distinguishes from siblings like 'get_user' (single user) and 'list_contacts' (different resource).
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 clear pagination guidance: maximum 1000 per call and how to use offset for subsequent batches. Lacks explicit when-not-to-use or alternatives, but the pagination info is highly actionable for correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_dealADestructive
WARNING: This is a destructive action, ask user permission to execute. Remove a deal permanently by ID. Use list_deals or get_deal to find the deal ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds context that the action is permanent, reinforcing the destructive nature. No contradiction with annotations.
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 with the warning upfront. Every word is useful and efficient. No unnecessary details.
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 presence of an output schema (not shown), the description adequately covers the destructive nature and how to obtain the required ID. Sibling tools exist but are not compared, though the context is sufficient for a simple deletion tool.
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%, and the parameter 'id' has no description. The description only mentions 'by ID', which is minimal and adds little beyond the schema. For a single parameter with no schema description, more detail (type, format, example) would be valuable.
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 the action ('Remove a deal permanently by ID') with a specific verb and resource. However, it does not differentiate from sibling delete tools like delete_contact or delete_tag, which have similar purposes.
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?
Description explicitly advises asking user permission due to destructiveness and suggests using list_deals or get_deal to find the ID. This provides clear context for appropriate use but does not specify when not to use it or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_tagsADestructive
WARNING: This is a destructive action, ask user permission to execute. Remove a tag from a single contact. Use list_contacts first to find the contact ID. Use list_tags to find tag names.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | ||
| tag_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Warns about destructive action and asks for user permission, adding context beyond the destructiveHint annotation. No contradictions.
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?
Three short sentences, each necessary. Warning is front-loaded. 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?
Covers the key usage flow and safety concern. Output schema exists, so return value detail is not required. Slight lack of edge case handling but sufficient for the tool.
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 provides practical guidance on obtaining values (use list_contacts, list_tags). However, it does not explain parameter formats or constraints.
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 'Remove a tag from a single contact.' using a specific verb and resource. It clearly distinguishes from sibling tools like add_tags and delete_tag.
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?
Includes a warning for destructive action and instructs to use list_contacts and list_tags first for prerequisites. Lacks explicit alternatives but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_contactADestructive
Update contact by its ID. Use list_contacts first to find the contact ID. fields: custom fields as a JSON object (e.g. {"field_key": "value"}). Call list_fields first to discover available field keys.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | ||
| name | No | ||
| ddi | No | ||
| phone | No | ||
| No | |||
| username | No | ||
| fields | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, so the update is mutating. The description adds 'Update' which is consistent but does not disclose any additional behavioral traits such as partial update behavior, validation errors, or side effects. With annotations covering the main safety profile, the description adds minimal extra transparency.
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 four sentences, front-loaded with the main purpose, then prerequisites, then fields explanation. Every sentence adds value without redundancy. No unnecessary detail or fluff.
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 presence of an output schema, return values need not be explained. The description covers the core operation, prerequisites, and the important fields parameter. It misses possible details about how optional parameters behave (e.g., whether omitted fields are left unchanged), but overall it is fairly complete for a mutation tool with good annotations.
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 explains the 'fields' parameter as a JSON object with an example, but does not explain other parameters (name, ddi, phone, email, username) beyond their names. This provides some added value but lacks detail for the majority of parameters.
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 'Update contact by its ID' with a specific verb and resource. It distinguishes from sibling tools like create_contact, delete_contact, and get_contact by focusing on updating an existing contact identified by UUID. The additional guidance on the fields parameter reinforces the purpose.
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: 'Use list_contacts first to find the contact ID' and 'Call list_fields first to discover available field keys.' This guides when to use the tool. It does not explicitly state when not to use it or compare to alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_dealADestructive
Update an existing deal. Use list_deals or get_deal to find the deal ID. Status options: OPEN, WON, LOST. fields: custom fields as a JSON object (e.g. {"field_key": "value"}). Call list_fields first to discover available field keys.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| name | No | ||
| phone | No | ||
| No | |||
| value | No | ||
| stage_id | No | ||
| status | No | ||
| user_id | No | ||
| origin_id | No | ||
| fields | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate mutation (readOnlyHint=false, destructiveHint=true). The description adds helpful context like status options and fields usage, but does not elaborate on update behavior (e.g., partial vs full overwrite).
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 three sentences, each delivering critical information without redundancy. It is front-loaded with the main action and efficiently provides prerequisites and field guidance.
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?
While the description gives key guidance for using the tool and an output schema exists, it lacks details on update semantics (e.g., whether unspecified fields are cleared or retained). For a destructive mutation tool, this gap leaves the agent uncertain about the tool's full behavior.
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 explains id, status, and fields, but omits 7 other parameters (name, phone, email, value, stage_id, user_id, origin_id) which are self-explanatory but not annotated. The description fails to fully cover all parameters.
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 'Update an existing deal' and provides guidance on finding the deal ID, making the purpose unambiguous. It distinguishes itself from sibling tools like create_deal or remove_deal by focusing on modification.
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 advises using list_deals or get_deal to find the deal ID and list_fields to discover field keys, providing clear prerequisites. However, it does not mention when not to use this tool or suggest alternatives for different tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_organizationADestructive
Update an existing organization. Use get_organization first to check current data. custom_fields: custom fields as a JSON object (e.g. {"field_key": "value"}).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| name | No | ||
| custom_fields | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, and the description confirms 'update.' No additional behavioral details (e.g., permissions, side effects) are provided beyond the annotation, but the prerequisite note adds some context.
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 three concise sentences: first for purpose, second for usage guidance, third for a parameter explanation. No redundancy or 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 an output schema exists and annotations cover destructiveness, the description adds the prerequisite and a parameter note. It is mostly complete, though it could list all updatable fields explicitly.
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 only explains the 'custom_fields' parameter with an example JSON format. The 'id' and 'name' parameters are left to inference, which is acceptable given their simplicity. Partial but 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 'Update an existing organization,' using a specific verb (update) and resource (organization), and distinguishes from sibling tools like update_contact and update_deal.
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 advises to 'Use get_organization first to check current data,' providing a clear prerequisite and context for proper use, though it does not explicitly list when not to use or alternative tools.
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.
27 tool updates
v0.1.0- First observed
add_tags - First observed
create_contact - First observed
create_deal - First observed
create_tag - First observed
delete_contact - First observed
delete_tag - First observed
get_contact - First observed
get_deal - First observed
get_group - First observed
get_lost_status - First observed
get_organization - First observed
get_origin - First observed
get_tag - First observed
get_user - First observed
list_contacts - First observed
list_deals - First observed
list_fields - First observed
list_groups - First observed
list_lost_status - First observed
list_origins - First observed
list_tags - First observed
list_users - First observed
remove_deal - First observed
remove_tags - First observed
update_contact - First observed
update_deal - First observed
update_organization
TDQS
Scored across 27 tools
Each tool targets a specific resource and action, with no overlapping purposes. For example, add_tags and remove_tags are distinct from create_tag/delete_tag, and all contact/deal tools are clearly separated.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., create_contact, list_deals, get_tag). Verbs like add, create, delete, get, list, remove, update are used uniformly.
27 tools is above the typical 3-15 range but still reasonable for a comprehensive CRM server covering multiple entities (contacts, deals, tags, organizations, etc.). It is not excessive given the domain.
Core entities (contacts, deals) have full CRUD plus tag operations. However, organizations lack create and delete, and groups, lost status, origins, and users are read-only (only get/list). Custom fields only support listing.
Maintenance
Related MCP Connectors
API-first CRM for LLMs - contacts, companies, deals and activities over a native MCP server.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.
MCP server for SmartAgent CRM: leads, tasks, sales pipelines, property listings
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server that enables LLMs to interact with Moxie CRM. Provides comprehensive tools for managing clients, contacts, projects, invoices, time tracking, and more.309 npm3MIT
- AlicenseNot gradedqualityDmaintenanceOpen-source MCP server for Cloze CRM that gives AI agents access to contacts, companies, deals, metadata, and timeline.MIT
- AlicenseBqualityDmaintenanceA Model Context Protocol (MCP) server that provides tools for managing GoHighLevel (GHL) conversations, tasks, and calendar appointments through AI assistants like Claude.2135 npmMIT
- AlicenseBqualityCmaintenanceSelf-hosted MCP server that connects AI assistants to Kommo CRM (API v4), enabling real-time CRM actions such as creating/managing leads, tasks, notes, and more through 29 tools.291MIT