Coros MCP Server
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., "@Coros MCP ServerShow me my last 10 runs"
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.
Coros MCP Server
A powerful Model Context Protocol (MCP) server that provides seamless access to your Coros watch data through AI assistants like Claude Desktop and Gemini CLI.
β οΈ IMPORTANT DISCLAIMER
π¨ THIS IS AN UNOFFICIAL APPLICATION
This MCP server uses unofficial, reverse-engineered Coros API endpoints that are not publicly documented or officially supported by Coros.
Use at your own risk:
β Not endorsed or supported by Coros
β API endpoints may change without notice
β Your account could potentially be affected
β No guarantees of functionality or data accuracy
By using this software, you acknowledge these risks and agree that the authors are not responsible for any issues that may arise.
Related MCP server: Strava MCP Server
π‘ Inspiration & Credits
This project was inspired by and built upon the excellent work of:
strava-mcp by @r-huijts - MCP server architecture and OAuth flow patterns
coros-api by @xballoy - Coros API endpoint research and implementation
Special thanks to these projects for paving the way! π
π Features
π Browser-Based Authentication - Secure login flow that opens in your browser
π 8 Powerful Tools - Comprehensive access to all your Coros data
π Activity Data - Recent activities, detailed metrics, lap-by-lap analysis
πͺ EvoLab Metrics - Fitness scores, training status, recovery data
π Training Calendar - View scheduled workouts and training plans
β€οΈ Training Zones - Heart rate and pace zone information
π€οΈ Weather Data - Environmental conditions for outdoor activities
π Time-Series Data - 1Hz GPS and biometric data for deep analysis
π Table of Contents
π Installation
Prerequisites
Node.js 18.0.0 or higher
npm or yarn
A Coros account with activity data
Install Globally
# Clone the repository
git clone https://github.com/yourusername/coros-mcp-server.git
cd coros-mcp-server
# Install dependencies
npm install
# Build the project
npm run build
# Install globally
npm linkAfter installation, the coros-mcp-server command will be available globally.
Verify Installation
which coros-mcp-server
# Should output: /path/to/node/bin/coros-mcp-serverβ‘ Quick Start
1. Configure Your MCP Client
For Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"coros": {
"command": "coros-mcp-server"
}
}
}For Gemini CLI:
{
"mcpServers": {
"coros": {
"command": "coros-mcp-server"
}
}
}2. Restart Your MCP Client
Close and reopen Claude Desktop or restart Gemini CLI.
3. First-Time Authentication
In your AI assistant, simply say:
"Login to my Coros account"
The server will:
β Open your browser to http://localhost:8111
β Display a login form
β Save your credentials securely to
~/.config/coros-mcp/credentials.json
After logging in, tell the assistant:
"I'm logged in"
You're ready to use all the tools!
π οΈ Available Tools
1. login
Start the authentication process by opening a web browser.
Parameters: None
Example:
"Login to my Coros account"
2. get_recent_activities
Get a list of recent Coros activities.
Parameters:
limit(optional): Maximum number of activities (default: 20)sportTypes(optional): Filter by sport types (e.g., ["103"] for runs)fromDate(optional): Start date in ISO formattoDate(optional): End date in ISO format
Example:
"Show me my last 10 runs"
3. get_activity_file_url
Get download URL for activity files in FIT, TCX, or GPX format.
Parameters:
labelId(required): Activity IDsportType(required): Sport type numberfileType(required): "fit", "tcx", or "gpx"
Example:
"Get the FIT file for activity 474723165319233737"
4. get_profile
Get user profile including training zones.
Parameters: None
Returns:
Personal metrics (height, weight, age, sex)
Heart rate zones (5-6 zones with ranges)
Pace zones (lactate threshold pace)
Example:
"What are my heart rate training zones?"
5. get_evolab_metrics
Get EvoLab fitness and recovery data.
Parameters: None
Returns:
Running fitness scores (endurance, threshold, speed, sprint)
Training status (base fitness, load impact, intensity trend)
Recovery data (percentage and remaining time)
Efficiency trends (7-day scores)
Example:
"Show me my EvoLab fitness scores and recovery status"
6. get_training_calendar
Get training schedule for a date range.
Parameters:
startDate(required): Start date in YYYYMMDD formatendDate(required): End date in YYYYMMDD format
Returns: Scheduled workouts, rest days, completion status
Example:
"What workouts are scheduled for this week?"
7. get_sport_types
Get a mapping of all supported sport types.
Parameters: None
Returns: Dictionary of sport type IDs to names (e.g., 103: "Run")
Example:
"What sport types are available?"
8. get_activity_details
Get comprehensive activity analysis.
Parameters:
labelId(required): Activity IDsportType(required): Sport type number
Returns:
Summary metrics (distance, HR, power, cadence, calories, training load)
Training effect (aerobic/anaerobic), VO2 Max, efficiency
Lap-by-lap data with advanced metrics
1Hz time-series data (GPS + biometrics)
Zone distribution (HR/pace/power)
Weather conditions
Advanced running metrics (ground contact time, vertical stride ratio)
Example:
"Show me detailed metrics for my last run including lap splits and heart rate zones"
π§ MCP Client Integration
Claude Desktop
Edit config file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Add server configuration:
{
"mcpServers": {
"coros": {
"command": "coros-mcp-server"
}
}
}Restart Claude Desktop
Gemini CLI
Add to your Gemini CLI configuration
Restart Gemini CLI
MCP Inspector (for testing)
npx @modelcontextprotocol/inspector coros-mcp-serverOpens a web interface at http://localhost:6274 for interactive testing.
π‘ Usage Examples
Training Zone Analysis
User: "What are my current heart rate zones?"
Assistant: [Uses get_profile]
Response:
- Zone 1 (Recovery): 120-135 bpm
- Zone 2 (Aerobic): 135-150 bpm
- Zone 3 (Tempo): 150-165 bpm
- Zone 4 (Threshold): 165-175 bpm
- Zone 5 (VO2 Max): 175+ bpmFitness Tracking
User: "How's my fitness and recovery?"
Assistant: [Uses get_evolab_metrics]
Response:
- Endurance: 85/100
- Recovery: 78% (5 hours remaining)
- Training Load: OptimalActivity Analysis
User: "Analyze my last run with lap splits"
Assistant: [Uses get_recent_activities, then get_activity_details]
Response: Detailed breakdown including:
- Overall stats (distance, pace, HR)
- Lap-by-lap splits
- Heart rate zone distribution
- Weather conditionsTraining Planning
User: "What workouts are scheduled for next week?"
Assistant: [Uses get_training_calendar]
Response: List of scheduled workouts with dates and typesπ API Endpoints
The server communicates with the following Coros API endpoints:
Endpoint | Method | Purpose |
| POST | Authentication |
| GET | List activities |
| POST | Detailed activity data |
| POST | File download URLs |
| POST | User profile & zones |
| POST | EvoLab metrics |
| POST | Training calendar |
| GET | Sport type mappings |
Base URLs:
America:
https://teamapi.coros.comEurope:
https://teameuapi.coros.comChina:
https://teamcnapi.coros.com
π¨βπ» Development
Project Structure
coros-mcp-server/
βββ src/
β βββ index.ts # MCP server entry point
β βββ lib/
β β βββ coros-client.ts # Coros API client
β β βββ config-manager.ts # Credential storage
β β βββ auth-server.ts # Browser-based auth
β β βββ types.ts # TypeScript types
β βββ config-server.ts # Alternative config UI
β βββ auth-server.ts # Standalone auth server
βββ scripts/
β βββ debug-coros.ts # Debug/testing script
βββ dist/ # Compiled JavaScript
βββ package.json
βββ tsconfig.json
βββ README.mdBuild Commands
# Install dependencies
npm install
# Build TypeScript
npm run build
# Start MCP server (for testing)
npm start
# Run in development mode
npm run dev
# Debug Coros API calls
npm run debug
# Open browser-based auth
npm run auth
# Open alternative config UI
npm run configTesting
# Test with MCP Inspector
npx @modelcontextprotocol/inspector coros-mcp-server
# Test individual API calls
npm run debugAdding New Tools
Add method to
src/lib/coros-client.tsDefine tool schema in
src/index.tstools arrayAdd handler in the switch statement
Update this README
Build and test
π Troubleshooting
Command Not Found
# Re-link the package
cd /path/to/coros-mcp-server
npm linkAuthentication Issues
# Delete saved credentials
rm ~/.config/coros-mcp/credentials.json
# Login again through the browserPort Already in Use
The auth server uses port 8111. If it's in use:
# Find and kill the process
lsof -ti:8111 | xargs kill -9MCP Inspector Not Working
# Kill any running instances
pkill -f coros-mcp-server
pkill -f inspector
# Start fresh
npx @modelcontextprotocol/inspector coros-mcp-serverAPI Errors
Common errors and solutions:
"Not authenticated" - Run the login tool first
"Service exceptions" - Activity ID might be invalid or too old
"Invalid credentials" - Check email/password, try logging in again
Network errors - Check internet connection and API region
Debug Mode
# Run debug script to test API calls
npm run debug
# Check MCP server logs
# Logs are written to stderrπ Security
Credential Storage
Credentials are stored in
~/.config/coros-mcp/credentials.jsonFile permissions are set to
600(owner read/write only)Password is MD5 hashed before transmission (Coros API requirement)
Authentication Flow
User initiates login through MCP tool
Browser opens to http://localhost:8111 (local only)
User enters credentials in browser
Credentials are tested against Coros API
If successful, saved to local config file
Access token obtained and cached in memory
Security Notes
β οΈ Important:
This uses an unofficial Coros API
Credentials are stored locally on your machine
The auth server only runs on localhost
No data is sent to third parties
Use at your own risk
Best Practices
Don't share your
credentials.jsonfileUse a strong, unique password for your Coros account
Regularly update the MCP server
Review the code before running if security is a concern
π License
MIT License - see LICENSE file for details
π€ Contributing
Contributions are welcome! Please:
Fork the repository
Create a feature branch
Make your changes
Add tests if applicable
Submit a pull request
π Acknowledgments
Model Context Protocol by Anthropic
Coros for their fitness tracking platform
The MCP community for tools and inspiration
π Support
Issues: GitHub Issues
Discussions: GitHub Discussions
πΊοΈ Roadmap
Add caching for frequently accessed data
Support for token refresh
Export data to common formats
Workout analysis and recommendations
Integration with other fitness platforms
Web dashboard for data visualization
Made with β€οΈ for the Coros and MCP communities
This server cannot be installed
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/Dhivakarkd/corus-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server