Skip to main content
Glama
wmmg101

kilter-mcp

kilter-mcp

An unofficial MCP server that lets your AI agent read and analyse your own Kilter Board logbook.

Add it to Kiro (or another MCP client), give it your Kilter login, and then just talk to the agent:

How did my last Kilter session go? What are my current projects at 30°? Compare my climbing at 20° and 40°. Show my grade pyramid. What are my hardest sends? Am I progressing?

Read-only. Nothing is written to your Kilter account.

Add to Kiro + Other Clients (Claude, Codex, Cursor etc.)

Add to Kiro

Click the button (Kiro shows a confirmation dialog first), then jump to step 3. Or do it by hand:

  1. Open your MCP config in Kiro: command palette → Kiro: Open user MCP config (JSON) (or the workspace one, .kiro/settings/mcp.json).

  2. Add the server:

{
  "mcpServers": {
    "kilter": {
      "command": "uvx",
      "args": ["kilter-mcp"],
      "env": {
        "KILTER_USERNAME": "${KILTER_USERNAME}",
        "KILTER_PASSWORD": "${KILTER_PASSWORD}"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}
  1. Provide your Kilter credentials. Either:

    • set KILTER_USERNAME and KILTER_PASSWORD as environment variables (Kiro expands ${VAR} after you approve the variables in Settings → Mcp Approved Env Vars; see how to set them on macOS, Linux and Windows), or

    • replace the ${...} placeholders with the literal values. Only do this in the user config (~/.kiro/settings/mcp.json), never in a workspace config you might commit.

  2. Save. Kiro starts the server and the kilter_* tools appear. Ask away.

Requirements: uv installed (uvx comes with it). Python is handled by uv.

Kiro CLI users can do the same with kiro-cli mcp add --name kilter --scope global --command uvx --args kilter-mcp --env KILTER_USERNAME=... --env KILTER_PASSWORD=....

Other clients

kilter-mcp is a standard local MCP server, so it also works in Claude Desktop, Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI and Zed. Copy-paste configs for each are in docs/clients.md. (ChatGPT's chat interface only accepts remote HTTP servers, so it is not supported directly; details in the same document.)

Related MCP server: WHOOP MCP

Example questions

Show my latest Kilter session.
What did I climb last Saturday?
List my sends from this month at 40°.
What are my current projects?
Which projects have I put the most attempts into?
Show my grade pyramid at 30°.
What is my flash rate per grade?
What are my five hardest sends?
Compare my climbing at 20° and 30°.
How has my climbing progressed over the last six months?

Tools the agent gets

Tool

What it returns

kilter_get_logs

Logbook entries (filter by limit, angle, topped, date range)

kilter_get_sends

Topped climbs, newest first

kilter_get_projects

Climbs attempted but never topped at that angle

kilter_get_summary

Totals, angles, date range, hardest send/flash, sends by grade

kilter_get_grade_pyramid

Sends per grade with flash rates

kilter_get_hardest_sends

Hardest unique sends

kilter_get_sessions

Entries grouped by day

kilter_get_progression

Month-by-month or week-by-week trend

kilter_get_angle_stats

Per-angle comparison

All tools are read-only and only ever see the account whose credentials you configured.

How the data is interpreted

  • One logbook entry is one climb at one wall angle on one date, with the number of tries in that entry. Re-logging a climb creates a new entry.

  • status is flash (topped first try), send (topped) or attempt (not topped).

  • A project is a (climb, angle) pair with attempts but no top at that angle.

  • Grades are Kilter's current consensus grade for the climb at that angle. grade is the V-scale and font_grade the Font scale; the raw difficulty_id (1-39) is always included. The grade table is fetched from Kilter at startup with an embedded fallback.

Security and privacy

  • Your username and password are only used to obtain an OAuth token from Kilter's login server (idp.kiltergrips.com). They never leave your machine otherwise.

  • Tokens are kept in memory for the life of the MCP process and are never written to disk.

  • Credentials and tokens are never included in tool output, logs or error messages.

  • The server makes requests only to idp.kiltergrips.com and portal.kiltergrips.com.

  • Prefer the ${KILTER_PASSWORD} form so the password lives in your shell environment or secret manager rather than in a JSON file.

Disclaimer

kilter-mcp is an unofficial community project and is not affiliated with or endorsed by Kilter Grips. It talks to the same endpoints the Kilter app uses; these are not a documented public API and may change or stop working at any time. Kilter's Terms of Use restrict access to their services outside the official apps; use this project at your own discretion, only with your own account, and keep request volume low (the server fetches your logbook once per tool call).

Contributing

Issues and pull requests are welcome. See CONTRIBUTING.md for the development setup (git clone, uv sync, uv run pytest), architecture notes, and how to add a tool.

License

MIT

Available Tools

9 tools
kilter_get_angle_statsA
Read-only

Return per-wall-angle statistics so angles can be compared.

Use when the user asks to compare angles (e.g. 20° vs 40°), which angle they climb hardest or most at, or flash rate by angle. One row per angle with sends, flashes, attempts, sessions, hardest send/flash and sends per grade.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds that it returns one row per angle with specific metrics, which is helpful context. However, it doesn't mention any performance implications, aggregation details, or limitations beyond the output structure. For a simple read-only stats tool this is adequate but not rich; a 3 reflects that the description adds some value but doesn't go beyond what annotations imply.

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, each earning its place: the first states the core function, the second gives concrete usage triggers, the third details the output rows. It is front-loaded with the purpose and avoids any filler, making it efficient for an agent to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless, read-only statistics tool with an output schema present, the description is complete. It explains what the tool does, when to use it, and what the output contains, without needing to cover params or return format (since output schema handles that). No gaps exist for an agent to call it correctly.

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 tool has zero parameters, so the schema trivially covers 100% and there is nothing for the description to explain. The baseline for 0 parameters is 4, and the description appropriately focuses on output semantics rather than params. No additional parameter documentation is needed.

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 returns per-wall-angle statistics for comparison, with a specific verb ('Return') and resource ('per-wall-angle statistics'). It also lists concrete example queries (comparing angles, hardest/most climbed, flash rate by angle) that distinguish it from sibling stats tools, so an agent can select it unambiguously.

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 explicitly specifies when to use this tool: 'Use when the user asks to compare angles, which angle they climb hardest or most at, or flash rate by angle.' This gives strong contextual triggers, though it doesn't name specific alternative tools or state exclusions. That would push it to 5, but the guidance is clear enough for typical routing.

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

kilter_get_grade_pyramidA
Read-only

Return the user's send pyramid: sends per grade, hardest first, with flash rates.

Use when the user asks about their grade pyramid, distribution of grades, flash rate per grade, or how solid they are at a level. Optional wall-angle filter.

ParametersJSON Schema
NameRequiredDescriptionDefault
angleNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover read-only and non-destructive behavior. The description adds useful behavioral details: the pyramid is ordered hardest first and includes flash rates, and the angle parameter filters by wall angle. It does not contradict annotations and provides context beyond them.

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 sentences, no waste. The first sentence states the core function; the second gives usage guidance and the filter. The primary purpose is front-loaded and every clause adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema, so return format is covered elsewhere. With one optional parameter explained, clear usage guidance, and annotations for safety, nothing an agent needs to call it correctly is missing. Complexity is low, and the description is fully sufficient.

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

Parameters4/5

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

Schema has 0% description coverage for the 'angle' parameter, so the description must explain it. It does: 'Optional wall-angle filter.' This gives the parameter meaning (a filter on wall angle) and clarifies it is optional. Though it lacks units or range, it sufficiently compensates for the schema gap.

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 returns a send pyramid with sends per grade, hardest first, and flash rates. It uses a specific verb and resource, and the usage triggers ('grade pyramid', 'distribution of grades', 'flash rate per grade') distinguish it from siblings like kilter_get_hardest_sends and kilter_get_progression.

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 explicitly lists when to use the tool ('when the user asks about their grade pyramid, distribution of grades, flash rate per grade, or how solid they are at a level') and mentions the optional angle filter. However, it does not explicitly name alternatives or state when not to use it, so it lacks exclusions.

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

kilter_get_hardest_sendsA
Read-only

Return the user's hardest sent climbs (unique per climb and angle), hardest first.

Use when the user asks about their hardest sends, best climbs, max grade, or personal bests. Optional wall-angle filter; limit defaults to 10.

ParametersJSON Schema
NameRequiredDescriptionDefault
angleNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare the tool read-only, open-world, and non-destructive, so the description's added details are valuable: the uniqueness constraint ('unique per climb and angle'), the sort order ('hardest first'), and the default limit. These behavioral traits go beyond what annotations or the schema alone provide.

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 with no filler. The primary action and result semantics are front-loaded, followed by usage guidance and key parameter details. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, two optional parameters, existing annotations, and output schema, the description is complete enough for an agent to select and call it correctly. It covers scope, ordering, uniqueness, filtering, and limit behavior without needing to re-describe return values.

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

Parameters3/5

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

Schema description coverage is 0%, so the description carries the burden for explaining parameters. It adds some meaning for both parameters: 'angle' is described as an optional wall-angle filter, and 'limit' is given a default of 10. However, it leaves ambiguity about the expected angle format and what exactly 'limit' limits (though 'hardest first' implies number of climbs returned).

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 ('Return') with a specific resource ('the user's hardest sent climbs') and defines the result set precisely ('unique per climb and angle, hardest first'). It clearly distinguishes this tool from siblings like kilter_get_sends by focusing on 'hardest' and personal bests.

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 explicitly states when to use the tool: 'Use when the user asks about their hardest sends, best climbs, max grade, or personal bests.' It provides clear usage context, though it does not explicitly name alternatives or state when not to use this tool. This is one notch below fully explicit routing.

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

kilter_get_logsA
Read-only

Return the user's Kilter logbook entries, newest first.

Use when the user asks about recent Kilter climbs, attempts, what they climbed on a date, or wants raw history. Each entry is one climb at one wall angle on one date with the number of tries in that entry. Filters: limit (default 50, max 500), angle (degrees), topped (true=only sends, false=only unsuccessful attempts), start_date/end_date (YYYY-MM-DD, inclusive).

ParametersJSON Schema
NameRequiredDescriptionDefault
angleNo
limitNo
toppedNo
end_dateNo
start_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already establish that this is a safe read-only operation, and the description adds useful behavioral context beyond that: entries are returned newest first, each entry represents a climb/angle/date/tries combination, and filter semantics are explicitly defined. It does not cover every possible edge case, but it meaningfully supplements the annotation baseline.

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 compact and front-loaded, with the core purpose in the first sentence and use cases immediately after. The filter list is dense but scannable, with defaults, units, and format specified in every relevant case. No sentence is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

All five optional parameters are semantically covered, the return ordering is specified, and the output schema exists, so return-value details do not need to be in the description. The description gives an agent everything needed to invoke the tool correctly and interpret its basic behavior.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries full responsibility for explaining parameters. It clearly documents all five filters: limit with default and max, angle in degrees, topped as sends vs unsuccessful attempts, and start/end date format with inclusivity. This fully compensates for the schema's lack of descriptions.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Return the user's Kilter logbook entries, newest first.' It further clarifies the unit of data ('one climb at one wall angle on one date'), which distinguishes it from sibling tools like kilter_get_sends or kilter_get_sessions. This makes the tool's scope immediately identifiable.

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 provides explicit use cases: 'when the user asks about recent Kilter climbs, attempts, what they climbed on a date, or wants raw history.' It does not explicitly name sibling tools or state when not to use this tool, but the when-to-use guidance is clear and actionable enough for an agent to route to it correctly.

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

kilter_get_progressionA
Read-only

Return climbing progression over time, oldest period first.

Use when the user asks how they have progressed, trends, whether they are improving, or for a month-by-month/week-by-week view. period is 'month' (default) or 'week'. Each period has sessions, sends, unique climbs, flashes, attempts and hardest send/flash. Optional wall-angle filter.

ParametersJSON Schema
NameRequiredDescriptionDefault
angleNo
periodNomonth

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description doesn't need to restate safety. It adds valuable behavioral context beyond annotations: ordering of results, the list of per-period metrics (sessions, sends, unique climbs, flashes, attempts, hardest send/flash), and the optional wall-angle filter. This enriches the agent's expectation of output without contradicting annotations.

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 compact and front-loaded with the core purpose. The 'Use when' clause provides immediate usage context, followed by parameter details. Every sentence adds value; no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with only two optional parameters and an existing output schema, the description covers purpose, usage triggers, parameter semantics, and expected output structure. The output schema presumably details the return shape, so the description need not repeat that. Nothing essential is missing.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It does: it defines period as 'month' (default) or 'week' and calls angle an 'optional wall-angle filter'. This adds meaning beyond the bare schema. It could be more precise about angle's allowed range or units, but it's sufficient for an agent to understand both parameters.

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 opens with a specific verb-resource pair: 'Return climbing progression over time' plus an ordering constraint ('oldest period first'). It clearly distinguishes this tool from siblings like kilter_get_grade_pyramid or kilter_get_hardest_sends by focusing on time-based progression.

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?

Explicitly states when to use: 'Use when the user asks how they have progressed, trends, whether they are improving, or for a month-by-month/week-by-week view.' This gives the agent clear trigger conditions and even mentions the period parameter values, leaving no ambiguity about selection.

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

kilter_get_projectsA
Read-only

Return the user's projects: climbs attempted but never topped at that wall angle.

Use when the user asks what they are working on, unfinished climbs, or what to try next. A climb is a project per (climb, angle); sending it at another angle does not remove it. Sorted by most recently tried, then most attempts. Optional angle filter.

ParametersJSON Schema
NameRequiredDescriptionDefault
angleNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already mark the tool read-only and non-destructive, and the description adds meaningful behavioral detail: a project is tracked per (climb, angle), sending it at another angle does not remove it, and results are sorted by most recently tried then most attempts. No contradiction with annotations.

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?

Every sentence earns its place: core definition, when to use, projection identity, sort order, and optional filter. The description is front-loaded and contains no 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?

The description covers the result definition, sort order, and optional angle filtering, with an output schema present to document return values. The only notable gap is the undocumented limit parameter, which is minor given its simple role and default.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It explains that angle is an optional filter and clarifies per-angle semantics, but it never describes what the limit parameter controls beyond the schema default of 50.

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?

Opens with a precise definition: 'Return the user's projects: climbs attempted but never topped at that wall angle.' This clearly identifies the verb, resource, and the distinguishing project concept, allowing an agent to separate it from sibling tools like get_sends or get_hardest_sends.

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?

Provides an explicit trigger: 'Use when the user asks what they are working on, unfinished climbs, or what to try next.' It does not name sibling alternatives or state when not to use the tool, but the given context is clear enough to prevent common misuse.

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

kilter_get_sendsA
Read-only

Return climbs the user has topped (sent), newest first.

Use when the user asks about their sends, ticks, completed climbs or flashes. Entries with status 'flash' were topped on the first try. Filters: limit (default 50, max 500), angle (degrees), start_date/end_date (YYYY-MM-DD).

ParametersJSON Schema
NameRequiredDescriptionDefault
angleNo
limitNo
end_dateNo
start_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: it explains the meaning of the 'flash' status, the default limit (50) and maximum (500), and the date format (YYYY-MM-DD). It does not disclose pagination behavior or whether filters are inclusive, but for a read-only query tool this is sufficient given the annotations.

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 with zero filler. The first sentence front-loads the core purpose and ordering, and the second sentence packs in usage context, the flash clarification, and all filter details. Every word earns its place, and it is structured to give the most important information first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (4 optional parameters), the presence of an output schema, and the annotations covering safety, the description is complete. It explains the filters, the default behavior, and the meaning of a key status. It doesn't cover edge cases like inclusive date ranges or the exact output shape, but the output schema presumably handles that. The usage guidance is also present, so an agent has what it needs to call the tool correctly.

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

Parameters5/5

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

The schema has 0% description coverage, so the description carries the entire burden of explaining parameters. It clearly defines each filter: limit with default and max, angle in degrees, and start_date/end_date in YYYY-MM-DD format. This fully compensates for the missing schema descriptions and leaves no ambiguity about parameter meaning or 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 states a clear verb ('Return') and resource ('climbs the user has topped (sent)'), and adds the ordering ('newest first'). This is specific and distinguishes it from sibling tools like kilter_get_hardest_sends or kilter_get_grade_pyramid, which focus on different aspects. The clarification that 'flash' means topped on the first try further sharpens the purpose.

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 explicitly says 'Use when the user asks about their sends, ticks, completed climbs or flashes,' which gives clear context for when to invoke this tool. It does not mention alternative tools or when not to use it, but the use cases are specific enough that an agent can route appropriately. The filter details (limit, angle, date range) also imply the tool is for querying sends with optional parameters.

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

kilter_get_sessionsA
Read-only

Return recent climbing sessions (entries grouped by calendar day), newest first.

Use when the user asks how their last session went, what they climbed yesterday, or wants to compare sessions. Each session lists angles, sends, flashes, attempts, hardest send and every climb logged that day. limit defaults to 5.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context: sessions are grouped by calendar day, ordered newest first, and the limit defaults to 5. It also discloses that each session includes every climb logged that day, which is a meaningful behavioral trait beyond the schema.

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 compact and front-loaded: the first sentence states the core function, the second gives usage context, and the third lists return contents and the default. Every sentence earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (1 optional parameter, no nested objects, output schema present), the description is nearly complete. It covers what the tool returns, when to use it, and the default limit. It doesn't describe pagination or the exact output schema structure, but the output schema exists and the tool is simple enough that this is a minor gap.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It does mention 'limit defaults to 5' and implies the limit controls how many sessions are returned. However, it doesn't explicitly state that limit is the only parameter or describe edge cases (e.g., null limit behavior), but for a single optional parameter with a default, the description provides enough meaning.

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 states a specific verb ('Return'), a clear resource ('recent climbing sessions'), and a defining characteristic ('entries grouped by calendar day, newest first'). It also lists the content of each session (angles, sends, flashes, attempts, hardest send, every climb logged that day), which distinguishes it from sibling tools like kilter_get_logs or kilter_get_sends.

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 explicitly says when to use this tool: 'when the user asks how their last session went, what they climbed yesterday, or wants to compare sessions.' This provides clear context and implicitly distinguishes it from alternatives like kilter_get_hardest_sends or kilter_get_progression, which would be used for different questions.

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

kilter_get_summaryA
Read-only

Return a compact overview of the user's whole Kilter history.

Use first when the user asks a broad question ("how is my climbing going?", "summarise my Kilter account") or when you need totals: entries, sends, flashes, attempts, angles climbed, date range, session count, hardest send/flash and sends per grade.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false. The description adds useful behavioral context beyond that by defining the result as a compact aggregate of the whole Kilter history and enumerating the totals included, such as sends, flashes, attempts, and hardest send/flash.

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 sentences with the core action and resource front-loaded. The second sentence efficiently adds when to use it and what totals it covers, with relevant example queries that earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters, annotations confirming a safe read operation, and the presence of an output schema, the description is complete. It tells an agent when to invoke the tool and what kind of information it will receive.

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 tool accepts zero parameters and schema description coverage is 100%, so parameter semantics require no additional explanation. Baseline for 0 parameters is 4; the description does not need to compensate for missing parameter docs.

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?

Description names the action ('Return'), the resource ('compact overview of the user's whole Kilter history'), and the scope ('whole Kilter history'). It is clearly distinct from sibling tools that return granular lists or specific statistics.

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 explicitly says 'Use first' and gives concrete triggers: broad questions like 'how is my climbing going?' and needs for totals. It does not explicitly name sibling alternatives or state when not to use it, so it misses the top tier but provides clear 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. 9 tool updatesv0.1.0
    • First observedkilter_get_angle_stats
    • First observedkilter_get_grade_pyramid
    • First observedkilter_get_hardest_sends
    • First observedkilter_get_logs
    • First observedkilter_get_progression
    • First observedkilter_get_projects
    • First observedkilter_get_sends
    • First observedkilter_get_sessions
    • First observedkilter_get_summary

TDQS

A4.6/5.0

Scored across 9 tools

Disambiguation5/5

Each tool targets a distinct slice of the same domain: raw logs, sends, projects, sessions, hardest sends, grade distribution, angle stats, progression, and summary. Even the closest pair (logs vs sends) is clearly separated by top status and raw attempt entries. The 'Use when' descriptions reinforce the boundaries effectively.

Naming Consistency5/5

Every tool follows the exact same kilter_get_<resource> snake_case pattern, making the set highly predictable. The noun after the prefix is consistently descriptive and maps directly to the returned data.

Tool Count5/5

Nine tools is well-scoped for a read-only climbing analytics server. Each tool represents a distinct useful view of the underlying data without requiring unnecessary granularity or redundant endpoints.

Completeness5/5

The server covers the full range of expected read-only queries for a Kilter account: raw logs, successful sends, projects, hardest climbs, sessions, per-grade and per-angle analytics, progression over time, and a summary overview. There are no obvious dead ends for the stated purpose; any follow-up question can be answered by one of these tools.

Maintenance

ActivityNo data
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables read-only access to a Nightscout instance for glucose readings, treatments, and deterministic server-side aggregates, allowing users to discuss their diabetes data with an AI assistant without write permissions.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Provides AI assistants with read-only access to an athlete's Intervals.icu training data, including activities, wellness metrics, zones, and planned events, for use with MCP clients like ChatGPT and Claude.
    15
    MIT