Koskamo

WasapFlow Bridge MCP

Official MCP server for WasapFlow Bridge, enabling AI agents to integrate the WhatsApp Business API. It supports sending messages, managing templates, checking number status, handling webhooks, and accessing support tickets via a REST API interface.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

WasapFlow Bridge MCP logo, by Kobaran Teguh Sdn. Bhd.Vendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-07Operated by Kobaran Teguh Sdn. Bhd.
You need:Header `x-partner-key: wf_...`
MCP endpoint (Streamable HTTP)
https://officialapi.wasapflow.com/bridge/mcp
Vendor documentation

What its tools do

16 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

16 of 16 have a description · 16 of 16 declare behavior hints · 9 of 14 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to wasapflow.com ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Send text, media, and template messages via WhatsApp
  • Manage WhatsApp Business Account status and templates
  • Handle incoming webhooks and message delivery statuses
  • Access support tickets and usage data

Source and maintenance

Vendor evidenceRegistry 1.0.1
Maintenance checked

Protocol and capabilities

Server
wasapflow-bridge 1.1.0
MCP protocol negotiated in check
2025-11-25
Tools
16 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

WasapFlow Bridge gives your own SaaS or CRM the official WhatsApp Business API (Meta Cloud API) without becoming a Meta Tech Provider. Pricing: $10 USD/month per 3 WhatsApp Business Accounts; Meta bills message charges directly. Use bridge_get_started first when helping someone integrate. Use bridge_docs_search / bridge_docs_section to read the API reference before writing integration code — the docs are always current. Tools that call the live API need a partner key (header x-partner-key); without one they explain how to get it. Base URL for code you write: https://officialapi.wasapflow.com/bridge/v1. Never print the partner key or webhook secret back to the user.

Tools

16 advertised

bridge_get_started — How to integrate WasapFlow Bridge
Advertised by the server during the last successful anonymous check.
Advertised read-only

Step-by-step plan to add the official WhatsApp Business API to the user's own CRM/SaaS with WasapFlow Bridge: account, card, keys, webhook, Connect WhatsApp button, first message. Call this first when someone wants to build or connect WhatsApp. No partner key needed.

bridge_get_started input schema
{
  "type": "object",
  "properties": {}
}
bridge_get_started annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
bridge_docs_search — Search the Bridge docs
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search the WasapFlow Bridge API reference, partner guide and changelog. Returns matching sections with a preview. Use before writing integration code. No partner key needed.

bridge_docs_search input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "description": "What to look for, e.g. \"webhook signature\", \"send template\", \"coexistence\", \"error 131047\"."
    }
  }
}
bridge_docs_search annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
bridge_docs_section — Read a Bridge docs section
Advertised by the server during the last successful anonymous check.
Advertised read-only

Return the full text of one section (with its sub-sections) of the WasapFlow Bridge docs, e.g. "Verify Incoming Webhooks", "Send Template Message", "Webhook Event Payloads", "Error Codes". No partner key needed.

bridge_docs_section input schema
{
  "type": "object",
  "required": [
    "heading"
  ],
  "properties": {
    "doc": {
      "enum": [
        "api",
        "guide",
        "changelog"
      ],
      "type": "string",
      "description": "Optional: which document."
    },
    "heading": {
      "type": "string",
      "description": "Section heading (exact or partial)."
    }
  }
}
bridge_docs_section annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
bridge_list_numbers — List connected WhatsApp numbers
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

List the WhatsApp Business Accounts (client numbers) registered to this partner, with status.

bridge_list_numbers input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "default": 50,
      "maximum": 200,
      "minimum": 1
    }
  }
}
bridge_list_numbers annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
bridge_number_status — Phone number status & quality
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Live status of a number from Meta: verified name, quality rating, messaging limit, name status.

bridge_number_status input schema
{
  "type": "object",
  "required": [
    "waba_id"
  ],
  "properties": {
    "waba_id": {
      "type": "string",
      "description": "WhatsApp Business Account ID registered to your partner account (see bridge_list_numbers)."
    }
  }
}
bridge_number_status annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
bridge_connect_link — Create a Connect WhatsApp link
Advertised by the server during the last successful anonymous check.
Open-world

Create a short-lived (30 min) link that a business opens to connect its WhatsApp number through Meta Embedded Signup (Coexistence supported). Share the returned connect_url with the business owner.

bridge_connect_link input schema
{
  "type": "object",
  "properties": {
    "state": {
      "type": "string",
      "description": "Your own client id, echoed back in the onboarding webhook."
    },
    "display_name": {
      "type": "string",
      "description": "Business name shown on the page."
    }
  }
}
bridge_connect_link annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "destructiveHint": false
}
bridge_send_text — Send a WhatsApp text message
Advertised by the server during the last successful anonymous check.
Open-world

Send a text message from a connected number. Free-form text only reaches people who messaged that number in the last 24 hours; otherwise use bridge_send_template. This sends a real message.

bridge_send_text input schema
{
  "type": "object",
  "required": [
    "waba_id",
    "to",
    "text"
  ],
  "properties": {
    "to": {
      "type": "string",
      "description": "Recipient phone in international format without + (e.g. 60123456789) or a BSUID."
    },
    "text": {
      "type": "string",
      "description": "Message text."
    },
    "waba_id": {
      "type": "string",
      "description": "WhatsApp Business Account ID registered to your partner account (see bridge_list_numbers)."
    },
    "idempotency_key": {
      "type": "string",
      "maxLength": 255,
      "description": "Optional Idempotency-Key (1-255 chars). Reuse the same key when retrying the same message: a repeat with the same key and body within 24 hours returns the original response and does not send again."
    },
    "biz_opaque_callback_data": {
      "type": "string",
      "maxLength": 512,
      "description": "Optional biz_opaque_callback_data: your own reference (order id, ticket id), max 512 chars. Meta returns it on every status webhook of this message as data.biz_opaque_callback_data."
    }
  }
}
bridge_send_text annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
bridge_send_template — Send a WhatsApp template message
Advertised by the server during the last successful anonymous check.
Open-world

Send an approved template (works outside the 24-hour window). components follows the Meta Cloud API format. This sends a real message and Meta may charge for it.

bridge_send_template input schema
{
  "type": "object",
  "required": [
    "waba_id",
    "to",
    "name",
    "language"
  ],
  "properties": {
    "to": {
      "type": "string",
      "description": "Recipient phone in international format without +."
    },
    "name": {
      "type": "string",
      "description": "Template name."
    },
    "waba_id": {
      "type": "string",
      "description": "WhatsApp Business Account ID registered to your partner account (see bridge_list_numbers)."
    },
    "language": {
      "type": "string",
      "description": "Template language code, e.g. en_US, ms."
    },
    "components": {
      "type": "array",
      "items": {
        "type": "object"
      },
      "description": "Optional Meta template components (header/body/button parameters)."
    },
    "idempotency_key": {
      "type": "string",
      "maxLength": 255,
      "description": "Optional Idempotency-Key (1-255 chars). Reuse the same key when retrying the same message: a repeat with the same key and body within 24 hours returns the original response and does not send again."
    },
    "biz_opaque_callback_data": {
      "type": "string",
      "maxLength": 512,
      "description": "Optional biz_opaque_callback_data: your own reference (order id, ticket id), max 512 chars. Meta returns it on every status webhook of this message as data.biz_opaque_callback_data."
    }
  }
}
bridge_send_template annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
bridge_send_marketing — Send a marketing template (Marketing Messages API)
Advertised by the server during the last successful anonymous check.
Open-world

Send an approved MARKETING template through Meta's Marketing Messages API (quality-based delivery, marketing metrics). Not onboarded yet? Meta falls back to Cloud API unless product_policy is STRICT. This sends a real message and Meta charges for it.

bridge_send_marketing input schema
{
  "type": "object",
  "required": [
    "waba_id",
    "to",
    "name",
    "language"
  ],
  "properties": {
    "to": {
      "type": "string",
      "description": "Recipient phone in international format without +, or a BSUID."
    },
    "name": {
      "type": "string",
      "description": "Marketing template name."
    },
    "waba_id": {
      "type": "string",
      "description": "WhatsApp Business Account ID registered to your partner account (see bridge_list_numbers)."
    },
    "language": {
      "type": "string",
      "description": "Template language code, e.g. en_US, ms."
    },
    "components": {
      "type": "array",
      "items": {
        "type": "object"
      },
      "description": "Optional Meta template components."
    },
    "product_policy": {
      "enum": [
        "CLOUD_API_FALLBACK",
        "STRICT"
      ],
      "type": "string",
      "description": "Optional. STRICT = never fall back to Cloud API."
    },
    "idempotency_key": {
      "type": "string",
      "maxLength": 255,
      "description": "Optional Idempotency-Key (1-255 chars). Reuse the same key when retrying the same message: a repeat with the same key and body within 24 hours returns the original response and does not send again."
    },
    "biz_opaque_callback_data": {
      "type": "string",
      "maxLength": 512,
      "description": "Optional biz_opaque_callback_data: your own reference (order id, ticket id), max 512 chars. Meta returns it on every status webhook of this message as data.biz_opaque_callback_data."
    }
  }
}
bridge_send_marketing annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
bridge_list_templates — List message templates
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

List the message templates of a number with their approval status.

bridge_list_templates input schema
{
  "type": "object",
  "required": [
    "waba_id"
  ],
  "properties": {
    "waba_id": {
      "type": "string",
      "description": "WhatsApp Business Account ID registered to your partner account (see bridge_list_numbers)."
    }
  }
}
bridge_list_templates annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
bridge_failed_webhooks — Webhooks that failed to reach your server
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Webhook events Bridge could not deliver to your webhook URL (with the error). Bridge retries each one automatically for 24 hours (1m, 5m, 15m, 30m, 1h, 2h, 4h, 8h, then every 8h); auto_retry shows the next attempt, and final=true means the schedule ended and the event needs bridge_retry_webhooks. Use when incoming messages or statuses are missing in the CRM.

bridge_failed_webhooks input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "default": 50,
      "maximum": 200,
      "minimum": 1
    }
  }
}
bridge_failed_webhooks annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
bridge_retry_webhooks — Redeliver failed webhooks
Advertised by the server during the last successful anonymous check.
Open-world

Redeliver one failed webhook event (event_id) or all of them (omit event_id) after the webhook endpoint is fixed.

bridge_retry_webhooks input schema
{
  "type": "object",
  "properties": {
    "event_id": {
      "type": "string",
      "description": "Optional event id from bridge_failed_webhooks."
    }
  }
}
bridge_retry_webhooks annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "destructiveHint": false
}
bridge_usage — Bridge plan & usage
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Current Bridge plan: active WhatsApp numbers, slots and the monthly Bridge fee.

bridge_usage input schema
{
  "type": "object",
  "properties": {}
}
bridge_usage annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
bridge_open_ticket — Open a support ticket
Advertised by the server during the last successful anonymous check.
Open-world

Open a WasapFlow support ticket. Include what happened, when (with timezone), the exact error (Meta code, fbtrace_id), what was tried and the business impact.

bridge_open_ticket input schema
{
  "type": "object",
  "required": [
    "subject",
    "message"
  ],
  "properties": {
    "message": {
      "type": "string",
      "description": "Full details."
    },
    "subject": {
      "type": "string",
      "description": "Short summary, max 200 characters."
    },
    "waba_id": {
      "type": "string",
      "description": "Optional: the affected number's WABA ID."
    },
    "category": {
      "enum": [
        "technical",
        "billing",
        "onboarding",
        "other"
      ],
      "type": "string"
    },
    "priority": {
      "enum": [
        "normal",
        "high",
        "urgent"
      ],
      "type": "string"
    },
    "diagnostics": {
      "type": "object",
      "description": "Optional raw error JSON / sample request (max 20 KB)."
    }
  }
}
bridge_open_ticket annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "destructiveHint": false
}
bridge_list_tickets — List support tickets
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

List support tickets and replies status.

bridge_list_tickets input schema
{
  "type": "object",
  "properties": {
    "status": {
      "enum": [
        "open",
        "replied",
        "closed"
      ],
      "type": "string"
    }
  }
}
bridge_list_tickets annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
bridge_call_api — Call any Bridge API endpoint
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Call any WasapFlow Bridge endpoint not covered by the other tools (see bridge_docs_search for paths). Irreversible endpoints need {"confirm": true} in the body. Confirm with the user before any call that sends, deletes or changes something.

bridge_call_api input schema
{
  "type": "object",
  "required": [
    "method",
    "path"
  ],
  "properties": {
    "body": {
      "type": "object",
      "description": "Optional JSON body. Send endpoints accept biz_opaque_callback_data (your reference, max 512 chars)."
    },
    "path": {
      "type": "string",
      "description": "Path after /bridge/v1, e.g. /broadcasts or /templates/order_confirmed."
    },
    "query": {
      "type": "object",
      "description": "Optional query string parameters."
    },
    "method": {
      "enum": [
        "GET",
        "POST",
        "PUT",
        "PATCH",
        "DELETE"
      ],
      "type": "string"
    },
    "waba_id": {
      "type": "string",
      "description": "Optional x-waba-id for number-scoped endpoints."
    },
    "idempotency_key": {
      "type": "string",
      "maxLength": 255,
      "description": "Optional Idempotency-Key header for send endpoints (POST /messages/*, POST /broadcasts)."
    }
  }
}
bridge_call_api annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "destructiveHint": true
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1075 ms
95th percentile latency
1075 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1075 ms · metadata changed · 16 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http wasapflow-bridge-mcp https://officialapi.wasapflow.com/bridge/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add wasapflow-bridge-mcp --url https://officialapi.wasapflow.com/bridge/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable wasapflow-bridge-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "wasapflow-bridge-mcp": {
      "url": "https://officialapi.wasapflow.com/bridge/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "wasapflow-bridge-mcp": {
      "type": "streamableHttp",
      "url": "https://officialapi.wasapflow.com/bridge/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start wasapflow-bridge-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "wasapflow-bridge-mcp": {
      "type": "http",
      "url": "https://officialapi.wasapflow.com/bridge/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http wasapflow-bridge-mcp https://officialapi.wasapflow.com/bridge/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://officialapi.wasapflow.com/bridge/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "wasapflow-bridge-mcp": {
      "serverUrl": "https://officialapi.wasapflow.com/bridge/mcp"
    }
  }
}

Let your agent find its tools

Find servers like WasapFlow Bridge MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run WasapFlow Bridge MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing