
Ocean Network MCP server
Which MCP servers are Ocean Network's own, from the official registry and from asking its own domain, whether they answer, and what they offer. A program checked each of these, nobody copied them from a product page.
read 2026-10-09
- Addresshttps://mcp.oncompute.ai/mcpnot in the official registry: answered when asked
No entry in the official MCP registry names this server. It answered on oncompute.ai when the Atlas asked at the address servers are usually mounted on, so it is the vendor's own. Clients and catalogues that list servers from the registry do not show it.
- Stateanswerschecked 2026-10-28
- Tools93
- Server calls itselfocean-mcp
- Server version0.1.0
- Protocol version2025-06-18
On 2026-10-28 the server answered initialize and tools/list without a sign-in. First answer in 193 ms.
- Whether its tools do the product's job has not been judged yet.
- Checked on 6 of the 7 days it takes to judge reliability.
Once connected
- createPersistentStorageBucket, deletePersistentStorageFile, create_auth_token, upload_persistent_storage_file change data without a sign-in: anyone with the address can call them.
- Its definitions take about 65427 tokens of context: enable only the tools a task needs.
Said by rules from the measurements above. The likely first call is a model's pick from the tool list; read its description before relying on it.
- INITE MCP scoreafter a weeka score needs 7 daily checks: 6 so far
- Answeredmeasuring6 of the 7 daily checks it takes to print a share
- Median first answer315 ms
- Space in an agent's context≈ 65,427 tokensthe definitions of all its tools (93), which an agent carries on every turn
- Tool definitionsB · 80 of 100
- Typed results0 of 93 toolsdeclared outputSchema: results come typed, read once
- Parameters without a description: in 20 of 93
- Not saying whether it only reads or can destroy: 93 of 93
What an agent can do with it
- can do · Run open-source language models on dedicated GPUs by the hour
- not sure · Generate images and videos using templates on rented hardware
- not sure · Earn income from idle GPUs by renting them to others
Each of the product's use cases, put to Jev against this server's tool list: can an agent do it with these tools?
Worth a look
- Tools that change data, on a server that answers without a sign-in: createPersistentStorageBucket, deletePersistentStorageFile, create_auth_token, upload_persistent_storage_file
A program checks the server once a day: initialize and tools/list, no model. Tokens are the definitions' length at about four characters a token. The grade averages six checks of every tool's name, description, schema and annotations; it says how well the tools are described, not whether they work. The score weighs what was measured and nothing else: answering (25%), doing the product's job (25%), definitions (20%), context (10%), use (10%) and how readily a client connects (10%). A part that was not measured is left out, and a hidden instruction caps the score at 40. The state of vendors' MCP servers: method and numbers →
mcp_server_peersGets all peers connected to this MCP Server (libp2p peer store).
node_statusGets ocean-node status via the P2P **status** command. Use **nodeId** and/or **multiaddress** to target the peer. The payload may include **persistentStorage** (object, optionally with **accessLists**) only when the node has persistent…
find_compute_providersTyped compute-provider discovery over the DHT (`ProviderInstance.findComputeProviders`). Pass ordinary resource values — no hand-built search string, no bucket math. Provide **free** (true = free tier, false = paid) and one or more…
find_providerDHT lookup: hashes content (SHA-256) and returns peers that provided that exact string (e.g. a DID). Results are `{ id, multiaddrs, partial?, error? }` per peer — `partial` marks a walk that ended early. For compute (C2D) capacity…
getComputeEnvironmentsCalls P2pProvider.getComputeEnvironments — lists compute environments exposed by the target node (no auth). ## Default node targets If the user has not specified a `nodeId` / `multiaddress`, default to Ocean's recommended compute nodes by…
get_node_metricsLive per-node resource snapshot (`getNodeMetrics`): CPU, memory, storage, GPU and per-environment usage collected at `collectedAt`. No auth. **Returns:** a `NodeMetricsSnapshot`, or `null` if the target node does not expose this feature…
get_node_metrics_historyHourly-averaged node resource metrics over a time window (`getNodeMetricsHistory`). No auth. **Returns:** a `NodeMetricsHistoryResult` with an `buckets` array, or `null` if the target node does not expose this feature (older ocean-node).
resolveDdoFetches a DDO by DID from a target ocean-node over libp2p (`P2pProvider.resolveDdo`). No consumer signature. **Returns:** Raw node response for `getDDO` (typically the DDO JSON object or node-specific envelope).
validateDdoRuns `validateDDO` on the node with a full DDO payload. Requires auth. ## Identity modes for an agent An agent acting for a user proves identity in one of two ways: (1) it **holds a private key** and signs locally (mint a token via…
getNodeJobsCalls `jobs` on the node (`P2pProvider.getNodeJobs`). No auth. **Inputs:** optional `fromTimestamp` filters jobs (Unix ms) when supported by the node. **Returns:** Array of `NodeComputeJob` objects (jobId, status, environment, payment…
getNonceReturns the node’s current nonce for an address (`P2pProvider.getNonce`). **No auth.** Use this before building a `completeSignature`: the value you sign with must use **nonce = String(returnedNonce + 1)** (see auth guide). **Returns:**…
getFileInfoResolves file metadata via `fileInfo` (`P2pProvider.getFileInfo`). No consumer signature. ## fileObject shape (required fields per `type`) - `{ "type": "url", "url": "...", "method": "get" | "post", "headers"?: {...} }` — **`method` is…
initializeComputePricing/validation for compute (`initializeCompute`). No auth required. **Always call before `computeStart` to learn the real cost.** ## Duration vs escrow lock — different things - **maxJobDuration** / **validUntil**: container run time…
computeStartStarts a paid compute job (`startCompute`). Requires auth. **Paid jobs need on-chain escrow deposit + authorization.** This tool runs an escrow **preflight gate**: it resolves your consumer address (from `authToken` /…
freeComputeStartStarts a free compute job (`freeStartCompute`). Requires auth. **Need auth?** Pass an existing JWT as `authToken`, or call `create_auth_token` first (ephemeral or own key) and pass the returned JWT. Ephemeral works on open free envs…
computeStopStops a running job (`stopCompute`). Requires auth. ## Identity modes for an agent An agent acting for a user proves identity in one of two ways: (1) it **holds a private key** and signs locally (mint a token via create_auth_token, or…
computeStatusQueries job status (`getComputeStatus`). Requires auth. ## After starting: poll to completion, fetch output — do NOT ask between polls Call **computeStatus** every ~5–10s until terminal, then fetch the result without asking. Status…
getComputeResultStreams a compute result file and returns it as base64 (`getComputeResult`). Requires auth. ## Identity modes for an agent An agent acting for a user proves identity in one of two ways: (1) it **holds a private key** and signs locally…
downloadNodeLogsFetches operator logs from the node (`getLogs`). Requires auth. ## Identity modes for an agent An agent acting for a user proves identity in one of two ways: (1) it **holds a private key** and signs locally (mint a token via…
createPersistentStorageBucketCreates a bucket (`persistentStorageCreateBucket`). Requires auth. ## Node capability check (required first) Before **createPersistentStorageBucket**, **getPersistentStorageBuckets**, **listPersistentStorageFiles**…
getPersistentStorageBucketsLists buckets for an owner (`persistentStorageGetBuckets`). Requires auth. ## Node capability check (required first) Before **createPersistentStorageBucket**, **getPersistentStorageBuckets**, **listPersistentStorageFiles**…
listPersistentStorageFilesLists files in a bucket (`persistentStorageListFiles`). Requires auth. ## Node capability check (required first) Before **createPersistentStorageBucket**, **getPersistentStorageBuckets**, **listPersistentStorageFiles**…
getPersistentStorageFileObjectReturns the node's `PersistentStorageObject` descriptor for a bucket file (`persistentStorageGetFileObject`). Requires auth. **This is the intended way to obtain the `fileObject` for a persistent-storage dataset in a compute job:** call…
deletePersistentStorageFileDeletes a file from a bucket (`persistentStorageDeleteFile`). Requires auth. ## Node capability check (required first) Before **createPersistentStorageBucket**, **getPersistentStorageBuckets**, **listPersistentStorageFiles**…
get_download_feesRuns `initialize` / `getFees` for a dataset service file. **No auth.** Returns provider pricing / validation (`ProviderInitialize`) before download. **Returns:** Node-dependent fee / initialization object.
download_asset_fileStreams a file over P2P (`download` / `getDownloadUrl`). Requires auth. Returns **base64** of file bytes plus length (large assets → large JSON). ## Identity modes for an agent An agent acting for a user proves identity in one of two…
p2p_encryptEncrypts data via the node (`encrypt`). Requires auth. ## Identity modes for an agent An agent acting for a user proves identity in one of two ways: (1) it **holds a private key** and signs locally (mint a token via create_auth_token, or…
check_did_filesLists file entries for a DID + service (`checkDidFiles` / `fileInfo`). **No auth.** **Returns:** `FileInfo[]`.
create_auth_tokenMints a node JWT via `createAuthToken`. The token's identity is the **consumer** for later compute calls. **Mint once per session, reuse the JWT.** Buckets/jobs/results are owned by the consumer address; re-minting (especially…
policy_server_passthroughForwards a policy-server request over P2P (`PolicyServerPassthrough`). Shape is node- and integration-specific. **Returns:** Node response object.
policy_server_initialize_verificationInitializes policy-server verification (`initializePSVerification`, `PolicyServerPassthrough`). **Returns:** Node response object.
compute_streamable_logsFetches streamable job logs (`getComputeStreamableLogs`) and returns **base64** of the collected bytes (same framing as compute result streaming). ## Identity modes for an agent An agent acting for a user proves identity in one of two…
upload_persistent_storage_fileUploads file bytes to a bucket (`persistentStorageUploadFile`). Requires auth. Body is sent as one LP chunk from **contentBase64**. ## Node capability check (required first) Before **createPersistentStorageBucket**…
fetch_node_configCalls `fetchConfig`. **Operator-only:** Misuse can break or leak node configuration. Payload must match ocean-node signing expectations for `fetchConfig` / `pushConfig`. **Returns:** Node-dependent (often encrypted or signed config blob).
push_node_configCalls `pushConfig`. **Operator-only:** Misuse can break or leak node configuration. Payload must match ocean-node signing expectations for `fetchConfig` / `pushConfig`.
is_valid_providerReturns whether the peer responds to STATUS with a provider address (`isValidProvider`). **No auth.**
resolve_peer_multiaddrLooks up a dialable multiaddr for a libp2p peer id (connections, peer store, then DHT). Uses the MCP server’s local P2P stack — **not** a remote ocean-node call.
list_discovered_peersReturns peers from the local peer store (`getDiscoveredNodes`). **No remote node target.** Requires P2P initialized on this MCP process.
cid_from_raw_stringSHA-256 raw CID for a UTF-8 string (`cidFromRawString`) — same hashing as **find_provider** content keys. **No network call.**
findServiceEnvironmentsLists a node's compute environments and reports which can actually host a **service** (`getComputeEnvironments` → `features.services !== false`, plus the practical filters that turn "advertised" into "startable"). **No auth.** Beyond the…
findServiceNodesFans `findServiceEnvironments` out across several peers and returns those with at least one service-capable environment. **No auth.** Use this to answer "which node can run my service?". #1408 adds **no DHT advertise string for…
getServiceTemplatesReturns the node's service template catalogue (`serviceGetTemplates`). **No auth.** **These are informational.** The catalogue is **curated by the node owner** — a suggested, explicitly **non-exhaustive** set of services known to run…
estimateServiceCostClient-side cost **estimate** for a service, plus a ready-made `payment` object you can hand straight to **escrow_preflight**. **No auth**, no chain writes. **There is no server-side quote for services** (no `initializeService`), so this…
serviceStartStarts a **paid, long-running container service** (`serviceStart`). Requires auth. **This returns before the service is up.** You get a `serviceId` and status `Starting (10)` immediately; escrow lock → image pull/build + vulnerability…
serviceStatusOwner-scoped status for one service or all of yours (`serviceGetStatus`). Requires auth. Omit `serviceId` for every service you own on this node. Decorates each job with a human `statusLabel` (including `45 Restarting`), `expiresAtIso`…
getServicesLists services on the node (`serviceList`). Requires auth. 🚩 **This is authenticated but NOT owner-scoped.** Any consumer identity sees **every owner's** services. **Do not present these as the user's own services** — use `serviceStatus`…
serviceExtendExtends a service's paid window (`serviceExtend`). Requires auth. Takes a **new escrow lock + claim** for the additional window. **Pricing matches the node exactly:** it bills `additionalDuration` **alone** (not the new total), priced off…
serviceRestartRestarts a service (`serviceRestart`). Requires auth. **Free** — no new escrow lock — but needs a **claimed** start payment (check `paymentClaimed` on `serviceStatus`; a service whose start payment was never claimed cannot be restarted…
serviceStopStops a service's container (`serviceStop`). Requires auth, owner-gated. ⚠️ **This does not save money and does not free capacity.** The cpu/ram/gpu and host ports stay **reserved until `expiresAt`**; only `Expired (75)` releases them…
serviceLogsCollects a service container's logs (`serviceGetStreamableLogs`). Requires auth, owner-scoped. Only available while the service is `Running (40)` or `Error (99)` — otherwise the node returns `404`. Returns **decoded text** when the…
get_balanceGets the native ETH balance of an EVM account.
get_transaction_countGets the transaction count (nonce) for an EVM account.
get_transactionGets an EVM transaction by hash (if available on the connected RPC).
get_transaction_receiptGets an EVM transaction receipt by hash (if mined).
broadcast_transactionBroadcasts a raw signed EVM transaction to the configured chain provider and returns the resulting transaction response.
get_erc20_token_infoReads `decimals`, `symbol`, and `name` from an ERC-20 token contract (read-only). Use this to denominate raw amounts (e.g. `payment.amount` from initializeCompute, `escrow_get_user_funds`) into human-readable units before showing them to…
escrow_get_fundsReads total escrowed funds for a payment token from an Escrow contract (read-only).
escrow_get_user_fundsReads escrowed funds for a payer and token from Escrow.getUserFunds (read-only).
escrow_get_user_tokensReads payment token addresses for which the payer has escrow records via Escrow.getUserTokens (read-only).
escrow_get_locksReads escrow locks for token + payer + payee via Escrow.getLocks (read-only).
The first 60 of 93, as the server listed them.
How to connect
Add the server to your MCP client config. Claude Desktop, Cursor and most other clients read this shape:
{
"mcpServers": {
"oncompute": {
"type": "http",
"url": "https://mcp.oncompute.ai/mcp"
}
}
}Add it
Claude Code, in a terminal
claude mcp add --transport http oncompute https://mcp.oncompute.ai/mcpclaude.ai, ChatGPT and other clients: add https://mcp.oncompute.ai/mcp as a custom connector in the settings.
Each line is something a program found when it went looking: the registry entry, the server's own answer, a spec that parses. A missing line means we did not find it, not that it does not exist.
Cookies
Before we count this visit
Analytics and ad measurement tell us which pages and which of our ads do their job: Google Analytics and Google Ads, the Meta pixel, Yandex Metrica, and one first-party id of our own. Nothing is stored until you answer, and declining changes nothing about the site.