DCP is not a token pipe. It is sovereign, in-Kingdom AI compute: data, models, storage, and the control plane all stay inside Saudi Arabia under Saudi law (PDPL). One renter wallet — prepaid in Saudi Riyal — pays for everything.
OpenAI-compatible inference
Point any OpenAI SDK at api.dcp.sa/v1 and run Arabic-first models on KSA-resident GPUs, billed per token in SAR. No rewrite.
On-demand GPU pods
Rent a whole NVIDIA GPU with root, Jupyter and SSH in about a minute, prepaid per minute in SAR. No vendor accounts, no quotas, no cluster to manage.
Agent-native by design
Plain HTTPS or an official MCP server. Self-register, machine-readable funding signals, and idempotent money routes mean an agent can run the whole loop unattended.
An agent runs the whole lifecycle with no human and no email click. Every value below is real and verified live against api.dcp.sa.
Self-register — get a key + 20 SAR trial
POST /api/renters/agent-register (no auth). Returns 201 with a real dcp-renter- key and a 20 SAR trial credit — no human, no verification email. Abuse-guarded (3 per IP/hour). The fuller 100 SAR trial stays behind human email-verified signup.
List GPU types
GET /api/renters/available-providers returns rentable GPU TYPES with VRAM and live availability — only the public NVIDIA label, never a vendor or machine. Pick a gpu_type string.
Rent a whole GPU (idempotent)
POST /api/pods with { gpu_type, duration_minutes } and an Idempotency-Key header so a retry never double-charges. Root, Jupyter over TLS and SSH come up in about a minute.
Run inference or use the pod
Call POST /v1/chat/completions for OpenAI-compatible inference, or poll GET /api/pods/{id} for the access_url and ssh_command and drive the GPU directly.
Stop early — unused time refunded
DELETE /api/pods/{id} stops the pod and refunds unused prepaid minutes to the wallet. The host enforces a hard deadline even across reboots, so a forgotten pod can never squat a GPU.
Copy-paste recipe — verified live against api.dcp.sa
# 1 · Self-register — no human, no email click curl -s -X POST https://api.dcp.sa/api/renters/agent-register \ -H "Content-Type: application/json" -d '{"label":"research-bot"}' # → 201 { "success": true, "api_key": "dcp-renter-…", "trial_credit_sar": 20, "balance_sar": 20 } export DCP_KEY=dcp-renter-… # 2 · List rentable GPU TYPES (public NVIDIA labels only) curl -s https://api.dcp.sa/api/renters/available-providers \ -H "Authorization: Bearer $DCP_KEY" # 3 · Rent a whole GPU — idempotent, prepaid per minute curl -s -X POST https://api.dcp.sa/api/pods \ -H "Authorization: Bearer $DCP_KEY" \ -H "Idempotency-Key: $(uuidgen)" -H "Content-Type: application/json" \ -d '{"gpu_type":"RTX 4090","duration_minutes":30}' # → { "pod_id": "pod-…", "status": "starting" } (or HTTP 402 with topup_url, no pod) # 4 · OpenAI-compatible inference (qwen2.5:7b returns a clean answer) curl -s -X POST https://api.dcp.sa/v1/chat/completions \ -H "Authorization: Bearer $DCP_KEY" -H "Content-Type: application/json" \ -d '{"model":"qwen2.5:7b","messages":[{"role":"user","content":"Reply with exactly: OK"}],"max_tokens":20}' # → 200 { choices:[{ message:{ content:"OK" }, finish_reason:"stop" }], usage:{ pricing:{ sar_total:"0.0200" } } } # 5 · Stop early — unused minutes refunded curl -s -X DELETE https://api.dcp.sa/api/pods/$POD_ID \ -H "Authorization: Bearer $DCP_KEY"
The official Model Context Protocol server runs over stdio via npx — nothing to install globally. It exposes eleven native tools, starting with register_agent so an agent can bootstrap its own key with DCP_API_KEY unset.
.mcp.json (Claude Code) · claude_desktop_config.json (Claude Desktop) · Cursor
{
"mcpServers": {
"dcp": {
"command": "npx",
"args": ["-y", "github:dhnpmp-tech/dcp-mcp"],
"env": { "DCP_API_KEY": "dcp-renter-…" }
}
}
}npx -y github:dhnpmp-tech/dcp-mcp is the live install command — it runs the connector straight from GitHub, no npm account needed (the npm package @dcp/mcp is coming soon). Agents that already know DCP can also hit the API directly with the curl recipe above. DCP_API_KEY accepts both dcp-renter- and dc1-sk- keys, via Bearer or x-renter-key.
| Tool | What it does |
|---|---|
| register_agent | Self-register a new renter account in one call — a real API key + a 20 SAR trial credit, no human, no email. Use first when DCP_API_KEY is unset. |
| list_models | List models serveable right now (OpenAI-style; only available=true are live). |
| chat | Run an OpenAI-compatible chat completion — sovereign, in-Kingdom inference. |
| get_balance | Get the renter wallet balance (SAR). Inference, pods and volumes prepay from it. |
| list_gpus | List rentable GPU TYPES now (gpu_type + vram_gb + available + on_demand). Pick a gpu_type for create_pod. |
| create_pod | Rent a whole GPU as an interactive pod (root + Jupyter + SSH), prepaid per minute. Optional gpu_type. |
| get_pod | Get a pod's status + access details (status, access_url, ssh_command, ends_at, seconds_remaining). |
| extend_pod | Add time to a running pod without restart; same rate, workspace + token unchanged. |
| stop_pod | Stop a pod early; unused prepaid time is refunded to the wallet. |
| rent_volume | Rent an exclusive in-Kingdom persistent volume (10/20/30 GB) so /workspace persists across pods. |
| get_volume | Get the renter's active persistent volume (size, usage, price, pool availability). |
Base URL https://api.dcp.sa/v1. GET /v1/models returns OpenAI-style entries, each with an available flag — call only models with available=true. Each completion carries per-call usage pricing in both USD and SAR.
from openai import OpenAI client = OpenAI(base_url="https://api.dcp.sa/v1", api_key="dcp-renter-…") resp = client.chat.completions.create( model="qwen2.5:7b", # GET /v1/models → pick one with available=true messages=[{"role": "user", "content": "اشرح لي زكاة المال"}], ) print(resp.choices[0].message.content)
qwen2.5:7b is a crisp non-thinking model — good for a first deterministic call. The docs default qwen3-4b is a thinking model: it emits reasoning into content and can truncate mid-thought with a small max_tokens. Availability is honest — a model is listed only while a verified provider serves it.
On-demand types spin up a whole, dedicated NVIDIA GPU in about a minute. Rates are cost-plus from the live market — each is a 'from' floor that floats. The native RTX 3090 is an in-Kingdom community card. USD ≈ SAR ÷ 3.75; billing is in SAR.
| GPU type | VRAM | Tier | from SAR/hr | ≈ USD/hr |
|---|---|---|---|---|
| NVIDIA H200 | 141 GB | on-demand | from 23.05 | 6.15 |
| NVIDIA H100 | 80 GB | on-demand | from 17.27 | 4.61 |
| NVIDIA A100 | 80 GB | on-demand | from 7.30 | 1.95 |
| NVIDIA L40S | 48 GB | on-demand | from 5.20 | 1.39 |
| NVIDIA RTX 5090 | 32 GB | on-demand | from 5.20 | 1.39 |
| NVIDIA RTX 4090 | 24 GB | on-demand | from 3.62 | 0.97 |
| NVIDIA RTX 3090 | 24 GB | native | 0.50 | 0.13 |
Live availability per type: GET https://api.dcp.sa/api/renters/available-providers. Full per-token and subscription pricing lives on the pricing page. See pricing →
Two machine-readable guarantees make money safe for autonomous callers: an Idempotency-Key so a retry never double-spends, and an HTTP 402 funding signal that says exactly how much is needed and where to top up — and creates no pod or charge.
POST /api/pods, POST /api/pods/{id}/extend and POST /api/volumes/rent accept an Idempotency-Key header. A retry with the same key returns the SAME pod / charge — so a flaky network or a retried tool call never double-spends the wallet.
HTTP 402 — the fund-here signal (verified live)
# POST /api/pods H100 / 600 min over a 20 SAR wallet → no pod created { "error": "insufficient_balance", "code": "insufficient_balance", "currency": "SAR", "required_sar": 172.73, "balance_sar": 20, "topup_url": "https://dcp.sa/renter/wallet", "retryable": true }
Inference, GPU pods, and persistent volumes all run on Saudi-owned hardware inside the Kingdom under full PDPL data-residency. Cross-border frontier models are off unless a tenant explicitly opts in — and when they do, every such request is marked. This is the structural advantage no foreign API can match for KSA and Gulf workloads.
DCP only ever exposes the public NVIDIA GPU type (e.g. H100, RTX 4090). The underlying GPU vendor, the machine, its location, and how many there are are never surfaced through the API, the MCP server, or this page — a deliberate sovereignty and privacy property, not an omission.
What is DCP?
Saudi Arabia's sovereign AI compute platform: an OpenAI-compatible inference API, on-demand whole-GPU rental, in-Kingdom persistent storage, and an official MCP server — all on Saudi-owned hardware under PDPL, billed prepaid in Saudi Riyal.
How does an AI agent get a key with no human?
POST https://api.dcp.sa/api/renters/agent-register (no auth). It returns 201 with a real dcp-renter- key and a 20 SAR trial credit — no email click. The MCP equivalent is register_agent. The full 100 SAR trial is the human email-verified signup path.
How do I start a GPU on DCP?
List types (GET /api/renters/available-providers or list_gpus), then POST /api/pods with { gpu_type, duration_minutes } and an optional Idempotency-Key. A whole NVIDIA GPU comes up with root, Jupyter and SSH in about a minute, billed per minute in SAR.
What happens on insufficient balance?
The money routes return HTTP 402 with { code: insufficient_balance, required_sar, balance_sar, currency, topup_url, retryable: true } and create no pod or charge — so an agent can read required_sar, top up, and retry safely with the same Idempotency-Key.