Skip to main content
Glama

MCP Logger

A Python/uv + FastMCP server for logging workouts, nutrition, and body metrics. Single-user local SQLite database with stdio MCP interface.

  • this was entirely vibe coded

Features

  • Workouts: Flexible workout -> exercises[] -> sets[] structure with tags, notes, RPE/RIR, distances, unilateral sides, etc.

  • Nutrition: Cronometer/MyFitnessPal-style logging with meals and OpenNutrition-backed food snapshots.

  • Body Metrics: Weight and customizable skinfold tracking.

  • Search: Cross-domain search across all data.

Related MCP server: fitMCP

Tools

Workout Tools

  • log_workout - Log a complete workout with exercises and sets

  • get_workouts - Query workouts with filters (date range, type, tag)

  • get_last_workout - Get most recent workout by type or tag

  • get_exercise_history - Get history for a specific exercise

Nutrition Tools

  • upsert_nutrition_day - Create/update a nutrition day

  • upsert_meal - Create/update a meal within a day

  • add_or_update_meal_item - Add/update food item (use with OpenNutrition MCP)

  • get_nutrition_day - Get complete day with meals, items, and totals

  • get_nutrition_days_summary - Get summaries for a date range

  • delete_meal_item, delete_meal, delete_nutrition_day - Delete operations

Body Metrics Tools

  • log_body_metrics - Log weight and skinfolds

  • get_body_metrics - Get body metrics with skinfolds

  • search_logs - Search across workouts, nutrition, and body data

Installation & Running

# Install dependencies
uv pip install -e .

# Run the MCP server (stdio interface)
uv run python -m src.main

MCP Config Example

Add to your MCP configuration:

{
  "mcpServers": {
    "logger": {
      "command": "uv",
      "args": ["run", "python", "-m", "src.main"],
      "cwd": "/path/to/mcp-logger"
    }
  }
}

Nutrition Workflow with OpenNutrition MCP

  1. AI uses OpenNutrition MCP to search for foods (search-food-by-name, get-food-by-id)

  2. AI computes macros for the desired serving size

  3. AI calls add_or_update_meal_item with food_id and calculated macros

Workout Planning

The AI can call get_last_workout or get_exercise_history to retrieve past sessions, then generate suggested workouts. Progression logic lives in the client AI, not this server.

Database

Data is stored in mcp_logger.db (SQLite) in the project root.

Example Usage

Log a Workout with Exercises

{
  "date_time": "2026-01-06T18:30:00",
  "workout_type": "Strength",
  "tags": ["olympic", "speed"],
  "notes": "Great session",
  "exercises": [
    {
      "name": "Power Clean",
      "category": "Olympic Lift",
      "notes": "From blocks",
      "sets": [
        { "reps": 3, "weight_lbs": 185 },
        { "reps": 2, "weight_lbs": 195 },
        { "reps": 1, "weight_lbs": 205 }
      ]
    },
    {
      "name": "Sprint Starts",
      "category": "Sprint",
      "notes": "3 point stance",
      "sets": [{ "reps": 6, "distance_yards": 20 }]
    },
    {
      "name": "Single Leg Box Jumps",
      "category": "Plyometric",
      "notes": "5 sets of 2 each leg",
      "sets": [{ "reps": 10, "side": "both" }]
    }
  ]
}

Set Fields

Each set can include:

  • reps: Number of repetitions (int or float)

  • weight_kg / weight_lbs: Weight in kg or lbs

  • distance_m / distance_yards: Distance for running/rowing

  • duration_s: Duration in seconds

  • side: "left", "right", or "both" (for unilateral exercises)

  • rpe: Rate of Perceived Exertion (1-10)

  • rir: Reps In Reserve (0-5)

  • is_warmup: Boolean for warmup sets

  • set_index: Manual set ordering (defaults to order inserted)

Log Body Metrics

{
  "date": "2026-01-06",
  "body_weight_kg": 85.5,
  "skinfolds": {
    "chest": 12,
    "abdomen": 18,
    "thigh": 15,
    "tricep": 10,
    "subscapular": 14,
    "suprailiac": 16,
    "midaxillary": 11
  },
  "notes": "Morning measurement"
}

MCP-logger

Available Tools

17 tools
add_exerciseB

Add an exercise to an existing workout.

Args: workout_id: ID of the workout to add exercise to name: Name of the exercise category: Optional category (e.g., 'Squat', 'Push', 'Pull') notes: Optional notes about the exercise

ParametersJSON Schema
NameRequiredDescriptionDefault
workout_idYes
nameYes
categoryNo
notesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. While 'Add an exercise' implies a write/mutation operation, it doesn't address important behavioral aspects like: whether this requires specific permissions, if the operation is idempotent, what happens on duplicate exercises, or what the response format looks like. The description provides only basic functional information without behavioral context.

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

Conciseness4/5

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

The description is efficiently structured with a clear purpose statement followed by parameter explanations. The 'Args:' section organizes parameter information cleanly. While concise, the initial purpose statement could be slightly more informative about the tool's scope or constraints.

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 mutation tool with no annotations, 4 parameters (2 required), and 0% schema description coverage, the description provides adequate functional information but lacks important context. The presence of an output schema reduces the need to describe return values, but behavioral aspects like error conditions, permissions, and idempotency remain undocumented. It's minimally viable but has clear gaps.

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 0% schema description coverage, the description provides essential parameter semantics that aren't in the schema. It explains what each parameter represents (workout ID, exercise name, optional category with examples, optional notes) and which are required versus optional. This significantly compensates for the schema's lack of descriptions, though it doesn't provide format details like what constitutes a valid workout_id.

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 action ('Add an exercise') and target resource ('to an existing workout'), making the purpose immediately understandable. However, it doesn't differentiate this tool from potential sibling tools like 'add_set' or 'log_workout' that might also involve workout modifications.

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?

The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'add_set', 'log_workout', and 'get_exercise_history' available, there's no indication of when this specific exercise-adding function is appropriate versus other workout-related operations.

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

add_or_update_meal_itemA

Add or update a food item within a meal.

The AI should first use OpenNutrition MCP to find food_id and get macros, then call this tool with the calculated values for the serving quantity.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
meal_nameYes
food_idYes
food_nameYes
serving_quantityYes
serving_unitYes
caloriesYes
protein_gYes
carbs_gYes
fats_gYes
fiber_gYes
brand_nameNo
gramsNo
notesNo
item_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output 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 the full burden. It mentions that the tool 'adds or updates,' implying mutation, but doesn't disclose behavioral traits like permissions needed, whether updates are destructive or idempotent, error handling, or rate limits. The description adds minimal context beyond the basic action.

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 appropriately sized and front-loaded: the first sentence states the purpose, and the second provides usage guidelines. Every sentence earns its place with no wasted words, making it highly concise and well-structured.

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 the complexity (15 parameters, 11 required, no annotations) and the presence of an output schema (which reduces the need to explain return values), the description is partially complete. It covers purpose and usage but lacks details on parameters, behavioral traits, and error handling, leaving gaps for a mutation tool with many inputs.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It mentions 'calculated values for the serving quantity,' which hints at 'serving_quantity' and possibly 'calories,' 'protein_g,' etc., but doesn't explain the semantics of the 15 parameters (e.g., what 'date' format, what 'meal_name' options, the role of 'item_id'). The description adds limited meaning beyond the schema.

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 tool's purpose: 'Add or update a food item within a meal.' It specifies the verb ('add or update'), resource ('food item'), and context ('within a meal'). However, it doesn't explicitly differentiate from sibling tools like 'upsert_meal' or 'delete_meal_item', which would require a 5.

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

Usage Guidelines5/5

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

The description provides explicit usage guidance: 'The AI should first use OpenNutrition MCP to find food_id and get macros, then call this tool with the calculated values for the serving quantity.' This specifies a prerequisite action (using another tool) and the timing of invocation, offering clear when-to-use instructions.

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

add_setB

Add a set to an existing exercise.

Args: exercise_id: ID of the exercise to add set to reps: Number of repetitions weight_kg: Weight in kilograms weight_lbs: Weight in pounds distance_m: Distance in meters distance_yards: Distance in yards duration_s: Duration in seconds side: 'left', 'right', or 'both' for unilateral exercises rpe: Rate of Perceived Exertion (1-10) rir: Reps In Reserve (0-5) is_warmup: Whether this is a warmup set

ParametersJSON Schema
NameRequiredDescriptionDefault
exercise_idYes
repsNo
weight_kgNo
weight_lbsNo
distance_mNo
distance_yardsNo
duration_sNo
sideNo
rpeNo
rirNo
is_warmupNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. While 'Add' implies a write/mutation operation, the description doesn't address critical behavioral aspects like required permissions, whether this operation is idempotent, what happens on failure, or what the output contains. The parameter documentation provides some context but doesn't cover overall tool behavior.

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

Conciseness4/5

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

The description is efficiently structured with a clear purpose statement followed by well-organized parameter explanations. Each parameter gets exactly one line with essential semantic information. There's no wasted verbiage, though the opening sentence could be slightly more informative about the tool's broader context.

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 mutation tool with 11 parameters and no annotations, the description does a reasonable job explaining parameters but lacks broader context. The presence of an output schema means return values are documented elsewhere, but the description should still address behavioral aspects like error conditions, side effects, or typical usage patterns given the tool's complexity.

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 0% schema description coverage, the description compensates well by providing clear semantic explanations for all 11 parameters. Each parameter gets a brief but meaningful explanation that adds value beyond the schema's type information (e.g., explaining what 'rpe' and 'rir' mean, clarifying side options, defining measurement units). This significantly enhances parameter understanding.

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 ('Add') and resource ('a set to an existing exercise'), making the purpose immediately understandable. However, it doesn't explicitly differentiate this tool from sibling tools like 'add_exercise' or 'log_workout', which would require more specific context about when to use each.

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?

The description provides no guidance on when to use this tool versus alternatives like 'add_exercise' or 'log_workout'. It mentions adding to 'an existing exercise' but doesn't specify prerequisites, dependencies, or contextual constraints that would help an agent choose between similar tools.

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

delete_mealC

Delete a meal and optionally its items.

ParametersJSON Schema
NameRequiredDescriptionDefault
meal_idYes
delete_itemsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but offers minimal behavioral insight. It hints at destructive action ('Delete') and an optional cascade effect ('optionally its items'), but lacks details on permissions, irreversibility, error conditions, or response format. The output schema exists but isn't described, leaving behavior opaque.

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, efficient sentence with zero wasted words. It front-loads the core action ('Delete a meal') and appends the optional feature concisely. Every element earns its place, making it easy to parse quickly.

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 destructive tool with no annotations, 0% schema coverage, and an output schema (unexplained), the description is inadequate. It misses critical context: safety warnings, authentication needs, error handling, and what the output contains. Sibling tools suggest a nutrition/health context, but no domain-specific guidance is provided.

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 description coverage is 0%, so the description must compensate but only partially does. It clarifies that 'meal_id' identifies the meal to delete and 'delete_items' controls cascading deletion, adding meaning beyond schema types. However, it doesn't explain parameter constraints (e.g., valid meal_id ranges) or default behavior (delete_items defaults to true), leaving gaps.

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 action ('Delete') and resource ('a meal'), and specifies an optional behavior ('and optionally its items'). It distinguishes from sibling 'delete_meal_item' by targeting the meal itself rather than individual items. However, it doesn't explicitly contrast with other meal-related tools like 'upsert_meal' or 'delete_nutrition_day'.

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?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., meal must exist), exclusions (e.g., cannot delete if referenced elsewhere), or comparisons to siblings like 'delete_meal_item' for partial deletions or 'upsert_meal' for updates. Usage is implied only by the tool name.

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

delete_meal_itemC

Delete a meal item.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/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 the full burden of behavioral disclosure. 'Delete' implies a destructive mutation, but the description doesn't mention whether this operation is reversible, what permissions are required, what happens to associated data, or what the output contains. This leaves critical behavioral aspects unspecified for a destructive tool.

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 extremely concise at just four words, with zero wasted language. It's front-loaded with the core action and resource, making it easy to parse quickly. Every word earns its place in conveying the essential purpose.

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 that this is a destructive tool with no annotations and 0% schema description coverage, but with an output schema present, the description is minimally adequate. The output schema will provide return value information, but the description still lacks crucial context about behavioral implications, parameter meaning, and differentiation from sibling tools.

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

Parameters2/5

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

The input schema has 0% description coverage, with one required parameter 'item_id' of type integer. The description adds no semantic information about what 'item_id' represents, how to obtain it, or its format. For a tool with no schema descriptions, the description fails to compensate by explaining the parameter's meaning or usage.

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 action ('Delete') and the resource ('a meal item'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'delete_meal' or 'delete_nutrition_day', which would require specifying what distinguishes a 'meal item' from those other entities.

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?

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'delete_meal', 'upsert_meal', and 'add_or_update_meal_item', there's no indication of the relationship between these tools or when deletion of a meal item is appropriate versus deletion of an entire meal.

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

delete_nutrition_dayB

Delete a nutrition day and optionally cascade to meals/items.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
cascadeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden. It discloses the destructive nature ('Delete') and optional cascading behavior, which is critical. However, it omits key behavioral traits: permissions required, whether deletion is reversible, rate limits, error responses, or what 'cascade' entails precisely. For a destructive operation, this leaves significant gaps.

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, efficient sentence that front-loads the core action and includes the key optional behavior. Every word earns its place with no redundancy or fluff, making it easy to parse quickly.

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 a destructive tool with 2 parameters, 0% schema coverage, no annotations, but an output schema exists, the description is minimally adequate. It covers the basic action and cascading option, but lacks details on permissions, side effects, or error handling. The output schema may help, but the description doesn't reference it, leaving gaps in overall context.

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 description coverage is 0%, so the description must compensate. It adds meaning by explaining that 'cascade' affects 'meals/items', clarifying its purpose beyond a boolean flag. However, it doesn't describe the 'date' parameter's format or semantics. With 2 parameters and partial coverage, this meets the baseline for moderate schema support.

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 action ('Delete') and target resource ('a nutrition day'), with additional scope ('optionally cascade to meals/items'). It distinguishes from sibling 'delete_meal' and 'delete_meal_item' by targeting the broader 'nutrition day' entity. However, it doesn't explicitly contrast with 'upsert_nutrition_day' for update scenarios.

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 explicit guidance on when to use this tool versus alternatives like 'delete_meal' or 'delete_meal_item' is provided. The description implies usage for deleting nutrition days, but lacks context on prerequisites, error conditions, or typical workflows. Sibling tools suggest a nutrition/meal management system, but no integration advice is given.

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

get_body_metricsC

Get body metrics with skinfolds.

ParametersJSON Schema
NameRequiredDescriptionDefault
from_dateNo
to_dateNo
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/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 the full burden of behavioral disclosure. It only states it 'gets' data, implying a read-only operation, but doesn't mention permissions, rate limits, data format, or whether it returns paginated results. This is inadequate for a tool with parameters and potential complexity.

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 extremely concise with a single sentence, 'Get body metrics with skinfolds.', which is front-loaded and wastes no words. However, this brevity contributes to underspecification rather than clarity.

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?

Given the tool has 4 parameters, 0% schema coverage, no annotations, but an output schema exists, the description is incomplete. It doesn't explain what the tool returns, how parameters affect results, or behavioral aspects like error handling. The output schema might cover return values, but the description lacks necessary context for effective use.

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

Parameters2/5

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

Schema description coverage is 0%, so the schema provides no parameter descriptions. The tool description adds no information about parameters like 'from_date', 'to_date', 'limit', or 'offset', leaving their purpose and format (e.g., date strings, pagination) unexplained. This fails to compensate for the low schema coverage.

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

Purpose3/5

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

The description states the tool 'Get body metrics with skinfolds' which indicates it retrieves body metrics data, but it's vague about what specific metrics or skinfold measurements are included. It doesn't distinguish from sibling tools like 'log_body_metrics' (which likely creates entries) or 'get_nutrition_day' (which retrieves nutrition data), leaving ambiguity about its unique scope.

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. For example, it doesn't specify if this is for historical data retrieval, how it differs from 'log_body_metrics' (which might be for inputting data), or any prerequisites like authentication needs. The description lacks context for tool selection.

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

get_exercise_historyB

Get history of a specific exercise across workouts.

ParametersJSON Schema
NameRequiredDescriptionDefault
exercise_nameYes
from_dateNo
to_dateNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states this is a 'Get' operation, implying it's likely read-only, but doesn't confirm this or describe other traits like authentication needs, rate limits, error conditions, or what the output contains (though an output schema exists). For a tool with 4 parameters and no annotations, more behavioral context is needed.

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 wasted words. It's front-loaded with the core purpose and efficiently conveys the tool's function. Every part of the sentence earns its place by specifying what is being retrieved and for what 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 the tool has 4 parameters with 0% schema coverage and an output schema exists, the description is moderately complete. It covers the basic purpose but lacks details on parameter usage, behavioral traits, and differentiation from siblings. The output schema mitigates the need to describe return values, but overall completeness is adequate with clear gaps.

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?

The description mentions 'history of a specific exercise' which aligns with the 'exercise_name' parameter, and 'across workouts' hints at date ranges, loosely relating to 'from_date' and 'to_date'. However, with 0% schema description coverage, the schema provides no parameter details, and the description doesn't explain parameter purposes, formats (e.g., date string format), or the 'limit' parameter. It adds minimal value beyond the schema.

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 tool's purpose with a specific verb ('Get') and resource ('history of a specific exercise across workouts'), making it easy to understand what the tool does. However, it doesn't explicitly differentiate from sibling tools like 'get_workouts' or 'search_logs' which might also retrieve exercise-related data, so it doesn't reach the highest score.

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?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'get_workouts' (which might list workouts containing exercises) or 'search_logs' (which could filter logs including exercises), leaving the agent to guess based on tool names alone. No exclusions or prerequisites are stated.

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

get_last_workoutC

Get the most recent workout matching type or tag.

ParametersJSON Schema
NameRequiredDescriptionDefault
workout_typeNo
tagNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/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 mentions the tool retrieves data ('Get'), implying read-only behavior, but doesn't disclose other traits like error handling, authentication needs, rate limits, or what happens if no match is found. This leaves significant gaps for a tool with parameters.

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, efficient sentence with zero waste. It front-loads the core purpose ('Get the most recent workout') and adds essential qualification ('matching type or tag'), making it appropriately sized for its complexity.

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 annotations, 0% schema coverage, but an output schema exists, the description is minimally adequate. It states the purpose but lacks details on parameters, behavior, and usage context. The output schema may cover return values, but the description doesn't fully compensate for other gaps in a read operation tool.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It mentions parameters 'type or tag' but doesn't explain their semantics, valid values, interactions (e.g., if both are provided), or defaults. The description adds minimal meaning beyond the schema's property names.

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 action ('Get') and resource ('most recent workout'), specifying it retrieves based on matching criteria ('type or tag'). It distinguishes from sibling 'get_workouts' (plural) by focusing on the single most recent match, though it doesn't explicitly contrast with all siblings.

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 explicit guidance on when to use this tool versus alternatives like 'get_workouts' or 'search_logs' is provided. The description implies usage for retrieving a single recent workout with optional filters, but lacks context on prerequisites, exclusions, or comparative scenarios.

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

get_nutrition_dayB

Get a complete nutrition day with meals and items.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool 'Get's data, implying a read-only operation, but doesn't specify if it requires authentication, has rate limits, returns paginated results, or handles errors. This leaves significant gaps in understanding the tool's behavior beyond basic functionality.

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 extremely concise and front-loaded in a single sentence, with no wasted words. It efficiently communicates the core purpose without unnecessary details, making it easy for an agent to parse quickly.

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 the tool has an output schema, the description doesn't need to explain return values, which helps completeness. However, with no annotations, low schema coverage, and multiple sibling tools, the description is minimal and lacks context about usage, parameters, and behavior, making it only adequate for basic understanding but insufficient for optimal tool selection.

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?

The description adds no parameter semantics beyond what the input schema provides, as schema description coverage is 0%. It doesn't explain the 'date' parameter's format (e.g., YYYY-MM-DD) or constraints. However, with only one parameter, the baseline is 4, but the lack of any descriptive context reduces it to 3, as the schema alone is insufficient for full understanding.

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 tool's purpose with a specific verb ('Get') and resource ('complete nutrition day with meals and items'), making it easy to understand what the tool does. However, it doesn't explicitly differentiate from sibling tools like 'get_nutrition_days_summary' or 'upsert_nutrition_day', which would require more specific scope or context.

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?

The description provides no guidance on when to use this tool versus alternatives such as 'get_nutrition_days_summary' for summaries or 'upsert_nutrition_day' for updates. It lacks context about prerequisites, timing, or exclusions, leaving the agent to infer usage from the tool name alone.

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

get_nutrition_days_summaryC

Get nutrition summaries for a date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
from_dateNo
to_dateNo
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/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 the full burden of behavioral disclosure. It states the tool retrieves summaries but does not clarify if it's read-only, requires authentication, has rate limits, or describes the output format. The description lacks critical behavioral traits, leaving the agent with insufficient context for safe and effective use.

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, efficient sentence with zero wasted words. It is appropriately sized and front-loaded, directly stating the tool's core function without unnecessary elaboration. Every part of the sentence earns its place by conveying essential information.

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 the tool's moderate complexity (4 parameters, no annotations) and the presence of an output schema, the description is minimally adequate. It covers the basic purpose but lacks details on parameter usage, behavioral traits, and differentiation from siblings. The output schema mitigates some gaps, but the description should do more to guide the agent effectively.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for undocumented parameters. It mentions a date range, which aligns with 'from_date' and 'to_date', but does not explain their format, defaults, or optionality. It omits any reference to 'limit' and 'offset' for pagination, failing to add meaningful semantics beyond the bare schema.

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

Purpose3/5

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

The description states the tool's purpose as retrieving nutrition summaries for a date range, which is clear but vague. It specifies the resource (nutrition summaries) and scope (date range) but lacks detail on what constitutes a 'summary' or how it differs from sibling tools like 'get_nutrition_day'. It avoids tautology by not merely restating the name.

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. The description does not mention sibling tools like 'get_nutrition_day' for single-day data or 'search_logs' for broader queries, nor does it specify prerequisites or exclusions. Usage is implied by the date range focus but not explicitly defined.

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

get_workoutsC

Query workouts with various filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
from_dateNo
to_dateNo
workout_typeNo
tagNo
exercise_name_containsNo
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/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 mentions 'various filters' but doesn't disclose behavioral traits like pagination (implied by limit/offset in schema), authentication needs, rate limits, or what happens with null parameters. For a query tool with 7 parameters, this leaves significant gaps in understanding how it behaves.

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, efficient sentence with zero waste. It's appropriately sized and front-loaded, directly stating the tool's function without unnecessary elaboration. Every word earns its place, making it easy to parse quickly.

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?

Given 7 parameters with 0% schema coverage, no annotations, and sibling tools that suggest a fitness-tracking context, the description is incomplete. It doesn't explain filter semantics, output format (though an output schema exists), or how this tool fits into the broader system. For a query tool with multiple filters, more context is needed to use it effectively.

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

Parameters2/5

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

Schema description coverage is 0%, so parameters are undocumented in the schema. The description only vaguely references 'various filters' without explaining what the 7 parameters mean (e.g., date ranges, workout types, tags). It adds minimal semantic value beyond the parameter names themselves, failing to compensate for the schema gap.

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

Purpose3/5

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

The description 'Query workouts with various filters' states the action (query) and resource (workouts) but is vague about scope and differentiation. It doesn't specify whether this returns all workouts or a subset, nor how it differs from sibling tools like 'get_last_workout' or 'log_workout'. The purpose is understandable but lacks specificity.

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. With siblings like 'get_last_workout' (likely for recent data) and 'log_workout' (likely for creating records), the description offers no context for choosing this filtered query tool. Usage is implied only by the word 'query', but no explicit when/when-not instructions are given.

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

log_body_metricsB

Log body weight and skinfold measurements.

Args: date: Date in YYYY-MM-DD format body_weight_kg: Body weight in kilograms (optional) skinfolds: Dictionary of skinfold measurements in mm (optional). Can be a single site like {"abdomen": 10} or multiple sites like {"chest": 12, "abdomen": 18, "thigh": 15}. Common sites: abdomen, chest, thigh, tricep, subscapular, suprailiac, midaxillary notes: Optional notes about the measurement

Example: Single belly skinfold: {"abdomen": 10} Multiple sites: {"chest": 12, "abdomen": 18, "thigh": 15}

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
body_weight_kgNo
skinfoldsNo
notesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/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 the full burden. It states the tool logs data, implying a write operation, but doesn't disclose behavioral traits like whether it creates new records, updates existing ones, requires specific permissions, or handles errors. The example clarifies input format but not system behavior.

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

Conciseness4/5

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

The description is appropriately sized and front-loaded with the purpose, followed by structured parameter explanations and examples. Every sentence adds value, but it could be slightly more concise by integrating the example more tightly with the parameter descriptions.

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?

Given the tool's moderate complexity (4 parameters, 1 required) and the presence of an output schema (which reduces the need to explain return values), the description is fairly complete. It covers input semantics well but lacks behavioral context and usage guidelines, which are minor gaps given the output schema support.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate. It effectively adds meaning beyond the schema by detailing each parameter: date format, optional body weight in kg, skinfolds as a dictionary with examples and common sites, and optional notes. This provides clear semantics for all parameters.

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 tool's purpose: 'Log body weight and skinfold measurements.' It specifies the verb ('log') and resources ('body weight and skinfold measurements'), making the action clear. However, it doesn't explicitly differentiate from sibling tools like 'get_body_metrics', which is a read operation, though the distinction is implied by the verb 'log' versus 'get'.

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?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'get_body_metrics' for retrieving data or specify prerequisites such as authentication. Usage is implied by the tool's name and purpose, but explicit context is lacking.

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

log_workoutB

Log a complete workout with exercises and sets.

Returns the fully logged workout with all exercises and sets for confirmation.

Args: date_time: ISO datetime string (e.g., "2026-01-06T18:30:00") workout_type: Optional type/category for the workout tags: Optional list of tags (e.g., ["legs", "sprint"]) notes: Optional notes for the workout exercises: List of exercises with sets. Each exercise should have: - name: str (required) - category: Optional[str] - notes: Optional[str] - sets: List of sets with fields like reps, weight_kg, weight_lbs, distance_yards, side, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
date_timeYes
workout_typeNo
tagsNo
notesNo
exercisesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states it 'Returns the fully logged workout' but doesn't specify success/failure conditions, error handling, or side effects like data persistence. For a write operation with zero annotation coverage, this lacks critical behavioral context like permissions or data validation.

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

Conciseness4/5

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

The description is appropriately sized and front-loaded: the first sentence states the purpose, the second explains the return, and the 'Args:' section efficiently details parameters. Every sentence adds value, though the nested explanation of 'exercises' could be slightly more structured for readability.

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 5 parameters with 0% schema coverage and no annotations, the description does well on parameters but lacks behavioral context for a write operation. The presence of an output schema means return values don't need explanation, but completeness is moderate due to missing usage guidelines and transparency for a mutation tool.

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?

Schema description coverage is 0%, so the description must compensate. It adds significant value by explaining all 5 parameters: it clarifies 'date_time' format, lists optional fields, and details the nested 'exercises' structure with required/optional sub-fields. This goes well beyond the bare schema, though it doesn't cover all possible set fields exhaustively.

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 tool's purpose: 'Log a complete workout with exercises and sets.' It specifies the verb ('Log') and resource ('workout'), and distinguishes it from sibling tools like 'add_exercise' or 'add_set' by emphasizing completeness. However, it doesn't explicitly differentiate from 'get_workouts' or 'get_last_workout' beyond the write vs. read distinction.

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?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, when to choose this over 'add_exercise' or 'add_set' for incremental logging, or how it relates to sibling tools like 'get_workouts' for retrieval. Usage is implied by the purpose but not explicitly stated.

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

search_logsC

Search across workouts, nutrition days, and body metrics.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
domainsNo
from_dateNo
to_dateNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions what domains are searchable but doesn't describe the search behavior (full-text? partial match?), result format, pagination (though 'limit' parameter exists), error conditions, or authentication requirements. This leaves significant gaps for a search 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 extremely concise - a single sentence that efficiently communicates the core functionality. Every word earns its place with no redundancy or unnecessary elaboration.

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 the tool's moderate complexity (search across multiple domains with 5 parameters), no annotations, but with an output schema present, the description is minimally adequate. The output schema will handle return value documentation, but the description lacks sufficient context about search behavior, parameter usage, and differentiation from sibling tools.

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

Parameters2/5

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

With 0% schema description coverage and 5 parameters (only 'query' required), the description provides minimal parameter context. It mentions the three searchable domains which somewhat relates to the 'domains' parameter, but doesn't explain parameter purposes, formats (e.g., date format for 'from_date'/'to_date'), or how they interact. The description doesn't adequately compensate for the schema's lack of descriptions.

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 tool's purpose: searching across three specific data types (workouts, nutrition days, and body metrics). It uses a specific verb ('Search') and identifies the resources, but doesn't distinguish this search tool from potential sibling search operations (none exist in the sibling list).

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?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention any prerequisites, constraints, or compare it to other tools like 'get_workouts' or 'get_body_metrics' that might retrieve similar data without search functionality.

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

upsert_mealC

Create or update a meal within a nutrition day.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
nameYes
order_indexNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('Create or update') but doesn't clarify permissions, side effects (e.g., if updates overwrite existing data), or error handling. This is insufficient for a mutation tool with zero annotation coverage.

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, efficient sentence with zero waste, clearly front-loaded with the core action. Every word earns its place, making it highly concise and well-structured.

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 the tool's complexity (a mutation with 3 parameters), no annotations, and 0% schema coverage, the description is incomplete—it lacks behavioral and parametric details. However, the presence of an output schema mitigates some need to explain return values, keeping it from a lower score.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for undocumented parameters. It mentions 'a meal within a nutrition day' but doesn't explain the meaning of 'date', 'name', or 'order_index', nor their formats or constraints. This adds minimal value beyond the schema's structure.

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 ('Create or update') and resource ('a meal within a nutrition day'), making the purpose specific and understandable. However, it doesn't explicitly differentiate from sibling tools like 'add_or_update_meal_item' or 'upsert_nutrition_day', which prevents a perfect score.

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?

The description provides no guidance on when to use this tool versus alternatives such as 'add_or_update_meal_item' or 'delete_meal', nor does it mention prerequisites like the existence of a nutrition day. It lacks explicit when/when-not instructions or context for selection among siblings.

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

upsert_nutrition_dayC

Create or update a nutrition day entry.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
notesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but offers minimal behavioral insight. 'Create or update' implies mutation but doesn't specify permissions needed, whether it's idempotent, what happens on conflicts, or typical response format. It mentions no rate limits, error conditions, or side effects beyond the basic 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, efficient sentence with zero wasted words. It's front-loaded with the core action and resource, making it immediately scannable and appropriately sized for the tool's apparent complexity.

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 the tool has an output schema (which should document return values), the description's minimalism is somewhat acceptable. However, for a mutation tool with zero annotation coverage and 2 parameters (one required), it should provide more context about behavior, parameter usage, and relationships to sibling tools to be fully complete.

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

Parameters2/5

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

Schema description coverage is 0%, so the schema provides no parameter documentation. The description adds no parameter semantics beyond the tool name implying 'date' is involved. It doesn't explain what 'date' format is expected, what 'notes' are for, or how they affect the upsert operation.

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 ('Create or update') and resource ('a nutrition day entry'), making the purpose immediately understandable. It distinguishes from sibling tools like 'get_nutrition_day' (read-only) and 'delete_nutrition_day' (destructive), though it doesn't explicitly differentiate from 'upsert_meal' which operates on a different resource.

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?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., whether a nutrition day must exist for updates), when to prefer 'create' vs 'update', or how it relates to siblings like 'get_nutrition_day' for checking existence or 'upsert_meal' for related operations.

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. Dates show when Glama detected each change.

  1. 17 tool updatesv0.1.0
    • First observedadd_exercise
    • First observedadd_or_update_meal_item
    • First observedadd_set
    • First observeddelete_meal
    • First observeddelete_meal_item
    • First observeddelete_nutrition_day
    • First observedget_body_metrics
    • First observedget_exercise_history
    • First observedget_last_workout
    • First observedget_nutrition_day
    • First observedget_nutrition_days_summary
    • First observedget_workouts
    • First observedlog_body_metrics
    • First observedlog_workout
    • First observedsearch_logs
    • First observedupsert_meal
    • First observedupsert_nutrition_day

TDQS

B3.2/5.0
Disambiguation4/5

Most tools have distinct purposes targeting specific domains (workouts, nutrition, body metrics), but some overlap exists. For example, 'log_workout' and 'add_exercise' both handle exercise logging, which could cause confusion about when to use each. However, the descriptions clarify that 'log_workout' is for complete workouts while 'add_exercise' is for incremental updates.

Naming Consistency4/5

The naming follows a consistent verb_noun pattern throughout (e.g., 'add_exercise', 'get_workouts', 'log_body_metrics'), with only minor deviations. The main inconsistency is 'search_logs' (verb_noun) versus 'get_exercise_history' (verb_adjective_noun), but overall the pattern is clear and predictable.

Tool Count4/5

With 17 tools, the count is slightly high but reasonable for a comprehensive fitness and nutrition logging server. It covers workouts, nutrition, and body metrics, so each tool generally earns its place, though some consolidation might improve coherence (e.g., combining delete operations).

Completeness5/5

The tool set provides complete CRUD/lifecycle coverage for workouts, nutrition days, meals, and body metrics. It includes creation (log_workout, upsert_nutrition_day), retrieval (get_workouts, get_nutrition_day), updates (add_exercise, upsert_meal), and deletion (delete_meal, delete_nutrition_day), with no obvious gaps for the domain.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Local-first nutrition tracker MCP server for Hermes, enabling food, alias, recipe, and meal log management with SQLite persistence.
    -
  • F
    license
    Not graded
    quality
    B
    maintenance
    A multi-platform fitness MCP server that syncs data from Garmin, Strava, Google Fit, and Suunto into a local DuckDB database and provides analytics tools via MCP.
    1
    -
  • F
    license
    A
    quality
    B
    maintenance
    Personal workout coach MCP server that logs exercises in natural language, tracks progress with SQLite, and provides coaching signals like estimated 1RM and volume trends.
    6
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    A personal health and fitness MCP server that provides tools for managing profile data, goals, body measurements, nutrition, workouts, sleep, check-ins, life events, analytics, and coach memories via Supabase Postgres.
    1
    -

Latest Blog Posts

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/JohnZolton/MCP-logger'

If you have feedback or need assistance with the MCP directory API, please join our Discord server