AiSensy MCP by usefulapi
Read AiSensy contacts, templates and campaigns; add contacts, send WhatsApp messages on approval.
使うべきか
品質と安全性
ツール定義とプロトコルへの準拠に関する自動分析に基づいています。
コンテキストコスト
これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。
インストール
ワンクリックインストール
これを `claude_desktop_config.json` ファイルに追加してください:
{
"mcpServers": {
"aisensy": {
"url": "https://aisensy.usefulapi.io/mcp"
}
}
}リモートエンドポイント
https://aisensy.usefulapi.io/mcpstreamable-httpできること
ツール一覧
ツール(16)
🟢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}.
入力スキーマ
{
"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/.
入力スキーマ
{
"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}.
入力スキーマ
{
"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).
入力スキーマ
{
"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.
入力スキーマ
{
"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}.
入力スキーマ
{
"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).
入力スキーマ
{
"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}.
入力スキーマ
{
"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.
入力スキーマ
{
"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=.
入力スキーマ
{
"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}.
入力スキーマ
{
"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.
入力スキーマ
{
"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}.
入力スキーマ
{
"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}.
入力スキーマ
{
"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.
入力スキーマ
{
"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.
入力スキーマ
{
"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"
}コミュニティ
エビデンス