AiSensy MCP by usefulapi

Read AiSensy contacts, templates and campaigns; add contacts, send WhatsApp messages on approval.

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
100%
Integridad del esquema
89%
Calidad de los nombres
80%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~3,697Tokens (definiciones de herramientas)
~1.5 KBTamaño de respuesta típico
Impacto significativo en la atención (2.89% del contexto de 128k)

Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

{
  "mcpServers": {
    "aisensy": {
      "url": "https://aisensy.usefulapi.io/mcp"
    }
  }
}

Puntos de conexión remotos

https://aisensy.usefulapi.io/mcpstreamable-http

Qué puede hacer

Inventario de herramientas

Herramientas (16)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢aisensy_get_project

The AiSensy project (WhatsApp account) this key belongs to: name, status, plan and renewal date, monthly active user quota and usage, credit balance (raw units as AiSensy reports them), WhatsApp number, display name status, quality rating and messaging tier. GET /project/{project_id}.

Esquema de entrada

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢aisensy_list_templates(limit, after, before)

List the WhatsApp template messages of the project with name, language, status (PENDING, APPROVED, REJECTED), category, text and parameter count. Only APPROVED templates can be sent. Pages by record id: pass next_after from the previous reply as `after`. GET /project/{project_id}/wa_template/.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Templates per page, 1-100 (default 10).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "after": {
      "description": "Return records after this template id (exclusive); use the previous reply's next_after.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$"
    },
    "before": {
      "description": "Return records before this template id (exclusive).",
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢aisensy_get_template(template_id)

One WhatsApp template by id, with status, rejection reason, buttons and text. GET /project/{project_id}/wa_template/{id}.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "template_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "AiSensy record id (as returned by the list tools)."
    }
  },
  "required": [
    "template_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢aisensy_list_campaigns(campaign_type, skip, limit)

List campaigns (API campaigns, broadcasts or both) with name, type, status, audience size, submitted count, template and creation time. Pages with skip + limit. POST /project/{project_id}/campaigns (a read: it only queries).

Esquema de entrada

{
  "type": "object",
  "properties": {
    "campaign_type": {
      "description": "Which campaigns (default ALL).",
      "type": "string",
      "enum": [
        "API",
        "BROADCAST",
        "ALL"
      ]
    },
    "skip": {
      "description": "Campaigns to skip (default 0).",
      "type": "integer",
      "minimum": 0,
      "maximum": 100000
    },
    "limit": {
      "description": "Campaigns per page, 1-100 (default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢aisensy_list_api_campaigns

List the project's API campaigns (the campaigns messages can be sent through) with status and template. A campaign must be LIVE to send. GET /project/{project_id}/campaign/api.

Esquema de entrada

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢aisensy_get_api_campaign(campaign_id)

One API campaign by id: status, template, parameters and counts. GET /project/{project_id}/campaign/api/{campaign_id}.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "campaign_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "AiSensy record id (as returned by the list tools)."
    }
  },
  "required": [
    "campaign_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢aisensy_get_campaign_analytics(campaign_id, start_date, end_date)

Daily delivery and credit-usage statistics of one campaign (sent, delivered, read, failed counts and message credit usage), optionally within a date range. POST /project/{project_id}/campaign/analytics/{campaign_id} (a read: it only queries).

Esquema de entrada

{
  "type": "object",
  "properties": {
    "campaign_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "AiSensy record id (as returned by the list tools)."
    },
    "start_date": {
      "description": "First day, yyyy-mm-dd.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "end_date": {
      "description": "Last day, yyyy-mm-dd.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    }
  },
  "required": [
    "campaign_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢aisensy_list_campaign_audience(campaign_id, category, limit, sort, after, ...)

Who a campaign was sent to, with name, number and sent/delivered/read times, optionally filtered by outcome (SENT, DELIVERED, READ, FAILED, REPLIED, CLICKED) and date range. Pages by cursor: pass next_after from the previous reply as `after`. GET /project/{project_id}/campaign/audience/{campaign_id}.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "campaign_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "AiSensy record id (as returned by the list tools)."
    },
    "category": {
      "description": "Only recipients with this outcome.",
      "type": "string",
      "enum": [
        "SENT",
        "DELIVERED",
        "READ",
        "FAILED",
        "REPLIED",
        "CLICKED"
      ]
    },
    "limit": {
      "description": "Recipients per page, 1-1000 (default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "sort": {
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ]
    },
    "after": {
      "description": "Cursor from the previous reply's next_after.",
      "type": "string",
      "minLength": 1,
      "maxLength": 500
    },
    "start_date": {
      "description": "Earliest day, yyyy-mm-dd.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "end_date": {
      "description": "Latest day, yyyy-mm-dd.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    }
  },
  "required": [
    "campaign_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡aisensy_create_api_campaign(campaign_name, template_name)

WRITE: create an API campaign that binds a name to an APPROVED WhatsApp template. It sends nothing; messages go out only when aisensy_send_campaign_message is called for it. Not idempotent: calling twice with the same name may create two campaigns or fail. POST /project/{project_id}/campaign/api.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "campaign_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Name of the new campaign."
    },
    "template_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Exact name of an APPROVED template (see aisensy_list_templates)."
    }
  },
  "required": [
    "campaign_name",
    "template_name"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢aisensy_find_contact(phone_number)

Look up a contact by phone number: id, name, tags, attributes, opt-in/chat state and last activity. 404 means no such contact. GET /project/{project_id}/contact?action=FetchContact&mobile_number=.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "phone_number": {
      "description": "Phone number with country code, e.g. 919876543210 (digits; a leading + is dropped).",
      "type": "string"
    }
  },
  "required": [
    "phone_number"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢aisensy_get_contact(contact_id)

One contact by id: name, phone number, tags, attributes, chat state and last activity. GET /project/{project_id}/contact/{contact_id}.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "contact_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "AiSensy record id (as returned by the list tools)."
    }
  },
  "required": [
    "contact_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡aisensy_create_contact(name, phone_number)

WRITE: add a contact (name and phone number with country code). AiSensy opts new contacts in to WhatsApp notifications automatically, so only add people who agreed to be messaged. A number that already exists returns a 409 conflict. POST /project/{project_id}/contact.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "phone_number": {
      "description": "Phone number with country code, e.g. 919876543210 (digits; a leading + is dropped).",
      "type": "string"
    }
  },
  "required": [
    "name",
    "phone_number"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴aisensy_update_contact(contact_id, name, opted_in, blocked, attributes)

WRITE: change a contact's name, custom attributes, WhatsApp opt-in status or blocked status. Setting opted_in=false stops campaign messages to that person; blocked=true blocks them. Only the fields you pass change. PATCH /project/{project_id}/contact/{contact_id}.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "contact_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "AiSensy record id (as returned by the list tools)."
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "opted_in": {
      "description": "Whether the contact accepts WhatsApp notifications.",
      "type": "boolean"
    },
    "blocked": {
      "description": "Whether the contact is blocked.",
      "type": "boolean"
    },
    "attributes": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      },
      "additionalProperties": {
        "type": "string",
        "maxLength": 1000
      },
      "description": "Contact attributes as name → text value. AiSensy ignores attribute names that do not exist in the project."
    }
  },
  "required": [
    "contact_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢aisensy_get_message(message_id)

One WhatsApp message by id: status (SENT, DELIVERED, READ), sent/delivered/read times, sender, campaign, content and price. GET /project/{project_id}/messages/{message_id}.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "message_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "AiSensy record id (as returned by the list tools)."
    }
  },
  "required": [
    "message_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴aisensy_send_campaign_message(campaign_name, phone_number, name, template_params, media_url, ...)

WRITE, SENDS A WHATSAPP MESSAGE TO A CUSTOMER AND SPENDS AISENSY CREDIT: send the template of a LIVE API campaign to one phone number (a new contact is created if the number is unknown). Not idempotent: every call sends again. template_params must match the template's parameter count. Show the user the recipient and the template first and set confirm=true only after they approve. POST /project/{project_id}/campaign/api/send.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "campaign_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Name of a LIVE API campaign (see aisensy_list_api_campaigns)."
    },
    "phone_number": {
      "description": "Phone number with country code, e.g. 919876543210 (digits; a leading + is dropped).",
      "type": "string"
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Recipient's name."
    },
    "template_params": {
      "description": "Values for the template's {{1}}, {{2}}... in order; the count must match the template.",
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 1000
      }
    },
    "media_url": {
      "description": "Public https URL of the image/video/document for a media template.",
      "type": "string",
      "maxLength": 2000
    },
    "media_filename": {
      "description": "File name shown for the media.",
      "type": "string",
      "maxLength": 200
    },
    "tags": {
      "description": "Existing tags to put on the contact (unknown tags are ignored).",
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      }
    },
    "attributes": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      },
      "additionalProperties": {
        "type": "string",
        "maxLength": 1000
      },
      "description": "Contact attributes as name → text value. AiSensy ignores attribute names that do not exist in the project."
    },
    "source": {
      "description": "Lead source label.",
      "type": "string",
      "maxLength": 200
    },
    "default_country_code": {
      "description": "Country code to assume when phone_number has none, e.g. 91.",
      "type": "string",
      "pattern": "^\\d{1,4}$"
    },
    "confirm": {
      "type": "boolean",
      "const": true,
      "description": "Must be true. Set it only after the user has seen and approved the recipient and the message in this conversation."
    }
  },
  "required": [
    "campaign_name",
    "phone_number",
    "name",
    "confirm"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴aisensy_send_message(phone_number, type, text, template_name, language_code, ...)

WRITE, SENDS A WHATSAPP MESSAGE TO A CUSTOMER AND MAY SPEND AISENSY CREDIT: send either a free-text message (type=text; WhatsApp only delivers it inside the 24-hour window after the customer last wrote) or an approved template (type=template with template_name, language_code and body_params). Not idempotent. Show the user the recipient and the text first and set confirm=true only after they approve. POST /project/{project_id}/messages.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "phone_number": {
      "description": "Phone number with country code, e.g. 919876543210 (digits; a leading + is dropped).",
      "type": "string"
    },
    "type": {
      "type": "string",
      "enum": [
        "text",
        "template"
      ],
      "description": "text = free-form reply; template = an approved template."
    },
    "text": {
      "description": "Message text (type=text).",
      "type": "string",
      "minLength": 1,
      "maxLength": 4096
    },
    "template_name": {
      "description": "Approved template name (type=template).",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "language_code": {
      "description": "Template language code such as en, en_US, hi (type=template; default en).",
      "type": "string",
      "pattern": "^[A-Za-z]{2,3}(_[A-Za-z]{2,4})?$"
    },
    "body_params": {
      "description": "Values for the template's body {{1}}, {{2}}... in order (type=template).",
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 1000
      }
    },
    "confirm": {
      "type": "boolean",
      "const": true,
      "description": "Must be true. Set it only after the user has seen and approved the recipient and the message in this conversation."
    }
  },
  "required": [
    "phone_number",
    "type",
    "confirm"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada16 herramientas