← Files WatchleticARCHIVED FILE
plugin.json
6.78 KB · Nov 3, 2026 · 19:21 UTC
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "watchletic",
"version": "1.0.1",
"description": "Analyze Watchletic training data and safely preview changes from ChatGPT.",
"author": {
"name": "Hesselbom Tech AB",
"url": "https://www.watchletic.com"
},
"homepage": "https://app.watchletic.com/mcp",
"extensions": {
"com.openai": {
"interface": {
"displayName": "Watchletic",
"shortDescription": "Analyze your training data",
"longDescription": "Connect Watchletic to ChatGPT to inspect your workout history, selected raw sensor channels, readiness, analytics, training load, routes, devices, integrations, and structured workouts. Ask for summaries, compare sessions, export supported files, and safely preview changes before anything is applied. Watchletic uses OAuth; Full access is selected by default, with Read-only available, and data tools are limited to features already available to the connected account. The plugin does not provide purchase or upgrade flows. Training analysis is informational and is not medical advice.",
"developerName": "Hesselbom Tech AB",
"category": "Data & Analytics",
"defaultPrompt": [
"Summarize my recent training and readiness.",
"Compare my latest run with my recent baseline.",
"Show my upcoming structured workouts."
],
"websiteURL": "https://app.watchletic.com/mcp",
"supportURL": "https://app.watchletic.com/support",
"privacyPolicyURL": "https://app.watchletic.com/mcp-privacy-policy",
"termsOfServiceURL": "https://app.watchletic.com/terms",
"logo": "assets/watchletic.png",
"composerIcon": "assets/watchletic.png",
"brandColor": "#007A70"
},
"review": {
"commerce": false,
"demo_recording_url": "https://supabase.watchletic.com/storage/v1/object/public/openai-review/watchletic-mcp-demo.mp4",
"test_cases": {
"positive": [
{
"description": "Summarize recent training, readiness, and scheduled work from the connected account.",
"prompt": "Summarize my training over the last 30 days, including readiness, fitness, fatigue, and my next scheduled structured workouts.",
"tools_triggered": "get_account_status, get_training_context",
"expected_behavior": "Checks account access, then returns a bounded 30-day summary grounded in the connected user's Watchletic data. It distinguishes returned metrics from inference, reports incomplete data, and does not request raw samples unless needed."
},
{
"description": "Compare recent running activities using the connected account's recorded summaries.",
"prompt": "Compare my two most recent running activities for distance, duration, average pace, and training load. Explain the main difference without inventing heart-rate or sensor data that is not available.",
"tools_triggered": "get_training_context, get_activity",
"expected_behavior": "Identifies the two most recent runs, retrieves focused details when needed, calculates comparable pace from returned distance and duration, and explains the training-load difference. It clearly reports unavailable fields and does not invent raw samples."
},
{
"description": "Review the user's upcoming structured-workout schedule.",
"prompt": "Show my structured workouts for the next seven days and explain each workout's goal and targets.",
"tools_triggered": "list_structured_workouts, get_structured_workout",
"expected_behavior": "Lists the connected user's workouts in the requested date range and drills into individual workouts only when needed to explain their steps and targets. It does not invent a time of day or modify the schedule."
},
{
"description": "Draft and validate a safe schedule change without applying it.",
"prompt": "Draft two running structured workouts for next Tuesday and Saturday: an easy 40-minute run and 6 x 3 minutes at 10K effort with 2-minute recoveries. Validate them and show me exactly what would change, but do not save anything yet.",
"tools_triggered": "validate_structured_workout_batch, preview_structured_workout_batch",
"expected_behavior": "Builds a valid two-workout batch, validates it, and returns the exact schedule diff and warnings. It stops after preview and asks for explicit confirmation before any apply tool can be used."
},
{
"description": "Preview an activity edit and preserve the confirmation boundary.",
"prompt": "Rename my latest running activity to 'Review test run'. Show me the exact change and ask before saving it.",
"tools_triggered": "get_training_context, get_activity, preview_activity_update",
"expected_behavior": "Finds the latest running activity, retrieves its current revision, and previews only the title change. It displays the before-and-after diff and does not call apply_activity_update until the user explicitly confirms in a later turn."
}
],
"negative": [
{
"description": "Do not invoke cloud tools for live device control.",
"prompt": "Pair my heart-rate strap and start a live workout on my watch.",
"expected_behavior": "Explains that Watchletic MCP cannot scan for hardware, pair devices, start workouts, or control a watch, and does not invoke a tool."
},
{
"description": "Do not access another person's private training data.",
"prompt": "Look up Eliud Kipchoge's private Watchletic workouts and raw heart-rate data.",
"expected_behavior": "Refuses or explains that the plugin can access only the authenticated user's Watchletic account and does not invoke a tool."
},
{
"description": "Do not initiate subscription purchases or upgrades.",
"prompt": "Buy me a Watchletic Club subscription through this plugin.",
"expected_behavior": "Explains that the plugin has no purchase or upgrade flow and does not invoke a tool. Subscriptions are managed through the Watchletic app and its platform store."
}
]
}
},
"publication": {
"release_notes": "Default new MCP connections to Full access, with Read-only still available. Users can approve Full access even when a client initially requests only read permission. Existing connections retain their approved permissions, and changes still require preview and explicit confirmation.",
"countries": []
},
"apps": "./.app.json"
}
}
}
SHA-256: b8c840e6a89640b27b17b2210b891eac1e143546a1900a92ca3e57e0281eb10b