Stream coaching
POST /v1/chatSend the member’s message and current training context; receive sentence and proposal events.
Knownset for developers
Bring coaching, workout adaptation, and health context into the experience your members already use. Keep your programs, your interface, and control of every meaningful action.
Integration access is configured for each team. The examples below are synthetic; they do not call a live service.
01 / Integration overview
Use Coach to answer training questions and prepare changes. Use Health to bring source-backed observations and insights into those decisions. Your backend connects the services to your app’s identity, consent, and entitlement rules.
Coach and Health use separate versioned service contracts. Your integration setup provides the correct service origins and credentials. The TypeScript SDK is a private release candidate; the local MCP sample exposes four read-only Health tools.
02 / Coach API
Stream an answer, adapt a workout, and preserve the intent of the program. Coach returns a proposal your product can explain and validate. Creating a proposal does not update the member’s workout.
POST /v1/chatSend the member’s message and current training context; receive sentence and proposal events.
POST /v1/proposalsReturn typed operations, rationale, citations, validation findings, and an expiry time.
POST /v1/validateCheck session operations against the configured rules before applying a change.
POST /v1/proposals/{proposal_id}/resolutionReport applied or dismissed after your product handles the member’s decision.
This synthetic example adds a coaching cue without changing the prescription. The request body is sent by your server: user_id comes from verified identity, never from a browser-selected member.
POST /v1/proposals
{
"user_id": "server-resolved-demo-user",
"session": {
"program": "Synthetic strength session",
"week": 1,
"day": 1,
"exercises": [
{
"name": "Back Squat",
"sets": "3",
"rep_range": "5",
"reps_unit": "reps",
"rpe_target": 7
}
]
},
"intent": "Add a note to brace before every rep. Keep the prescription.",
"source": "edit_surface"
}{
"proposal_id": "synthetic-proposal-01",
"ops": [
{
"op": "add_note",
"block_ref": "ex-0",
"text": "Brace before every rep."
}
],
"rationale": "Keep the planned work and add the requested cue.",
"rule_citations": [],
"validation_report": {
"verdict": "pass",
"findings": []
},
"expires_at": "2026-08-08T12:00:00Z",
"manifest": null
}Coach v1 contract example. The null manifest is illustrative; an actual service response carries its execution metadata. A successful validation is not confirmation to apply.
Send current sessions and benchmarks through POST /v1/context/{kind}, and approved observations through POST /v1/context/observations. Conversation history and member memory remain scoped to the authenticated member. Context assembly and confirmed training-record writes stay in your product.
03 / Health API
Read current insight cards with freshness, completeness, citations, and known limits. Connect recovery, sleep, and training demand without treating an observation as an automatic workout change.
GET /v1/health/insightsBoth date and surface are required. Use today or trends for the surface.
GET /v1/health/insights/{insight_id}Use an ID returned by the list. Keep the supporting citations and limitations visible when your app presents the result.
GET /v1/health/insights?date=2026-08-07&surface=todayThe synthetic training series shows a recent increase in session demand.
Source: Synthetic training sessions
Limit: Synthetic example. Session demand does not measure injury risk.
{
"schema_version": "health-v1",
"data": [
{
"id": "10000000-0000-4000-8000-000000000003",
"analysis_run_id": "synthetic-analysis-01",
"analysis_kind": "training_load",
"card_key": "synthetic-training-load",
"surface": "today",
"rank": 0,
"title": "Training load rose above the recent range.",
"summary": "The synthetic training series shows a recent increase in session demand.",
"direction": "up",
"severity": "attention",
"score": null,
"band": "above_baseline",
"confidence": 0.8,
"data_completeness": 0.9,
"freshness_through": "2026-08-07",
"limitations": [
"Synthetic example. Session demand does not measure injury risk."
],
"action_label": null,
"action_path": null,
"presentation": {},
"expires_at": null,
"created_at": "2026-08-07T12:00:00Z",
"citations": [
{
"order": 0,
"label": "Synthetic training sessions",
"detail": "Seven-day versus 28-day load comparison",
"observed_at": "2026-08-07",
"observed_on": "2026-08-07",
"value": null,
"unit": null
}
]
}
]
}The request goes from your backend to the configured Health service using its server credentials. This complete synthetic response follows the pinned Health v1 schema.
04 / SDK and samples
The browser and mobile client calls your authenticated backend. The server package maps named operations to Coach routes and keeps Knownset credentials on the server. Package access and service access are provided separately during integration setup.
@knownset/coach-clientBrowser/mobile client for coaching streams and named operations.
@knownset/coach-bffServer-only adapter for your session, identity, and allowed operations.
SDK packages are not a public install-and-connect service. Request the integration guide for approved versions and environment setup.
Use the four read-only tools to inspect capabilities, a health summary, insight cards, and their evidence. You need approved repository access, Node 22, Corepack, and Docker. This sample does not run coaching or apply workout changes.
--yes consent for the fixed demo member.corepack pnpm install
corepack pnpm local:up
corepack pnpm --filter @knownset/mcp example:activate-local-demo -- --yes
corepack pnpm --filter @knownset/mcp example:localMCP 2026-07-28. Capabilities uses knownset:capabilities:read; the three Health reads use knownset:health:read. Examples below show structured results from the local stdio fixture.
knownset_get_capabilities{
"name": "knownset_get_capabilities",
"arguments": {}
}{
"schemaVersion": "knownset-mcp-capabilities-v1",
"mode": "local-synthetic",
"watermark": "SYNTHETIC DEMO DATA",
"surfaces": {
"healthInsights": true,
"coach": false,
"actionProposals": false,
"dataExports": false
},
"boundary": "Read-only synthetic data over local stdio. Remote HTTP and OAuth are not active."
}knownset_get_health_summary{
"name": "knownset_get_health_summary",
"arguments": {
"date": "2026-08-07"
}
}{
"schemaVersion": "knownset-mcp-health-summary-v1",
"requestedDate": "2026-08-07",
"effectiveDate": "2026-08-07",
"watermark": "SYNTHETIC DEMO DATA",
"recordCount": 58,
"insightCount": 6,
"summary": "The synthetic fixture shows a recent training-load rise, later sleep timing, and recovery signals below their established range. Fueling context remains incomplete.",
"limitations": [
"This fixture is not medical advice and does not represent a real person.",
"No live provider, genetics, lab, model, or database connection is active."
]
}knownset_list_health_insights{
"name": "knownset_list_health_insights",
"arguments": {
"date": "2026-08-07",
"surface": "today",
"limit": 1,
"cursor": "ks1:2",
"response_format": "json"
}
}{
"schemaVersion": "knownset-mcp-health-insights-v1",
"requestedDate": "2026-08-07",
"effectiveDate": "2026-08-07",
"surface": "today",
"watermark": "SYNTHETIC DEMO DATA",
"insights": [
{
"id": "10000000-0000-4000-8000-000000000003",
"kind": "training_load",
"title": "Training load rose faster than the established baseline.",
"summary": "Recent synthetic session demand increased while the longer comparison window remained stable.",
"confidence": "high",
"limitations": [
"Session demand is not a measure of injury risk."
],
"citations": [
{
"source": "Synthetic training sessions",
"window": "Jul 25–Aug 7",
"method": "Seven-day versus 28-day load comparison"
}
]
}
],
"nextCursor": "ks1:3"
}knownset_get_insight_evidence{
"name": "knownset_get_insight_evidence",
"arguments": {
"insight_id": "10000000-0000-4000-8000-000000000003",
"response_format": "json"
}
}{
"schemaVersion": "knownset-mcp-insight-evidence-v1",
"watermark": "SYNTHETIC DEMO DATA",
"insightId": "10000000-0000-4000-8000-000000000003",
"title": "Training load rose faster than the established baseline.",
"limitations": [
"Session demand is not a measure of injury risk."
],
"citations": [
{
"source": "Synthetic training sessions",
"window": "Jul 25–Aug 7",
"method": "Seven-day versus 28-day load comparison"
}
]
}05 / Security and reliability
Your backend verifies the existing app session and resolves the member and organization. Browser and mobile clients never select a Knownset tenant or service user.
Your backend supplies the tenant credential and scoped user token. Model credentials, signing secrets, and provider credentials stay out of the client.
Your integration checks consent and entitlements before sending the health observations, training records, and current session needed for the request.
A proposal contains operations and validation findings. Your app requests confirmation, applies the approved change, and reports its outcome.
Coach uses server-sent events: sentence, proposal, and proposal_degraded carry progress. Only done means success; error means failure. A disconnect before a terminal event is interrupted, not complete.
Keep cancellation and timeout visible. Reconcile a lost response before retrying a write; a repeated proposal resolution may return a conflict. An expired or dismissed proposal must never become an applied change.
06 / Get started
Choose a plan, then work through service access, identity mapping, and the first member workflow. Checkout does not place service credentials in your app; integration setup establishes the server connection.
For beta access or an integration guide, use the application path on the pricing page. The SDK and local sample require approved access.