Skip to main content
Glama
Dhivakarkd

Coros MCP Server

by Dhivakarkd

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.

License: MIT Node.js Version


⚠️ 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: TrainingPeaks MCP Server

πŸ’‘ Inspiration & Credits

This project was inspired by and built upon the excellent work of:

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 link

After 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:

  1. βœ… Open your browser to http://localhost:8111

  2. βœ… Display a login form

  3. βœ… 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 format

  • toDate (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 ID

  • sportType (required): Sport type number

  • fileType (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 format

  • endDate (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 ID

  • sportType (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

  1. Edit config file:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

    • Windows: %APPDATA%\Claude\claude_desktop_config.json

  2. Add server configuration:

{
  "mcpServers": {
    "coros": {
      "command": "coros-mcp-server"
    }
  }
}
  1. Restart Claude Desktop

Gemini CLI

  1. Add to your Gemini CLI configuration

  2. Restart Gemini CLI

MCP Inspector (for testing)

npx @modelcontextprotocol/inspector coros-mcp-server

Opens 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+ bpm

Fitness Tracking

User: "How's my fitness and recovery?"
Assistant: [Uses get_evolab_metrics]
Response:
- Endurance: 85/100
- Recovery: 78% (5 hours remaining)
- Training Load: Optimal

Activity 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 conditions

Training 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

/account/login

POST

Authentication

/activity/query

GET

List activities

/activity/detail/query

POST

Detailed activity data

/activity/detail/download

POST

File download URLs

/profile/private/query

POST

User profile & zones

/analyse/query

POST

EvoLab metrics

/training/schedule/query

POST

Training calendar

/activity/fit/getImportSportList

GET

Sport type mappings

Base URLs:

  • America: https://teamapi.coros.com

  • Europe: https://teameuapi.coros.com

  • China: 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.md

Build 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 config

Testing

# Test with MCP Inspector
npx @modelcontextprotocol/inspector coros-mcp-server

# Test individual API calls
npm run debug

Adding New Tools

  1. Add method to src/lib/coros-client.ts

  2. Define tool schema in src/index.ts tools array

  3. Add handler in the switch statement

  4. Update this README

  5. Build and test

πŸ” Troubleshooting

Command Not Found

# Re-link the package
cd /path/to/coros-mcp-server
npm link

Authentication Issues

# Delete saved credentials
rm ~/.config/coros-mcp/credentials.json

# Login again through the browser

Port Already in Use

The auth server uses port 8111. If it's in use:

# Find and kill the process
lsof -ti:8111 | xargs kill -9

MCP Inspector Not Working

# Kill any running instances
pkill -f coros-mcp-server
pkill -f inspector

# Start fresh
npx @modelcontextprotocol/inspector coros-mcp-server

API 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.json

  • File permissions are set to 600 (owner read/write only)

  • Password is MD5 hashed before transmission (Coros API requirement)

Authentication Flow

  1. User initiates login through MCP tool

  2. Browser opens to http://localhost:8111 (local only)

  3. User enters credentials in browser

  4. Credentials are tested against Coros API

  5. If successful, saved to local config file

  6. 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.json file

  • Use 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:

  1. Fork the repository

  2. Create a feature branch

  3. Make your changes

  4. Add tests if applicable

  5. Submit a pull request

πŸ™ Acknowledgments

  • Model Context Protocol by Anthropic

  • Coros for their fitness tracking platform

  • The MCP community for tools and inspiration

πŸ“ž Support

πŸ—ΊοΈ 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

Available Tools

8 tools
get_activity_detailsB

Get comprehensive activity data including summary metrics, laps, time-series data, zones, and weather

ParametersJSON Schema
NameRequiredDescriptionDefault
labelIdYesThe activity label ID
sportTypeYesThe sport type number

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Only lists data types included (summary metrics, laps, etc.). No disclosure of side effects, authentication needs, rate limits, or return format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, 12 words, no waste. Front-loaded with key verb and resource. Achieves high density of information with zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and no annotations, the description is incomplete. It does not mention pagination, limits, or response structure, despite likely returning a complex object.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are already described. Description adds no meaning beyond schema; it only lists outputs. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the action 'Get' and the resource 'comprehensive activity data', listing specific data types. This distinguishes it from siblings like get_recent_activities (list) and get_activity_file_url (file download).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. Does not mention that it is for a single activity, while get_recent_activities lists all. Lacks any when-to-use or when-not-to-use context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_activity_file_urlB

Get the download URL for a specific activity file (FIT, TCX, or GPX format)

ParametersJSON Schema
NameRequiredDescriptionDefault
labelIdYesThe activity label ID
fileTypeYesFile type: fit, tcx, or gpx
sportTypeYesThe sport type number

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden but fails to disclose essential behavioral traits such as idempotency, authentication needs, or error states (e.g., what happens if the file doesn't exist). It implies a read operation but does not explicitly confirm safety.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no redundant words. Every part contributes meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple retrieval tool with no output schema, the description adequately states the purpose but omits details about the return value format (e.g., whether the URL is temporary or direct). It is minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description adds little beyond restating file type formats. It provides no additional semantics for labelId or sportType beyond what the schema already describes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (get) and the resource (download URL for a specific activity file), and specifies the supported formats (FIT, TCX, GPX). This distinguishes it clearly from sibling tools like login or get_recent_activities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool, prerequisites, or alternatives. It simply describes what it does without context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_evolab_metricsB

Get EvoLab metrics including running fitness scores, training status, recovery data, and efficiency trends

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must disclose behaviors. It lists metric categories but does not mention any side effects, data freshness, rate limits, or whether it's a read-only operation. Minimal behavioral info.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, well-structured, no extraneous words. Efficiently communicates the tool's scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and simple tool, description lists categories but lacks return format details. Provides enough for a basic understanding, but missing clarity on data structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has no parameters; description adds no parameter info. With 100% schema coverage, baseline 3 is appropriate. No additional meaning needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb 'Get' and resource 'EvoLab metrics' with explicit examples (running fitness scores, training status, recovery data, efficiency trends). Distinct from siblings, no ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when or when not to use this tool. No mention of prerequisites, context, or alternatives among sibling tools. Agent has to infer usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_profileA

Get user profile including personal metrics and training zones (heart rate zones, pace zones)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description indicates a read-only operation but lacks details on authentication, rate limits, or what exactly is returned beyond the mentioned metrics. Since no annotations are provided, the description carries full burden but is minimally adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence that is front-loaded with the verb and resource, containing no extraneous information. Every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the description mentions personal metrics and training zones, it does not specify the format or exact fields. With no output schema, more detail on return values would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, so the description does not need to add parameter information beyond the schema. Baseline 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves user profile with personal metrics and training zones. It is specific and distinguishes from siblings like get_recent_activities or get_activity_details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. There is no context about prerequisites, exclusions, or when not to use it. Implied usage is insufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recent_activitiesB

Get recent Coros activities. Returns a list of workouts with basic information like date, name, and sport type.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of activities to return (default: 20)
toDateNoEnd date in ISO format (optional)
fromDateNoStart date in ISO format (optional)
sportTypesNoFilter by sport types (optional)

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, description bears full burden. It only states return content (list of workouts with basic info) but does not disclose ordering, pagination behavior, rate limits, or that the tool is read-only. For example, it doesn't specify default sort order (likely most recent first) or what 'recent' means in absence of date filters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is two sentences, front-loaded with the main action, no filler. Every word serves a purpose: states what it gets and what it returns. Efficient and to the point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 optional parameters and no output schema, the description is insufficient. It doesn't explain default behavior for limit, meaning of 'recent', ordering of results, or any constraints. The agent lacks enough context to fully understand the tool's behavior without additional schema reading.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% as every parameter has a description. The tool description adds no extra meaning beyond the schema; it does not elaborate on parameters like limit or toDate. Baseline score of 3 is appropriate since schema already documents parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Get recent Coros activities' with specific verb and resource, and mentions return of basic info like date, name, sport type. This distinguishes it from siblings like get_activity_details (likely full details) and get_activity_file_url (specific file). The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives. It does not mention that for full activity details one should use get_activity_details, or for file URLs use get_activity_file_url. Context for tool selection is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sport_typesA

Get a mapping of all supported sport types and their IDs

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It only states the retrieval of a mapping without disclosing behavioral traits such as authorization needs, rate limits, or caching behavior. This lack of context is a gap for a simple read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence. Every word adds value, with no redundancy or wasted structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description is minimal but adequate for a parameterless tool. However, it could reveal the return format (e.g., 'dictionary of sport type names to IDs') to improve completeness. Current version leaves agents guessing about the mapping structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters in the input schema and 100% schema description coverage, the description adds no parameter info but is not expected to. The baseline for zero parameters is 4, and the description properly states the tool's function without needing parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Get' and a clear resource 'mapping of all supported sport types and their IDs', leaving no ambiguity about the tool's purpose. It distinguishes itself from sibling tools, which focus on activities, profiles, or login.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. Among siblings like get_recent_activities or get_activity_details, there is no comparison or mention of context. The description only states functionality.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_training_calendarB

Get training schedule and calendar for a date range

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateYesEnd date in YYYYMMDD format
startDateYesStart date in YYYYMMDD format

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It only states what the tool does, but omits behavioral traits such as authentication requirements, rate limits, or handling of invalid date ranges.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no extraneous words. It is perfectly efficient for the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description is somewhat lacking. It does not mention return format or pagination, but for a simple calendar retrieval tool, it is minimally viable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with both parameters described in the input schema (format YYYYMMDD). The description adds no additional meaning beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'training schedule and calendar' with a scope of date range. It is specific and distinguishes the tool's purpose from siblings like get_recent_activities or get_activity_details, though not explicitly differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No usage guidelines are provided. The description does not indicate when to use this tool versus alternatives, nor does it provide context like prerequisites or excluded use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

loginA

Start the authentication process by opening a web browser. The user will complete login in the browser and then confirm when done.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses that the tool opens a browser and requires user interaction, which is key behavioral information. However, it does not specify what happens after confirmation (e.g., token/session management), leaving a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences that front-load the main action. Every sentence adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with no parameters and no output schema, the description covers the essential flow. It could be more explicit about the return value or next steps, but it is largely complete for an agent to understand the process.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so schema coverage is trivially 100%. The description needs no param details, earning the baseline score of 4 for zero-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it starts the authentication process with a specific verb ('Start') and resource ('authentication process'). It distinguishes from sibling tools (all getters) by describing an interactive login flow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for initial authentication but does not explicitly state when to use it (e.g., before other tools) or mention alternatives. No exclusions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 8 tool updatesv1.0.0
    • First observedget_activity_details
    • First observedget_activity_file_url
    • First observedget_evolab_metrics
    • First observedget_profile
    • First observedget_recent_activities
    • First observedget_sport_types
    • First observedget_training_calendar
    • First observedlogin

TDQS

A3.7/5.0

Scored across 8 tools

Disambiguation5/5

All tools have clearly distinct purposes: login, listing activities, downloading files, profile, metrics, calendar, sport types, and activity details. No overlaps.

Naming Consistency4/5

Most tools follow 'get_' prefix pattern. One exception is 'login', which is a different action. Overall consistent and predictable.

Tool Count5/5

8 tools is well-scoped for a fitness server, covering authentication, data retrieval, and analytics without being excessive or too few.

Completeness4/5

Covers profile, activities list/details, metrics, calendar, file downloads. Missing create/update/delete, but likely acceptable for a read-focused API. Minor gap.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to access and query Garmin Connect health and fitness data, including sleep, HRV, training load, and activities, with an optional coaching plugin for personalized training plans.
    1 npm
    4
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to read Garmin activities and create/schedule structured workouts and multi-week training plans on Garmin Connect, syncing to the user's watch.
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to read Garmin activities and create/schedule structured workouts and multi-week training plans directly on Garmin Connect, syncing to your watch with guided prompts.
    1
    MIT