Connect an agent to MENA services.
One API key and one MCP server URL. Works with Claude Code, Cursor, n8n, and any agent that speaks MCP or plain HTTP.
Get an API key
Sign in, open API keys in the dashboard, and create one. The full key is shown once. It looks like wsk_live_….
Connect the accounts your agent will use
On the Connections page, add the services you need (Bosta, Salla, Paymob, and the rest). Wassel validates each credential on save and stores it in encrypted vault storage. Your agent never sees the underlying keys.
Point your agent at the MCP server
Each workspace gets one MCP server URL. The agent loads tools on demand through the meta tools, so its context stays small even with every integration connected.
from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions
options = ClaudeAgentOptions(
mcp_servers={
"wassel": {
"type": "http",
"url": "https://api.wassel.cloud/mcp/<workspace-id>",
"headers": {"x-api-key": "wsk_live_..."},
}
},
)
async with ClaudeSDKClient(options=options) as client:
await client.query(
"Create a Bosta delivery for order 1024 and send the "
"customer a WhatsApp confirmation."
)The agent calls WASSEL_SEARCH_TOOLS to find what it needs, then WASSEL_EXECUTE_TOOL to run it. You do not register tools by hand.
Or call a tool over plain HTTP
No agent framework required. Every tool is one POST. Pass the connection id for the account to act on.
curl https://api.wassel.cloud/v1/tools/bosta/create_delivery \
-H "x-api-key: wsk_live_..." \
-H "content-type: application/json" \
-d '{
"connectionId": "<connection-id>",
"input": {
"receiver": { "firstName": "Mona", "lastName": "Hassan",
"phone": "01012345678" },
"dropOffAddress": { "cityCode": "CAI", "zoneCode": "NSR",
"district": "Nasr City",
"firstLine": "12 El Tayaran St" },
"cod": 500,
"packageDetails": { "itemsCount": 1, "weight": 1,
"description": "Coffee beans" }
}
}'Responses are a discriminated union: { "success": true, "data": … } or { "success": false, "error": … }. No exception ever crosses the tool boundary.
Watch what ran
The Logs page lists every tool call with its status, latency, and error code. Inputs are stored as a hash, never raw, so an audit can prove what ran without exposing customer data.