Koskamo

Pangle Compute MCP

An MCP server for the Pangle spot market that allows AI agents to search for idle GPU rentals, compare prices across providers, monitor market statistics, and place limit orders or rentals using provider keys.

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.

Pangle Compute MCP logo, by PangleVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-07Operated by Pangle
MCP endpoint (Streamable HTTP)
https://compute.pangle.online/mcp/
Vendor documentation

What its tools do

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

25 of 25 have a description · 0 of 25 declare behavior hints · 0 of 23 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 compute.pangle.online ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Search for available GPU instances by model and price
  • Monitor market statistics and idle capacity trends
  • Place limit orders for specific GPU configurations
  • Rent GPU instances via provider keys with budget caps

Source and maintenance

Vendor evidenceRegistry 1.2.0
Maintenance checked

Protocol and capabilities

Server
compute.pangle.online 1.2.0
MCP protocol negotiated in check
2025-11-25
Tools
25 advertised
Resources
0 advertised
Resource templates
0 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  },
  "resources": {
    "subscribe": false,
    "listChanged": false
  },
  "experimental": {}
}

Server-provided instructions

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

Live GPU rental market data aggregated across a dozen provider feeds (Vast.ai, RunPod, Verda, Akash, Cudo, io.net, Hyperstack, Novita, Prime Intellect, Shadeform, Scaleway, OVHcloud). Prices are USD per hour. TWO FEE LEVERS, do not confuse them: `fee_bps` is the DISPLAY markup on published prices and is 0 — every price you read is the provider's own. `platform_fee` is a service fee on a rental SETTLED THROUGH US (2.5%, $0.01 min, capped $5.00 per lease per UTC day); it is stated in the quote and in the placement payload before anything is committed, is charged on what we settle and never on the provider's price, and does not apply when you rent on your own provider key. price_final_per_gpu_hr is the comparable unit across multi-GPU offers (it equals price_per_gpu_hr while fee_bps is 0). class='interruptible' rows are idle capacity (spot/bid) — cheapest and greenest. Offers marked stale=true come from a provider whose feed is behind; treat them as indicative only.

Tools

25 advertised

search_offers
Advertised by the server during the last successful anonymous check.

Search live GPU offers. gpu matches the model name (e.g. '4090', 'H100'). offer_class: on_demand | interruptible | reserved. country: ISO-2 (e.g. US), a comma list ('DE,NL'), or 'EU' for the 27 member states. min_gpu_count filters to multi-GPU configs (8 = full 8x nodes). region substring-matches the provider's region/datacenter label. Returns offers ranked cheapest-first by price_per_gpu_hr.

search_offers input schema
{
  "type": "object",
  "title": "search_offersArguments",
  "properties": {
    "gpu": {
      "type": "string",
      "title": "Gpu",
      "default": ""
    },
    "limit": {
      "type": "integer",
      "title": "Limit",
      "default": 20
    },
    "region": {
      "type": "string",
      "title": "Region",
      "default": ""
    },
    "country": {
      "type": "string",
      "title": "Country",
      "default": ""
    },
    "provider": {
      "type": "string",
      "title": "Provider",
      "default": ""
    },
    "min_vram_gb": {
      "type": "number",
      "title": "Min Vram Gb",
      "default": 0
    },
    "offer_class": {
      "type": "string",
      "title": "Offer Class",
      "default": ""
    },
    "min_gpu_count": {
      "type": "integer",
      "title": "Min Gpu Count",
      "default": 0
    },
    "min_reliability": {
      "type": "number",
      "title": "Min Reliability",
      "default": 0
    },
    "max_price_per_gpu_hr": {
      "type": "number",
      "title": "Max Price Per Gpu Hr",
      "default": 0
    }
  }
}
search_offers output schema
{
  "type": "object",
  "title": "search_offersOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Result"
    }
  }
}
get_offer
Advertised by the server during the last successful anonymous check.

Fetch one offer by its id (from search_offers).

get_offer input schema
{
  "type": "object",
  "title": "get_offerArguments",
  "required": [
    "offer_id"
  ],
  "properties": {
    "offer_id": {
      "type": "string",
      "title": "Offer Id"
    }
  }
}
market_stats
Advertised by the server during the last successful anonymous check.

Live market snapshot: total offers, GPU models, idle-capacity share, per-provider freshness/health, cheapest price per model, current fee_bps.

market_stats input schema
{
  "type": "object",
  "title": "market_statsArguments",
  "properties": {}
}
price_history
Advertised by the server during the last successful anonymous check.

Price history for one GPU model (exact name from search_offers/market_stats, e.g. 'RTX 4090'). offer_class: on_demand | interruptible. Returns per-provider series of [ts, min_price_per_gpu_hr, median_price_per_gpu_hr, offer_count]; ranges past 3 days are bucketed (hourly, then 6-hourly past a week).

price_history input schema
{
  "type": "object",
  "title": "price_historyArguments",
  "properties": {
    "gpu": {
      "type": "string",
      "title": "Gpu",
      "default": ""
    },
    "hours": {
      "type": "integer",
      "title": "Hours",
      "default": 168
    },
    "gpu_model": {
      "type": "string",
      "title": "Gpu Model",
      "default": ""
    },
    "offer_class": {
      "type": "string",
      "title": "Offer Class",
      "default": "on_demand"
    }
  }
}
idle_history
Advertised by the server during the last successful anonymous check.

The idle-capacity index over time: share of listed GPU capacity that is interruptible (spot/bid) — idle hardware looking for work. Points are [ts, idle_share, idle_offers, total_offers].

idle_history input schema
{
  "type": "object",
  "title": "idle_historyArguments",
  "properties": {
    "hours": {
      "type": "integer",
      "title": "Hours",
      "default": 168
    }
  }
}
best_value
Advertised by the server during the last successful anonymous check.

Perf-per-dollar board: for each GPU model, best live price vs its FP16 tensor throughput (dense, vendor spec sheets) -> TFLOPS per dollar-hour. The answer to 'most compute for my budget' rather than 'cheapest card'. Models without a defensible public spec figure are listed as unrated.

best_value input schema
{
  "type": "object",
  "title": "best_valueArguments",
  "properties": {
    "limit": {
      "type": "integer",
      "title": "Limit",
      "default": 25
    },
    "min_vram_gb": {
      "type": "number",
      "title": "Min Vram Gb",
      "default": 0
    },
    "offer_class": {
      "type": "string",
      "title": "Offer Class",
      "default": ""
    }
  }
}
provider_reliability
Advertised by the server during the last successful anonymous check.

How dependable each provider's data feed has been for this station (poll success over the trailing window), plus the provider's own average machine reliability where reported. feed_score is about the DATA, not their hardware.

provider_reliability input schema
{
  "type": "object",
  "title": "provider_reliabilityArguments",
  "properties": {
    "days": {
      "type": "integer",
      "title": "Days",
      "default": 30
    }
  }
}
price_position
Advertised by the server during the last successful anonymous check.

Rent-now-or-wait context: where the current best price for one GPU model sits inside its own trailing 7/30-day range (percentile, 24h trend, verdict). Descriptive, not a forecast.

price_position input schema
{
  "type": "object",
  "title": "price_positionArguments",
  "properties": {
    "gpu": {
      "type": "string",
      "title": "Gpu",
      "default": ""
    },
    "gpu_model": {
      "type": "string",
      "title": "Gpu Model",
      "default": ""
    },
    "offer_class": {
      "type": "string",
      "title": "Offer Class",
      "default": "on_demand"
    }
  }
}
spot_spread
Advertised by the server during the last successful anonymous check.

On-demand vs interruptible spread: the live discount for idle capacity per model; pass gpu_model for its history too.

spot_spread input schema
{
  "type": "object",
  "title": "spot_spreadArguments",
  "properties": {
    "hours": {
      "type": "integer",
      "title": "Hours",
      "default": 168
    },
    "gpu_model": {
      "type": "string",
      "title": "Gpu Model",
      "default": ""
    }
  }
}
will_it_fit
Advertised by the server during the last successful anonymous check.

Will this model fit, and what does a fitting machine cost right now? Deterministic VRAM arithmetic — weights (params x bytes/precision) + KV cache (2 x layers x kv_heads x head_dim x context x batch) + stated overhead — checked against the live book, cheapest fitting offers first. Pass a known model slug (llama-3.1-8b/70b/405b, mistral-7b, mixtral-8x7b, qwen2.5-7b/32b/72b, gemma-2-9b/27b) OR params_b for a stated Llama-like guess. precision: fp16/int8/int4. If you pass tokens_per_s (YOUR measured throughput — we never invent one), each offer gains usd_per_m_tokens. Every approximation is in the assumptions list, not fine print.

will_it_fit input schema
{
  "type": "object",
  "title": "will_it_fitArguments",
  "properties": {
    "batch": {
      "type": "integer",
      "title": "Batch",
      "default": 1
    },
    "limit": {
      "type": "integer",
      "title": "Limit",
      "default": 10
    },
    "model": {
      "type": "string",
      "title": "Model",
      "default": ""
    },
    "context": {
      "type": "integer",
      "title": "Context",
      "default": 8192
    },
    "params_b": {
      "type": "number",
      "title": "Params B",
      "default": 0
    },
    "precision": {
      "type": "string",
      "title": "Precision",
      "default": "fp16"
    },
    "offer_class": {
      "type": "string",
      "title": "Offer Class",
      "default": ""
    },
    "tokens_per_s": {
      "type": "number",
      "title": "Tokens Per S",
      "default": 0
    }
  }
}
true_cost_notes
Advertised by the server during the last successful anonymous check.

The billing fine print behind the $/hr, verified per provider from their own published pages (source URL + date on every claim): billing granularity (per-second vs per-minute), whether storage bills while stopped, bandwidth/egress fees, and the commonly-missed gotchas (e.g. Vast bandwidth never appears in $/hr; RunPod stopped volume disk costs double). Providers we have not verified are listed with NO claims.

true_cost_notes input schema
{
  "type": "object",
  "title": "true_cost_notesArguments",
  "properties": {}
}
register_account
Advertised by the server during the last successful anonymous check.

Create a metering account: returns a bearer token (shown once, we keep only a hash). Pass it as account_token on rent calls to build a usage ledger you can read back with account_usage. Optional — renting works without one.

register_account input schema
{
  "type": "object",
  "title": "register_accountArguments",
  "properties": {
    "label": {
      "type": "string",
      "title": "Label",
      "default": ""
    }
  }
}
account_usage
Advertised by the server during the last successful anonymous check.

Your metered usage ledger: placements, destroys, estimated hours and USD, and the platform fee (2.5%, $0.01 min, $5.00 cap per lease per UTC day) priced at the rate live at event time. Distinct from fee_bps, the display markup.

account_usage input schema
{
  "type": "object",
  "title": "account_usageArguments",
  "required": [
    "account_token"
  ],
  "properties": {
    "days": {
      "type": "integer",
      "title": "Days",
      "default": 90
    },
    "account_token": {
      "type": "string",
      "title": "Account Token"
    }
  }
}
create_watch
Advertised by the server during the last successful anonymous check.

Create a price watch (tripwire): fires when the best live fee-adjusted price per GPU-hour matching gpu (and optional offer_class) drops to or under max_price_per_gpu_hr. Checked every poll (~5 min). Returns the watch with its id — the id is the only key; poll it with watch_status, or give a public webhook_url to be POSTed on each trip. Watches re-arm when the price climbs 2% back over the line.

create_watch input schema
{
  "type": "object",
  "title": "create_watchArguments",
  "required": [
    "gpu",
    "max_price_per_gpu_hr"
  ],
  "properties": {
    "gpu": {
      "type": "string",
      "title": "Gpu"
    },
    "offer_class": {
      "type": "string",
      "title": "Offer Class",
      "default": ""
    },
    "webhook_url": {
      "type": "string",
      "title": "Webhook Url",
      "default": ""
    },
    "max_price_per_gpu_hr": {
      "type": "number",
      "title": "Max Price Per Gpu Hr"
    }
  }
}
watch_status
Advertised by the server during the last successful anonymous check.

Current state of a watch: armed/tripped, last price seen, recent events, and the best matching offer right now.

watch_status input schema
{
  "type": "object",
  "title": "watch_statusArguments",
  "required": [
    "watch_id"
  ],
  "properties": {
    "watch_id": {
      "type": "string",
      "title": "Watch Id"
    }
  }
}
delete_watch
Advertised by the server during the last successful anonymous check.

Delete a watch by id.

delete_watch input schema
{
  "type": "object",
  "title": "delete_watchArguments",
  "required": [
    "watch_id"
  ],
  "properties": {
    "watch_id": {
      "type": "string",
      "title": "Watch Id"
    }
  }
}
create_limit_order
Advertised by the server during the last successful anonymous check.

Place a standing LIMIT ORDER: when the best live fee-adjusted price for gpu (and optional offer_class) trades at or under max_price_per_gpu_hr, the station cuts a signed FILL TICKET naming the exact offer. The station never holds your provider key — the ticket is executed by whoever does: the open-source keyholder sidecar (/agents/#sidecar), your own agent long-polling POST /api/orders/{id}/ticket, or a human with curl. Returns the order with order_secret SHOWN ONCE — it authenticates ticket reads and the fill call for this order only and can rent nothing by itself. Triggers are checked on the poll cadence (~5-min bars, not tick-by-tick); orders expire in 30 days; a ticket lasts ~4 minutes then the order re-arms. standing=true makes it a STANDING order — compute that survives: after a live fill the sidecar keeps watching the machine, and when it is preempted or dies the order re-arms and refills from the CURRENT best offer, up to max_refills times with cooloff_seconds between death and refill. Honest limits: this re-provisions the MACHINE, not the WORK (GPU memory is not portable — resume from your own checkpoints); refills need your sidecar alive (it is both witness and executor); cancelling stops supervision but cannot destroy a running machine (the station holds no key). Watchdog: spend_alert_usd / age_alert_hours fire a "still yours?" webhook once per machine when the spend ESTIMATE (uptime x price; the provider's bill is authoritative) or age crosses your line — auto_destroy_budget_usd remains the hard stop.

create_limit_order input schema
{
  "type": "object",
  "title": "create_limit_orderArguments",
  "required": [
    "gpu",
    "max_price_per_gpu_hr"
  ],
  "properties": {
    "gpu": {
      "type": "string",
      "title": "Gpu"
    },
    "standing": {
      "type": "boolean",
      "title": "Standing",
      "default": false
    },
    "max_refills": {
      "type": "integer",
      "title": "Max Refills",
      "default": 5
    },
    "min_vram_gb": {
      "type": "number",
      "title": "Min Vram Gb",
      "default": 0
    },
    "offer_class": {
      "type": "string",
      "title": "Offer Class",
      "default": ""
    },
    "webhook_url": {
      "type": "string",
      "title": "Webhook Url",
      "default": ""
    },
    "min_gpu_count": {
      "type": "integer",
      "title": "Min Gpu Count",
      "default": 0
    },
    "age_alert_hours": {
      "type": "number",
      "title": "Age Alert Hours",
      "default": 0
    },
    "cooloff_seconds": {
      "type": "integer",
      "title": "Cooloff Seconds",
      "default": 120
    },
    "spend_alert_usd": {
      "type": "number",
      "title": "Spend Alert Usd",
      "default": 0
    },
    "max_price_per_gpu_hr": {
      "type": "number",
      "title": "Max Price Per Gpu Hr"
    },
    "auto_destroy_budget_usd": {
      "type": "number",
      "title": "Auto Destroy Budget Usd",
      "default": 0
    }
  }
}
limit_order_status
Advertised by the server during the last successful anonymous check.

State of a limit order (armed/ticketed/filled/cancelled/expired), last price seen, recent events. Pass order_secret to also read the live fill ticket when one is cut.

limit_order_status input schema
{
  "type": "object",
  "title": "limit_order_statusArguments",
  "required": [
    "order_id"
  ],
  "properties": {
    "order_id": {
      "type": "string",
      "title": "Order Id"
    },
    "order_secret": {
      "type": "string",
      "title": "Order Secret",
      "default": ""
    }
  }
}
cancel_limit_order
Advertised by the server during the last successful anonymous check.

Cancel a limit order. Requires the order_secret from create_limit_order.

cancel_limit_order input schema
{
  "type": "object",
  "title": "cancel_limit_orderArguments",
  "required": [
    "order_id",
    "order_secret"
  ],
  "properties": {
    "order_id": {
      "type": "string",
      "title": "Order Id"
    },
    "order_secret": {
      "type": "string",
      "title": "Order Secret"
    }
  }
}
rent_x402
Advertised by the server during the last successful anonymous check.

Rent a prepaid block of GPU time with a wallet and NO account, NO API key and no human, over x402 (HTTP 402 micropayments, USDC on Base). Call it with no arguments and you get the payment challenge: an x402 PaymentRequirementsResponse whose accepts[0].extra.x402_fee states the block price, the platform fee IN DOLLARS, that there are no refunds, and that you are charged only after the lease is live. Sign the EIP-3009 transferWithAuthorization it describes, then call again with x_payment set to the base64 PaymentPayload (the same value the HTTP rail sends as X-PAYMENT). `ssh_pubkey` is HOW YOU GET IN, and is required on the paying call: pass the public half of your ssh key (one line, the contents of id_ed25519.pub). It is written into the rented container's authorized_keys and nowhere else, and the receipt comes back with the host and port to connect to. A block nobody can enter is not sold. `lease_id` is minted by the challenge — send back the one you were given; it is the accrual key for the daily fee cap and this station refuses ids it did not mint or that belong to another payer. `originator` is an OPTIONAL opaque attribution label (<=64 chars, e.g. a handle or a reverse-DNS name) naming the client implementation that produced the fill. It is carried unmodified onto the receipt and onto the public ledger row, and it never affects the price, the fee, verification or settlement — the same block costs the same either way. Returns the receipt on success. Every fill is published at /api/receipts. Wire contract: docs/X402-FEE-0.1.md, frozen as x402-fee/0.1. Note for x402 MCP-transport clients: this tool takes the payment as an ARGUMENT rather than in _meta["x402/payment"]. The payload is byte-identical; only the channel differs, because a tool argument is the one place every MCP client can portably put it. The HTTP rail is fully transport-conformant.

rent_x402 input schema
{
  "type": "object",
  "title": "rent_x402Arguments",
  "properties": {
    "blocks": {
      "type": "integer",
      "title": "Blocks",
      "default": 1
    },
    "lease_id": {
      "type": "string",
      "title": "Lease Id",
      "default": ""
    },
    "x_payment": {
      "type": "string",
      "title": "X Payment",
      "default": ""
    },
    "originator": {
      "type": "string",
      "title": "Originator",
      "default": ""
    },
    "ssh_pubkey": {
      "type": "string",
      "title": "Ssh Pubkey",
      "default": ""
    }
  }
}
rent_offer
Advertised by the server during the last successful anonymous check.

Place a rental on YOUR provider account (BYO key — it is used for this one call and never stored). Default is a DRY RUN returning exactly what would be executed; a live placement needs dry_run=false AND confirm=true. The offer is re-quoted live first and refused if its price exceeds max_price_per_gpu_hr. Executes on vast and runpod offers. Pass an idempotency_key so retries return the first receipt instead of renting twice. auto_destroy_budget_usd arms the budget guard: this station then holds your key in PROCESS MEMORY ONLY and destroys the rental when estimated spend reaches the cap (a station restart drops the guard — the receipt says so; poll rental_status as backstop). account_token (from register_account) attributes the rental to your usage ledger.

rent_offer input schema
{
  "type": "object",
  "title": "rent_offerArguments",
  "required": [
    "offer_id",
    "api_key",
    "max_price_per_gpu_hr"
  ],
  "properties": {
    "image": {
      "type": "string",
      "title": "Image",
      "default": ""
    },
    "label": {
      "type": "string",
      "title": "Label",
      "default": ""
    },
    "api_key": {
      "type": "string",
      "title": "Api Key"
    },
    "confirm": {
      "type": "boolean",
      "title": "Confirm",
      "default": false
    },
    "disk_gb": {
      "type": "number",
      "title": "Disk Gb",
      "default": 10
    },
    "dry_run": {
      "type": "boolean",
      "title": "Dry Run",
      "default": true
    },
    "offer_id": {
      "type": "string",
      "title": "Offer Id"
    },
    "account_token": {
      "type": "string",
      "title": "Account Token",
      "default": ""
    },
    "idempotency_key": {
      "type": "string",
      "title": "Idempotency Key",
      "default": ""
    },
    "max_price_per_gpu_hr": {
      "type": "number",
      "title": "Max Price Per Gpu Hr"
    },
    "auto_destroy_budget_usd": {
      "type": "number",
      "title": "Auto Destroy Budget Usd",
      "default": 0
    }
  }
}
rent_best
Advertised by the server during the last successful anonymous check.

One-shot rent: search the live book with these filters and place on the best (cheapest) matching offer — 'cheapest H100 under $2/hr, go'. Same guarantees as rent_offer (dry-run default, live re-quote, your max_price_per_gpu_hr is absolute). If the best offer is already gone it walks to the next, at most 3, and reports what it skipped.

rent_best input schema
{
  "type": "object",
  "title": "rent_bestArguments",
  "required": [
    "api_key",
    "max_price_per_gpu_hr"
  ],
  "properties": {
    "gpu": {
      "type": "string",
      "title": "Gpu",
      "default": ""
    },
    "image": {
      "type": "string",
      "title": "Image",
      "default": ""
    },
    "label": {
      "type": "string",
      "title": "Label",
      "default": ""
    },
    "api_key": {
      "type": "string",
      "title": "Api Key"
    },
    "confirm": {
      "type": "boolean",
      "title": "Confirm",
      "default": false
    },
    "country": {
      "type": "string",
      "title": "Country",
      "default": ""
    },
    "disk_gb": {
      "type": "number",
      "title": "Disk Gb",
      "default": 10
    },
    "dry_run": {
      "type": "boolean",
      "title": "Dry Run",
      "default": true
    },
    "provider": {
      "type": "string",
      "title": "Provider",
      "default": ""
    },
    "min_vram_gb": {
      "type": "number",
      "title": "Min Vram Gb",
      "default": 0
    },
    "offer_class": {
      "type": "string",
      "title": "Offer Class",
      "default": ""
    },
    "account_token": {
      "type": "string",
      "title": "Account Token",
      "default": ""
    },
    "min_gpu_count": {
      "type": "integer",
      "title": "Min Gpu Count",
      "default": 0
    },
    "idempotency_key": {
      "type": "string",
      "title": "Idempotency Key",
      "default": ""
    },
    "max_price_per_gpu_hr": {
      "type": "number",
      "title": "Max Price Per Gpu Hr"
    },
    "auto_destroy_budget_usd": {
      "type": "number",
      "title": "Auto Destroy Budget Usd",
      "default": 0
    }
  }
}
rental_status
Advertised by the server during the last successful anonymous check.

Live state of an instance on your account: running/starting/stopped/ gone, uptime, price, estimated spend so far, and the budget guard's state if one is armed. Read-only; your key passes through and is never stored.

rental_status input schema
{
  "type": "object",
  "title": "rental_statusArguments",
  "required": [
    "provider",
    "provider_instance_id",
    "api_key"
  ],
  "properties": {
    "api_key": {
      "type": "string",
      "title": "Api Key"
    },
    "provider": {
      "type": "string",
      "title": "Provider"
    },
    "provider_instance_id": {
      "type": "string",
      "title": "Provider Instance Id"
    }
  }
}
destroy_rental
Advertised by the server during the last successful anonymous check.

Destroy an instance previously placed on your account (vast or runpod). Your key passes through and is never stored.

destroy_rental input schema
{
  "type": "object",
  "title": "destroy_rentalArguments",
  "required": [
    "provider",
    "provider_instance_id",
    "api_key"
  ],
  "properties": {
    "api_key": {
      "type": "string",
      "title": "Api Key"
    },
    "provider": {
      "type": "string",
      "title": "Provider"
    },
    "provider_instance_id": {
      "type": "string",
      "title": "Provider Instance Id"
    }
  }
}
fill_limit_order
Advertised by the server during the last successful anonymous check.

Execute a limit order's live fill ticket on YOUR provider key (used for this one call, never stored). Only works while the order is ticketed; the offer is re-quoted live and refused above the order's line. Idempotent per order — a retry returns the first receipt rather than renting a second machine. The order's auto_destroy_budget_usd (if set) arms the budget guard exactly as rent_offer does.

fill_limit_order input schema
{
  "type": "object",
  "title": "fill_limit_orderArguments",
  "required": [
    "order_id",
    "order_secret",
    "api_key"
  ],
  "properties": {
    "image": {
      "type": "string",
      "title": "Image",
      "default": ""
    },
    "api_key": {
      "type": "string",
      "title": "Api Key"
    },
    "confirm": {
      "type": "boolean",
      "title": "Confirm",
      "default": false
    },
    "disk_gb": {
      "type": "number",
      "title": "Disk Gb",
      "default": 10
    },
    "dry_run": {
      "type": "boolean",
      "title": "Dry Run",
      "default": true
    },
    "order_id": {
      "type": "string",
      "title": "Order Id"
    },
    "order_secret": {
      "type": "string",
      "title": "Order Secret"
    },
    "account_token": {
      "type": "string",
      "title": "Account Token",
      "default": ""
    }
  }
}

Prompts

0 advertised

No prompt definitions available.

Resources

0 advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

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
1773 ms
95th percentile latency
1773 ms

Maintenance history

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

  • · probe · passed · 1773 ms · metadata changed · 25 tool(s), 0 resource(s), 0 resource template(s), 0 prompt(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 pangle-compute-mcp https://compute.pangle.online/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 pangle-compute-mcp --url https://compute.pangle.online/mcp/

Cursor

Merge this server into .cursor/mcp.json in your project, then enable pangle-compute-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "pangle-compute-mcp": {
      "url": "https://compute.pangle.online/mcp/"
    }
  }
}

Cline

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

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start pangle-compute-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "pangle-compute-mcp": {
      "type": "http",
      "url": "https://compute.pangle.online/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 pangle-compute-mcp https://compute.pangle.online/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://compute.pangle.online/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": {
    "pangle-compute-mcp": {
      "serverUrl": "https://compute.pangle.online/mcp/"
    }
  }
}

Let your agent find its tools

Find servers like Pangle Compute 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 Pangle Compute 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