The adaptive health-messaging engine for apps and agents. Federally-sourced. Not medical advice.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Optional. Keyless by default — lookup_health_fact needs no token. Add 'Bearer up_sandbox_...' to unlock the keyed patient-stream + cue tools; get a free key from https://uphealth.us/signup to start.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Create a Signal cued stream for one patient and get the first cue back synchronously. Every cue is federally-sourced, audience-safety-checked, and sequenced on the patient's prior response — so your agent never fabricates health content. Choose a template_id from the signal://catalog resource and pre-satisfy its required audience_tags + patient_context (clinical templates 422 without them). Display mode renders in your app: no PHI, no BAA. Each later cue MUST submit the prior message's feedback — the engine refuses to advance without it (the sequencing moat).
One of the live Signal templates. Read the signal://catalog resource for each template's required audience_tags + patient_context. On a production key a clinical template 422s if its required tags/context are missing — pre-satisfy them from the catalog. A free sandbox (Discovery) key always cues the curated sandbox corpus.
De-identified patient context. v1 accepts free-form jsonb; future templates will enforce schemas.
Subset of the 14-tag B5/B6 schema. See list_sandbox_topics for sample topic labels.
v1 is Display-only; Deliver-mode unlocks at Per-Episode tier after BAA.
Optional. Stripe-style create idempotency: a retried create with the same key returns the ORIGINAL stream instead of minting (and billing) a second one. Forwarded as the Idempotency-Key request header. UUID v4 recommended.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Create a Signal cued stream for one patient and get the first cue back synchronously. Every cue is federally-sourced, audience-safety-checked, and sequenced on the patient's prior response — so your agent never fabricates health content. Choose a template_id from the signal://catalog resource and pre-satisfy its required audience_tags + patient_context (clinical templates 422 without them). Display mode renders in your app: no PHI, no BAA. Each later cue MUST submit the prior message's feedback — the engine refuses to advance without it (the sequencing moat).
| Argument | Type | Description |
|---|---|---|
| attributes | object | De-identified patient context. v1 accepts free-form jsonb; future templates will enforce schemas. |
| template_id* | string | One of the live Signal templates. Read the signal://catalog resource for each template's required audience_tags + patient_context. On a production key a clinical template 422s if its required tags/context are missing — pre-satisfy them from the catalog. A free sandbox (Discovery) key always cues the curated sandbox corpus. |
| audience_tags | array | Subset of the 14-tag B5/B6 schema. See list_sandbox_topics for sample topic labels. |
| delivery_mode | string | v1 is Display-only; Deliver-mode unlocks at Per-Episode tier after BAA. |
| idempotency_key | string | Optional. Stripe-style create idempotency: a retried create with the same key returns the ORIGINAL stream instead of minting (and billing) a second one. Forwarded as the Idempotency-Key request header. UUID v4 recommended. |
| feedback_timeout_days | integer |
{
"type": "object",
"required": [
"template_id"
],
"properties": {
"attributes": {
"type": "object",
"description": "De-identified patient context. v1 accepts free-form jsonb; future templates will enforce schemas."
},
"template_id": {
"enum": [
"diabetes_pharma_initiation_30day",
"general_wellness_daily",
"heart_pharma_initiation_30day",
"hypertension_lifestyle_90day",
"quit_smoking_90day",
"relapse_prevention_90day",
"weight_glp1_initiation_30day"
],
"type": "string",
"description": "One of the live Signal templates. Read the signal://catalog resource for each template's required audience_tags + patient_context. On a production key a clinical template 422s if its required tags/context are missing — pre-satisfy them from the catalog. A free sandbox (Discovery) key always cues the curated sandbox corpus."
},
"audience_tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Subset of the 14-tag B5/B6 schema. See list_sandbox_topics for sample topic labels."
},
"delivery_mode": {
"enum": [
"display"
],
"type": "string",
"default": "display",
"description": "v1 is Display-only; Deliver-mode unlocks at Per-Episode tier after BAA."
},
"idempotency_key": {
"type": "string",
"format": "uuid",
"description": "Optional. Stripe-style create idempotency: a retried create with the same key returns the ORIGINAL stream instead of minting (and billing) a second one. Forwarded as the Idempotency-Key request header. UUID v4 recommended."
},
"feedback_timeout_days": {
"type": "integer",
"default": 14
}
},
"additionalProperties": true
}Submit the patient's response to the prior cue and get the next one — federally-sourced, audience-safety-checked, and re-sequenced on that feedback. REFUSES WITHOUT PRIOR-MESSAGE FEEDBACK (the moat): the engine will not advance a stream blind, returning 409 if you skip it. response_action is one of the accepted cue vocabulary (see the signal://catalog resource). Same idempotency_key + same feedback returns the cached cue; conflicting feedback under the same key returns 409.
| Argument | Type | Description |
|---|---|---|
| feedback* | object | |
| stream_id* | integer | The stream_id returned by create_patient_stream. |
{
"type": "object",
"required": [
"stream_id",
"feedback"
],
"properties": {
"feedback": {
"type": "object",
"required": [
"response_action",
"idempotency_key"
],
"properties": {
"free_text": {
"type": "string"
},
"idempotency_key": {
"type": "string",
"format": "uuid",
"description": "UUID v4 recommended. Same key + same feedback returns the cached cue; conflicting feedback under the same key returns 409."
},
"response_action": {
"enum": [
"did_it",
"already_do",
"will_try",
"check_it",
"new_to_me",
"needed_this",
"know_it",
"acknowledge",
"no_response"
],
"type": "string"
}
}
},
"stream_id": {
"type": "integer",
"description": "The stream_id returned by create_patient_stream."
}
},
"additionalProperties": false
}List the curated sandbox topic labels that define the free Discovery corpus — every topic federally-sourced and audience-safety-checked. Use it to preview what content domains exist before creating a stream. Does NOT enumerate messages — the corpus stays internal. For the full live template catalog + gating contract, read the signal://catalog resource.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Zero setup — NO key required. Returns ONE already-public federal health fact, list, or tip for a question or topic (e.g. "high blood pressure", "sleep", "type 2 diabetes"), with its federal source (CDC / MedlinePlus / NIH) and a link to the public uphealth.me page. Free + rate-limited. For adaptive, patient-specific message sequencing — receptivity-scored cues + audience-safety verdicts over the full library of federally-sourced facts, lists & tips — get a free Discovery key at https://uphealth.us/signup
| Argument | Type | Description |
|---|---|---|
| q* | string | A health question or topic, e.g. "high blood pressure", "sleep", or "type 2 diabetes". |
{
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"description": "A health question or topic, e.g. \"high blood pressure\", \"sleep\", or \"type 2 diabetes\"."
}
},
"additionalProperties": false
}Read a stream's current state, its current cued message, and event count. Read-only — does NOT advance the stream or consume a cue. Use it between feedback turns to inspect where a patient is in their federally-sourced, audience-safety-checked sequence.
| Argument | Type | Description |
|---|---|---|
| stream_id* | integer | The stream_id returned by create_patient_stream. |
{
"type": "object",
"required": [
"stream_id"
],
"properties": {
"stream_id": {
"type": "integer",
"description": "The stream_id returned by create_patient_stream."
}
},
"additionalProperties": false
}