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
| Endpoint | https://app.oxynet.net/oxynet-mcp |
|---|---|
| Transport | Streamable HTTP |
| Authentication | An X-API-Key header, or OAuth in clients that use it (Claude Desktop), where the login is the same API key |
| Key | Issued by Oxynet on request. The MCP server and REST share one key. |
Claude Code
#!/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
{
"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-KeyAn 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_capabilitiesWhat this key may do: analyses, models, metrics, limits, retention. Called first.
upload_cpetUpload contents the agent already holds, for example a file attached to the chat.
create_uploadOne-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_metricsEvery derived quantity, with its unit, requirements and reading traps.
compute_metricsDerived quantities and input checks: phases, gas_quality, substrate_summary, peaks, slope profile.
get_cpet_seriesDownsampled signals, for drawing a picture only.
delete_cpetRemove a recording now rather than at the 24 h expiry.
get_cpetThe signal view: detected format, channels and coverage, sampling, external load, parser flags.
get_sample_cpetUploads 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.