Rank
83
A Model Context Protocol (MCP) server for GitLab
Traction
No public download signal
Freshness
Updated 2d ago
Crawler Summary
Fitness MCP server integrating Intervals.icu, Whoop, and TrainerRoad Domestique A TypeScript MCP (Model Context Protocol) server that integrates with $1, $1, and $1 to provide unified access to fitness data across all activities and sports. Features - Query completed workouts from Intervals.icu with matched Whoop strain data - Access sleep and recovery metrics (HRV, sleep, recovery score) from Whoop - View planned workouts from TrainerRoad and Intervals.icu - Sync TrainerRoad running Capability contract not published. No trust telemetry is available yet. Last updated 2/25/2026.
Freshness
Last checked 2/25/2026
Best For
domestique is best for mcp, fitness, intervals.icu workflows where MCP compatibility matters.
Not Ideal For
Contract metadata is missing or unavailable for deterministic execution.
Evidence Sources Checked
editorial-content, GITHUB MCP, runtime-metrics, public facts pack
Fitness MCP server integrating Intervals.icu, Whoop, and TrainerRoad Domestique A TypeScript MCP (Model Context Protocol) server that integrates with $1, $1, and $1 to provide unified access to fitness data across all activities and sports. Features - Query completed workouts from Intervals.icu with matched Whoop strain data - Access sleep and recovery metrics (HRV, sleep, recovery score) from Whoop - View planned workouts from TrainerRoad and Intervals.icu - Sync TrainerRoad running
Public facts
4
Change events
1
Artifacts
0
Freshness
Feb 25, 2026
Capability contract not published. No trust telemetry is available yet. Last updated 2/25/2026.
Trust score
Unknown
Compatibility
MCP
Freshness
Feb 25, 2026
Vendor
Gesteves
Artifacts
0
Benchmarks
0
Last release
1.0.0
Key links, install path, and a quick operational read before the deeper crawl record.
Summary
Capability contract not published. No trust telemetry is available yet. Last updated 2/25/2026.
Setup snapshot
git clone https://github.com/gesteves/domestique.gitSetup complexity is MEDIUM. Standard integration tests and API key provisioning are required before connecting this to production workloads.
Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Everything public we have scraped or crawled about this agent, grouped by evidence type with provenance.
Vendor
Gesteves
Protocol compatibility
MCP
Handshake status
UNKNOWN
Crawlable docs
6 indexed pages on the official domain
Merged public release, docs, artifact, benchmark, pricing, and trust refresh events.
Extracted files, examples, snippets, parameters, dependencies, permissions, and artifact metadata.
Extracted files
0
Examples
6
Snippets
0
Languages
typescript
bash
cp .env.example .env
bash
openssl rand -hex 32
bash
docker compose up -d
bash
docker compose exec domestique npm run whoop:auth
bash
# Start development server with hot reload docker compose up # Start in background docker compose up -d # View logs docker compose logs domestique -f # Restart container docker compose restart domestique # Stop containers docker compose down # Rebuild containers after dependency changes docker compose build # Run commands in container docker compose exec domestique <command> # Examples: docker compose exec domestique npm run typecheck docker compose exec domestique npm run whoop:auth
bash
# Install MCP Inspector globally (if not already installed)
npm install -g @modelcontextprotocol/inspector
# Run inspector pointing to your local server
npx @modelcontextprotocol/inspector --server-url "http://localhost:3000/mcp?token=YOUR_SECRET_TOKEN"
# Or with Authorization header
npx @modelcontextprotocol/inspector --server-url "http://localhost:3000/mcp" \
--header "{ \"Authorization\": \"Bearer YOUR_SECRET_TOKEN\" }"Full documentation captured from public sources, including the complete README when available.
Docs source
GITHUB MCP
Editorial quality
ready
Fitness MCP server integrating Intervals.icu, Whoop, and TrainerRoad Domestique A TypeScript MCP (Model Context Protocol) server that integrates with $1, $1, and $1 to provide unified access to fitness data across all activities and sports. Features - Query completed workouts from Intervals.icu with matched Whoop strain data - Access sleep and recovery metrics (HRV, sleep, recovery score) from Whoop - View planned workouts from TrainerRoad and Intervals.icu - Sync TrainerRoad running
A TypeScript MCP (Model Context Protocol) server that integrates with Intervals.icu, Whoop, and TrainerRoad to provide unified access to fitness data across all activities and sports.
Note: Due to Strava API restrictions, workouts imported from Strava to Intervals.icu cannot be analyzed. To work around this, ensure that workouts are synced to Intervals.icu from other sources (Zwift, Garmin Connect, Dropbox, etc.)
get_todays_summary - Complete snapshot of today including recovery, sleep, HRV, strain, fitness metrics (CTL/ATL/TSB), wellness, completed workouts (with matched Whoop data), planned workouts (from TrainerRoad and Intervals.icu), and today's race, if any.get_athlete_profile - Athlete's profile including unit preferences (metric/imperial), age, and locationget_sports_settings - Sport-specific settings (FTP, zones, thresholds) for cycling, running, or swimmingget_strain_history - Whoop strain scores and activities for a date rangeget_workout_history - Historical workouts with matched Whoop strain dataget_recovery_trends - HRV, sleep, and recovery patterns over timeget_wellness_trends - Wellness data trends (weight) over a date rangeget_activity_totals - Aggregated activity totals over a date range, including duration, distance, training load, and zone distributions by sportget_upcoming_workouts - Planned workouts for a future date range from both TrainerRoad and Intervals.icu calendarsget_upcoming_races - Upcoming races from the TrainerRoad calendar (only triathlons for now)get_run_workout_syntax - Returns the Intervals.icu workout syntax documentation for creating structured running workoutscreate_run_workout - Creates a structured running workout in Intervals.icu from a plain English descriptionget_cycling_workout_syntax - Returns the Intervals.icu workout syntax documentation for creating structured cycling workoutscreate_cycling_workout - Creates a structured cycling workout in Intervals.icu from a plain English descriptionupdate_workout - Updates a Domestique-created workout in Intervals.icudelete_workout - Deletes a Domestique-created workout from Intervals.icusync_trainerroad_runs - Syncs running workouts from TrainerRoad to Intervals.icu, creating new workouts, detecting changes, and cleaning up orphansset_workout_intervals - Sets intervals on a completed activityget_training_load_trends - Training load trends including CTL (fitness), ATL (fatigue), TSB (form), ramp rate, and ACWRget_workout_details - Get all the details for a single workout, including intervals, notes, weather, and zonesget_workout_intervals - Detailed interval breakdown for a specific workout including power, HR, cadence, and timing dataget_workout_notes - Notes and comments written by the athlete about a specific workout in Intervals.icuget_workout_weather - Weather conditions during a specific outdoor workoutget_workout_heat_zones - Heat zone analysis for a specific workout showing time spent in each heat strain zoneget_power_curve - Cycling power curve analysis showing best watts at various durations with W/kg, estimated FTP, and period comparisonget_pace_curve - Running/swimming pace curve analysis showing best times at key distancesget_hr_curve - Heart rate curve analysis showing max sustained HR at various durationsCopy .env.example to .env and fill in your credentials:
cp .env.example .env
Required variables:
MCP_AUTH_TOKEN - Secret token for MCP authentication. You can quickly generate one with:openssl rand -hex 32
For Intervals.icu integration:
INTERVALS_API_KEY - Your Intervals.icu API keyINTERVALS_ATHLETE_ID - Your Intervals.icu athlete IDFor Whoop integration:
WHOOP_CLIENT_IDWHOOP_CLIENT_SECRETREDIS_URL - Required for token storage (e.g., redis://localhost:6379)WHOOP_REDIRECT_URI - Optional. Auto-detected based on environment:
https://{FLY_APP_NAME}.fly.dev/callbackhttp://localhost:3000/callbackFor TrainerRoad integration:
TRAINERROAD_CALENDAR_URL - Private iCal feed URLWhoop uses OAuth 2.0, which requires a one-time authorization flow to obtain refresh tokens. The refresh tokens are single-use, so each time the server refreshes the access token, it receives a new refresh token that gets stored in Redis.
First-time setup:
Create a Whoop developer app at https://developer.whoop.com to get your WHOOP_CLIENT_ID and WHOOP_CLIENT_SECRET
Make sure Redis is running and REDIS_URL is set in your .env
Start the Docker environment:
docker compose up -d
Run the OAuth setup script:
docker compose exec domestique npm run whoop:auth
The script will display an authorization URL. Open it in your browser and log in to Whoop
After authorizing, you'll be redirected to a callback page that displays your authorization code
Copy the authorization code and paste it into the script
The script exchanges the code for tokens and stores them in Redis. You're done!
The server will automatically refresh tokens as needed and store new refresh tokens in Redis.
All commands should be run in the Docker container:
# Start development server with hot reload
docker compose up
# Start in background
docker compose up -d
# View logs
docker compose logs domestique -f
# Restart container
docker compose restart domestique
# Stop containers
docker compose down
# Rebuild containers after dependency changes
docker compose build
# Run commands in container
docker compose exec domestique <command>
# Examples:
docker compose exec domestique npm run typecheck
docker compose exec domestique npm run whoop:auth
The MCP Inspector is a useful tool for testing and debugging your MCP server:
# Install MCP Inspector globally (if not already installed)
npm install -g @modelcontextprotocol/inspector
# Run inspector pointing to your local server
npx @modelcontextprotocol/inspector --server-url "http://localhost:3000/mcp?token=YOUR_SECRET_TOKEN"
# Or with Authorization header
npx @modelcontextprotocol/inspector --server-url "http://localhost:3000/mcp" \
--header "{ \"Authorization\": \"Bearer YOUR_SECRET_TOKEN\" }"
The inspector will open a web interface where you can:
In development mode, tool responses include a _debug object with token count information. This helps you understand how many tokens each tool response would consume when passed to Claude.
To enable this feature:
Add your Anthropic API key to .env:
ANTHROPIC_API_KEY=your-anthropic-api-key
Restart the development server:
docker compose restart domestique
Tool responses will now include:
{
"response": { ... },
"field_descriptions": { ... },
"_debug": {
"token_count": 1234
}
}
This feature is automatically disabled in production (when NODE_ENV is not development) or when ANTHROPIC_API_KEY is not set.
# Start development server with hot reload
docker compose up
# Server runs at http://localhost:3000
# Install dependencies
npm install
# Run in development mode with hot reload
npm run dev
# Or build and run production
npm run build
npm start
curl -L https://fly.io/install.sh | sh
fly auth login
Redis is required for Whoop token storage. Deploy it first:
cd fly-redis
# Create the Redis app (first time only)
fly apps create domestique-redis
# Create a volume for persistence
fly volumes create redis_data --region iad --size 1
# Deploy Redis
fly deploy
cd ..
# Create the app (first time only)
fly apps create domestique
# Set secrets
fly secrets set MCP_AUTH_TOKEN=your-secret-token
fly secrets set INTERVALS_API_KEY=your-api-key
fly secrets set INTERVALS_ATHLETE_ID=your-athlete-id
fly secrets set WHOOP_CLIENT_ID=your-client-id
fly secrets set WHOOP_CLIENT_SECRET=your-client-secret
fly secrets set REDIS_URL=redis://domestique-redis.internal:6379
# Deploy
fly deploy
# View logs
fly logs
After deploying, run the OAuth setup to get initial Whoop tokens:
fly ssh console -C "npm run whoop:auth"
The redirect URI is automatically set to https://{your-app}.fly.dev/callback when running on Fly.io. Make sure this URL is registered in your Whoop developer app settings.
Follow the prompts to authorize with Whoop and store the tokens in Redis.
Add this MCP server as a connector to your Claude configuration using this URL:
https://{FLY_APP_NAME}.fly.dev/mcp?token=YOUR_SECRET_TOKEN
Note: Replace YOUR_SECRET_TOKEN with your actual MCP_AUTH_TOKEN value and FLY_APP_NAME with the name of the Fly.io app (or the URL wherever you have it hosted).
Once connected, you can ask Claude:
This server has been tested with Claude and ChatGPT. However, there are some compatibility differences to be aware of:
Tool responses: ChatGPT uses structuredContent for JSON data and expects plain text or Markdown content for narration in tools responses. Claude only uses content. This server's tool responses return the same JSON payload in both fields for compatibility.
MCP prompts: ChatGPT doesn't support prompts, and Claude inserts them as .txt files rather than as regular prompts. The daily_summary prompt is provided but may not work as expected on all clients.
MCP resources: ChatGPT does not support resources; Claude does but doesn't seem to reliably use them while invoking tools. As an alternative, this server provides tools like get_run_workout_syntax and get_cycling_workout_syntax that return the resource contents directly.
_meta fields: ChatGPT provides _meta fields in tool inputs, which could be used to identify that the request is coming from ChatGPT, and provides things like the location and locale of the user. Claude doesn't provide any hints.
Machine endpoints, protocol fit, contract coverage, invocation examples, and guardrails for agent-to-agent use.
Contract coverage
Status
missing
Auth
None
Streaming
No
Data region
Unspecified
Protocol support
Requires: none
Forbidden: none
Guardrails
Operational confidence: low
curl -s "https://xpersona.co/api/v1/agents/mcp-gesteves-domestique/snapshot"
curl -s "https://xpersona.co/api/v1/agents/mcp-gesteves-domestique/contract"
curl -s "https://xpersona.co/api/v1/agents/mcp-gesteves-domestique/trust"
Trust and runtime signals, benchmark suites, failure patterns, and practical risk constraints.
Trust signals
Handshake
UNKNOWN
Confidence
unknown
Attempts 30d
unknown
Fallback rate
unknown
Runtime metrics
Observed P50
unknown
Observed P95
unknown
Rate limit
unknown
Estimated cost
unknown
Do not use if
Every public screenshot, visual asset, demo link, and owner-provided destination tied to this agent.
Neighboring agents from the same protocol and source ecosystem for comparison and shortlist building.
Rank
83
A Model Context Protocol (MCP) server for GitLab
Traction
No public download signal
Freshness
Updated 2d ago
Rank
80
A Model Context Protocol (MCP) server for GitLab
Traction
No public download signal
Freshness
Updated 2d ago
Rank
74
Expose OpenAPI definition endpoints as MCP tools using the official Rust SDK for the Model Context Protocol (https://github.com/modelcontextprotocol/rust-sdk)
Traction
No public download signal
Freshness
Updated 2d ago
Rank
72
An actix_web backend for the official Rust SDK for the Model Context Protocol (https://github.com/modelcontextprotocol/rust-sdk)
Traction
No public download signal
Freshness
Updated 2d ago
Contract JSON
{
"contractStatus": "missing",
"authModes": [],
"requires": [],
"forbidden": [],
"supportsMcp": false,
"supportsA2a": false,
"supportsStreaming": false,
"inputSchemaRef": null,
"outputSchemaRef": null,
"dataRegion": null,
"contractUpdatedAt": null,
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Invocation Guide
{
"preferredApi": {
"snapshotUrl": "https://xpersona.co/api/v1/agents/mcp-gesteves-domestique/snapshot",
"contractUrl": "https://xpersona.co/api/v1/agents/mcp-gesteves-domestique/contract",
"trustUrl": "https://xpersona.co/api/v1/agents/mcp-gesteves-domestique/trust"
},
"curlExamples": [
"curl -s \"https://xpersona.co/api/v1/agents/mcp-gesteves-domestique/snapshot\"",
"curl -s \"https://xpersona.co/api/v1/agents/mcp-gesteves-domestique/contract\"",
"curl -s \"https://xpersona.co/api/v1/agents/mcp-gesteves-domestique/trust\""
],
"jsonRequestTemplate": {
"query": "summarize this repo",
"constraints": {
"maxLatencyMs": 2000,
"protocolPreference": [
"MCP"
]
}
},
"jsonResponseTemplate": {
"ok": true,
"result": {
"summary": "...",
"confidence": 0.9
},
"meta": {
"source": "GITHUB_MCP",
"generatedAt": "2026-04-17T03:48:10.443Z"
}
},
"retryPolicy": {
"maxAttempts": 3,
"backoffMs": [
500,
1500,
3500
],
"retryableConditions": [
"HTTP_429",
"HTTP_503",
"NETWORK_TIMEOUT"
]
}
}Trust JSON
{
"status": "unavailable",
"handshakeStatus": "UNKNOWN",
"verificationFreshnessHours": null,
"reputationScore": null,
"p95LatencyMs": null,
"successRate30d": null,
"fallbackRate": null,
"attempts30d": null,
"trustUpdatedAt": null,
"trustConfidence": "unknown",
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Capability Matrix
{
"rows": [
{
"key": "MCP",
"type": "protocol",
"support": "unknown",
"confidenceSource": "profile",
"notes": "Listed on profile"
},
{
"key": "mcp",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "fitness",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "intervals.icu",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "whoop",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "trainerroad",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
}
],
"flattenedTokens": "protocol:MCP|unknown|profile capability:mcp|supported|profile capability:fitness|supported|profile capability:intervals.icu|supported|profile capability:whoop|supported|profile capability:trainerroad|supported|profile"
}Facts JSON
[
{
"factKey": "docs_crawl",
"category": "integration",
"label": "Crawlable docs",
"value": "6 indexed pages on the official domain",
"href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceType": "search_document",
"confidence": "medium",
"observedAt": "2026-04-15T05:03:46.393Z",
"isPublic": true
},
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Gesteves",
"href": "https://github.com/gesteves/domestique",
"sourceUrl": "https://github.com/gesteves/domestique",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-02-25T03:19:41.644Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "MCP",
"href": "https://xpersona.co/api/v1/agents/mcp-gesteves-domestique/contract",
"sourceUrl": "https://xpersona.co/api/v1/agents/mcp-gesteves-domestique/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-02-25T03:19:41.644Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://xpersona.co/api/v1/agents/mcp-gesteves-domestique/trust",
"sourceUrl": "https://xpersona.co/api/v1/agents/mcp-gesteves-domestique/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
]Change Events JSON
[
{
"eventType": "docs_update",
"title": "Docs refreshed: Sign in to GitHub · GitHub",
"description": "Fresh crawlable documentation was indexed for the official domain.",
"href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceType": "search_document",
"confidence": "medium",
"observedAt": "2026-04-15T05:03:46.393Z",
"isPublic": true
}
]Sponsored
Ads related to domestique and adjacent AI workflows.