{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_4yyffecjzmc7","handle":"fitfly-engine","url":"https://wellknown.network/agents/fitfly-engine","links":{"self":"https://wellknown.network/agents/fitfly-engine/record.json","html":"https://wellknown.network/agents/fitfly-engine","markdown":"https://wellknown.network/agents/fitfly-engine/record.md","api":"https://wellknown.network/api/v1/agents/fitfly-engine","status":"https://wellknown.network/api/v1/agents/fitfly-engine/status","claim":"https://wellknown.network/agents/fitfly-engine/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/fitfly-engine/claim.json","badge":"https://wellknown.network/agents/fitfly-engine/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/fitfly-engine/history","tools":"https://wellknown.network/api/v1/agents/fitfly-engine/tools"},"ard":{"identifier":"urn:air:workout-engine-production-5dd7.up.railway.app:server:fitfly-engine","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"fitfly-engine","summary":"Deterministic fitness coaching engine: adaptive programs, progression math, readiness autoregulation","description":"Deterministic fitness coaching engine: adaptive programs, progression math, readiness autoregulation","publisher":{"name":"dropflyai","url":null},"homepage":"https://workout-engine-production-5dd7.up.railway.app/connect","repository":null,"version":"0.2.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://workout-engine-production-5dd7.up.railway.app/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-07-02T01:36:08.446855Z","publishedAt":"2026-07-02T01:36:08.446855Z","registryName":"io.github.dropflyai/fitfly-engine"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[],"categories":[],"language":"en"},"observed":{"status":"live","statusReason":"Responded 2h ago.","lastOkAt":"2026-10-11T06:21:49.750Z","lastProbedAt":"2026-10-11T06:21:49.750Z","statusComputedAt":"2026-10-11T06:24:00.765Z","reliability30d":{"probes":109,"successRate":1,"p50Ms":158,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":108,"ok":108,"authBoundaryOk":0,"serviceOk":108,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-11T06:21:49.750Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":154,"error":null,"detail":{"tools":[{"name":"get_todays_session","description":"Today's workout: exercises, sets/reps, per-exercise load guidance and concrete target weights, plus nutrition targets and cycle status. Auto-applies the user's "},{"name":"readiness_checkin","description":"Record how the athlete feels today (energy, sleep, soreness — each 1–5). The engine scores readiness and, on the next get_todays_session, reshapes the workout a"},{"name":"log_workout","description":"Record what the athlete actually lifted. The engine runs progression (double-progression, e1RM), detects PRs, and returns per-exercise outcomes (established/pro"},{"name":"list_swap_options","description":"Valid alternatives for an exercise — same muscle group, filtered to the athlete's equipment/level/injuries. Use before swap_exercise."},{"name":"swap_exercise","description":"Replace an exercise with a valid same-area alternative. scope 'today' = just this session; scope 'program' = going forward. The new lift starts fresh (day-one c"},{"name":"get_program","description":"The athlete's current multi-day program (render-ready)."},{"name":"regenerate_program","description":"Rebuild the whole program from the stored profile (~20s AI generation). Use after a profile change or a plateau."},{"name":"nutrition_targets","description":"The athlete's daily calorie + macro targets, computed from body stats, activity, and goal."},{"name":"meal_plan","description":"A day of meals hitting the athlete's targets, USDA truth-checked (flags feasible=false with a note when macros are approximate). Slow (~15s AI call)."},{"name":"changelog","description":"The 'what changed & why' feed — the engine's coaching decisions (volume bumps, deloads, swaps) in Coach Fly's voice. Use to explain to the athlete why their pla"}],"toolCount":10,"toolsHash":"2cfe03cd50670adbc66c54c85e47df696b88dc50d443562ec8eb4480d1106a56","serverName":"fitfly-engine","capabilities":["tools"],"serverVersion":"0.2.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T23:21:59.238Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":152,"error":null,"detail":{"tools":[{"name":"get_todays_session","description":"Today's workout: exercises, sets/reps, per-exercise load guidance and concrete target weights, plus nutrition targets and cycle status. Auto-applies the user's "},{"name":"readiness_checkin","description":"Record how the athlete feels today (energy, sleep, soreness — each 1–5). The engine scores readiness and, on the next get_todays_session, reshapes the workout a"},{"name":"log_workout","description":"Record what the athlete actually lifted. The engine runs progression (double-progression, e1RM), detects PRs, and returns per-exercise outcomes (established/pro"},{"name":"list_swap_options","description":"Valid alternatives for an exercise — same muscle group, filtered to the athlete's equipment/level/injuries. Use before swap_exercise."},{"name":"swap_exercise","description":"Replace an exercise with a valid same-area alternative. scope 'today' = just this session; scope 'program' = going forward. The new lift starts fresh (day-one c"},{"name":"get_program","description":"The athlete's current multi-day program (render-ready)."},{"name":"regenerate_program","description":"Rebuild the whole program from the stored profile (~20s AI generation). Use after a profile change or a plateau."},{"name":"nutrition_targets","description":"The athlete's daily calorie + macro targets, computed from body stats, activity, and goal."},{"name":"meal_plan","description":"A day of meals hitting the athlete's targets, USDA truth-checked (flags feasible=false with a note when macros are approximate). Slow (~15s AI call)."},{"name":"changelog","description":"The 'what changed & why' feed — the engine's coaching decisions (volume bumps, deloads, swaps) in Coach Fly's voice. Use to explain to the athlete why their pla"}],"toolCount":10,"toolsHash":"2cfe03cd50670adbc66c54c85e47df696b88dc50d443562ec8eb4480d1106a56","serverName":"fitfly-engine","capabilities":["tools"],"serverVersion":"0.2.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T16:32:51.387Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":150,"error":null,"detail":{"tools":[{"name":"get_todays_session","description":"Today's workout: exercises, sets/reps, per-exercise load guidance and concrete target weights, plus nutrition targets and cycle status. Auto-applies the user's "},{"name":"readiness_checkin","description":"Record how the athlete feels today (energy, sleep, soreness — each 1–5). The engine scores readiness and, on the next get_todays_session, reshapes the workout a"},{"name":"log_workout","description":"Record what the athlete actually lifted. The engine runs progression (double-progression, e1RM), detects PRs, and returns per-exercise outcomes (established/pro"},{"name":"list_swap_options","description":"Valid alternatives for an exercise — same muscle group, filtered to the athlete's equipment/level/injuries. Use before swap_exercise."},{"name":"swap_exercise","description":"Replace an exercise with a valid same-area alternative. scope 'today' = just this session; scope 'program' = going forward. The new lift starts fresh (day-one c"},{"name":"get_program","description":"The athlete's current multi-day program (render-ready)."},{"name":"regenerate_program","description":"Rebuild the whole program from the stored profile (~20s AI generation). Use after a profile change or a plateau."},{"name":"nutrition_targets","description":"The athlete's daily calorie + macro targets, computed from body stats, activity, and goal."},{"name":"meal_plan","description":"A day of meals hitting the athlete's targets, USDA truth-checked (flags feasible=false with a note when macros are approximate). Slow (~15s AI call)."},{"name":"changelog","description":"The 'what changed & why' feed — the engine's coaching decisions (volume bumps, deloads, swaps) in Coach Fly's voice. Use to explain to the athlete why their pla"}],"toolCount":10,"toolsHash":"2cfe03cd50670adbc66c54c85e47df696b88dc50d443562ec8eb4480d1106a56","serverName":"fitfly-engine","capabilities":["tools"],"serverVersion":"0.2.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T10:29:19.686Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":150,"error":null,"detail":{"tools":[{"name":"get_todays_session","description":"Today's workout: exercises, sets/reps, per-exercise load guidance and concrete target weights, plus nutrition targets and cycle status. Auto-applies the user's "},{"name":"readiness_checkin","description":"Record how the athlete feels today (energy, sleep, soreness — each 1–5). The engine scores readiness and, on the next get_todays_session, reshapes the workout a"},{"name":"log_workout","description":"Record what the athlete actually lifted. The engine runs progression (double-progression, e1RM), detects PRs, and returns per-exercise outcomes (established/pro"},{"name":"list_swap_options","description":"Valid alternatives for an exercise — same muscle group, filtered to the athlete's equipment/level/injuries. Use before swap_exercise."},{"name":"swap_exercise","description":"Replace an exercise with a valid same-area alternative. scope 'today' = just this session; scope 'program' = going forward. The new lift starts fresh (day-one c"},{"name":"get_program","description":"The athlete's current multi-day program (render-ready)."},{"name":"regenerate_program","description":"Rebuild the whole program from the stored profile (~20s AI generation). Use after a profile change or a plateau."},{"name":"nutrition_targets","description":"The athlete's daily calorie + macro targets, computed from body stats, activity, and goal."},{"name":"meal_plan","description":"A day of meals hitting the athlete's targets, USDA truth-checked (flags feasible=false with a note when macros are approximate). Slow (~15s AI call)."},{"name":"changelog","description":"The 'what changed & why' feed — the engine's coaching decisions (volume bumps, deloads, swaps) in Coach Fly's voice. Use to explain to the athlete why their pla"}],"toolCount":10,"toolsHash":"2cfe03cd50670adbc66c54c85e47df696b88dc50d443562ec8eb4480d1106a56","serverName":"fitfly-engine","capabilities":["tools"],"serverVersion":"0.2.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T04:31:53.286Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":151,"error":null,"detail":{"tools":[{"name":"get_todays_session","description":"Today's workout: exercises, sets/reps, per-exercise load guidance and concrete target weights, plus nutrition targets and cycle status. Auto-applies the user's "},{"name":"readiness_checkin","description":"Record how the athlete feels today (energy, sleep, soreness — each 1–5). The engine scores readiness and, on the next get_todays_session, reshapes the workout a"},{"name":"log_workout","description":"Record what the athlete actually lifted. The engine runs progression (double-progression, e1RM), detects PRs, and returns per-exercise outcomes (established/pro"},{"name":"list_swap_options","description":"Valid alternatives for an exercise — same muscle group, filtered to the athlete's equipment/level/injuries. Use before swap_exercise."},{"name":"swap_exercise","description":"Replace an exercise with a valid same-area alternative. scope 'today' = just this session; scope 'program' = going forward. The new lift starts fresh (day-one c"},{"name":"get_program","description":"The athlete's current multi-day program (render-ready)."},{"name":"regenerate_program","description":"Rebuild the whole program from the stored profile (~20s AI generation). Use after a profile change or a plateau."},{"name":"nutrition_targets","description":"The athlete's daily calorie + macro targets, computed from body stats, activity, and goal."},{"name":"meal_plan","description":"A day of meals hitting the athlete's targets, USDA truth-checked (flags feasible=false with a note when macros are approximate). Slow (~15s AI call)."},{"name":"changelog","description":"The 'what changed & why' feed — the engine's coaching decisions (volume bumps, deloads, swaps) in Coach Fly's voice. Use to explain to the athlete why their pla"}],"toolCount":10,"toolsHash":"2cfe03cd50670adbc66c54c85e47df696b88dc50d443562ec8eb4480d1106a56","serverName":"fitfly-engine","capabilities":["tools"],"serverVersion":"0.2.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T21:27:03.303Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":187,"error":null,"detail":{"tools":[{"name":"get_todays_session","description":"Today's workout: exercises, sets/reps, per-exercise load guidance and concrete target weights, plus nutrition targets and cycle status. Auto-applies the user's "},{"name":"readiness_checkin","description":"Record how the athlete feels today (energy, sleep, soreness — each 1–5). The engine scores readiness and, on the next get_todays_session, reshapes the workout a"},{"name":"log_workout","description":"Record what the athlete actually lifted. The engine runs progression (double-progression, e1RM), detects PRs, and returns per-exercise outcomes (established/pro"},{"name":"list_swap_options","description":"Valid alternatives for an exercise — same muscle group, filtered to the athlete's equipment/level/injuries. Use before swap_exercise."},{"name":"swap_exercise","description":"Replace an exercise with a valid same-area alternative. scope 'today' = just this session; scope 'program' = going forward. The new lift starts fresh (day-one c"},{"name":"get_program","description":"The athlete's current multi-day program (render-ready)."},{"name":"regenerate_program","description":"Rebuild the whole program from the stored profile (~20s AI generation). Use after a profile change or a plateau."},{"name":"nutrition_targets","description":"The athlete's daily calorie + macro targets, computed from body stats, activity, and goal."},{"name":"meal_plan","description":"A day of meals hitting the athlete's targets, USDA truth-checked (flags feasible=false with a note when macros are approximate). Slow (~15s AI call)."},{"name":"changelog","description":"The 'what changed & why' feed — the engine's coaching decisions (volume bumps, deloads, swaps) in Coach Fly's voice. Use to explain to the athlete why their pla"}],"toolCount":10,"toolsHash":"2cfe03cd50670adbc66c54c85e47df696b88dc50d443562ec8eb4480d1106a56","serverName":"fitfly-engine","capabilities":["tools"],"serverVersion":"0.2.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T15:33:04.468Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":162,"error":null,"detail":{"tools":[{"name":"get_todays_session","description":"Today's workout: exercises, sets/reps, per-exercise load guidance and concrete target weights, plus nutrition targets and cycle status. Auto-applies the user's "},{"name":"readiness_checkin","description":"Record how the athlete feels today (energy, sleep, soreness — each 1–5). The engine scores readiness and, on the next get_todays_session, reshapes the workout a"},{"name":"log_workout","description":"Record what the athlete actually lifted. The engine runs progression (double-progression, e1RM), detects PRs, and returns per-exercise outcomes (established/pro"},{"name":"list_swap_options","description":"Valid alternatives for an exercise — same muscle group, filtered to the athlete's equipment/level/injuries. Use before swap_exercise."},{"name":"swap_exercise","description":"Replace an exercise with a valid same-area alternative. scope 'today' = just this session; scope 'program' = going forward. The new lift starts fresh (day-one c"},{"name":"get_program","description":"The athlete's current multi-day program (render-ready)."},{"name":"regenerate_program","description":"Rebuild the whole program from the stored profile (~20s AI generation). Use after a profile change or a plateau."},{"name":"nutrition_targets","description":"The athlete's daily calorie + macro targets, computed from body stats, activity, and goal."},{"name":"meal_plan","description":"A day of meals hitting the athlete's targets, USDA truth-checked (flags feasible=false with a note when macros are approximate). Slow (~15s AI call)."},{"name":"changelog","description":"The 'what changed & why' feed — the engine's coaching decisions (volume bumps, deloads, swaps) in Coach Fly's voice. Use to explain to the athlete why their pla"}],"toolCount":10,"toolsHash":"2cfe03cd50670adbc66c54c85e47df696b88dc50d443562ec8eb4480d1106a56","serverName":"fitfly-engine","capabilities":["tools"],"serverVersion":"0.2.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T09:26:38.975Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":172,"error":null,"detail":{"tools":[{"name":"get_todays_session","description":"Today's workout: exercises, sets/reps, per-exercise load guidance and concrete target weights, plus nutrition targets and cycle status. Auto-applies the user's "},{"name":"readiness_checkin","description":"Record how the athlete feels today (energy, sleep, soreness — each 1–5). The engine scores readiness and, on the next get_todays_session, reshapes the workout a"},{"name":"log_workout","description":"Record what the athlete actually lifted. The engine runs progression (double-progression, e1RM), detects PRs, and returns per-exercise outcomes (established/pro"},{"name":"list_swap_options","description":"Valid alternatives for an exercise — same muscle group, filtered to the athlete's equipment/level/injuries. Use before swap_exercise."},{"name":"swap_exercise","description":"Replace an exercise with a valid same-area alternative. scope 'today' = just this session; scope 'program' = going forward. The new lift starts fresh (day-one c"},{"name":"get_program","description":"The athlete's current multi-day program (render-ready)."},{"name":"regenerate_program","description":"Rebuild the whole program from the stored profile (~20s AI generation). Use after a profile change or a plateau."},{"name":"nutrition_targets","description":"The athlete's daily calorie + macro targets, computed from body stats, activity, and goal."},{"name":"meal_plan","description":"A day of meals hitting the athlete's targets, USDA truth-checked (flags feasible=false with a note when macros are approximate). Slow (~15s AI call)."},{"name":"changelog","description":"The 'what changed & why' feed — the engine's coaching decisions (volume bumps, deloads, swaps) in Coach Fly's voice. Use to explain to the athlete why their pla"}],"toolCount":10,"toolsHash":"2cfe03cd50670adbc66c54c85e47df696b88dc50d443562ec8eb4480d1106a56","serverName":"fitfly-engine","capabilities":["tools"],"serverVersion":"0.2.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T02:27:04.474Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":184,"error":null,"detail":{"tools":[{"name":"get_todays_session","description":"Today's workout: exercises, sets/reps, per-exercise load guidance and concrete target weights, plus nutrition targets and cycle status. Auto-applies the user's "},{"name":"readiness_checkin","description":"Record how the athlete feels today (energy, sleep, soreness — each 1–5). The engine scores readiness and, on the next get_todays_session, reshapes the workout a"},{"name":"log_workout","description":"Record what the athlete actually lifted. The engine runs progression (double-progression, e1RM), detects PRs, and returns per-exercise outcomes (established/pro"},{"name":"list_swap_options","description":"Valid alternatives for an exercise — same muscle group, filtered to the athlete's equipment/level/injuries. Use before swap_exercise."},{"name":"swap_exercise","description":"Replace an exercise with a valid same-area alternative. scope 'today' = just this session; scope 'program' = going forward. The new lift starts fresh (day-one c"},{"name":"get_program","description":"The athlete's current multi-day program (render-ready)."},{"name":"regenerate_program","description":"Rebuild the whole program from the stored profile (~20s AI generation). Use after a profile change or a plateau."},{"name":"nutrition_targets","description":"The athlete's daily calorie + macro targets, computed from body stats, activity, and goal."},{"name":"meal_plan","description":"A day of meals hitting the athlete's targets, USDA truth-checked (flags feasible=false with a note when macros are approximate). Slow (~15s AI call)."},{"name":"changelog","description":"The 'what changed & why' feed — the engine's coaching decisions (volume bumps, deloads, swaps) in Coach Fly's voice. Use to explain to the athlete why their pla"}],"toolCount":10,"toolsHash":"2cfe03cd50670adbc66c54c85e47df696b88dc50d443562ec8eb4480d1106a56","serverName":"fitfly-engine","capabilities":["tools"],"serverVersion":"0.2.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T19:23:21.117Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":152,"error":null,"detail":{"tools":[{"name":"get_todays_session","description":"Today's workout: exercises, sets/reps, per-exercise load guidance and concrete target weights, plus nutrition targets and cycle status. Auto-applies the user's "},{"name":"readiness_checkin","description":"Record how the athlete feels today (energy, sleep, soreness — each 1–5). The engine scores readiness and, on the next get_todays_session, reshapes the workout a"},{"name":"log_workout","description":"Record what the athlete actually lifted. The engine runs progression (double-progression, e1RM), detects PRs, and returns per-exercise outcomes (established/pro"},{"name":"list_swap_options","description":"Valid alternatives for an exercise — same muscle group, filtered to the athlete's equipment/level/injuries. Use before swap_exercise."},{"name":"swap_exercise","description":"Replace an exercise with a valid same-area alternative. scope 'today' = just this session; scope 'program' = going forward. The new lift starts fresh (day-one c"},{"name":"get_program","description":"The athlete's current multi-day program (render-ready)."},{"name":"regenerate_program","description":"Rebuild the whole program from the stored profile (~20s AI generation). Use after a profile change or a plateau."},{"name":"nutrition_targets","description":"The athlete's daily calorie + macro targets, computed from body stats, activity, and goal."},{"name":"meal_plan","description":"A day of meals hitting the athlete's targets, USDA truth-checked (flags feasible=false with a note when macros are approximate). Slow (~15s AI call)."},{"name":"changelog","description":"The 'what changed & why' feed — the engine's coaching decisions (volume bumps, deloads, swaps) in Coach Fly's voice. Use to explain to the athlete why their pla"}],"toolCount":10,"toolsHash":"2cfe03cd50670adbc66c54c85e47df696b88dc50d443562ec8eb4480d1106a56","serverName":"fitfly-engine","capabilities":["tools"],"serverVersion":"0.2.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"get_todays_session","description":"Today's workout: exercises, sets/reps, per-exercise load guidance and concrete target weights, plus nutrition targets and cycle status. Auto-applies the user's "},{"name":"readiness_checkin","description":"Record how the athlete feels today (energy, sleep, soreness — each 1–5). The engine scores readiness and, on the next get_todays_session, reshapes the workout a"},{"name":"log_workout","description":"Record what the athlete actually lifted. The engine runs progression (double-progression, e1RM), detects PRs, and returns per-exercise outcomes (established/pro"},{"name":"list_swap_options","description":"Valid alternatives for an exercise — same muscle group, filtered to the athlete's equipment/level/injuries. Use before swap_exercise."},{"name":"swap_exercise","description":"Replace an exercise with a valid same-area alternative. scope 'today' = just this session; scope 'program' = going forward. The new lift starts fresh (day-one c"},{"name":"get_program","description":"The athlete's current multi-day program (render-ready)."},{"name":"regenerate_program","description":"Rebuild the whole program from the stored profile (~20s AI generation). Use after a profile change or a plateau."},{"name":"nutrition_targets","description":"The athlete's daily calorie + macro targets, computed from body stats, activity, and goal."},{"name":"meal_plan","description":"A day of meals hitting the athlete's targets, USDA truth-checked (flags feasible=false with a note when macros are approximate). Slow (~15s AI call)."},{"name":"changelog","description":"The 'what changed & why' feed — the engine's coaching decisions (volume bumps, deloads, swaps) in Coach Fly's voice. Use to explain to the athlete why their pla"}],"package":null,"toolSurface":{"id":"ts_jafnbewm6wcw","endpointId":"ep_h2szx8nxtgcb","hash":"2cfe03cd50670adbc66c54c85e47df696b88dc50d443562ec8eb4480d1106a56","toolCount":10,"serverName":"fitfly-engine","serverVersion":"0.2.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-09-12T13:26:20.062Z","lastSeenAt":"2026-10-11T06:21:49.765Z","observations":105,"toolNames":["get_todays_session","readiness_checkin","log_workout","list_swap_options","swap_exercise","get_program","regenerate_program","nutrition_targets","meal_plan","changelog"],"distinctSurfaces":1},"endpointFacts":[{"id":"ep_h2szx8nxtgcb","url":"https://workout-engine-production-5dd7.up.railway.app/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-11T06:21:49.782Z","auth":{"observedAt":"2026-10-11T06:21:49.937Z","authRequired":false,"scheme":null,"resourceMetadata":null,"authorizationServer":null,"conformance":{"dpop":false,"rfc8414":false,"rfc9728":false,"pkceS256":false,"clientIdMetadataDocument":false,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-10-11T06:21:49.944Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"*.up.railway.app","issuer":{"commonName":"YE2","organization":"Let's Encrypt"},"validFrom":"2026-09-27T03:01:43.000Z","validTo":"2026-12-26T03:01:42.000Z","daysToExpiry":75,"sanCount":2,"fingerprint256":"FB:37:0C:A2:68:42:DA:2B:2F:F8:E3:18:2E:0E:8C:FC:6F:B8:EA:C3:2C:DB:57:18:F4:5A:4B:39:B9:E1:40:AF"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"io.github.dropflyai/fitfly-engine","url":"https://registry.modelcontextprotocol.io/v0/servers/io.github.dropflyai%2Ffitfly-engine","firstSeenAt":"2026-09-06T13:20:54.171Z","fetchedAt":"2026-10-10T09:18:23.525Z","normalizedAt":"2026-10-10T09:18:23.525Z"}]},"firstSeenAt":"2026-09-06T13:20:54.171Z","updatedAt":"2026-10-11T06:24:35.517Z"}