Server definition
- Hash
- sha256:6df8d372d0c1773f350a0bf942b4db3103a8764f29428ca25ca3036f7d95fb52
- What it is
- What a remote MCP server returned when asked what it offers: 8 tools
The blob, as servednamed by its sha256
{
"instructions": "# WhatsApp operations with Wapiworld\n\nThis skill drives the Wapiworld MCP connector. The user must connect Wapiworld\nand authorize access to the intended organization. If authorization fails, ask\nthe user to connect Wapiworld. Never request, embed, repeat, or infer an API\nkey, password, token, QR pairing code, instance secret, proxy credential, or\nwebhook signing credential.\n\n## Resource identifiers\n\nKeep these identifiers distinct:\n\n- `projectId` selects one tenant-scoped Wapiworld project.\n- `instanceId` selects one tenant-owned WhatsApp sender.\n- `recipient` is the exact external phone number or WhatsApp chat id for one\n send. It is not an instance id.\n\nResolve names with a list tool and use returned exact ids. Never guess an id,\nreuse an id from another organization, infer a recipient from recorded data,\nor expose an internal organization id.\n\n## Available tools\n\n| Tool | Use |\n| ------------------------------ | ----------------------------------------------------------------------- |\n| `list_projects` | Find accessible project ids and safe names |\n| `list_instances` | Page through safe sender summaries in one project |\n| `get_instance` | Inspect one safe instance and render its health view |\n| `get_instance_status` | Check one sender's connection state |\n| `get_message_recording_policy` | Explain instance-default recording policy and retention without content |\n| `list_webhook_subscriptions` | Inspect sanitized webhook configuration and delivery health |\n| `show_project_overview` | Render a bounded project and sender-health overview |\n| `send_message` | Send one externally visible text after exact confirmation |\n\n`list_instances` can return an opaque cursor. Reuse it only with identical\nfilters. Other list/view results are bounded. When output says a count is\ntruncated or uses a plus sign, report it as a lower bound.\n\n## Directory-safe data boundary\n\nSafe results can include tenant-scoped ids needed for follow-up, project and\ninstance display names, the tenant-owned sender phone label, connection state,\nrecording enablement/precedence/lock/retention, sanitized webhook origin and\nhealth, bounded counts, and timestamps.\n\nThe connector intentionally cannot provide:\n\n- recorded WhatsApp bodies, previews, sender names, message ids, delivery\n receipts, or contact/chat identifiers;\n- contact-keyed chat recording exceptions;\n- QR/pairing codes, API keys, instance secrets, OAuth credentials, tokens, or\n proxy endpoints and credentials;\n- internal organization identifiers or arbitrary database metadata;\n- webhook signing secrets or full callback paths, queries, or fragments; or\n- raw whatsmeow/provider responses, errors, logs, or stack traces.\n\nRecorded conversation content can contain protected health information,\npayment-card data, government identifiers, authentication material, and other\nOpenAI Restricted Data. Do not request or reconstruct it. Do not ask the user\nto paste it into chat. Offer safe recording-policy or connection diagnostics\ninstead.\n\n## Project and sender diagnosis\n\n1. Use `list_projects` unless the exact project id is already unambiguous.\n2. Use `list_instances` with that exact project and page only as needed.\n3. Call `get_instance` for safe detail and the interactive health card, or\n `get_instance_status` for compact health.\n4. Report what Wapiworld knows about connection state. Do not infer message\n delivery or recipient behavior from a connected sender.\n5. If an upstream read fails, report the sanitized category and never expose\n or speculate about hidden provider error text.\n\n## Recording-policy diagnosis\n\nCall `get_message_recording_policy` for the exact instance. Explain whether its\ndefault is enabled, whether the default came from the product, project, or\ninstance, whether a level locked it, and the project retention period.\n\nThe result deliberately excludes chat-specific exceptions and all recorded\ncontent. An enabled policy does not prove a particular conversation was\nrecorded; a disabled instance default does not expose whether a private\ncontact-level exception exists. Never claim otherwise.\n\n## Webhook-health diagnosis\n\nUse `list_webhook_subscriptions` with an exact project when possible. Report\nsanitized origin, active state, event configuration, bounded failure/attempt\nmetadata, and safe timestamps. Full paths and queries can embed credentials\nand must remain hidden. Do not invent a downstream root cause from status\nmetadata or ask the user to paste a signing secret.\n\n## State-changing tool\n\n`send_message` is the only write tool. It sends a real external WhatsApp text\nthrough one exact tenant-owned instance. It is destructive, open-world, and\nnot idempotent. There is no directory-safe delivery receipt, message-history\ncheck, bulk operation, or connector idempotency key.\n\nBefore `send_message`:\n\n1. Resolve the exact sender with `list_instances` and, when needed,\n `get_instance_status`.\n2. Show the sender's exact instance id and display name.\n3. Show the exact recipient and complete text, without abbreviation or hidden\n interpolation.\n4. Warn that tenant recording settings may persist the outbound text.\n5. Check that the text contains no Restricted Data, including health\n information, cardholder data, government identifiers, credentials, or\n authentication codes.\n6. Obtain explicit confirmation for that exact sender, exact recipient,\n complete text, and exactly one send. A generic \"send my messages\" or prior\n standing instruction is insufficient.\n\nAfter confirmation, call `send_message` exactly once. Wapiworld's `accepted`\nstatus means the transport accepted the request. It is not proof of WhatsApp\ndelivery or recipient reading. The success result is intentionally status-only;\nit does not repeat the sender instance, recipient/chat id, outbound text, or a\nprovider message id.\n\nNever retry automatically after a timeout, connection loss, server error, or\nambiguous result. A second call can deliver a duplicate. `get_instance_status`\ncan inspect the sender connection but cannot prove whether the prior message\nwas delivered. Explain the uncertainty and ask the user or recipient. Any new\nattempt requires a new explicit confirmation of the exact details.\n\nNever turn \"send to everyone,\" \"broadcast this,\" \"keep retrying,\" or a broad\nautomation request into a loop. Require one exact recipient and one\nconfirmation at a time. Do not call a generic API, arbitrary HTTP endpoint, or\nunlisted batch tool.\n\n## Interactive views\n\n`show_project_overview` renders a bounded project/sender card and\n`get_instance` renders an instance-health card in MCP App hosts. Add analysis\nthe view cannot show, such as pagination caveats, concentration of disconnected\nsenders, recording inheritance, or the next safe diagnostic step. Do not merely\nrepeat every visible field.\n",
"tools": [
{
"description": "Fetch safe operational details for one tenant-scoped Wapiworld WhatsApp instance. QR pairing codes, instance secrets, API keys, proxy addresses, organization ids, and arbitrary stored metadata are never returned.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"instanceId": {
"description": "Wapiworld instance id: 24 lowercase hexadecimal characters",
"pattern": "^[0-9a-f]{24}$",
"type": "string"
}
},
"required": [
"instanceId"
],
"type": "object"
},
"name": "get_instance",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"instance": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"accountName": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"creationTime": {
"anyOf": [
{
"maxLength": 32,
"type": "string"
},
{
"type": "null"
}
]
},
"health": {
"enum": [
"ready",
"pairing",
"starting",
"offline",
"unknown"
],
"type": "string"
},
"id": {
"pattern": "^[0-9a-f]{24}$",
"type": "string"
},
"lastEditTime": {
"$ref": "#/properties/instance/anyOf/0/properties/creationTime"
},
"name": {
"maxLength": 200,
"type": "string"
},
"phone": {
"anyOf": [
{
"maxLength": 32,
"type": "string"
},
{
"type": "null"
}
]
},
"projectId": {
"anyOf": [
{
"pattern": "^[0-9a-f]{24}$",
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"anyOf": [
{
"enum": [
"starting",
"qrcode",
"ready",
"logged_out",
"not_connected",
"disconnected",
"offline",
"STARTING",
"QRCODE",
"READY"
],
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"name",
"accountName",
"status",
"health",
"phone",
"projectId",
"creationTime",
"lastEditTime"
],
"type": "object"
},
{
"type": "null"
}
]
},
"status": {
"enum": [
"found",
"not-found"
],
"type": "string"
}
},
"required": [
"status",
"instance"
],
"type": "object"
}
},
{
"description": "Fetch the current safe connection health for one tenant-scoped Wapiworld instance without returning QR pairing codes or authentication data.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"instanceId": {
"description": "Wapiworld instance id: 24 lowercase hexadecimal characters",
"pattern": "^[0-9a-f]{24}$",
"type": "string"
}
},
"required": [
"instanceId"
],
"type": "object"
},
"name": "get_instance_status",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"found": {
"type": "boolean"
},
"health": {
"enum": [
"ready",
"pairing",
"starting",
"offline",
"unknown"
],
"type": "string"
},
"instanceId": {
"pattern": "^[0-9a-f]{24}$",
"type": "string"
},
"name": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"anyOf": [
{
"enum": [
"starting",
"qrcode",
"ready",
"logged_out",
"not_connected",
"disconnected",
"offline",
"STARTING",
"QRCODE",
"READY"
],
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"found",
"instanceId",
"name",
"status",
"health"
],
"type": "object"
}
},
{
"description": "Inspect whether message-content persistence is enabled by default for one tenant-scoped Wapiworld instance and how long recorded rows are retained. This directory-safe diagnostic never reads message bodies, previews, sender names, contact identifiers, chat-level override keys, or WhatsApp message ids.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"instanceId": {
"description": "Tenant-scoped Wapiworld instance id to inspect: 24 lowercase hexadecimal characters",
"pattern": "^[0-9a-f]{24}$",
"type": "string"
}
},
"required": [
"instanceId"
],
"type": "object"
},
"name": "get_message_recording_policy",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"policy": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"chatOverridesExcluded": {
"const": true,
"type": "boolean"
},
"decidedBy": {
"enum": [
"default",
"project",
"instance"
],
"type": "string"
},
"enabled": {
"type": "boolean"
},
"instanceId": {
"pattern": "^[0-9a-f]{24}$",
"type": "string"
},
"lockedBy": {
"anyOf": [
{
"enum": [
"project",
"instance"
],
"type": "string"
},
{
"type": "null"
}
]
},
"projectId": {
"pattern": "^[0-9a-f]{24}$",
"type": "string"
},
"retentionDays": {
"exclusiveMinimum": 0,
"maximum": 365,
"type": "integer"
}
},
"required": [
"instanceId",
"projectId",
"enabled",
"decidedBy",
"lockedBy",
"retentionDays",
"chatOverridesExcluded"
],
"type": "object"
},
{
"type": "null"
}
]
},
"status": {
"enum": [
"found",
"instance-not-found",
"project-not-found"
],
"type": "string"
}
},
"required": [
"status",
"policy"
],
"type": "object"
}
},
{
"description": "List a bounded page of tenant-scoped Wapiworld WhatsApp instances, optionally filtered by project. Results include operational status and phone metadata but never QR pairing codes, instance secrets, API keys, proxy data, or arbitrary stored fields.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Opaque pagination cursor returned by a previous call",
"maxLength": 4096,
"type": "string"
},
"limit": {
"description": "Maximum instances to return (default 25, maximum 100)",
"exclusiveMinimum": 0,
"maximum": 100,
"type": "integer"
},
"projectId": {
"description": "Filter to one project id",
"maxLength": 128,
"minLength": 1,
"type": "string"
}
},
"type": "object"
},
"name": "list_instances",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"instances": {
"items": {
"additionalProperties": false,
"properties": {
"accountName": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"creationTime": {
"anyOf": [
{
"maxLength": 32,
"type": "string"
},
{
"type": "null"
}
]
},
"health": {
"enum": [
"ready",
"pairing",
"starting",
"offline",
"unknown"
],
"type": "string"
},
"id": {
"pattern": "^[0-9a-f]{24}$",
"type": "string"
},
"lastEditTime": {
"$ref": "#/properties/instances/items/properties/creationTime"
},
"name": {
"maxLength": 200,
"type": "string"
},
"phone": {
"anyOf": [
{
"maxLength": 32,
"type": "string"
},
{
"type": "null"
}
]
},
"projectId": {
"anyOf": [
{
"pattern": "^[0-9a-f]{24}$",
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"anyOf": [
{
"enum": [
"starting",
"qrcode",
"ready",
"logged_out",
"not_connected",
"disconnected",
"offline",
"STARTING",
"QRCODE",
"READY"
],
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"name",
"accountName",
"status",
"health",
"phone",
"projectId",
"creationTime",
"lastEditTime"
],
"type": "object"
},
"maxItems": 100,
"type": "array"
},
"page": {
"additionalProperties": false,
"properties": {
"count": {
"minimum": 0,
"type": "integer"
},
"hasMore": {
"type": "boolean"
},
"nextCursor": {
"anyOf": [
{
"maxLength": 4096,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"count",
"hasMore",
"nextCursor"
],
"type": "object"
}
},
"required": [
"instances",
"page"
],
"type": "object"
}
},
{
"description": "List a bounded page of Wapiworld projects available to the authenticated organization. API-key sessions remain pinned to their single project. Internal organization ids and project configuration are omitted.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Opaque pagination cursor returned by a previous call",
"maxLength": 4096,
"type": "string"
},
"limit": {
"description": "Maximum projects to return (default 25, maximum 100)",
"exclusiveMinimum": 0,
"maximum": 100,
"type": "integer"
}
},
"type": "object"
},
"name": "list_projects",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"page": {
"additionalProperties": false,
"properties": {
"count": {
"minimum": 0,
"type": "integer"
},
"hasMore": {
"type": "boolean"
},
"nextCursor": {
"anyOf": [
{
"maxLength": 4096,
"type": "string"
},
{
"type": "null"
}
]
},
"total": {
"minimum": 0,
"type": "integer"
}
},
"required": [
"count",
"total",
"hasMore",
"nextCursor"
],
"type": "object"
},
"projects": {
"items": {
"additionalProperties": false,
"properties": {
"creationTime": {
"anyOf": [
{
"maxLength": 32,
"type": "string"
},
{
"type": "null"
}
]
},
"id": {
"pattern": "^[0-9a-f]{24}$",
"type": "string"
},
"lastEditTime": {
"$ref": "#/properties/projects/items/properties/creationTime"
},
"name": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"name",
"creationTime",
"lastEditTime"
],
"type": "object"
},
"maxItems": 100,
"type": "array"
}
},
"required": [
"projects",
"page"
],
"type": "object"
}
},
{
"description": "List a bounded page of the organization’s Wapiworld webhook subscriptions with their subscribed events and delivery health, so a stopped webhook can be diagnosed. An endpoint that fails 20 deliveries in a row is disabled automatically. Requires an operator OAuth session; API-key sessions cannot read this route. The signing secret is never returned, and only the scheme and host of the delivery URL are shown because hook paths often embed a credential.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Opaque pagination cursor returned by a previous call",
"maxLength": 4096,
"type": "string"
},
"limit": {
"description": "Maximum webhook subscriptions to return (default 25, maximum 100)",
"exclusiveMinimum": 0,
"maximum": 100,
"type": "integer"
},
"projectId": {
"description": "Filter to one project id",
"maxLength": 128,
"minLength": 1,
"type": "string"
}
},
"type": "object"
},
"name": "list_webhook_subscriptions",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"page": {
"additionalProperties": false,
"properties": {
"count": {
"minimum": 0,
"type": "integer"
},
"hasMore": {
"type": "boolean"
},
"nextCursor": {
"anyOf": [
{
"maxLength": 4096,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"count",
"hasMore",
"nextCursor"
],
"type": "object"
},
"webhookSubscriptions": {
"items": {
"additionalProperties": false,
"properties": {
"active": {
"type": "boolean"
},
"autoDisabled": {
"type": "boolean"
},
"consecutiveFailures": {
"minimum": 0,
"type": "integer"
},
"creationTime": {
"$ref": "#/properties/webhookSubscriptions/items/properties/lastDeliveryTime"
},
"endpointHost": {
"anyOf": [
{
"maxLength": 300,
"type": "string"
},
{
"type": "null"
}
]
},
"events": {
"items": {
"maxLength": 64,
"type": "string"
},
"maxItems": 20,
"type": "array"
},
"id": {
"pattern": "^[0-9a-f]{24}$",
"type": "string"
},
"lastDeliveryTime": {
"anyOf": [
{
"maxLength": 32,
"type": "string"
},
{
"type": "null"
}
]
},
"projectId": {
"anyOf": [
{
"pattern": "^[0-9a-f]{24}$",
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"projectId",
"endpointHost",
"events",
"active",
"consecutiveFailures",
"autoDisabled",
"lastDeliveryTime",
"creationTime"
],
"type": "object"
},
"maxItems": 100,
"type": "array"
}
},
"required": [
"webhookSubscriptions",
"page"
],
"type": "object"
}
},
{
"description": "Send one real external WhatsApp text message through a tenant-scoped Wapiworld instance. This destructive, open-world action is non-idempotent: show the exact sender instance, recipient and complete text, obtain explicit confirmation for one send, call once, and never retry automatically when the outcome is uncertain. Do not include restricted data. Existing Wapiworld recording settings may persist outbound content.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"chatId": {
"description": "Exact recipient phone number in international format (for example +1234567890) or exact WhatsApp chat id. Show it to the user before requesting confirmation.",
"maxLength": 128,
"minLength": 1,
"type": "string"
},
"content": {
"description": "Exact text message to send, maximum 4096 characters. Show the complete text before confirmation. Do not send credentials, PHI, PCI cardholder data, government identifiers, or other restricted data.",
"maxLength": 4096,
"minLength": 1,
"type": "string"
},
"instanceId": {
"description": "The tenant-scoped Wapiworld instance id to send from",
"maxLength": 128,
"minLength": 1,
"type": "string"
}
},
"required": [
"instanceId",
"chatId",
"content"
],
"type": "object"
},
"name": "send_message",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"status": {
"const": "accepted",
"type": "string"
}
},
"required": [
"status"
],
"type": "object"
}
},
{
"description": "Render a bounded operational overview for one tenant-scoped Wapiworld project, including WhatsApp instance health and safe phone metadata. QR pairing codes, instance credentials, API keys, proxy data, and arbitrary stored fields are excluded.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"projectId": {
"description": "Wapiworld project id to summarize",
"maxLength": 128,
"minLength": 1,
"type": "string"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "show_project_overview",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"instanceCount": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"instanceCountIsLowerBound": {
"type": "boolean"
},
"instances": {
"items": {
"additionalProperties": false,
"properties": {
"health": {
"enum": [
"ready",
"pairing",
"starting",
"offline",
"unknown"
],
"type": "string"
},
"id": {
"pattern": "^[0-9a-f]{24}$",
"type": "string"
},
"lastEditTime": {
"anyOf": [
{
"maxLength": 32,
"type": "string"
},
{
"type": "null"
}
]
},
"name": {
"maxLength": 200,
"type": "string"
},
"phone": {
"anyOf": [
{
"maxLength": 32,
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"anyOf": [
{
"enum": [
"starting",
"qrcode",
"ready",
"logged_out",
"not_connected",
"disconnected",
"offline",
"STARTING",
"QRCODE",
"READY"
],
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"name",
"status",
"health",
"phone",
"lastEditTime"
],
"type": "object"
},
"maxItems": 20,
"type": "array"
},
"project": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"id": {
"pattern": "^[0-9a-f]{24}$",
"type": "string"
},
"name": {
"maxLength": 200,
"type": "string"
}
},
"required": [
"id",
"name"
],
"type": "object"
},
{
"type": "null"
}
]
},
"statusCounts": {
"additionalProperties": false,
"properties": {
"offline": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"pairing": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"ready": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"starting": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"unknown": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
}
},
"required": [
"ready",
"pairing",
"starting",
"offline",
"unknown"
],
"type": "object"
},
"statusCountsAreLowerBounds": {
"type": "boolean"
}
},
"required": [
"project",
"instanceCount",
"instanceCountIsLowerBound",
"statusCounts",
"statusCountsAreLowerBounds",
"instances"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:6df8d372d0c1773f350a0bf942b4db3103a8764f29428ca25ca3036f7d95fb52 | sha256sum