SIMcloud

South African MCP server for airtime, data, SMS, VAS, electricity, balance, and network lookup.

Should I use this

Quality & Safety

A
Description quality
98%
Schema completeness
84%
Naming quality
98%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~4,641Tokens (tool definitions)
~2.4 KBTypical response size
Significant attention impact (3.63% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "simcloud": {
      "url": "https://simcloud.co.za/api/mcp.php"
    }
  }
}

Remote endpoints

https://simcloud.co.za/api/mcp.phpstreamable-http

What it can do

Tool inventory

Tools (17)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🔴register_simcloud_user(first_name, last_name, cell, email, password, ...)

Create a normal SIMcloud account under the authenticated account for a client application user. Confirm that the person consents to account creation and that their cell number, email and password are correct before calling. The response contains the child account API token, which must be stored securely and used only for that child account.

Input Schema

{
  "type": "object",
  "properties": {
    "first_name": {
      "type": "string",
      "minLength": 1
    },
    "last_name": {
      "type": "string",
      "minLength": 1
    },
    "cell": {
      "type": "string",
      "pattern": "^0[0-9]{9}$",
      "description": "10-digit South African mobile number beginning with 0."
    },
    "email": {
      "type": "string",
      "format": "email"
    },
    "password": {
      "type": "string",
      "minLength": 1,
      "description": "The new user's SIMcloud login password. Do not log or display it after this call."
    },
    "id_number": {
      "type": "string",
      "description": "Optional valid South African ID number."
    },
    "business_name": {
      "type": "string"
    },
    "business_reg": {
      "type": "string"
    },
    "vatno": {
      "type": "string"
    },
    "address": {
      "type": "string"
    }
  },
  "required": [
    "first_name",
    "last_name",
    "cell",
    "email",
    "password"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean",
      "description": "Whether the proxied SIMcloud API request returned a 2xx response."
    },
    "status": {
      "type": "integer",
      "minimum": 0,
      "description": "HTTP status returned by the SIMcloud API, or 0 when no HTTP response was received."
    },
    "data": {
      "oneOf": [
        {
          "type": "object"
        },
        {
          "type": "array"
        }
      ],
      "description": "Decoded SIMcloud API response body."
    }
  },
  "required": [
    "ok",
    "status",
    "data"
  ],
  "additionalProperties": false
}
🟢get_wallet_balance

Use this before a wallet-funded SIMcloud transaction or when the user asks for their available SIMcloud balance. Returns the authenticated account wallet balance and does not spend funds.

Input Schema

{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean",
      "description": "Whether the proxied SIMcloud API request returned a 2xx response."
    },
    "status": {
      "type": "integer",
      "minimum": 0,
      "description": "HTTP status returned by the SIMcloud API, or 0 when no HTTP response was received."
    },
    "data": {
      "oneOf": [
        {
          "type": "object"
        },
        {
          "type": "array"
        }
      ],
      "description": "Decoded SIMcloud API response body."
    }
  },
  "required": [
    "ok",
    "status",
    "data"
  ],
  "additionalProperties": false
}
🟢get_transaction_history(date_from, date_to, type, limit, cursor)

Use this to retrieve read-only transaction history for the authenticated SIMcloud account across web, CSV, recurring and API airtime, data, SMS, VAS and electricity activity. Require a date range; optionally filter one or more services with a comma-separated type value. SMS is successful only after a delivery receipt.

Input Schema

{
  "type": "object",
  "properties": {
    "date_from": {
      "type": "string",
      "format": "date",
      "description": "Inclusive start date in YYYY-MM-DD format, interpreted in Africa/Johannesburg time."
    },
    "date_to": {
      "type": "string",
      "format": "date",
      "description": "Inclusive end date in YYYY-MM-DD format. The maximum range is 90 days."
    },
    "type": {
      "type": "string",
      "description": "Optional comma-separated service filter: airtime, data, electricity, vas and sms."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 50
    },
    "cursor": {
      "type": "string",
      "description": "Opaque cursor returned by the previous result. Keep the same date range and type filter."
    }
  },
  "required": [
    "date_from",
    "date_to"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean",
      "description": "Whether the proxied SIMcloud API request returned a 2xx response."
    },
    "status": {
      "type": "integer",
      "minimum": 0,
      "description": "HTTP status returned by the SIMcloud API, or 0 when no HTTP response was received."
    },
    "data": {
      "oneOf": [
        {
          "type": "object"
        },
        {
          "type": "array"
        }
      ],
      "description": "Decoded SIMcloud API response body."
    }
  },
  "required": [
    "ok",
    "status",
    "data"
  ],
  "additionalProperties": false
}
⚪lookup_network(msisdn)

Use this when the user needs to identify the South African mobile network for a number before sending airtime, data or SMS. The lookup is recorded in the authenticated account history.

Input Schema

{
  "type": "object",
  "properties": {
    "msisdn": {
      "type": "string",
      "description": "South African mobile number, for example 0821234567."
    }
  },
  "required": [
    "msisdn"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean",
      "description": "Whether the proxied SIMcloud API request returned a 2xx response."
    },
    "status": {
      "type": "integer",
      "minimum": 0,
      "description": "HTTP status returned by the SIMcloud API, or 0 when no HTTP response was received."
    },
    "data": {
      "oneOf": [
        {
          "type": "object"
        },
        {
          "type": "array"
        }
      ],
      "description": "Decoded SIMcloud API response body."
    }
  },
  "required": [
    "ok",
    "status",
    "data"
  ],
  "additionalProperties": false
}
🔴send_sms(recipient, message)

Use this when an authenticated SIMcloud user asks to send a confirmed SMS to a South African recipient. Confirm the final recipient and message before calling. Sending is an irreversible external action and may spend wallet funds; do not automatically retry an ambiguous result.

Input Schema

{
  "type": "object",
  "properties": {
    "recipient": {
      "type": "string",
      "description": "Recipient number, for example +27821234567."
    },
    "message": {
      "type": "string",
      "description": "SMS message body.",
      "minLength": 1,
      "maxLength": 459
    }
  },
  "required": [
    "recipient",
    "message"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean",
      "description": "Whether the proxied SIMcloud API request returned a 2xx response."
    },
    "status": {
      "type": "integer",
      "minimum": 0,
      "description": "HTTP status returned by the SIMcloud API, or 0 when no HTTP response was received."
    },
    "data": {
      "oneOf": [
        {
          "type": "object"
        },
        {
          "type": "array"
        }
      ],
      "description": "Decoded SIMcloud API response body."
    }
  },
  "required": [
    "ok",
    "status",
    "data"
  ],
  "additionalProperties": false
}
🟢get_sms_status(sms_id)

Use this after send_sms to fetch the delivery status of an authenticated account SMS by sms_id.

Input Schema

{
  "type": "object",
  "properties": {
    "sms_id": {
      "type": "integer",
      "minimum": 1
    }
  },
  "required": [
    "sms_id"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean",
      "description": "Whether the proxied SIMcloud API request returned a 2xx response."
    },
    "status": {
      "type": "integer",
      "minimum": 0,
      "description": "HTTP status returned by the SIMcloud API, or 0 when no HTTP response was received."
    },
    "data": {
      "oneOf": [
        {
          "type": "object"
        },
        {
          "type": "array"
        }
      ],
      "description": "Decoded SIMcloud API response body."
    }
  },
  "required": [
    "ok",
    "status",
    "data"
  ],
  "additionalProperties": false
}
🔴create_airtime_order(msisdn, network, amount, reference)

Use this when an authenticated SIMcloud user asks to send or recharge prepaid airtime to a South African mobile number on MTN, Vodacom, Cell C or Telkom. Confirm the MSISDN, network, rand amount and reference before calling. This spends wallet funds and queues an irreversible external transaction. Never automatically retry an ambiguous result. Duplicate same-MSISDN-and-amount requests inside 5 minutes return HTTP 409.

Input Schema

{
  "type": "object",
  "properties": {
    "msisdn": {
      "type": "string",
      "description": "South African mobile number to recharge, for example 0821234567 or +27821234567."
    },
    "network": {
      "type": "string",
      "enum": [
        "mtn",
        "p-mtn",
        "vodacom",
        "p-vodacom",
        "cellc",
        "cell-c",
        "cell c",
        "p-cellc",
        "telkom",
        "heita",
        "p-heita"
      ],
      "description": "Supported South African airtime network name or SIMcloud internal code."
    },
    "amount": {
      "type": "number",
      "minimum": 2,
      "maximum": 999,
      "description": "Airtime amount in South African rand, from R2 to R999."
    },
    "reference": {
      "type": "string",
      "minLength": 1,
      "description": "User or system reference for this airtime order."
    }
  },
  "required": [
    "msisdn",
    "network",
    "amount",
    "reference"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean",
      "description": "Whether the proxied SIMcloud API request returned a 2xx response."
    },
    "status": {
      "type": "integer",
      "minimum": 0,
      "description": "HTTP status returned by the SIMcloud API, or 0 when no HTTP response was received."
    },
    "data": {
      "oneOf": [
        {
          "type": "object"
        },
        {
          "type": "array"
        }
      ],
      "description": "Decoded SIMcloud API response body."
    }
  },
  "required": [
    "ok",
    "status",
    "data"
  ],
  "additionalProperties": false
}
🟢get_airtime_order(request_id, orderno)

Use this after create_airtime_order, or after an ambiguous create result, to fetch the authenticated account airtime order by request_id or orderno.

Input Schema

{
  "type": "object",
  "properties": {
    "request_id": {
      "type": "integer",
      "minimum": 1,
      "description": "SIMcloud request identifier returned when the order was queued."
    },
    "orderno": {
      "type": "string",
      "description": "SIMcloud platform order number returned during processing."
    }
  },
  "required": [],
  "additionalProperties": false,
  "anyOf": [
    {
      "required": [
        "request_id"
      ]
    },
    {
      "required": [
        "orderno"
      ]
    }
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean",
      "description": "Whether the proxied SIMcloud API request returned a 2xx response."
    },
    "status": {
      "type": "integer",
      "minimum": 0,
      "description": "HTTP status returned by the SIMcloud API, or 0 when no HTTP response was received."
    },
    "data": {
      "oneOf": [
        {
          "type": "object"
        },
        {
          "type": "array"
        }
      ],
      "description": "Decoded SIMcloud API response body."
    }
  },
  "required": [
    "ok",
    "status",
    "data"
  ],
  "additionalProperties": false
}
🔴create_data_order(msisdn, network, amount, reference)

Use this when an authenticated SIMcloud user asks to send a confirmed South African mobile data bundle. Call list_data_products first and use an available network and sell value. This spends wallet funds and queues an irreversible external transaction. Never automatically retry an ambiguous result. Duplicate same-MSISDN-and-amount requests inside 5 minutes return HTTP 409.

Input Schema

{
  "type": "object",
  "properties": {
    "msisdn": {
      "type": "string",
      "description": "South African mobile number to recharge, for example 0821234567 or +27821234567."
    },
    "network": {
      "type": "string",
      "enum": [
        "mtn",
        "pd-mtn",
        "vodacom",
        "pd-vodacom",
        "cellc",
        "cell-c",
        "cell c",
        "pd-cellc",
        "telkom",
        "heita",
        "pd-heita"
      ],
      "description": "Supported South African data network name or SIMcloud internal code returned by list_data_products."
    },
    "amount": {
      "type": "number",
      "exclusiveMinimum": 0,
      "description": "Exact data bundle sell value returned by list_data_products."
    },
    "reference": {
      "type": "string",
      "minLength": 1,
      "description": "User or system reference for this data order."
    }
  },
  "required": [
    "msisdn",
    "network",
    "amount",
    "reference"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean",
      "description": "Whether the proxied SIMcloud API request returned a 2xx response."
    },
    "status": {
      "type": "integer",
      "minimum": 0,
      "description": "HTTP status returned by the SIMcloud API, or 0 when no HTTP response was received."
    },
    "data": {
      "oneOf": [
        {
          "type": "object"
        },
        {
          "type": "array"
        }
      ],
      "description": "Decoded SIMcloud API response body."
    }
  },
  "required": [
    "ok",
    "status",
    "data"
  ],
  "additionalProperties": false
}
🟢list_data_products(network)

Use this before create_data_order to list the current SIMcloud data bundle products and exact sell values available for API ordering, optionally filtered by South African network.

Input Schema

{
  "type": "object",
  "properties": {
    "network": {
      "type": "string",
      "description": "Optional friendly network name or internal code, for example mtn or pd-mtn."
    }
  },
  "required": [],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean",
      "description": "Whether the proxied SIMcloud API request returned a 2xx response."
    },
    "status": {
      "type": "integer",
      "minimum": 0,
      "description": "HTTP status returned by the SIMcloud API, or 0 when no HTTP response was received."
    },
    "data": {
      "oneOf": [
        {
          "type": "object"
        },
        {
          "type": "array"
        }
      ],
      "description": "Decoded SIMcloud API response body."
    }
  },
  "required": [
    "ok",
    "status",
    "data"
  ],
  "additionalProperties": false
}
🟢get_data_order(request_id, orderno)

Use this after create_data_order, or after an ambiguous create result, to fetch the authenticated account data order by request_id or orderno.

Input Schema

{
  "type": "object",
  "properties": {
    "request_id": {
      "type": "integer",
      "minimum": 1,
      "description": "SIMcloud request identifier returned when the order was queued."
    },
    "orderno": {
      "type": "string",
      "description": "SIMcloud platform order number returned during processing."
    }
  },
  "required": [],
  "additionalProperties": false,
  "anyOf": [
    {
      "required": [
        "request_id"
      ]
    },
    {
      "required": [
        "orderno"
      ]
    }
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean",
      "description": "Whether the proxied SIMcloud API request returned a 2xx response."
    },
    "status": {
      "type": "integer",
      "minimum": 0,
      "description": "HTTP status returned by the SIMcloud API, or 0 when no HTTP response was received."
    },
    "data": {
      "oneOf": [
        {
          "type": "object"
        },
        {
          "type": "array"
        }
      ],
      "description": "Decoded SIMcloud API response body."
    }
  },
  "required": [
    "ok",
    "status",
    "data"
  ],
  "additionalProperties": false
}
🟢list_vas_products

Use this before create_vas_order to list active SIMcloud VAS voucher products and their available denominations.

Input Schema

{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean",
      "description": "Whether the proxied SIMcloud API request returned a 2xx response."
    },
    "status": {
      "type": "integer",
      "minimum": 0,
      "description": "HTTP status returned by the SIMcloud API, or 0 when no HTTP response was received."
    },
    "data": {
      "oneOf": [
        {
          "type": "object"
        },
        {
          "type": "array"
        }
      ],
      "description": "Decoded SIMcloud API response body."
    }
  },
  "required": [
    "ok",
    "status",
    "data"
  ],
  "additionalProperties": false
}
🔴create_vas_order(product_id, voucher_type, amount, reference)

Use this when an authenticated SIMcloud user asks to buy a confirmed VAS voucher. Call list_vas_products first and use an available product and denomination. This spends wallet funds and queues an irreversible external transaction; do not automatically retry an ambiguous result.

Input Schema

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "integer",
      "minimum": 1,
      "description": "SIMcloud VAS product ID. Required when voucher_type is not supplied."
    },
    "voucher_type": {
      "type": "string",
      "description": "Exact VAS voucher type or slug. Required when product_id is not supplied."
    },
    "amount": {
      "type": "number",
      "exclusiveMinimum": 0
    },
    "reference": {
      "type": "string",
      "maxLength": 200
    }
  },
  "required": [
    "amount",
    "reference"
  ],
  "additionalProperties": false,
  "anyOf": [
    {
      "required": [
        "product_id"
      ]
    },
    {
      "required": [
        "voucher_type"
      ]
    }
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean",
      "description": "Whether the proxied SIMcloud API request returned a 2xx response."
    },
    "status": {
      "type": "integer",
      "minimum": 0,
      "description": "HTTP status returned by the SIMcloud API, or 0 when no HTTP response was received."
    },
    "data": {
      "oneOf": [
        {
          "type": "object"
        },
        {
          "type": "array"
        }
      ],
      "description": "Decoded SIMcloud API response body."
    }
  },
  "required": [
    "ok",
    "status",
    "data"
  ],
  "additionalProperties": false
}
🟢get_vas_order(order_id, transaction_id)

Use this after create_vas_order, or after an ambiguous create result, to fetch an authenticated account VAS order by order_id or transaction_id.

Input Schema

{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "integer",
      "minimum": 1
    },
    "transaction_id": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [],
  "additionalProperties": false,
  "anyOf": [
    {
      "required": [
        "order_id"
      ]
    },
    {
      "required": [
        "transaction_id"
      ]
    }
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean",
      "description": "Whether the proxied SIMcloud API request returned a 2xx response."
    },
    "status": {
      "type": "integer",
      "minimum": 0,
      "description": "HTTP status returned by the SIMcloud API, or 0 when no HTTP response was received."
    },
    "data": {
      "oneOf": [
        {
          "type": "object"
        },
        {
          "type": "array"
        }
      ],
      "description": "Decoded SIMcloud API response body."
    }
  },
  "required": [
    "ok",
    "status",
    "data"
  ],
  "additionalProperties": false
}
🔴create_electricity_order(meter_number, amount, client_reference, recipient)

Use this when an authenticated SIMcloud user asks to buy prepaid electricity for a meter already confirmed with check_electricity_meter. Confirm the meter, rand amount, reference and SMS recipient before calling. This spends wallet funds and submits an irreversible external transaction; do not automatically retry an ambiguous result.

Input Schema

{
  "type": "object",
  "properties": {
    "meter_number": {
      "type": "string",
      "maxLength": 50,
      "description": "Prepaid electricity meter number previously checked with check_electricity_meter."
    },
    "amount": {
      "type": "integer",
      "minimum": 55,
      "maximum": 1000,
      "description": "Electricity purchase amount in whole South African rand (no cents), from R55 to R1000."
    },
    "client_reference": {
      "type": "string",
      "description": "User or system reference for this electricity order."
    },
    "recipient": {
      "type": "string",
      "description": "Recipient mobile number for voucher notifications."
    }
  },
  "required": [
    "meter_number",
    "amount",
    "client_reference",
    "recipient"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean",
      "description": "Whether the proxied SIMcloud API request returned a 2xx response."
    },
    "status": {
      "type": "integer",
      "minimum": 0,
      "description": "HTTP status returned by the SIMcloud API, or 0 when no HTTP response was received."
    },
    "data": {
      "oneOf": [
        {
          "type": "object"
        },
        {
          "type": "array"
        }
      ],
      "description": "Decoded SIMcloud API response body."
    }
  },
  "required": [
    "ok",
    "status",
    "data"
  ],
  "additionalProperties": false
}
🟢check_electricity_meter(meter_number)

Use this before create_electricity_order to check whether a prepaid electricity meter is supported. This does not buy electricity or spend wallet funds.

Input Schema

{
  "type": "object",
  "properties": {
    "meter_number": {
      "type": "string",
      "description": "Prepaid electricity meter number to validate."
    }
  },
  "required": [
    "meter_number"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean",
      "description": "Whether the proxied SIMcloud API request returned a 2xx response."
    },
    "status": {
      "type": "integer",
      "minimum": 0,
      "description": "HTTP status returned by the SIMcloud API, or 0 when no HTTP response was received."
    },
    "data": {
      "oneOf": [
        {
          "type": "object"
        },
        {
          "type": "array"
        }
      ],
      "description": "Decoded SIMcloud API response body."
    }
  },
  "required": [
    "ok",
    "status",
    "data"
  ],
  "additionalProperties": false
}
🟢get_electricity_order(order_id, client_reference, order_reference_id)

Use this after create_electricity_order, or after an ambiguous create result, to fetch an authenticated account electricity order by order_id, client_reference or order_reference_id.

Input Schema

{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "integer",
      "minimum": 1
    },
    "client_reference": {
      "type": "string"
    },
    "order_reference_id": {
      "type": "string"
    }
  },
  "required": [],
  "additionalProperties": false,
  "anyOf": [
    {
      "required": [
        "order_id"
      ]
    },
    {
      "required": [
        "client_reference"
      ]
    },
    {
      "required": [
        "order_reference_id"
      ]
    }
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean",
      "description": "Whether the proxied SIMcloud API request returned a 2xx response."
    },
    "status": {
      "type": "integer",
      "minimum": 0,
      "description": "HTTP status returned by the SIMcloud API, or 0 when no HTTP response was received."
    },
    "data": {
      "oneOf": [
        {
          "type": "object"
        },
        {
          "type": "array"
        }
      ],
      "description": "Decoded SIMcloud API response body."
    }
  },
  "required": [
    "ok",
    "status",
    "data"
  ],
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded17 tools
failed observationversion not recorded—
failed observationversion not recorded—
failed observationversion not recorded—
failed observationversion not recorded—