Ryot MCP Starter
This server acts as an MCP gateway for a self-hosted Ryot instance, enabling programmatic interaction with fitness tracking and media management.
š§ Core / Debug
Check Ryot connectivity and server health
Execute arbitrary GraphQL queries/mutations (
ryot_graphql)Search the live Ryot GraphQL schema and discover available operations for workouts, media, and games
šŖ Fitness & Workouts
Search exercises by name, muscle group, equipment, level, and type
Log detailed workouts with exercises, sets, reps, weights, duration, and rest times
Create and manage reusable workout templates/routines
Log quick activities: walks, bodyweight sets (push-ups, squats, sit-to-stands)
Log a "minimum workout" (walk + sit-to-stand + wall push-up) in one command
Start today's routine, log minimum/recovery days
View recent workout history, workout details, and weekly summaries
š Body Measurements
Log weight, waist, body fat, chest, and other measurements with timestamps
List past measurements
š¬ Movies
Search movies, get status/history, mark as in-progress or watched
Add to watchlist; search-and-mark-watched or search-and-add-to-watchlist in one step
šŗ TV Shows
Search shows, get status/episode history, mark shows or specific episodes as in-progress or watched
Get the next unwatched episode and mark it watched in one step
Add shows to a watchlist
š® Video Games
Search games, get status/history, mark as started, completed, dropped, or on hold
Update game progress by percentage; add to backlog
Search-and-start, search-and-complete, or search-and-add-to-backlog in one step
š General Media
Search any media type (books, anime, manga, podcasts, audio books, etc.)
Get metadata and user-specific details (progress, history, reviews, collections)
Mark progress for any media type (start, complete, drop, hold, set percentage)
šļø Collections & Reviews
Create, list, and view collections; add any entity (media, workouts, measurements, etc.) to a collection
Create default collections in bulk
Create, update, or delete reviews for media items
āļø Configuration Notes
Requires
RYOT_BASE_URLandRYOT_AUTH_HEADERenvironment variablesSome tools use optional env vars like
RYOT_USER_ID,RYOT_WALKING_EXERCISE_ID, andRYOT_MOVIE_WATCHLIST_COLLECTIONDuration units: exercise set durations in minutes, overall workout duration in seconds, rest times in seconds
ryot_search_and_*tools are best-effort wrappers; if only a cached search ID is returned, they return the search response for manual selection
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Ryot MCP Starterlog a walk for 30 minutes"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Ryot MCP Starter
A local/private MCP server for a self-hosted Ryot instance, focused on workouts/routines, body measurements, movies, shows, and games.
Project layout
src/
index.ts # MCP bootstrap only
ryot.ts # GraphQL client + live schema helpers
schemas.ts # Shared zod schemas/enums
common.ts # Shared helpers
discovery-tools.ts # Schema/debug/discovery tools
workout-tools.ts # Fitness, measurements, routine tools
media-tools.ts # Movies, shows, games, collections, progress tools
media-convenience-tools.ts # Search-and-act, next-episode, collections, raw review helpersRelated MCP server: nas-mcp-server
Configure Cursor/Claude
{
"mcpServers": {
"ryot": {
"command": "node",
"args": ["/absolute/path/to/ryot-mcp-starter/dist/index.js"],
"env": {
"RYOT_BASE_URL": "https://ryot.shivansh.top",
"RYOT_AUTH_HEADER": "Bearer YOUR_RYOT_API_TOKEN",
"RYOT_COOKIE": "",
"RYOT_USER_ID": "",
"RYOT_MOVIE_WATCHLIST_COLLECTION": "Movie Watchlist",
"RYOT_SHOW_WATCHLIST_COLLECTION": "Show Watchlist",
"RYOT_GAME_BACKLOG_COLLECTION": "Game Backlog",
"RYOT_WALKING_EXERCISE_ID": "",
"RYOT_SIT_TO_STAND_EXERCISE_ID": "",
"RYOT_WALL_PUSHUP_EXERCISE_ID": ""
}
}
}
}RYOT_AUTH_HEADER should contain the exact working Authorization value. For Ryot integration tokens this is usually Bearer <token>.
RYOT_USER_ID is only needed for collection tools such as adding a movie to watchlist or a game to backlog.
Build
npm install
npm run buildRestart Cursor/Claude after every rebuild.
Tools
Core/debug
ryot_health_checkryot_graphqlryot_schema_searchryot_find_candidate_operationsryot_workout_discoveryryot_media_discoveryryot_game_discovery
Fitness/routines
ryot_search_exercisesryot_list_recent_workoutsryot_list_workout_templatesryot_get_workout_detailsryot_get_workout_template_detailsryot_log_workoutryot_create_workout_templateryot_log_body_measurementryot_log_walkryot_log_bodyweight_setryot_log_minimum_workoutryot_create_minimum_routine_templateryot_start_today_routineryot_log_weightryot_log_waistryot_list_measurementsryot_log_minimum_dayryot_log_recovery_dayryot_get_weekly_workout_summary
General media
ryot_search_mediaryot_get_metadata_detailsryot_get_user_metadata_detailsryot_mark_media_progressryot_create_collectionryot_add_to_collectionryot_list_collectionsryot_collection_contentsryot_user_metadata_listryot_create_default_collectionsryot_create_or_update_reviewryot_delete_review
Movies
ryot_search_movieryot_get_movie_statusryot_mark_movie_in_progressryot_mark_movie_watchedryot_add_movie_to_watchlistryot_search_and_mark_movie_watchedryot_search_and_add_movie_to_watchlist
Shows
ryot_search_showryot_get_show_statusryot_mark_show_in_progressryot_mark_show_episode_startedryot_mark_show_episode_watchedryot_add_show_to_watchlistryot_search_and_add_show_to_watchlistryot_search_and_mark_show_episode_watchedryot_get_next_show_episoderyot_mark_next_show_episode_watched
Games
ryot_search_gameryot_get_game_statusryot_mark_game_startedryot_mark_game_completedryot_mark_game_droppedryot_mark_game_on_holdryot_update_game_progress_percentryot_add_game_to_backlogryot_search_and_start_gameryot_search_and_update_game_progressryot_search_and_mark_game_completedryot_search_and_add_game_to_backlog
Notes
Ryot list/search endpoints often return a cached response object rather than full objects directly. This MCP uses live schema introspection to build valid GraphQL selections for object return types, so it should return whatever scalar/cached fields your Ryot version exposes without hard-coding wrapper field names.
For workout logging/templates, Ryot requires internal exerciseId values. Use ryot_search_exercises first, then pass those IDs to ryot_log_workout or set default exercise IDs in env vars.
Duration units (important for agents)
Ryot uses different units on different fields. Getting this wrong makes a 5-minute walk show as 300 minutes.
Field | Unit | Example |
| minutes | 5-min walk ā |
| seconds | 7-min workout ā |
| seconds | 90-sec rest ā |
| minutes | Human input; helpers convert internally |
Run ryot_workout_discovery to see durationUnits in the response. Never multiply set duration by 60.
The high-level routine shortcuts can read default exercise IDs from env vars:
RYOT_WALKING_EXERCISE_IDRYOT_SIT_TO_STAND_EXERCISE_IDRYOT_WALL_PUSHUP_EXERCISE_ID
The collection shortcut tools can read default collection names from env vars:
RYOT_MOVIE_WATCHLIST_COLLECTIONRYOT_SHOW_WATCHLIST_COLLECTIONRYOT_GAME_BACKLOG_COLLECTION
The ryot_search_and_* tools are best-effort wrappers: if Ryot returns only a cached search ID and no metadata ID, they return the search response so you can pick the result and call the ID-based tool.
Review tools are intentionally raw until the exact CreateOrUpdateReviewInput for your Ryot version is confirmed with schema discovery.
Keep this MCP private/local. The generic ryot_graphql tool can run arbitrary queries/mutations against your Ryot account.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/shivanshBTW/ryot-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server