DCPFor agents
§ DCP for agents · sovereign compute · zero human in the loop

Compute an agent rents itself.

DCP is Saudi Arabia's sovereign AI compute platform — an OpenAI-compatible inference API and on-demand whole-GPU rental, served from Saudi-owned hardware inside the Kingdom. It is built to be driven by software: an agent can register, get a real key with a SAR trial, rent a GPU, run inference, and stop — with no human and no vendor to manage.

🇸🇦 Inference · KSA🇸🇦 GPUs · KSA🇸🇦 Storage · KSA🌐 Frontier · opt-in only
§ 01 · What DCP isOne sovereign runtime, two products

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.

Product 1 · tokens

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.

Product 2 · whole GPUs

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.

The interface · agents

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.

§ 02 · Zero human in the loopKey → GPU → answer → stop

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.

01

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.

02

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.

03

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.

04

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.

05

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"
§ 03 · MCP serverThe native way for an agent to use DCP

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-…" }
    }
  }
}
Install line

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.

ToolWhat it does
register_agentSelf-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_modelsList models serveable right now (OpenAI-style; only available=true are live).
chatRun an OpenAI-compatible chat completion — sovereign, in-Kingdom inference.
get_balanceGet the renter wallet balance (SAR). Inference, pods and volumes prepay from it.
list_gpusList rentable GPU TYPES now (gpu_type + vram_gb + available + on_demand). Pick a gpu_type for create_pod.
create_podRent a whole GPU as an interactive pod (root + Jupyter + SSH), prepaid per minute. Optional gpu_type.
get_podGet a pod's status + access details (status, access_url, ssh_command, ends_at, seconds_remaining).
extend_podAdd time to a running pod without restart; same rate, workspace + token unchanged.
stop_podStop a pod early; unused prepaid time is refunded to the wallet.
rent_volumeRent an exclusive in-Kingdom persistent volume (10/20/30 GB) so /workspace persists across pods.
get_volumeGet the renter's active persistent volume (size, usage, price, pool availability).
§ 04 · OpenAI-compatible inferenceChange base_url, keep your code

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)
Pick the right model

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.

§ 05 · GPU catalog · cost-plusWhole GPUs, priced from the live market

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 typeVRAMTierfrom SAR/hr≈ USD/hr
NVIDIA H200141 GBon-demandfrom 23.056.15
NVIDIA H10080 GBon-demandfrom 17.274.61
NVIDIA A10080 GBon-demandfrom 7.301.95
NVIDIA L40S48 GBon-demandfrom 5.201.39
NVIDIA RTX 509032 GBon-demandfrom 5.201.39
NVIDIA RTX 409024 GBon-demandfrom 3.620.97
NVIDIA RTX 309024 GBnative0.500.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 →

§ 06 · Safe retries & fundingMoney routes an agent can trust

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.

Idempotency-Key — safe retries

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
}
§ 07 · Sovereignty · PDPLYour data never leaves the Kingdom

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.

Invisibility by design

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.

§ 08 · FAQQuestions humans and agents ask
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.