concept2-mcp-server
Click on "Deploy 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., "@concept2-mcp-server show my recent rowing workouts"
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.
concept2-mcp-server
MCP server for the Concept2 Logbook API.
Setup
1. Get an Access Token
Use the Concept2 OAuth2 flow to obtain an access token:
Authorize:
GET https://log.concept2.com/oauth/authorizeToken exchange:
POST https://log.concept2.com/oauth/access_token
Required scopes: user:read user:write results:read results:write
2. Configure Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"concept2": {
"command": "node",
"args": ["/path/to/concept2-mcp-server/dist/index.js"],
"env": {
"CONCEPT2_ACCESS_TOKEN": "your_access_token_here"
}
}
}
}3. Build
npm install
npm run buildRelated MCP server: hevy-mcp
Tools
Tool | Description |
| Get a user profile ("me" or by ID) |
| Update the authenticated user's profile |
| List workout results with pagination and filters |
| Get a single workout result by ID |
| Log a new workout result |
| Log multiple workouts at once |
| Update an existing workout result |
| Delete a workout result (irreversible) |
| Get per-stroke data for a workout |
| Export a workout as TCX, FIT, or CSV |
| List all Concept2 challenges |
| Get currently active challenges |
| Get challenges starting within N days |
| Get challenges for a specific season year |
| Get event challenges for a specific year |
Environment Variables
Variable | Required | Description |
| Yes | OAuth2 bearer token from Concept2 |
Available Tools
14 toolsconcept2_create_resultCreate Concept2 Workout ResultA
Log a new workout result to the Concept2 Logbook.
Required fields: type, date, distance, time, weight_class. Optional: timezone, workout_type, stroke_rate, heart_rate, calories_total, drag_factor, comments, privacy.
Args:
user_id: User ID or "me" (default: "me")
type: Machine type — 'rower', 'skierg', or 'bikeerg' (required)
date: Workout date in YYYY-MM-DD format (required)
distance: Distance in meters (required)
time: Time in tenths of a second (e.g., 3600 = 6:00.0) (required)
weight_class: 'H' (heavyweight) or 'L' (lightweight) (required)
timezone: Timezone string (e.g., 'America/New_York') (optional)
workout_type: Type of workout (e.g., 'JustRow', 'FixedTimeSplit', 'Intervals') (optional)
stroke_rate: Average stroke rate in spm (optional)
heart_rate_avg/min/max: Heart rate values in bpm (optional)
calories_total: Total calories burned (optional)
drag_factor: Machine drag factor (optional)
comments: Notes about the workout (optional)
privacy: 'private', 'friends', or 'public' (optional)
Returns the created result with its assigned ID.
Inputs: date (required), time (required), type (required), distance (required), +13 more.
concept2_create_results_bulkBulk Create Concept2 Workout ResultsA
Log multiple workout results to the Concept2 Logbook in a single request.
Each result in the array must include the same required fields as concept2_create_result: type, date, distance, time, weight_class.
Args:
user_id: User ID or "me" (default: "me")
results: Array of workout objects, each with required fields:
type: 'rower', 'skierg', or 'bikeerg'
date: YYYY-MM-DD
distance: meters (number)
time: tenths of a second (integer)
weight_class: 'H' or 'L' Optional per result: timezone, workout_type, stroke_rate, heart_rate, calories_total, drag_factor, comments, privacy.
response_format: 'markdown' or 'json'
Returns the created results with their assigned IDs.
Inputs: results (required), user_id, response_format.
concept2_export_resultExport Concept2 Workout ResultARead-onlyIdempotent
Export a workout result in a specific format from the Concept2 Logbook.
Available export types vary by workout but typically include: 'tcx', 'fit', 'csv'.
Args:
user_id: User ID or "me" (default: "me")
result_id: The workout result ID (required)
export_type: Export format — 'tcx', 'fit', or 'csv' (required)
Returns the raw export file content as text.
Inputs: result_id (required), export_type (required), user_id.
concept2_get_current_challengesGet Current Concept2 ChallengesARead-onlyIdempotent
Retrieve currently active Concept2 challenges.
Returns challenges that are currently running, including their details: id, name, type, start_date, end_date, distance, time, description.
Args:
response_format: 'markdown' or 'json' (default: 'markdown')
Inputs: response_format.
concept2_get_event_challengesGet Concept2 Event ChallengesBRead-onlyIdempotent
Retrieve Concept2 event challenges for a specific year.
Event challenges are typically tied to specific Concept2 events and competitions.
Args:
year: The year to retrieve event challenges for (e.g., 2024) (required)
response_format: 'markdown' or 'json' (default: 'markdown')
Inputs: year (required), response_format.
concept2_get_resultGet Concept2 Workout ResultARead-onlyIdempotent
Retrieve a single workout result by ID from the Concept2 Logbook.
Returns full details of a workout including: id, date, type, distance, time, workout_type, weight_class, stroke_rate, heart_rate, calories_total, drag_factor, comments, privacy, split_data, and whether stroke data is available.
Args:
user_id: User ID or "me" (default: "me")
result_id: The workout result ID (integer, required)
response_format: 'markdown' or 'json' (default: 'markdown')
Inputs: result_id (required), user_id, response_format.
concept2_get_result_strokesGet Concept2 Workout Stroke DataARead-onlyIdempotent
Retrieve per-stroke data for a specific workout result from the Concept2 Logbook.
Stroke data is only available if the workout was recorded with stroke tracking enabled (check the 'stroke_data' field on the result). Returns an array of stroke objects with per-stroke metrics.
Each stroke object may include: ts (timestamp), d (distance), p (pace in ms/500m), spm (stroke rate), hr (heart rate).
Args:
user_id: User ID or "me" (default: "me")
result_id: The workout result ID (required)
response_format: 'markdown' or 'json' (default: 'json' — stroke data is typically large)
Inputs: result_id (required), user_id, response_format.
concept2_get_season_challengesGet Concept2 Season ChallengesARead-onlyIdempotent
Retrieve Concept2 challenges for a specific season/year.
Args:
year: The season year (e.g., 2024) (required)
response_format: 'markdown' or 'json' (default: 'markdown')
Inputs: year (required), response_format.
concept2_get_upcoming_challengesGet Upcoming Concept2 ChallengesARead-onlyIdempotent
Retrieve upcoming Concept2 challenges starting within a given number of days.
Args:
days: Number of days ahead to look for upcoming challenges (default: 30, max: 365)
response_format: 'markdown' or 'json' (default: 'markdown')
Inputs: days, response_format.
concept2_get_userGet Concept2 User ProfileARead-onlyIdempotent
Retrieve a Concept2 Logbook user's profile information.
Use "me" as the user ID to get the authenticated user's own profile.
Returns user details including: id, username, first_name, last_name, gender, dob, age, weight, location, country, weight_class, max_heart_rate, affiliations, roles.
Args:
user_id: User ID (integer) or "me" for the authenticated user (default: "me")
response_format: 'markdown' or 'json' (default: 'markdown')
Examples:
Get own profile: user_id="me"
Get another user: user_id=12345
Inputs: user_id, response_format.
concept2_list_challengesList Concept2 ChallengesARead-onlyIdempotent
List all available Concept2 challenges (all time).
Returns a list of challenges including: id, name, type, status, start_date, end_date, distance, time, description.
Args:
response_format: 'markdown' or 'json' (default: 'markdown')
Inputs: response_format.
concept2_list_resultsList Concept2 Workout ResultsARead-onlyIdempotent
List workout results (rows/ergs) for a Concept2 Logbook user with pagination and filtering.
Returns a paginated list of workout results. Each result includes: id, date, type, distance, time, time_formatted, workout_type, weight_class, stroke_rate, avg_pace, heart_rate, calories, comments.
Args:
user_id: User ID or "me" (default: "me")
page: Page number (default: 1)
per_page: Results per page (default: 50, max: 250)
type: Filter by machine type ('rower', 'skierg', 'bikeerg')
from: Filter results from this date (YYYY-MM-DD)
to: Filter results to this date (YYYY-MM-DD)
response_format: 'markdown' or 'json' (default: 'markdown')
Returns pagination metadata: total, count, per_page, current_page, total_pages.
Examples:
List all results: user_id="me"
List only rowing: user_id="me", type="rower"
List results in date range: from="2024-01-01", to="2024-12-31"
Inputs: to, from, page, type, +3 more.
concept2_update_resultUpdate Concept2 Workout ResultAIdempotent
Update an existing workout result in the Concept2 Logbook.
Only the result's owner can update it. Provide only the fields you want to change. Updatable fields: date, distance, time, workout_type, stroke_rate, heart_rate, calories_total, drag_factor, comments, privacy, weight_class.
Args:
user_id: User ID or "me" (default: "me")
result_id: The workout result ID to update (required)
(Any updatable fields — only provided fields will be changed)
response_format: 'markdown' or 'json'
Inputs: result_id (required), date, time, privacy, +12 more.
concept2_update_userUpdate Concept2 User ProfileAIdempotent
Update the authenticated user's Concept2 Logbook profile.
Only the authenticated user's own profile can be updated (user_id must be "me" or the authenticated user's ID).
Updatable fields: first_name, last_name, gender, dob, weight, location, country, weight_class, max_heart_rate.
Args:
user_id: User ID or "me" (default: "me")
first_name, last_name: Name fields (optional)
gender: 'M' or 'F' (optional)
dob: Date of birth in YYYY-MM-DD format (optional)
weight: Weight in kg (optional)
location: City/location string (optional)
country: Country code (optional)
weight_class: 'H' (heavyweight) or 'L' (lightweight) (optional)
max_heart_rate: Maximum heart rate in bpm (optional)
Returns the updated user profile.
Inputs: dob, gender, weight, country, +7 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 14 tools
Most tools have clear distinct purposes: user profile, result operations, and challenge queries. The challenge-related tools (list, current, upcoming, season, event) have some overlap but are differentiated by time/type filters in their descriptions.
All tools follow the concept2_verb_noun pattern. There is a minor inconsistency between 'list' and 'get' for challenge collections (e.g., list_challenges vs get_current_challenges), but the pattern is otherwise predictable.
14 tools is well-scoped for a Concept2 Logbook server covering user profiles, workout results, and challenges. Each tool earns its place with no redundancy.
The surface covers user profile get/update, results CRUD (except delete), bulk create, strokes, and export, plus multiple challenge views. Missing a delete result operation is a minor gap, but the core workflows are covered.
Maintenance
Related MCP Connectors
Remote MCP server for training, nutrition, wellness, and performance data with OAuth 2.0.
MCP server for Withings health data — sleep, activity, heart, and body metrics.
MCP server for the Seline Analytics API
MCP server for interacting with the Supabase platform
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server for interacting with the Wahoo Cloud API to manage workouts, routes, training plans, and power zones. It enables users to list, retrieve, and create fitness data through secure OAuth 2.0 authentication.97GPL 3.0
- AlicenseBqualityDmaintenanceMCP server for the Hevy workout tracker API that allows reading and writing workouts, routines, exercise templates, and body measurements.2211 npm1MIT
- AlicenseAqualityDmaintenanceMCP server for Cronometer nutrition tracking using the mobile API. Enables food logging, nutrition data retrieval, diary management, and fasting tracking.131MIT
- AlicenseAqualityDmaintenanceMCP server for reading and querying Garmin Connect data, including activities, strength history, recovery, trends, and optionally creating workouts.12MIT