Documentation

MCP integration

BioOps speaks Streamable HTTP MCP with full OAuth 2.1 + PKCE. Any compliant client can connect — including Claude Desktop, Cursor, and the official MCP Inspector.

1. Endpoint

https://bioops.app/api/public/mcp

2. OAuth discovery

RFC 8414 metadata document:

GET /.well-known/oauth-authorization-server

The MCP endpoint also returns WWW-Authenticate: Bearer with a pointer to discovery when called without a token, so most clients negotiate automatically.

3. Tools exposed

  • list_data_sources

    Connected sources and current sync status.

  • get_recent_metrics

    Time-series samples for a given metric (HR, HRV, sleep, steps, VO₂max).

  • list_blood_panels

    All uploaded blood test panels.

  • get_panel_biomarkers

    All biomarkers within a specific panel.

  • get_biomarker_trend

    Longitudinal history for a single biomarker.

4. Claude Desktop config

{
  "mcpServers": {
    "bioops": {
      "url": "https://bioops.app/api/public/mcp"
    }
  }
}

On first use, Claude pops the BioOps consent screen in your browser. After you approve, the MCP server gets a scoped, revocable bearer token tied to your account.

5. Mobile ingestion (for the React Native app)

The companion app authenticates with the same Supabase session and posts batches to:

POST /api/public/ingest/health-metrics
Authorization: Bearer <supabase-access-token>
Content-Type: application/json

{
  "source_kind": "apple_health",
  "device_name": "iPhone 16 Pro",
  "metrics": [
    { "source_kind":"apple_health", "metric_type":"heart_rate", "value":62, "unit":"bpm", "sampled_at":"2026-06-14T07:00:00Z" }
  ]
}

Blood test PDFs (after parsing client-side or server-side):

POST /api/public/ingest/blood-test
Authorization: Bearer <supabase-access-token>

{
  "provider": "LabCorp",
  "collected_at": "2026-06-01T00:00:00Z",
  "biomarkers": [
    { "name":"ApoB", "value":78, "unit":"mg/dL", "ref_low":40, "ref_high":90, "status":"optimal" }
  ]
}