{
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-04",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "tool": {
    "category": "",
    "endpoint": "https://mcp.uphealth.us/mcp",
    "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/uphealth-mcp.json",
    "kind": "mcp",
    "listed": "indexed",
    "liveUrl": "https://www.anchorterminal.com/api/v1/live/uphealth-mcp.json",
    "markdownUrl": "https://www.anchorterminal.com/tools/uphealth-mcp.md",
    "mcpTools": {
      "check": {
        "checker": "anchor-check/1.0",
        "totalTokens": 3588,
        "counts": {
          "error": 0,
          "note": 0,
          "warn": 3
        },
        "findings": [
          {
            "rule": "TC11",
            "severity": "warn",
            "tool": "create_patient_stream",
            "message": "1 parameter without a description: feedback_timeout_days",
            "fix": "Describe each one: format, units, an example, and what happens when it's left out."
          },
          {
            "rule": "TC11",
            "severity": "warn",
            "tool": "get_next_cued_message",
            "message": "none of its 2 parameters has a description",
            "fix": "Describe each one: format, units, an example, and what happens when it's left out."
          },
          {
            "rule": "TC13",
            "severity": "warn",
            "tool": "create_patient_stream",
            "message": "attributes (object with no properties)",
            "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
          }
        ]
      },
      "checkedAt": "2026-10-04T22:26:02Z",
      "count": 5,
      "schemaTokens": 3588,
      "status": "ok",
      "tools": [
        {
          "name": "lookup_health_fact",
          "description": "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 \u0026 tips — get a free Discovery key at https://uphealth.us/signup",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "q": {
                "description": "A health question or topic, e.g. \"high blood pressure\", \"sleep\", or \"type 2 diabetes\".",
                "type": "string"
              }
            },
            "required": [
              "q"
            ],
            "type": "object"
          },
          "outputSchema": {
            "properties": {
              "attribution": {
                "description": "\"Source: \u003cagency\u003e via Uphealth\".",
                "type": "string"
              },
              "disclaimer": {
                "type": "string"
              },
              "fact": {
                "additionalProperties": true,
                "description": "The single already-public federal message — a fact, list, or tip (see kind).",
                "properties": {
                  "agency": {
                    "description": "Federal source agency label, e.g. CDC / MedlinePlus / NIDDK.",
                    "type": "string"
                  },
                  "body": {
                    "type": "string"
                  },
                  "kind": {
                    "description": "fact | list | tip",
                    "type": "string"
                  },
                  "source_url": {
                    "description": "The federal public-domain source.",
                    "type": "string"
                  },
                  "uphealth_url": {
                    "description": "The public uphealth.me topic page.",
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "topic": {
                "description": "The matched topic's title.",
                "type": "string"
              },
              "upgrade": {
                "additionalProperties": true,
                "description": "The free-key upsell — adaptive sequencing lives behind a Discovery key.",
                "type": "object"
              }
            },
            "required": [
              "fact",
              "disclaimer",
              "attribution",
              "upgrade"
            ],
            "type": "object"
          },
          "annotations": {
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "Look up a public health fact, list, or tip (no key)"
          }
        },
        {
          "name": "create_patient_stream",
          "description": "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).",
          "inputSchema": {
            "additionalProperties": true,
            "properties": {
              "attributes": {
                "description": "De-identified patient context. v1 accepts free-form jsonb; future templates will enforce schemas.",
                "type": "object"
              },
              "audience_tags": {
                "description": "Subset of the 14-tag B5/B6 schema. See list_sandbox_topics for sample topic labels.",
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "delivery_mode": {
                "default": "display",
                "description": "v1 is Display-only; Deliver-mode unlocks at Per-Episode tier after BAA.",
                "enum": [
                  "display"
                ],
                "type": "string"
              },
              "feedback_timeout_days": {
                "default": 14,
                "type": "integer"
              },
              "idempotency_key": {
                "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.",
                "format": "uuid",
                "type": "string"
              },
              "template_id": {
                "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.",
                "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"
              }
            },
            "required": [
              "template_id"
            ],
            "type": "object"
          },
          "outputSchema": {
            "properties": {
              "_meta": {
                "additionalProperties": true,
                "description": "Legal/disclosure block returned on every 2xx (A1 §6.7).",
                "properties": {
                  "api_version": {
                    "type": "string"
                  },
                  "delivery_mode": {
                    "type": "string"
                  },
                  "license_attribution": {
                    "type": "string"
                  },
                  "no_medical_advice": {
                    "type": "boolean"
                  },
                  "not_samd": {
                    "type": "boolean"
                  },
                  "sequencing_ip_notice": {
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "first_cue": {
                "additionalProperties": true,
                "description": "A cued message plus its per-cue receptivity score and audience-safety verdict.",
                "properties": {
                  "arc": {
                    "additionalProperties": true,
                    "description": "Where this cue sits in the template's curated arc, or null when the cue is not on a spine. source is 'spine' or 'corpus_continuation'; a corpus-continuation cue (past the arc's end) carries source only, with day/phase/seq/total null.",
                    "properties": {
                      "day": {
                        "description": "The curated arc day of this message.",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "phase": {
                        "description": "The curated arc phase, e.g. starting_dose / titrating / re_entry.",
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "seq": {
                        "description": "1-based position of this message in the spine.",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "source": {
                        "description": "spine | corpus_continuation",
                        "type": "string"
                      },
                      "total": {
                        "description": "Total messages in the spine.",
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "type": [
                      "object",
                      "null"
                    ]
                  },
                  "body": {
                    "type": "string"
                  },
                  "cue_event_id": {
                    "type": "integer"
                  },
                  "cued_at": {
                    "description": "ISO 8601 timestamp.",
                    "type": "string"
                  },
                  "day_of_stream": {
                    "description": "Advisory 1-based wall-clock day the patient is on in this stream (anchored to enrollment). Null on legacy cues issued before day-of-stream tracking.",
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "kind": {
                    "description": "fact | list | tip",
                    "type": "string"
                  },
                  "message_class": {
                    "type": "string"
                  },
                  "message_id": {
                    "type": "integer"
                  },
                  "receptivity": {
                    "description": "Advisory receptivity in [0.0, 1.0]; 0.5 = neutral/new patient.",
                    "type": "number"
                  },
                  "safety": {
                    "additionalProperties": true,
                    "description": "PHI-free audience-safety verdict.",
                    "type": "object"
                  },
                  "source_quote": {
                    "type": "string"
                  },
                  "source_url": {
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "next_cue_eligible_at": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "rate_limit": {
                "additionalProperties": true,
                "description": "Discovery monthly cue-cap headroom. Absent on non-Discovery tiers (no cap).",
                "properties": {
                  "limit": {
                    "description": "Discovery monthly cue cap.",
                    "type": "integer"
                  },
                  "remaining": {
                    "description": "Cues remaining in the current calendar month (UTC).",
                    "type": "integer"
                  },
                  "reset": {
                    "description": "Seconds until the cap window resets (start of next calendar month, UTC; same basis as the 429 Retry-After).",
                    "type": "integer"
                  }
                },
                "type": "object"
              },
              "state": {
                "type": "string"
              },
              "stream_id": {
                "description": "Persist this — every later cue/read references it.",
                "type": "integer"
              }
            },
            "required": [
              "stream_id",
              "state",
              "first_cue",
              "_meta"
            ],
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": true,
            "readOnlyHint": false,
            "title": "Create patient stream"
          }
        },
        {
          "name": "get_next_cued_message",
          "description": "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.",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "feedback": {
                "properties": {
                  "free_text": {
                    "type": "string"
                  },
                  "idempotency_key": {
                    "description": "UUID v4 recommended. Same key + same feedback returns the cached cue; conflicting feedback under the same key returns 409.",
                    "format": "uuid",
                    "type": "string"
                  },
                  "response_action": {
                    "enum": [
                      "did_it",
                      "already_do",
                      "will_try",
                      "check_it",
                      "new_to_me",
                      "needed_this",
                      "know_it",
                      "acknowledge",
                      "no_response"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "response_action",
                  "idempotency_key"
                ],
                "type": "object"
              },
              "stream_id": {
                "description": "The stream_id returned by create_patient_stream.",
                "type": "integer"
              }
            },
            "required": [
              "stream_id",
              "feedback"
            ],
            "type": "object"
          },
          "outputSchema": {
            "properties": {
              "_meta": {
                "additionalProperties": true,
                "description": "Legal/disclosure block returned on every 2xx (A1 §6.7).",
                "properties": {
                  "api_version": {
                    "type": "string"
                  },
                  "delivery_mode": {
                    "type": "string"
                  },
                  "license_attribution": {
                    "type": "string"
                  },
                  "no_medical_advice": {
                    "type": "boolean"
                  },
                  "not_samd": {
                    "type": "boolean"
                  },
                  "sequencing_ip_notice": {
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "idempotent": {
                "description": "true when this is the cached result of a repeated idempotency_key.",
                "type": "boolean"
              },
              "message": {
                "type": "string"
              },
              "next_cue": {
                "additionalProperties": true,
                "description": "A cued message plus its per-cue receptivity score and audience-safety verdict.",
                "properties": {
                  "arc": {
                    "additionalProperties": true,
                    "description": "Where this cue sits in the template's curated arc, or null when the cue is not on a spine. source is 'spine' or 'corpus_continuation'; a corpus-continuation cue (past the arc's end) carries source only, with day/phase/seq/total null.",
                    "properties": {
                      "day": {
                        "description": "The curated arc day of this message.",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "phase": {
                        "description": "The curated arc phase, e.g. starting_dose / titrating / re_entry.",
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "seq": {
                        "description": "1-based position of this message in the spine.",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "source": {
                        "description": "spine | corpus_continuation",
                        "type": "string"
                      },
                      "total": {
                        "description": "Total messages in the spine.",
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "type": [
                      "object",
                      "null"
                    ]
                  },
                  "body": {
                    "type": "string"
                  },
                  "cue_event_id": {
                    "type": "integer"
                  },
                  "cued_at": {
                    "description": "ISO 8601 timestamp.",
                    "type": "string"
                  },
                  "day_of_stream": {
                    "description": "Advisory 1-based wall-clock day the patient is on in this stream (anchored to enrollment). Null on legacy cues issued before day-of-stream tracking.",
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "kind": {
                    "description": "fact | list | tip",
                    "type": "string"
                  },
                  "message_class": {
                    "type": "string"
                  },
                  "message_id": {
                    "type": "integer"
                  },
                  "receptivity": {
                    "description": "Advisory receptivity in [0.0, 1.0]; 0.5 = neutral/new patient.",
                    "type": "number"
                  },
                  "safety": {
                    "additionalProperties": true,
                    "description": "PHI-free audience-safety verdict.",
                    "type": "object"
                  },
                  "source_quote": {
                    "type": "string"
                  },
                  "source_url": {
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "normalized_action": {
                "description": "null when the submitted response_action was a recognized value; otherwise the acknowledge-class value the well-formed-but-unrecognized action was folded to (forward-compat tolerance). Always present on a cue result; absent on the exhausted-stream result.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "rate_limit": {
                "additionalProperties": true,
                "description": "Discovery monthly cue-cap headroom. Absent on non-Discovery tiers (no cap).",
                "properties": {
                  "limit": {
                    "description": "Discovery monthly cue cap.",
                    "type": "integer"
                  },
                  "remaining": {
                    "description": "Cues remaining in the current calendar month (UTC).",
                    "type": "integer"
                  },
                  "reset": {
                    "description": "Seconds until the cap window resets (start of next calendar month, UTC; same basis as the 429 Retry-After).",
                    "type": "integer"
                  }
                },
                "type": "object"
              },
              "sandbox_exhausted": {
                "description": "Present + true when the sandbox subset is exhausted; no next_cue then.",
                "type": "boolean"
              },
              "state": {
                "type": "string"
              },
              "stream_id": {
                "type": "integer"
              }
            },
            "required": [
              "stream_id",
              "state",
              "_meta"
            ],
            "type": "object"
          },
          "annotations": {
            "idempotentHint": true,
            "openWorldHint": true,
            "readOnlyHint": false,
            "title": "Submit feedback, get next cued message"
          }
        },
        {
          "name": "read_stream_state",
          "description": "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.",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "stream_id": {
                "description": "The stream_id returned by create_patient_stream.",
                "type": "integer"
              }
            },
            "required": [
              "stream_id"
            ],
            "type": "object"
          },
          "outputSchema": {
            "properties": {
              "_meta": {
                "additionalProperties": true,
                "description": "Legal/disclosure block returned on every 2xx (A1 §6.7).",
                "properties": {
                  "api_version": {
                    "type": "string"
                  },
                  "delivery_mode": {
                    "type": "string"
                  },
                  "license_attribution": {
                    "type": "string"
                  },
                  "no_medical_advice": {
                    "type": "boolean"
                  },
                  "not_samd": {
                    "type": "boolean"
                  },
                  "sequencing_ip_notice": {
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "current_cue": {
                "additionalProperties": true,
                "type": [
                  "object",
                  "null"
                ]
              },
              "events_count": {
                "type": "integer"
              },
              "next_cue_eligible": {
                "type": "boolean"
              },
              "rate_limit": {
                "additionalProperties": true,
                "description": "Discovery monthly cue-cap headroom. Absent on non-Discovery tiers (no cap).",
                "properties": {
                  "limit": {
                    "description": "Discovery monthly cue cap.",
                    "type": "integer"
                  },
                  "remaining": {
                    "description": "Cues remaining in the current calendar month (UTC).",
                    "type": "integer"
                  },
                  "reset": {
                    "description": "Seconds until the cap window resets (start of next calendar month, UTC; same basis as the 429 Retry-After).",
                    "type": "integer"
                  }
                },
                "type": "object"
              },
              "state": {
                "type": "string"
              },
              "stream_id": {
                "type": "integer"
              },
              "template_id": {
                "type": "string"
              }
            },
            "required": [
              "stream_id",
              "state",
              "_meta"
            ],
            "type": "object"
          },
          "annotations": {
            "openWorldHint": true,
            "readOnlyHint": true,
            "title": "Read stream state"
          }
        },
        {
          "name": "list_sandbox_topics",
          "description": "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.",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {},
            "type": "object"
          },
          "outputSchema": {
            "properties": {
              "_meta": {
                "additionalProperties": true,
                "description": "Legal/disclosure block returned on every 2xx (A1 §6.7).",
                "properties": {
                  "api_version": {
                    "type": "string"
                  },
                  "delivery_mode": {
                    "type": "string"
                  },
                  "license_attribution": {
                    "type": "string"
                  },
                  "no_medical_advice": {
                    "type": "boolean"
                  },
                  "not_samd": {
                    "type": "boolean"
                  },
                  "sequencing_ip_notice": {
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "template_id_for_sandbox": {
                "type": "string"
              },
              "topic_labels": {
                "items": {
                  "type": "string"
                },
                "type": "array"
              }
            },
            "required": [
              "topic_labels",
              "_meta"
            ],
            "type": "object"
          },
          "annotations": {
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "List sandbox topics"
          }
        }
      ]
    },
    "name": "Uphealth Signal",
    "note": "Indexed from the official MCP registry: facts and our own checks, not reviewed, so no score, grade or rank.",
    "packages": [
      {
        "registryType": "npm",
        "identifier": "@uphealth/mcp-server",
        "version": "1.1.7",
        "transport": "stdio"
      }
    ],
    "pageJsonUrl": "https://www.anchorterminal.com/tools/uphealth-mcp.json",
    "popularity": {
      "npmWeekly": 36
    },
    "registryName": "us.uphealth/mcp",
    "remotes": [
      {
        "type": "streamable-http",
        "url": "https://mcp.uphealth.us/mcp"
      }
    ],
    "repository": "https://github.com/ericinsf/uphealth",
    "reviewed": false,
    "slug": "uphealth-mcp",
    "source": "the official MCP registry",
    "sourceUrl": "https://registry.modelcontextprotocol.io/v0.1/servers?search=us.uphealth/mcp",
    "summary": "The adaptive health-messaging engine for apps and agents. Federally-sourced. Not medical advice.",
    "updatedAt": "2026-09-03T14:57:04Z",
    "url": "https://www.anchorterminal.com/tools/uphealth-mcp",
    "vendor": "uphealth.us",
    "vendorUrl": "https://uphealth.us/docs/mcp-quickstart",
    "version": "1.1.7",
    "websiteUrl": "https://uphealth.us/docs/mcp-quickstart",
    "where": "both",
    "why": [
      "vendor"
    ]
  }
}
