MCP and AI agents

A physiological tool layer for agents

Oxynet provides the physiological computation. The agent provides orchestration and explanation. Connected over the Model Context Protocol, an assistant calls models that were evaluated against expert labelling, and reports what came back.

API v1 · docs 1.0 · updated 2026-09-22

Why it exists

A general-purpose assistant given a CPET will tend to estimate a threshold from the numbers in its context, and the estimate will sound right. Connected to Oxynet, it routes the question to the engine instead. The thresholds, the substrate curve and the oscillation grade are computed by Oxynet; the agent decides what to ask, compares results across tests, and explains them.

The file goes from disk to Oxynet and only the structured result comes back. A 360 KB export inlined into a conversation is roughly ninety thousand tokens; through a handle it is a few hundred, which is what makes a folder of recordings tractable at all.

User / clinician

AI agent

routes, compares, explains

Oxynet MCP tools

CPET analysis

validated models

Structured results

Agent response / workflow

Who does what

Oxynet

  • Parses the vendor file and conditions the signals
  • Locates thresholds, measures substrate use, grades oscillation
  • Checks whether the recording can support each measurement
  • Refuses, with the reason, when it cannot
  • Stamps every result with model, version and analysis version

The agent

  • Decides which analyses answer the question
  • Handles the files the user names, and only those
  • Compares, ranks and tabulates structured results
  • Explains them, passing on notes and refusals
  • Never attaches a confidence to a result that has none

Connect

Endpointhttps://app.oxynet.net/oxynet-mcp
TransportStreamable HTTP
AuthenticationAn X-API-Key header, or OAuth in clients that use it (Claude Desktop), where the login is the same API key
KeyIssued by Oxynet on request. The MCP server and REST share one key.

Claude Code

mcp/claude-code.sh
#!/usr/bin/env bash
# Connect Claude Code to the Oxynet MCP server.
# Keep the key out of shell history: export it first, then run this.
claude mcp add --transport http oxynet https://app.oxynet.net/oxynet-mcp \
  --header "X-API-Key: ${OXYNET_API_KEY:?set OXYNET_API_KEY first}"

Claude Desktop

Settings Connectors Add custom connector
URL: https://app.oxynet.net/oxynet-mcp
Leave the other fields blank. A browser opens and asks for the API key once.

Desktop has no shell, so files are attached to the chat and uploaded with upload_cpet.

Gemini CLI

~/.gemini/settings.json
{
  "mcpServers": {
    "oxynet": {
      "httpUrl": "https://app.oxynet.net/oxynet-mcp",
      "headers": { "X-API-Key": "YOUR_KEY" }
    }
  }
}

ChatGPT (Custom GPT Action, over REST)

Explore GPTs Create Configure Create new action Import from URL:
  https://app.oxynet.net/v1/openapi.json
Authentication: API Key · Auth Type: Custom · Custom Header Name: X-API-Key

An agent that can make HTTP requests needs no connector at all: the plain-text guide at /llms-full.txt is written for it to read in one request.

Tools

get_capabilities

What this key may do: analyses, models, metrics, limits, retention. Called first.

upload_cpet

Upload contents the agent already holds, for example a file attached to the chat.

create_upload

One-shot upload URLs (up to 200 at once), valid 5 minutes, so a file on disk goes straight to Oxynet.

analyze_cpet

"vt", "eov", "substrate". One envelope each, with quality, notes and provenance.

list_metrics

Every derived quantity, with its unit, requirements and reading traps.

compute_metrics

Derived quantities and input checks: phases, gas_quality, substrate_summary, peaks, slope profile.

get_cpet_series

Downsampled signals, for drawing a picture only.

delete_cpet

Remove a recording now rather than at the 24 h expiry.

get_cpet

The signal view: detected format, channels and coverage, sampling, external load, parser flags.

get_sample_cpet

Uploads a synthetic recording server-side and returns a cpet_id. For demonstrations, never a patient file.

In the order the server declares them. "signal" is not an analysis name: it is get_cpet plus compute_metrics.

A typical run

get_capabilities()                          # analyses are licensed separately
create_upload()                             # -> upload_url, valid 5 minutes
$ curl -F "file=@test.xlsx" <upload_url>    # the shell moves the file -> cpet_id
get_cpet(cpet_id)                           # what is in it, what is absent and why
analyze_cpet(cpet_id, ["vt", "substrate"])  # one envelope each
compute_metrics(cpet_id, ["gas_quality", "ve_vco2_slope"])
delete_cpet(cpet_id)

Watch it end to end in the simulated agent demo.

Inputs, outputs and data

Inputs. The vendor export, unchanged, named by the user. Agents are instructed never to search a disk for CPET files on their own initiative, and to ask the user to remove names and dates of birth first.

Outputs. The same envelopes as REST (Outputs), trimmed of fields an agent does not need: curve points are omitted unless asked for.

Data. The same rules as REST: bytes parsed and discarded, the parsed record deleted after 24 hours or on delete_cpet, records partitioned per key. See Data handling.

Read this

No result carries a confidence score and an agent must not invent one. quality describes the recording. Oscillation analysis is research-stage, developed on a single heart-failure cohort with transportability untested; an agent reporting it should say so.