Learning Hour MCP
This server facilitates the creation and management of structured Learning Hour sessions for technical teams by:
Generate Learning Hour Sessions: Create 60-minute session plans following the 4C Learning Model (Connect, Concept, Concrete, Conclusion) for technical topics.
Create Code Examples: Produce before-and-after code examples in various programming languages.
Miro Integration: Generate interactive Miro boards from session content and manage OAuth authentication.
GitHub Integration: Analyze repositories to find relevant code examples and technology stacks to tailor learning content (requires GitHub token).
Optional integrations with Miro and GitHub enhance functionality through API tokens.
Creates and populates Miro boards with learning content, supporting OAuth authentication and automated layout of Learning Hour materials
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., "@Learning Hour MCPcreate a session on test-driven development for our Java team"
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.
learning-hour-mcp
Generate Learning Hour content for Technical Coaches using AI. Create structured practice sessions that help development teams master technical excellence through the 4C Learning Model.
What is this?
An MCP server that helps Technical Coaches run Learning Hours - structured 60-minute practice sessions where teams improve their coding skills through deliberate practice. It generates session plans, code examples, and can even create interactive Miro boards.
Related MCP server: Aindreyway MCP Codex Keeper
Who is this for?
Technical Coaches facilitating team learning sessions
Team Leads wanting to improve their team's technical practices
Developers organizing coding dojos or practice sessions
Installation
Prerequisites
Claude Desktop - Install the desktop app
Anthropic API Key - Sign up and create a key ($5 free credit for new accounts)
Complete Setup
Choose your preferred editor:
Claude Desktop
Add to your Claude Desktop configuration:
{
"mcpServers": {
"learning-hour": {
"command": "npx",
"args": ["-y", "learning-hour-mcp"],
"env": {
"ANTHROPIC_API_KEY": "your-anthropic-key",
"MIRO_ACCESS_TOKEN": "your-miro-token-optional",
"GITHUB_TOKEN": "your-github-token-optional"
}
}
}
}Configuration steps:
Open Claude Desktop settings (cmd/ctrl + ,)
Go to "Developer" → "Edit Config"
Paste the configuration above
Replace
your-anthropic-keywith your actual keySave and restart Claude Desktop
VSCode
Add to your VSCode settings.json:
{
"mcp.servers": {
"learning-hour": {
"command": "npx",
"args": ["-y", "learning-hour-mcp"],
"env": {
"ANTHROPIC_API_KEY": "your-anthropic-key",
"MIRO_ACCESS_TOKEN": "your-miro-token-optional",
"GITHUB_TOKEN": "your-github-token-optional"
}
}
}
}Configuration steps:
Install the MCP VSCode Extension
Open settings.json (Cmd/Ctrl+Shift+P → "Preferences: Open Settings (JSON)")
Add the configuration above
Replace tokens with your actual values
Reload VSCode window (Cmd/Ctrl+Shift+P → "Developer: Reload Window")
Cursor
Add to your Cursor configuration:
{
"mcpServers": {
"learning-hour": {
"command": "npx",
"args": ["-y", "learning-hour-mcp"],
"env": {
"ANTHROPIC_API_KEY": "your-anthropic-key",
"MIRO_ACCESS_TOKEN": "your-miro-token-optional",
"GITHUB_TOKEN": "your-github-token-optional"
}
}
}
}Configuration steps:
Open Cursor settings (Cmd/Ctrl + ,)
Click on "Features" → "Claude" → "Advanced"
Add the MCP server configuration
Replace tokens with your actual values
Restart Cursor
Required: Only ANTHROPIC_API_KEY is required. The other tokens enable additional features.
Quick Start
After installation, try this in Claude:
"Use the learning hour tools to create a session about the Extract Method refactoring"
Claude will generate a complete 60-minute session plan with:
Opening connection activity
Concept introduction
Hands-on coding exercise
Reflection and commitment
Available Tools
generate_session
Generate a complete Learning Hour session plan with activities following the 4C model (Connect, Concept, Concrete, Conclusion).
{
"topic": "Feature Envy"
}generate_code_example
Create before/after code examples for a specific topic.
{
"topic": "Extract Method",
"language": "typescript"
}create_miro_board
Create a new Miro board or add frames to an existing board (requires MIRO_ACCESS_TOKEN).
{
"sessionContent": { /* from generate_session */ },
"existingBoardId": "optional-board-id" // If provided, adds frames to existing board
}list_miro_boards
List all Miro boards accessible with your token (requires MIRO_ACCESS_TOKEN).
{
"limit": 50, // Optional, max 50
"cursor": "optional-pagination-cursor"
}get_miro_board
Get details about a specific Miro board (requires MIRO_ACCESS_TOKEN).
{
"boardId": "board-id-to-get"
}delete_miro_board
Delete a Miro board (requires MIRO_ACCESS_TOKEN). Use with caution!
{
"boardId": "board-id-to-delete",
"confirm": true // Required safety check
}analyze_repository
Find real code examples in GitHub repositories (requires GITHUB_TOKEN).
analyze_tech_stack
Analyze a repository's technology stack to create team-specific content (requires GITHUB_TOKEN).
Optional Features
Enable Miro Board Creation
Transform your Learning Hour into a visual, interactive workshop board
Get a Miro token:
Go to Miro Apps
Create a new app (name it "Learning Hours")
Copy the access token
Add as
MIRO_ACCESS_TOKENin your config
Enable Repository Analysis
Find real code examples from your team's actual codebase
Create a GitHub Personal Access Token:
Name: "Learning Hour MCP"
Expiration: 90 days (recommended)
Permissions:
repo(read access)Add as
GITHUB_TOKENin your config
Learn More
SammanCoaching.org - Technical coaching resources and Learning Hour guides
Learning Hours - Catalog of Learning Hour topics
4C Learning Model - Connect, Concept, Concrete, Conclusion
Technical Coaching - Role and practices
Troubleshooting
"Tool not found" error: Make sure you restarted Claude Desktop after adding the configuration.
"Invalid API key": Check that you copied the entire key including any prefixes (sk-ant-...).
Miro board not creating: Check that your MIRO_ACCESS_TOKEN is valid and has board creation permissions.
Contributing
See CONTRIBUTING.md for development setup and guidelines.
License
MIT
Available Tools
8 toolsanalyze_repositoryC
Analyze a GitHub repository to find real code examples for Learning Hours
| Name | Required | Description | Default |
|---|---|---|---|
| repositoryUrl | Yes | GitHub repository URL to analyze | |
| codeSmell | Yes | Type of code smell to find (e.g., 'Feature Envy', 'Long Method') |
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 states what the tool does but doesn't reveal important traits like whether it's read-only or mutative, what permissions are needed, how it handles errors, or the format of results. For a tool analyzing repositories, this leaves significant gaps in understanding its 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 a single, efficient sentence that front-loads the core purpose without any wasted words. It directly communicates the tool's function and goal, making it easy to understand at a glance.
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 the complexity of analyzing repositories and the lack of annotations and output schema, the description is incomplete. It doesn't explain what the analysis entails, what kind of output to expect, or any limitations. For a tool with two required parameters and no structured output information, more context is needed to guide effective use.
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 description coverage is 100%, so the schema already documents both parameters thoroughly. The description adds no additional meaning beyond what's in the schema, such as explaining what constitutes a valid repository URL or providing more context about code smells. Baseline 3 is appropriate when the schema does the heavy lifting.
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 action ('analyze') and resource ('GitHub repository') with a specific purpose ('to find real code examples for Learning Hours'). It distinguishes from most siblings like 'analyze_tech_stack' by focusing on code examples rather than technology analysis, though it doesn't explicitly contrast with 'generate_code_example' which might be related.
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 guidance is provided on when to use this tool versus alternatives. While the purpose is clear, there's no mention of prerequisites, when not to use it, or how it differs from 'generate_code_example' which might create rather than find examples. The description implies usage for Learning Hours but lacks explicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_tech_stackC
Analyze a repository's technology stack to create team-specific Learning Hour content
| Name | Required | Description | Default |
|---|---|---|---|
| repositoryUrl | Yes | GitHub repository URL to analyze |
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 of behavioral disclosure. It mentions the action ('analyze') and outcome ('create team-specific Learning Hour content'), but lacks details on permissions, rate limits, side effects, or what the analysis entails (e.g., does it modify data, require authentication, or have limitations?). This is inadequate for a tool with no 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that efficiently conveys the tool's purpose without unnecessary words. It is front-loaded and every part 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of analyzing a tech stack and creating content, the description is incomplete. There's no output schema, and with no annotations, it fails to explain behavioral aspects like what the analysis returns, how 'Learning Hour content' is generated, or any dependencies. This leaves significant gaps for an AI agent to understand the tool fully.
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 100% description coverage, with 'repositoryUrl' documented as 'GitHub repository URL to analyze.' The description adds no additional parameter semantics beyond this, such as format examples or constraints. With high schema coverage, the baseline is 3, as the schema handles the heavy lifting.
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's purpose: 'Analyze a repository's technology stack to create team-specific Learning Hour content.' It specifies the verb ('analyze'), resource ('repository's technology stack'), and intended outcome ('create team-specific Learning Hour content'). However, it doesn't explicitly distinguish this from sibling tools like 'analyze_repository' or 'generate_session', which might have overlapping functionality.
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 no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, exclusions, or compare it to sibling tools such as 'analyze_repository' or 'generate_session', which could be relevant for similar tasks. The agent must infer usage from the purpose alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_miro_boardB
Create a new Miro board OR add frames to an existing board. This tool uses the Miro REST API to create boards with frames, sticky notes, text, and code blocks. It can create standalone boards or add content to existing boards.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionContent | Yes | Session content from generate_session output | |
| existingBoardId | No | Optional: ID of an existing Miro board to add frames to. If not provided, creates a new board. |
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 mentions the tool uses the Miro REST API and can create or add content, but fails to detail critical aspects like required permissions, rate limits, whether changes are reversible, or what the response looks like. This is a significant gap 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured in two sentences, front-loaded with the core purpose and followed by implementation details. There is minimal waste, though it could be slightly more concise by integrating the API mention more seamlessly, but overall it earns its place without redundancy.
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 the tool's complexity as a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't cover behavioral traits like auth needs or error handling, and while it hints at parameters, it doesn't fully compensate for the lack of structured output information, making it inadequate for safe and effective use by an AI 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?
Schema description coverage is 100%, so the schema already documents both parameters ('sessionContent' and 'existingBoardId'). The description adds some context by implying 'sessionContent' contains generated content for boards and 'existingBoardId' is optional for adding to existing boards, but it doesn't provide additional syntax or format details beyond what the schema offers, aligning with the baseline for high coverage.
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's purpose as creating new Miro boards or adding frames to existing ones, specifying it uses the Miro REST API and can include various content types like sticky notes and code blocks. However, it doesn't explicitly distinguish this from sibling tools like 'delete_miro_board' or 'get_miro_board' in terms of when to use each, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by mentioning it can create standalone boards or add to existing ones, but it lacks explicit guidance on when to choose this tool over alternatives like 'list_miro_boards' for viewing or 'delete_miro_board' for removal. No when-not-to-use scenarios or prerequisites are stated, leaving usage context somewhat vague.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_miro_boardC
Delete a Miro board (use with caution!)
| Name | Required | Description | Default |
|---|---|---|---|
| boardId | Yes | ID of the Miro board to delete | |
| confirm | Yes | Must be true to confirm deletion |
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 mentions 'use with caution!' which hints at potential destructiveness, but fails to specify whether deletion is permanent, reversible, requires specific permissions, or has side effects (e.g., affecting linked data). This is inadequate for a destructive operation.
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 very concise (one sentence) and front-loaded with the core action, making it efficient. However, the cautionary note is tacked on without elaboration, which slightly reduces its structural clarity but doesn't significantly impact readability.
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 the tool's complexity (a destructive delete operation) and the lack of annotations and output schema, the description is incomplete. It doesn't cover behavioral traits, return values, or error conditions, leaving critical gaps for the agent to understand the tool's full impact and usage.
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 schema already documents both parameters ('boardId' and 'confirm') clearly. The description adds no additional meaning about parameters beyond what the schema provides, such as format details or usage context, resulting in the baseline score.
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 verb ('Delete') and resource ('a Miro board'), making the purpose immediately understandable. However, it doesn't differentiate this tool from its siblings (like 'create_miro_board' or 'get_miro_board') beyond the obvious action difference, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a cautionary note ('use with caution!'), which implies this should be used carefully, but it provides no explicit guidance on when to use this tool versus alternatives (e.g., when deletion is appropriate vs. archiving) or any prerequisites. This leaves the agent with minimal context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_code_exampleB
Generate detailed before/after code examples for a learning topic
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | The learning topic (e.g., 'Feature Envy', 'DRY Principle') | |
| language | No | Programming language for examples (default: javascript) | javascript |
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 of behavioral disclosure. It states the tool generates examples but doesn't describe output format, potential rate limits, authentication needs, or error handling. For a tool with no annotations, this leaves significant behavioral gaps.
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 a single, efficient sentence that front-loads the core purpose without unnecessary details. It uses minimal words to convey the essential action and scope, earning its place with zero waste.
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 the tool's moderate complexity (2 parameters, no output schema, no annotations), the description is minimally adequate. It covers the purpose but lacks behavioral details and usage guidelines. Without annotations or output schema, more context on what the generated examples look like would improve completeness.
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 schema already documents both parameters ('topic' and 'language') with clear descriptions. The description adds no additional parameter semantics beyond what the schema provides, such as example topics beyond those listed or language constraints. Baseline 3 is appropriate when schema does the heavy lifting.
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's purpose: 'Generate detailed before/after code examples for a learning topic.' It specifies the verb ('generate'), resource ('code examples'), and scope ('before/after' for learning topics). However, it doesn't explicitly differentiate from sibling tools like 'analyze_repository' or 'generate_session', which could have overlapping educational purposes.
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 no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, exclusions, or compare it to sibling tools like 'generate_session' or 'analyze_tech_stack' that might serve similar educational contexts. Usage is implied only by the purpose statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_sessionC
Generate comprehensive Learning Hour content for Technical Coaches
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | The learning topic (e.g., 'Feature Envy', 'DRY Principle') | |
| style | No | Presentation style: slide (default), vertical, or workshop | slide |
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 of behavioral disclosure. It states the tool generates content but doesn't describe what 'comprehensive' entails (e.g., length, format, depth), whether it's a one-time generation or reusable, or any limitations (e.g., topic scope, output format). This is inadequate for a tool with no 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose. It avoids unnecessary words and gets straight to the point, though it could be slightly more structured by including key details like output format or usage context.
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 the complexity of generating educational content, no annotations, and no output schema, the description is incomplete. It doesn't explain what the output looks like (e.g., text, slides, interactive materials), quality expectations, or any behavioral traits like rate limits or error handling. This leaves significant gaps 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?
Schema description coverage is 100%, so the schema already documents both parameters ('topic' and 'style') with descriptions and defaults. The description doesn't add any additional meaning beyond what's in the schema, such as examples of 'comprehensive' content or how 'style' affects output. Baseline 3 is appropriate when the schema handles parameter documentation.
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 action ('Generate comprehensive Learning Hour content') and the target audience ('for Technical Coaches'), which provides a specific verb+resource combination. However, it doesn't explicitly differentiate this tool from sibling tools like 'generate_code_example' or 'create_miro_board', which might also be used in educational contexts, so it doesn't fully distinguish from alternatives.
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 no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context (e.g., for coaching sessions vs. self-study), or exclusions (e.g., not for non-technical topics). This leaves the agent with minimal direction on appropriate usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_miro_boardC
Get details about a specific Miro board
| Name | Required | Description | Default |
|---|---|---|---|
| boardId | Yes | ID of the Miro board to get details for |
TDQS
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 states it 'gets details' but doesn't disclose what details are returned, error conditions, authentication needs, rate limits, or whether it's read-only (implied but not confirmed). This is inadequate for a tool with zero annotation coverage, lacking critical context for safe invocation.
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 a single, clear sentence with zero waste—it directly states the tool's function without fluff. It's appropriately sized for a simple retrieval tool and front-loaded with the core action, making it easy to parse quickly. Every word earns its place.
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 the tool's simplicity (1 parameter, 100% schema coverage) but lack of annotations and output schema, the description is incomplete. It doesn't explain what 'details' are returned, potential errors, or behavioral traits, leaving the AI agent under-informed. For a retrieval tool with no structured output, more context is needed to be fully helpful.
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%, with the parameter 'boardId' fully documented in the schema. The description adds no additional meaning beyond implying retrieval for a 'specific Miro board', which aligns with the schema. Since the schema does the heavy lifting, the baseline score of 3 is appropriate, as the description doesn't compensate or add extra value.
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 action ('Get details') and resource ('about a specific Miro board'), making the purpose immediately understandable. It doesn't explicitly differentiate from sibling tools like 'list_miro_boards' or 'create_miro_board', but the specificity of 'specific Miro board' versus 'list' implies scope distinction. No tautology or misleading elements are present.
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 no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a board ID), contrast with 'list_miro_boards' for browsing, or specify use cases like retrieving metadata for editing. Usage is implied by the name but not explicitly stated, leaving gaps for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_miro_boardsB
List all Miro boards accessible with the current token
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of boards to return (default: 50, max: 50) | |
| cursor | No | Cursor for pagination |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states it's a list operation, implying read-only behavior, but lacks details on permissions needed, rate limits, pagination behavior beyond the cursor parameter, or what 'accessible' entails. This leaves significant gaps for a tool with no 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. Every part earns its place by specifying action, resource, and scope concisely.
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 annotations, no output schema, and 2 parameters with full schema coverage, the description is minimally adequate. It covers the basic purpose but lacks behavioral details like response format, error handling, or deeper context needed for a list operation in a multi-tool environment.
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 schema fully documents the limit and cursor parameters. The description adds no additional parameter semantics beyond what's in the schema, such as default behavior or usage context. Baseline 3 is appropriate when schema does the heavy lifting.
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 action ('List') and resource ('Miro boards'), specifying scope as 'all... accessible with the current token'. It distinguishes from siblings like create_miro_board and delete_miro_board by indicating a read operation, though it doesn't explicitly differentiate from get_miro_board which might retrieve a single board.
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 usage for retrieving multiple boards accessible to the user, but provides no explicit guidance on when to use this versus alternatives like get_miro_board (for a single board) or create_miro_board. It mentions the token context, which is helpful but not comprehensive.
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.
9 tool updates
v1.0.0- Added
analyze_repository - Added
analyze_tech_stack - Changed
create_miro_board3 fields changed- removed
Input schema / properties / accessTokenRemoved value: -{ - "description": "Miro access token for API authentication", - "type": "string" -} - added
Input schema / properties / existingBoardIdAdded value: +{ + "description": "Optional: ID of an existing Miro board to add frames to. If not provided, creates a new board.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "sessionContent", - "accessToken" -]New value: +[ + "sessionContent" +]
- Added
delete_miro_board - Changed
generate_session1 field changed- added
Input schema / properties / styleAdded value: +{ + "default": "slide", + "description": "Presentation style: slide (default), vertical, or workshop", + "type": "string" +}
- Removed
get_miro_auth_url - Added
get_miro_board - Added
list_miro_boards - Removed
test_miro_token
5 tool updates
- First observed
create_miro_board - First observed
generate_code_example - First observed
generate_session - First observed
get_miro_auth_url - First observed
test_miro_token
TDQS
Scored across 8 tools
Most tools have distinct purposes, but there is some overlap between analyze_repository and analyze_tech_stack, as both analyze GitHub repositories for Learning Hour content. However, their specific focuses (code examples vs. tech stack analysis) help differentiate them, and the other tools target clear, non-overlapping functions like Miro board management and content generation.
All tool names follow a consistent verb_noun pattern using snake_case, such as analyze_repository, create_miro_board, and generate_session. This uniformity makes the tool set predictable and easy for an agent to navigate, with no deviations in naming conventions.
With 8 tools, the count is well-scoped for the server's purpose of supporting Learning Hour creation and management. Each tool serves a specific role, from repository analysis to Miro board operations, without feeling excessive or insufficient for the domain.
The tool set covers key aspects of Learning Hour workflows, including content generation, repository analysis, and Miro board CRUD operations. A minor gap exists in the lack of update tools for Miro boards or generated content, but agents can work around this by deleting and recreating as needed, and core functionalities are well-represented.
Maintenance
Related MCP Connectors
MCP server for building and testing AI agents with multi-model experimentation and insights.
Remote MCP learning coach for coding agents.
MCP server providing access to the Scorecard API to evaluate and optimize LLM systems.
MCP server for skill documentation, generated by doc2mcp.
Related MCP Servers
- FlicenseAqualityDmaintenanceAn MCP server that allows coding agents to look up contextual rules and patterns on demand, providing just-in-time guidance for specific tasks like writing tests or authoring UI.28-
- AlicenseAqualityDmaintenanceAn intelligent MCP server that serves as a guardian of development knowledge, providing AI assistants with curated access to latest documentation and best practices.4506MIT
- AlicenseNot gradedqualityDmaintenanceMCP server that provides persistent memory and contextual awareness to language models, enabling project onboarding, recall of architectural rules, and code consistency across sessions.32MIT
- AlicenseAqualityAmaintenanceAn MCP server that brings senior-QA discipline to AI coding assistants, enabling test planning, TDD, mutation testing, and code review.486Apache 2.0