MCP Apps Starter Kit
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Apps Starter KitGive me a 4-week strength training plan"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 dedupVideo 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:
Take a screenshot of each app in Claude Desktop
Save them in a
screenshots/folderUncomment 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.jsonAdd 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 ClaudeEach 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 |
| Registers a tool that returns |
| Serves the HTML view file to Claude Desktop |
| React hook to receive tool result data in the iframe |
| Calls MCP server tools from the iframe (e.g., save workout log) |
| Injects a message into Claude's conversation from the iframe |
| 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.tsTech Stack
MCP SDK:
@modelcontextprotocol/sdk+@modelcontextprotocol/ext-appsReact 19 with inline styles (no CSS framework needed in sandboxed iframes)
Recharts for pie/bar/line charts
Vite +
vite-plugin-singlefilefor bundling views into self-contained HTMLTypeScript for the server, JSX for views
License
MIT
Available Tools
8 toolsget_workout_logA
Retrieve workout history from the log file
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Dashboard title | |
| categories | Yes | JSON array: [{"name":"Rent","budgeted":1500,"actual":1500}, ...] | |
| total_budget | Yes | Total monthly budget amount |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Comparison title | |
| options | Yes | JSON array: [{"name":"Option A","pros":["Fast","Cheap"],"cons":["Limited"],"rating":4.5,"price":"$999"}, ...] |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Decision title | |
| options | Yes | JSON array: [{"name":"Option A","scores":{"Price":8,"Location":7,"Space":9}}, ...] | |
| criteria | Yes | JSON array: [{"name":"Price","weight":3},{"name":"Location","weight":2}, ...] |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Trip title | |
| currency | No | Currency code, e.g. INR, USD, EUR. Defaults to USD. | |
| itinerary | Yes | JSON array: [{"day":"Day 1 - Arrival","activities":[{"time":"9:00 AM","activity":"Visit museum","location":"Downtown","cost":25,"notes":"Book online"}]}, ...] | |
| trip_days | No | Number of trip days — used for regeneration requests | |
| destination | No | Destination name, e.g. 'Goa' — used for regeneration requests | |
| total_budget | No | Total trip budget in the specified currency |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Explorer title, e.g. 'Where should you go?' | |
| budget | No | User's total budget in the specified currency | |
| source | No | The user's starting city/location, e.g. 'Mumbai' or 'San Francisco' | |
| currency | No | Currency code, e.g. INR, USD, EUR. Defaults to USD. Use the currency the user mentions or infer from their location. | |
| trip_days | No | Number of days for the trip | |
| destinations | Yes | JSON 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
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | JSON 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/..."}]}]}] | |
| title | No | Plan title | |
| estimated_total_calories | No | Estimated total calories for the full program | |
| estimated_total_duration | No | Estimated total duration in minutes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| day | Yes | Day label | |
| date | Yes | ISO date string | |
| week | Yes | Week label | |
| notes | No | Optional session notes | |
| exercises | Yes | JSON array of completed exercises with actual weights/reps |
TDQS
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.
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.
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.
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.
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.
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.
8 tool updates
v0.1.0- First observed
get_workout_log - First observed
render_budget - First observed
render_comparison - First observed
render_decision_matrix - First observed
render_trip - First observed
render_trip_explorer - First observed
render_workout - First observed
save_workout_log
TDQS
Scored across 8 tools
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.
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.
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.
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
Related MCP Connectors
First strength app Claude can write to: plan training in chat, it lands in the app ready to log.
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
One workspace of tools for Claude and ChatGPT: connect 600+ apps, generate media, build tools.
- SimSenseOAuthai.simsense
Deploy sims to any screen. Control your displays with Claude.
Related MCP Servers
- AlicenseBqualityDmaintenancereact-mcp integrates with Claude Desktop, enabling the creation and modification of React apps based on user prompts99 npm76MIT
- AlicenseNot gradedqualityCmaintenanceA 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 npm8Apache 2.0
- AlicenseBqualityDmaintenanceA 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.3MIT
- FlicenseAqualityDmaintenanceAn 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-