Skip to main content
Glama

MCP Apps Starter Kit

I built these 2 mini mcp apps for my own daily use inside Claude Desktop — tracking workouts, planning trips, budgeting, comparing products, and making decisions. They turned out to be genuinely useful, so I'm putting them out here for anyone to explore, remix, or use as a starting point for their own MCP Apps.

Each app renders as a real interactive UI right inside Claude's chat — not just text, but React components with charts, forms, progress tracking, and two-way communication with Claude. If you've ever wished Claude could show you something visual instead of just describing it, this is what that looks like.

Built with the MCP Apps SDK.


The 5 Apps

Workout Tracker

"Give me a 4-week strength training plan"

This is the app I've spent the most time on — it's the most feature-rich and thoroughly tested of the five. It demonstrates what's really possible with MCP Apps:

  • Dark theme with a clean zinc + blue palette

  • Expandable exercise cards with form cues, sets/reps, and muscle group indicators

  • Progress tracking — check off exercises, log actual weights/reps, save to disk

  • Persistent history — saved to ~/.claude-workout-log.json, with automatic dedup

  • Video references — auto-fetches YouTube form guides and opens them via app.openLink()

  • Batch modifications — tweak multiple exercises, send all changes to Claude at once

  • Bidirectional chat — the app talks back to Claude to modify plans, request videos, or regenerate

Trip Planner

"I'm in Mumbai and want a 5-day vacation with a ₹50,000 budget — show me some options"

A two-phase trip planning experience. Phase 1 (Trip Explorer) shows 3-5 destination options side by side with:

  • Distance + travel modes — km away, with flight/train/drive durations from your city

  • Weather — expected temperature range and conditions

  • Budget fit — color-coded against your budget (green/yellow/red)

  • Adjustable sliders — change budget or trip duration, hit "Refresh options" to regenerate

  • Multi-select — pick up to 2 destinations to compare detailed itineraries side by side

  • Currency support — INR, USD, EUR, etc. with proper formatting

Phase 2 (Itinerary) renders a day-by-day plan where you can:

  • Swap or remove individual activities with one tap

  • Comment on any activity with specific feedback

  • Adjust trip style — quick chips like "More relaxed", "Foodie focus", or type your own

  • Queue changes and send them all to Claude at once to regenerate


The following 3 apps are work-in-progress — they render and are functional, but haven't been as heavily tested or polished. Feel free to try them out and iterate on them.

Budget Planner (WIP)

"Help me plan a $5K monthly budget"

Pie chart + bar chart breakdown of spending categories with surplus/deficit tracking. I use this whenever I want to sanity-check how I'm allocating money across categories.

Product Comparison (WIP)

"Compare MacBook Air M3 vs ThinkPad X1 Carbon"

Side-by-side cards with pros/cons, star ratings, and a "Best Pick" badge. Great for any time you're weighing two or more options — laptops, tools, services, whatever.

Decision Matrix (WIP)

"Help me decide between 3 apartments"

Weighted criteria table with heatmap-style scoring and automatic rankings. I use this for any multi-factor decision — it forces you to think about what actually matters.


Related MCP server: PopUI

Screenshots

Coming soon — I'll add screenshots showing each app running inside Claude Desktop so you can see what these look like in practice before you install them.

To add your own screenshots:

  1. Take a screenshot of each app in Claude Desktop

  2. Save them in a screenshots/ folder

  3. Uncomment the image lines in this README


Quick Start

# Clone
git clone https://github.com/rushildharhakim/mcp-apps-starter-kit.git
cd mcp-apps-starter-kit

# Install & build
npm install --legacy-peer-deps
npm run build

# Add to Claude Desktop
# Edit: ~/Library/Application Support/Claude/claude_desktop_config.json

Add this to your claude_desktop_config.json:

{
  "mcpServers": {
    "starter-kit": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-apps-starter-kit/dist/server.js"]
    }
  }
}

Restart Claude Desktop. Try any of the example prompts above.

How It Works

You type a prompt → Claude calls a render_* tool → MCP server returns structured data + UI
                                                          ↓
                                                 Claude Desktop loads the HTML view
                                                          ↓
                                                 React app renders in a sandboxed iframe
                                                          ↓
                                                 You interact → app talks back to Claude

Each view is a self-contained React app bundled into a single HTML file via Vite + vite-plugin-singlefile. The MCP server registers both a tool (to receive structured data from Claude) and a resource (to serve the HTML view to Claude Desktop).

Key SDK Patterns

API

What it does

registerAppTool()

Registers a tool that returns structuredContent + links to a UI resource

registerAppResource()

Serves the HTML view file to Claude Desktop

useApp() + ontoolresult

React hook to receive tool result data in the iframe

app.callServerTool()

Calls MCP server tools from the iframe (e.g., save workout log)

app.sendMessage()

Injects a message into Claude's conversation from the iframe

app.openLink()

Opens external URLs in the default browser (bypasses iframe sandbox)

File Structure

mcp-apps-starter-kit/
  src/
    server.ts                          # MCP server — 6 tools + 6 resources + 2 utility tools
    views/
      shared/styles.ts                 # Inline style helpers
      BudgetView.tsx                   # Pie + bar charts (Recharts)
      ComparisonView.tsx               # Side-by-side comparison grid
      TripExplorerView.tsx             # Destination comparison + selection (Phase 1)
      TripPlannerView.tsx              # Interactive day-by-day itinerary (Phase 2)
      WorkoutPlanView.tsx              # Interactive workout tracker
      DecisionMatrixView.tsx           # Weighted decision matrix + heatmap
      *.html                           # Entry points for each view
  package.json
  tsconfig.json
  vite.config.ts

Tech Stack

  • MCP SDK: @modelcontextprotocol/sdk + @modelcontextprotocol/ext-apps

  • React 19 with inline styles (no CSS framework needed in sandboxed iframes)

  • Recharts for pie/bar/line charts

  • Vite + vite-plugin-singlefile for bundling views into self-contained HTML

  • TypeScript for the server, JSX for views

License

MIT

Available Tools

8 tools
get_workout_logA

Retrieve workout history from the log file

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/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. 'Retrieve' implies a read-only operation, and 'from the log file' suggests no mutation, but the description does not explicitly state that there are no side effects, permission requirements, or return format details. It is not misleading but is sparse.

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 concise sentence, 'Retrieve workout history from the log file', is front-loaded with the verb and resource. No wordy filler.

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 this is a simple no-parameter read tool with no output schema, the description provides the core purpose but lacks specifics about the return shape or whether it returns all history or a filtered subset. It is minimally complete but leaves gaps that could matter for the agent.

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 input schema has zero parameters, so there is nothing to explain. The baseline for 0 params is 4, and the description does not claim any parameter-specific behavior. It adds no parameter semantics but none are needed.

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?

Description uses specific verb 'Retrieve' and identifies the resource 'workout history from the log file'. It clearly distinguishes from sibling tools like save_workout_log (write) and render_workout (visualization), though it does not explicitly name alternatives. Clear but no explicit sibling differentiation.

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?

Description implies the tool is used to access workout history but provides no conditions, exclusions, or comparison to alternatives. It does not state when to choose this over render_workout or save_workout_log. Usage is implied rather than explicit.

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

render_budgetBudget TrackerA

Render a visual budget breakdown with pie chart of spending categories, bar chart of budget vs actual, and surplus/deficit indicator. Pass categories as a JSON array of objects with name, budgeted, and actual fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoDashboard title
categoriesYesJSON array: [{"name":"Rent","budgeted":1500,"actual":1500}, ...]
total_budgetYesTotal monthly budget amount

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 conveys that this tool renders visuals, implying a non-destructive, read-only operation. It does not explicitly state side effects or prerequisites, but the verb 'Render' is sufficiently clear for an agent. It does not contradict annotations (none exist).

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?

Two concise sentences, front-loaded with the primary purpose. Every word earns its place, no redundancy or padding.

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 it's a render tool with three parameters and no output schema, the description covers the main behavior and key input format. It lacks explicit error handling or return value details, but for a visualization tool this is adequate.

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 100%, so the baseline is 3. The description's mention of categories as a JSON array repeats the schema's example, adding no new semantic value. It does not clarify title or total_budget beyond what the schema already states.

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 identifies the tool as a renderer for budget breakdowns, specifying pie chart, bar chart, and surplus/deficit indicator. This distinguishes it from sibling render tools like render_comparison or render_trip, which serve different domains.

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

Usage Guidelines4/5

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

The context is clear: use this when you need to visualize a budget. It does not explicitly name alternatives or exclusion conditions, but the budget-specific nature is obvious from the description. Lacks explicit 'when not to use' guidance.

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

render_comparisonProduct ComparisonA

Render a side-by-side comparison of products or options with pros, cons, ratings, and prices. Pass options as a JSON array.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoComparison title
optionsYesJSON array: [{"name":"Option A","pros":["Fast","Cheap"],"cons":["Limited"],"rating":4.5,"price":"$999"}, ...]

TDQS

A3.8/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 only says 'render' without explaining side effects, rendering output format, error handling, or whether this is a read-only operation. This is a significant gap for a tool with no annotation support.

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 exceptionally concise with two short sentences, front-loading the purpose and then giving an essential usage instruction. Every word earns its place, with no redundancy or filler.

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 comprehensive schema descriptions, the description provides adequate context for selection and invocation. However, the absence of an output schema and lack of behavioral details about the rendered output means it is not fully complete for an agent that needs to know what to expect after invocation.

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 input schema fully documents both parameters, including a detailed example for 'options' and a description for 'title'. The tool description only repeats the instruction to pass options as a JSON array, adding no new semantic information beyond what the schema already provides, so the baseline score of 3 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 renders a side-by-side comparison of products/options, specifying key elements like pros, cons, ratings, and prices. This distinguishes it from sibling render tools such as render_budget or render_trip, which focus on different content types.

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

Usage Guidelines4/5

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

The description implies the tool is used when a comparative view of options is needed, and provides explicit input instructions (pass options as a JSON array). However, it does not mention when not to use it or suggest alternatives like render_decision_matrix, so it lacks explicit exclusionary guidance.

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

render_decision_matrixDecision MatrixA

Render a weighted decision matrix comparing options across criteria with scores, heatmap coloring, and a best-pick recommendation. Pass options and criteria as JSON arrays.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoDecision title
optionsYesJSON array: [{"name":"Option A","scores":{"Price":8,"Location":7,"Space":9}}, ...]
criteriaYesJSON array: [{"name":"Price","weight":3},{"name":"Location","weight":2}, ...]

TDQS

A4/5.0
Behavior3/5

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

No annotations are present, so the description carries the full burden. It discloses the tool's rendering behavior with heatmap coloring and best-pick recommendation, but omits details like output format, handling of invalid JSON, or weight normalization. This is adequate but not comprehensive.

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 sentences and 24 words, front-loaded with the main verb and object. It mentions only essential details (input format, output features) with no filler, making it exceptionally concise and well-structured.

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 render tool with 3 parameters and no output schema, the description provides a clear picture of what the tool does and what input to provide. It lacks return-value specifics and deeper weight semantics, but the simple schema and focused purpose make it adequately 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 description coverage is 100%, so baseline is 3. The description adds 'Pass options and criteria as JSON arrays,' which reinforces but does not extend the schema. It does not clarify semantic constraints like score ranges or weight sum requirements, adding minimal value beyond the schema.

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 'Render' and resource 'weighted decision matrix' with explicit output features (scores, heatmap coloring, best-pick recommendation). It clearly distinguishes this tool from siblings like render_budget and render_comparison by focusing on weighted multi-criteria comparisons.

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

Usage Guidelines4/5

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

The description implies a clear use case: comparing options across weighted criteria to produce a decision matrix. It lacks explicit when-not-to-use or alternative tool references, but the context is unambiguous and self-contained, earning a 4 for clear implied usage.

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

render_tripTrip PlannerA

Render a day-by-day trip itinerary with time slots, locations, costs, and a budget tracker. The user can swap, remove, or comment on individual activities and send style preferences (e.g. 'make it more relaxed') back to Claude. Pass itinerary as a JSON array of day objects. Use the same currency as the trip explorer if the user came from there.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoTrip title
currencyNoCurrency code, e.g. INR, USD, EUR. Defaults to USD.
itineraryYesJSON array: [{"day":"Day 1 - Arrival","activities":[{"time":"9:00 AM","activity":"Visit museum","location":"Downtown","cost":25,"notes":"Book online"}]}, ...]
trip_daysNoNumber of trip days — used for regeneration requests
destinationNoDestination name, e.g. 'Goa' — used for regeneration requests
total_budgetNoTotal trip budget in the specified currency

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 the burden. It discloses interactive user behaviors (swap, remove, comment, send preferences) and a currency consistency rule. It does not explicitly mention that this is a render-only operation, but the 'Render' verb plus interactive context sufficiently conveys behavior.

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 three sentences, front-loaded with the purpose, and each sentence adds distinct information. No fluff or redundant content.

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?

It covers the main purpose, input format, interactive modifications, and a contextual nuance (currency match). While it doesn't explicitly explain the trip_days/destination parameters, the schema already does. For a rendering tool without an output schema, this is sufficiently 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 baseline is 3. The description adds some value by advising to use the same currency as the trip explorer, which supplements the 'currency' parameter. However, it largely restates the itinerary structure already described in the schema.

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 and resource: 'Render a day-by-day trip itinerary' with details on content (time slots, locations, costs, budget tracker). It distinguishes itself from sibling render tools by highlighting interactive features like swapping/removing/comments and sending style preferences back to Claude.

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

Usage Guidelines4/5

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

It gives clear context: pass itinerary as a JSON array, and use the same currency as the trip explorer if applicable. It does not explicitly state when to use versus alternatives, but the description's specificity about itinerary rendering implies its primary use case.

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

render_trip_explorerTrip ExplorerA

Render an interactive destination comparison view where the user can explore 3-5 trip options side by side before committing to a detailed itinerary. Each destination MUST include: name, country, tagline, budget_estimate (low/high in the specified currency), distance_km (from source city), travel_options (object with mode keys like flight/train/drive/bus and duration string values e.g. {"flight":"2h 30m","train":"6h","drive":"8h"}), weather (object with temp_range string e.g. "22-32°C" and condition string e.g. "Sunny & humid"), best_months, highlights, travel_style tags, and image_emoji. The user can select up to 2 destinations to compare detailed itineraries side by side. Use this tool FIRST when a user asks about vacation/trip planning — let them compare destinations before calling render_trip for the detailed itinerary.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoExplorer title, e.g. 'Where should you go?'
budgetNoUser's total budget in the specified currency
sourceNoThe user's starting city/location, e.g. 'Mumbai' or 'San Francisco'
currencyNoCurrency code, e.g. INR, USD, EUR. Defaults to USD. Use the currency the user mentions or infer from their location.
trip_daysNoNumber of days for the trip
destinationsYesJSON array: [{"name":"Goa","country":"India","tagline":"Sun, sand & seafood","budget_estimate":{"low":15000,"high":35000},"distance_km":590,"travel_options":{"flight":"1h 30m","train":"12h","drive":"10h"},"weather":{"temp_range":"25-33°C","condition":"Warm & sunny"},"best_months":["Nov","Dec","Jan","Feb"],"highlights":["Baga Beach","Old Goa churches","Dudhsagar Falls","Spice plantations"],"travel_style":["beach","food","nightlife"],"image_emoji":"🏖️"}, ...]

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries full behavioral disclosure. It explains the interactive nature (user can select up to 2 destinations), the required structure of each destination (3-5 options, specific fields), and the fact that it's a preliminary step before a detailed itinerary. It does not mention edge cases or return behavior, but for a render/UI tool this is substantial coverage.

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 somewhat long but well structured: it leads with the main purpose, then details required fields and structure, then explains user interaction, and ends with usage guidance. Each sentence contributes meaningful information, though the destination field enumeration could be condensed by pointing to the schema example.

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 tool with 6 parameters, a nested object structure (destinations), and no output schema, the description is fairly complete. It covers the overall purpose, when to use, the expected input structure, and the interactive behavior. It doesn't explain how the 'budget' parameter influences the view or what happens if insufficient data is provided, which are minor gaps given the schema descriptions.

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 schema already describes all 6 parameters with good coverage (100%). The description adds value by specifying that each destination must include a particular set of fields, that there should be 3-5 options, and that the user can select up to 2 for comparison. This goes beyond the schema's generic JSON array description and clarifies expected content and constraints.

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 renders an interactive destination comparison view, using the specific verb 'render' and resource 'destination comparison view'. It distinguishes itself from sibling render_trip by explicitly saying to use this tool first for trip planning before committing to a detailed itinerary, and names render_trip as the follow-up.

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: 'Use this tool FIRST when a user asks about vacation/trip planning' and explicitly names the alternative (render_trip) that should be used later for detailed itineraries. This tells the agent exactly when to invoke this tool versus siblings.

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

render_workoutWorkout PlanA

Render an interactive workout plan with dark theme, summary metrics, expandable exercise cards with tips and video links, progress tracking, and history. Pass plan as a JSON array of week objects. IMPORTANT: Each exercise MUST include video_url with a real YouTube link to a proper form demonstration video. Also include estimated_calories, duration_minutes, and tips (array of form cue strings).

ParametersJSON Schema
NameRequiredDescriptionDefault
planYesJSON array: [{"week":"Week 1","days":[{"day":"Monday","focus":"Upper Body","exercises":[{"name":"Bench Press","sets":3,"reps":"10","rest":"90s","muscle_group":"chest","estimated_calories":80,"duration_minutes":8,"tips":["Keep elbows at 45 degrees","Drive feet into floor"],"video_url":"https://youtube.com/..."}]}]}]
titleNoPlan title
estimated_total_caloriesNoEstimated total calories for the full program
estimated_total_durationNoEstimated total duration in minutes

TDQS

A4/5.0
Behavior3/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 details rendering features and required fields (video_url, estimated_calories, etc.), but it does not explicitly state whether the tool has side effects (e.g., if progress tracking/history involves saving data) or whether it is read-only. This leaves some ambiguity, but the description adds value beyond the tool name.

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 three sentences, front-loaded with the primary purpose, and every sentence earns its place. It efficiently covers features, input format, and critical requirements without redundancy or fluff.

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 no output schema, the description compensates by describing the output behavior (interactive, dark theme, expandable cards). It thoroughly covers input structure and required fields. However, it lacks details on error handling, edge cases, or specifics of progress tracking/history features, making it slightly incomplete for a tool with this many features.

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 schema already provides 100% coverage of all parameters with descriptions, so the baseline is 3. The description reinforces the importance of certain fields (video_url, estimated_calories, duration_minutes, tips) but does not add new semantic meaning beyond what's in the schema. It does highlight a validation requirement, but that's not new parameter semantics.

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 a specific verb ('Render') and resource ('interactive workout plan') with detailed features (dark theme, summary metrics, expandable cards, progress tracking). It is immediately distinguishable from sibling render_* tools like render_budget or render_comparison, which target different domains.

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

Usage Guidelines4/5

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

It provides explicit input instructions: 'Pass plan as a JSON array of week objects.' This gives clear context on usage. However, it does not explicitly mention when to use this tool versus alternatives like save_workout_log or get_workout_log, nor does it state exclusions, so it stops short of a 5.

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

save_workout_logB

Save a completed workout session to the log file

ParametersJSON Schema
NameRequiredDescriptionDefault
dayYesDay label
dateYesISO date string
weekYesWeek label
notesNoOptional session notes
exercisesYesJSON array of completed exercises with actual weights/reps

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations, the description carries the full burden. It states a save operation but doesn't disclose whether it overwrites existing entries, appends, or returns a success indicator, nor any prerequisites like an existing log file. This is minimal for a mutation 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?

One sentence, nine words, front-loaded verb-object structure. No fluff, and the core action is immediately clear.

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?

The tool has 5 parameters (4 required) and no output schema, yet the description is only one sentence. No mention of return values, error handling, or the expected JSON structure for the exercises parameter, leaving the agent under-informed for a write operation.

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?

All 5 parameters have schema descriptions (100% coverage), so the description adds no additional parameter meaning. The baseline of 3 applies because the schema already documents each field adequately.

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 ('save') and resource ('completed workout session' to 'log file'), clearly distinguishing it from read-only siblings like get_workout_log and render_* tools. 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 Guidelines3/5

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

No explicit guidance on when to use or alternatives is provided. The intent is implied by the name and description, but it doesn't mention that get_workout_log is for reading or that render_workout is for display, so the agent must infer usage context.

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 updatesv0.1.0
    • First observedget_workout_log
    • First observedrender_budget
    • First observedrender_comparison
    • First observedrender_decision_matrix
    • First observedrender_trip
    • First observedrender_trip_explorer
    • First observedrender_workout
    • First observedsave_workout_log

TDQS

A3.9/5.0

Scored across 8 tools

Disambiguation4/5

Most tools target distinct domains (budget, comparison, trip, workout), but render_comparison and render_decision_matrix both compare options, and render_trip_explorer is also comparison-like. The detailed descriptions help clarify, but slight overlap exists.

Naming Consistency5/5

All render tools follow the consistent verb_noun pattern (render_budget, render_trip, etc.), and the log tools use save_workout_log/get_workout_log. Naming is uniform, snake_case, and predictable.

Tool Count5/5

With 8 tools, the count is well within the ideal range. Each tool appears purposeful, and there is no redundancy or bloat. The broad scope fits a 'starter kit' concept.

Completeness2/5

The set is a mix of render-only tools with no persistence except for workout logs (save/get). There are no update/delete operations for workout logs, and no data management for budget, comparisons, or trips. The domain is unclear, and lifecycle coverage is inconsistent.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    A companion desktop app enabling bi-directional interaction between Claude Desktop and visual UI elements, allowing Claude to display, read from, and write to interactive interfaces while processing user events and feedback.
    5 npm
    8
    Apache 2.0
  • A
    license
    B
    quality
    D
    maintenance
    A framework for building interactive UI applications and React-based widgets for ChatGPT and Claude using the Model Context Protocol. It enables developers to create custom tools and visual components that facilitate rich, bidirectional interaction between AI models and users.
    3
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    An MCP App that renders an interactive dashboard in Claude conversations to unify calendar events, emails, and documents into a single interface. It enables users to manage their daily schedule and perform actions like meeting preparation through bidirectional communication between the UI and the model.
    2
    -