{"transport":"streamable-http","status":"tool_dispatch_ready","message":"Meridian Crystalline exposes a remote MCP JSON-RPC surface with development PKCE OAuth protecting tools/list and tools/call.","bootstrap":{"server_name":"meridian-mcp","codename":"Meridian Crystalline","transport_status":"tool_dispatch","tool_count":24,"oauth_status":"development_pkce","primary_surface":"remote"},"authorization_server":{"issuer":"https://meridian.coach","authorization_endpoint":"https://meridian.coach/api/oauth/authorize","token_endpoint":"https://meridian.coach/api/oauth/token","registration_endpoint":"https://meridian.coach/api/oauth/register","response_types_supported":["code"],"grant_types_supported":["authorization_code"],"code_challenge_methods_supported":["S256","plain"],"token_endpoint_auth_methods_supported":["none"],"scopes_supported":["mcp:read","mcp:write"],"service_documentation":"https://meridian.coach","response_modes_supported":["query"]},"protected_resource":{"resource":"https://meridian.coach/api/mcp","authorization_servers":["https://meridian.coach"],"scopes_supported":["mcp:read","mcp:write"],"bearer_methods_supported":["header"],"resource_documentation":"https://meridian.coach"},"tools":[{"name":"coach_session","description":"Return the next persona-shaped coaching reply plus a lightweight session object for the next turn.","inputSchema":{"type":"object","properties":{"dbPath":{"type":"string"},"athleteId":{"type":"string"},"userId":{"type":"string"},"personaId":{"type":"string"},"message":{"type":"string"},"session":{"type":"object","properties":{"id":{"type":"string"},"personaId":{"type":["string","null"]},"athleteId":{"type":["string","null"]},"turnCount":{"type":"number","minimum":0},"topic":{"type":"string"},"summary":{"type":"string"},"updatedAt":{"type":"string"},"recentMessages":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["athlete","coach"]},"content":{"type":"string"},"timestamp":{"type":["string","null"]}},"required":["role","content"],"additionalProperties":false}}},"additionalProperties":false}},"additionalProperties":false}},{"name":"coach_reply","description":"Generate the next Eric-style coaching reply from the current coach context.","inputSchema":{"type":"object","properties":{"dbPath":{"type":"string"},"athleteId":{"type":"string"},"userId":{"type":"string"},"personaId":{"type":"string"},"message":{"type":"string"}},"additionalProperties":false}},{"name":"coach_context","description":"Return the persona-aware coaching starting context, anchored by the latest sync brief and current state.","inputSchema":{"type":"object","properties":{"dbPath":{"type":"string"},"athleteId":{"type":"string"},"userId":{"type":"string"},"personaId":{"type":"string"}},"additionalProperties":false}},{"name":"athlete_world","description":"Return the current athlete state, recent evidence, open actions, and sync summary.","inputSchema":{"type":"object","properties":{"dbPath":{"type":"string"},"athleteId":{"type":"string"},"userId":{"type":"string"},"evidenceLimit":{"type":"number","minimum":1,"maximum":50},"scanRunLimit":{"type":"number","minimum":1,"maximum":25},"stravaDataDir":{"type":"string"},"whoopDataDir":{"type":"string"},"weightFilePath":{"type":"string"}},"additionalProperties":false}},{"name":"get_evidence","description":"Fetch evidence rows by kind, time window, race, or source.","inputSchema":{"type":"object","properties":{"dbPath":{"type":"string"},"athleteId":{"type":"string"},"userId":{"type":"string"},"limit":{"type":"number","minimum":1,"maximum":100},"kind":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"source":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"after":{"type":"string"},"before":{"type":"string"},"query":{"type":"string"},"sourceRef":{"type":"string"},"evidenceId":{"type":"string"}},"additionalProperties":false}},{"name":"get_theses","description":"Read current-fitness, relationship, weekly-focus, and race-readiness theses.","inputSchema":{"type":"object","properties":{"dbPath":{"type":"string"},"athleteId":{"type":"string"},"userId":{"type":"string"},"limit":{"type":"number","minimum":1,"maximum":50},"kind":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"freshness":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"additionalProperties":false}},{"name":"list_actions","description":"List open sessions, nudges, check-ins, and race todos.","inputSchema":{"type":"object","properties":{"dbPath":{"type":"string"},"athleteId":{"type":"string"},"userId":{"type":"string"},"limit":{"type":"number","minimum":1,"maximum":100},"status":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"kind":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"includeDone":{"type":"boolean"}},"additionalProperties":false}},{"name":"list_races","description":"List upcoming and historical races for the athlete.","inputSchema":{"type":"object","properties":{"dbPath":{"type":"string"},"athleteId":{"type":"string"},"userId":{"type":"string"},"limit":{"type":"number","minimum":1,"maximum":100},"timeframe":{"type":"string","enum":["upcoming","past","all"]},"sport":{"type":"string"},"priority":{"type":"string"}},"additionalProperties":false}},{"name":"get_fitness_chart","description":"Return CTL, ATL, and TSB chart data for Claude rendering.","inputSchema":{"type":"object","properties":{"dbPath":{"type":"string"},"athleteId":{"type":"string"},"userId":{"type":"string"},"days":{"type":"number","minimum":1,"maximum":365}},"additionalProperties":false}},{"name":"get_activity_streams","description":"Return stream summaries for an activity evidence record.","inputSchema":{"type":"object","properties":{"dbPath":{"type":"string"},"athleteId":{"type":"string"},"userId":{"type":"string"},"evidenceId":{"type":"string"},"activityId":{"type":"string"},"streams":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"targetPoints":{"type":"number","minimum":1,"maximum":240}},"additionalProperties":false}},{"name":"get_weight_chart","description":"Return weight trend and body composition chart data.","inputSchema":{"type":"object","properties":{"dbPath":{"type":"string"},"athleteId":{"type":"string"},"userId":{"type":"string"},"days":{"type":"number","minimum":1,"maximum":365}},"additionalProperties":false}},{"name":"sync_data","description":"Trigger local bootstrap sync or connected Strava, WHOOP, and Withings sync, then refresh coaching state and return a compact coach brief when new evidence lands.","inputSchema":{"type":"object","properties":{"mode":{"type":"string","enum":["local","connected"]},"service":{"type":"string","enum":["all","strava","whoop","withings"]},"dbPath":{"type":"string"},"athleteId":{"type":"string"},"userId":{"type":"string"},"displayName":{"type":"string"},"timezone":{"type":"string"},"locationCity":{"type":"string"},"locationCountry":{"type":"string"},"stravaDataDir":{"type":"string"},"whoopDataDir":{"type":"string"},"weightFilePath":{"type":"string"},"weightSources":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"after":{"type":"string"},"before":{"type":"string"},"limit":{"type":"number","minimum":1},"overlapDays":{"type":"number","minimum":0,"maximum":30},"refreshState":{"type":"boolean"},"refreshKinds":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"skipStrava":{"type":"boolean"},"skipWhoop":{"type":"boolean"},"skipWeightLog":{"type":"boolean"},"dryRun":{"type":"boolean"}},"additionalProperties":false}},{"name":"record_weight","description":"Write a manual weight entry into evidence.","inputSchema":{"type":"object","required":["weightKg"],"properties":{"dbPath":{"type":"string"},"athleteId":{"type":"string"},"userId":{"type":"string"},"displayName":{"type":"string"},"timezone":{"type":"string"},"locationCity":{"type":"string"},"locationCountry":{"type":"string"},"weightKg":{"type":"number","exclusiveMinimum":0},"date":{"type":"string"},"notes":{"type":"string"}},"additionalProperties":false}},{"name":"record_note","description":"Persist a free-text coaching note or journal entry as evidence.","inputSchema":{"type":"object","required":["text"],"properties":{"dbPath":{"type":"string"},"athleteId":{"type":"string"},"userId":{"type":"string"},"displayName":{"type":"string"},"timezone":{"type":"string"},"locationCity":{"type":"string"},"locationCountry":{"type":"string"},"title":{"type":"string"},"text":{"type":"string"},"occurredAt":{"type":"string"},"source":{"type":"string"},"metadata":{"type":"object"}},"additionalProperties":false}},{"name":"record_constraint","description":"Persist travel, injury, schedule, or life constraints as evidence.","inputSchema":{"type":"object","required":["text"],"properties":{"dbPath":{"type":"string"},"athleteId":{"type":"string"},"userId":{"type":"string"},"displayName":{"type":"string"},"timezone":{"type":"string"},"locationCity":{"type":"string"},"locationCountry":{"type":"string"},"title":{"type":"string"},"text":{"type":"string"},"occurredAt":{"type":"string"},"source":{"type":"string"},"metadata":{"type":"object"}},"additionalProperties":false}},{"name":"record_session_feedback","description":"Persist qualitative post-session feedback as evidence.","inputSchema":{"type":"object","required":["text"],"properties":{"dbPath":{"type":"string"},"athleteId":{"type":"string"},"userId":{"type":"string"},"displayName":{"type":"string"},"timezone":{"type":"string"},"locationCity":{"type":"string"},"locationCountry":{"type":"string"},"title":{"type":"string"},"text":{"type":"string"},"occurredAt":{"type":"string"},"source":{"type":"string"},"metadata":{"type":"object"}},"additionalProperties":false}},{"name":"update_athlete_profile","description":"Update FTP, HR, location, and athlete preference fields.","inputSchema":{"type":"object","properties":{"dbPath":{"type":"string"},"athleteId":{"type":"string"},"userId":{"type":"string"},"displayName":{"type":"string"},"timezone":{"type":["string","null"]},"locationCity":{"type":["string","null"]},"locationCountry":{"type":["string","null"]},"ftp":{"type":["number","null"]},"maxHr":{"type":["number","null"]},"restingHr":{"type":["number","null"]},"heightCm":{"type":["number","null"]},"weightGoalKg":{"type":["number","null"]},"activePersonaId":{"type":"string"},"dietaryPrefs":{}},"additionalProperties":false}},{"name":"create_race","description":"Create a new race record.","inputSchema":{"type":"object","required":["name","date"],"properties":{"dbPath":{"type":"string"},"athleteId":{"type":"string"},"userId":{"type":"string"},"displayName":{"type":"string"},"timezone":{"type":"string"},"locationCity":{"type":"string"},"locationCountry":{"type":"string"},"name":{"type":"string"},"date":{"type":"string"},"endDate":{"type":["string","null"]},"priority":{"type":"string"},"sport":{"type":["string","null"]},"distanceKm":{"type":["number","null"]},"elevationM":{"type":["number","null"]},"location":{"type":["string","null"]},"strategy":{},"result":{}},"additionalProperties":false}},{"name":"update_race","description":"Update a race record or race metadata.","inputSchema":{"type":"object","required":["raceId"],"properties":{"dbPath":{"type":"string"},"athleteId":{"type":"string"},"userId":{"type":"string"},"displayName":{"type":"string"},"timezone":{"type":"string"},"locationCity":{"type":"string"},"locationCountry":{"type":"string"},"raceId":{"type":"string"},"name":{"type":"string"},"date":{"type":"string"},"endDate":{"type":["string","null"]},"priority":{"type":"string"},"sport":{"type":["string","null"]},"distanceKm":{"type":["number","null"]},"elevationM":{"type":["number","null"]},"location":{"type":["string","null"]},"strategy":{},"result":{}},"additionalProperties":false}},{"name":"update_race_strategy","description":"Update structured race strategy state.","inputSchema":{"type":"object","required":["raceId","strategy"],"properties":{"dbPath":{"type":"string"},"athleteId":{"type":"string"},"userId":{"type":"string"},"displayName":{"type":"string"},"timezone":{"type":"string"},"locationCity":{"type":"string"},"locationCountry":{"type":"string"},"raceId":{"type":"string"},"strategy":{},"merge":{"type":"boolean"}},"additionalProperties":false}},{"name":"create_action","description":"Create a coaching action such as a session or race todo.","inputSchema":{"type":"object","required":["kind","title"],"properties":{"dbPath":{"type":"string"},"athleteId":{"type":"string"},"userId":{"type":"string"},"displayName":{"type":"string"},"timezone":{"type":"string"},"locationCity":{"type":"string"},"locationCountry":{"type":"string"},"kind":{"type":"string"},"title":{"type":"string"},"body":{"type":["string","null"]},"status":{"type":"string"},"priority":{"type":"string"},"dueAt":{"type":["string","null"]},"sourceEvidenceIds":{"type":["array","null"],"items":{"type":"string"}},"metadata":{}},"additionalProperties":false}},{"name":"update_action","description":"Update an existing action's title, status, or metadata.","inputSchema":{"type":"object","required":["actionId"],"properties":{"dbPath":{"type":"string"},"athleteId":{"type":"string"},"userId":{"type":"string"},"displayName":{"type":"string"},"timezone":{"type":"string"},"locationCity":{"type":"string"},"locationCountry":{"type":"string"},"actionId":{"type":"string"},"kind":{"type":"string"},"title":{"type":"string"},"body":{"type":["string","null"]},"status":{"type":"string"},"priority":{"type":"string"},"dueAt":{"type":["string","null"]},"sourceEvidenceIds":{"type":["array","null"],"items":{"type":"string"}},"metadata":{},"completedAt":{"type":["string","null"]}},"additionalProperties":false}},{"name":"complete_action","description":"Mark an action as done.","inputSchema":{"type":"object","required":["actionId"],"properties":{"dbPath":{"type":"string"},"athleteId":{"type":"string"},"userId":{"type":"string"},"displayName":{"type":"string"},"timezone":{"type":"string"},"locationCity":{"type":"string"},"locationCountry":{"type":"string"},"actionId":{"type":"string"},"completedAt":{"type":"string"},"status":{"type":"string"}},"additionalProperties":false}},{"name":"refresh_state","description":"Force thesis regeneration after meaningful evidence changes.","inputSchema":{"type":"object","properties":{"dbPath":{"type":"string"},"athleteId":{"type":"string"},"userId":{"type":"string"},"displayName":{"type":"string"},"timezone":{"type":"string"},"locationCity":{"type":"string"},"locationCountry":{"type":"string"},"kinds":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"additionalProperties":false}}],"name":"meridian","version":"0.3.0-alpha.1","description":"Meridian Crystalline remote MCP surface"}