Skip to main content
Glama
defevan

mountainproject

by defevan

mp-mcp

MCP server for Mountain Project — search routes and areas, run route-finder filters, and query your personal tick list live from MP.

Built for Cursor and any MCP-compatible agent.

Disclaimer

This project is not affiliated with, endorsed by, or connected to Mountain Project or onX Maps, Inc. Mountain Project is a trademark of onX Maps, Inc.

  • Personal use only. This tool is intended for individual climbers to access their own tick data and browse public route information — not for bulk scraping, republishing MP content, or building a competing database.

  • Terms of service. Users are responsible for complying with Mountain Project's terms of service. Automated access may be restricted or blocked by MP at any time.

  • Session security. Your ap_session cookie is a login credential. Do not commit ~/.mp-mcp/session.json, paste cookies into public chats, or store cookies in shared config files. The session file is written with restrictive permissions (0600), but treat it like a password.

  • No warranty. This software is provided as-is under the MIT license. Route data accuracy remains the responsibility of Mountain Project and its community contributors.

Related MCP server: Mountaineers MCP Server

Features

  • Public route discovery — search, route/area details, route-finder filters (no auth)

  • Personal logbook — list, filter, and aggregate your ticks pulled live from MP

  • Browser login — one-time npm run login captures your session automatically (no CSV export, no DevTools)

  • Polite by default — rate limiting between requests

Quick start (humans)

1. Install

git clone https://github.com/defevan/mp-mcp.git
cd mp-mcp
npm install
npm run build
npx playwright install chromium   # first time only, for login

2. Log in to Mountain Project

npm run login

A browser opens to Mountain Project. Sign in normally — the script detects when you're logged in and saves ~/.mp-mcp/session.json. The login tab will not reload while you sign in.

Re-run when the session expires (~30 days).

3. Add to Cursor

Add to ~/.cursor/mcp.json:

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

Restart Cursor or reload MCP servers.

4. Try it

Ask in chat:

  • "Search trad 5.10 routes in Yosemite Valley"

  • "Get beta on The Nose"

  • "List my ticks from 2024"

  • "How many days out did I have this summer?"


For agents

This section is for LLM agents using the MCP tools directly.

Server

  • Name: mountainproject

  • Transport: stdio

  • Entry: node dist/server.js (run npm run build first)

Auth model

Priority

Source

Notes

1

In-memory session

Set via mp_set_session

2

~/.mp-mcp/session.json

Written by npm run login

3

Env vars

MP_SESSION_COOKIE, MP_USER_ID (CI fallback)

Tick tools call GET /user/{id}/{username}/tick-export with the session cookie. Ticks are parsed in memory and cached (default 15 min). Never ask the user to export a CSV manually.

If auth fails, tell the user to run npm run login in the project directory or use mp_set_session.

Tool reference

Public (no auth)

Tool

Args

Returns

mp_search

query, types? (routes/areas), limit?

Matching routes/areas with id, grade, stars, url, lat/lng

mp_get_route

routeId

Full route detail: beta, protection, FA, parent area

mp_get_area

areaId

Area description, access notes, route counts

mp_find_routes

areaId, gradeMin?, gradeMax?, type?, styles?, minStars?, sort?, limit?

Filtered routes from route-finder (CSV export, max 1000)

mp_resolve_id

urlOrId

Parse numeric ID from MP URL or routes.123 / areas.456

Authenticated

Tool

Args

Returns

mp_auth_status

{ authenticated, userId, username, tickCount? }

mp_set_session

apSession, xsrfToken?, userId?, username?, persist?

Update session at runtime

mp_fetch_ticks

Force-refresh tick list from MP

mp_list_ticks

year?, gradeMin?, gradeMax?, style?, areaContains?, limit?

Filtered ticks (auto-fetches if cache stale)

mp_tick_stats

groupBy (year/grade/style/area), yearFrom?, yearTo?

Aggregated counts

Agent workflow examples

Trip planning (no auth):

mp_search → mp_resolve_id → mp_find_routes / mp_get_route

Logbook analysis (auth required):

mp_auth_status → mp_list_ticks / mp_tick_stats

Area deep-dive:

mp_search(query, types=["areas"]) → mp_get_area → mp_find_routes(areaId, gradeMin, gradeMax)

Grade filters for mp_find_routes

Use YDS strings: 5.8, 5.10a, 5.11d, etc. The server maps these to MP's internal route-finder rank codes.

Rate limiting

Default 500 ms between MP requests (MP_RATE_LIMIT_MS). Prefer fewer, broader tool calls over many narrow ones.

Data source notes

  • Public data: MP /api/v2/* and /route-finder-export

  • Ticks: authenticated /user/{id}/{username}/tick-export

  • MP's official Data API is deprecated; this server uses the same endpoints the website uses

  • Respect MP's terms of service; this tool is for personal use


Environment variables

Variable

Default

Description

MP_SESSION_FILE

~/.mp-mcp/session.json

Session storage path

MP_TICKS_CACHE_TTL_MS

900000

Tick cache TTL (15 min)

MP_RATE_LIMIT_MS

500

Delay between MP requests

MP_USER_AGENT

mp-mcp/1.0

HTTP User-Agent

MP_SESSION_COOKIE

Fallback session cookie

MP_USER_ID

Fallback user ID

MP_XSRF_TOKEN

Optional CSRF cookie

MP_USERNAME

Optional username slug


Development

npm run build      # compile TypeScript → dist/
npm run dev        # run server via tsx (stdio)
npm run login      # browser auth flow

Smoke test:

node -e "import('./dist/mp-client.js').then(m => m.getRoute(105924807).then(console.log))"

Session refresh

When tools return auth errors:

npm run login

Or call mp_set_session with a fresh ap_session cookie value.


License

MIT — Copyright (c) 2026 Evan Jones. See LICENSE.

Available Tools

10 tools
mp_auth_statusB

Check whether the Mountain Project session is valid and return user info.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations or output schema, the description carries the disclosure burden. It makes clear this is a status-check/read operation returning user info, but it does not describe behavior for an invalid session, prerequisites like a prior mp_set_session call, or the response shape.

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

Conciseness5/5

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

The description is a single concise, front-loaded sentence that conveys the main purpose without filler. Every word contributes meaning.

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

Completeness3/5

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

For a zero-parameter tool, this is minimally viable, but without an output schema or discussion of invalid-session behavior and dependencies, an agent is left uncertain about what the return value will look like in different states.

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 and 100% schema description coverage, so the schema fully defines the input surface. The description adds no parameter details, which is acceptable because there are no parameters to document.

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

Purpose4/5

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

The description states a specific action ('Check whether... valid') and resource ('Mountain Project session'), and notes that it returns user info. It is distinguishable from the sibling mp_set_session, though it does not explicitly name that alternative.

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

Usage Guidelines2/5

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

There is no guidance on when to call this tool, such as before making authenticated requests, or how it relates to mp_set_session. The usage context is only implied by the name and description.

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

mp_fetch_ticksB

Force-refresh your personal tick list from Mountain Project.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. 'Force-refresh' hints at a side effect (invalidating/refreshing local data), but it does not disclose whether authentication is required, how the refresh behaves if auth is missing, whether it makes a network request, or what happens to existing cached data.

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?

A single, front-loaded sentence with no filler. Every word contributes: the action, the scope, and the data source are all present.

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

Completeness3/5

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

For a zero-parameter tool, the description is mostly adequate, but with no output schema and no annotations, it should at least hint at authentication requirements or what the agent can expect after the refresh completes. The absence of any return/result information leaves a meaningful 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?

The tool has zero parameters, so the schema already fully covers invocation requirements. The description correctly adds no parameter noise, and the baseline of 4 for zero-parameter tools applies.

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

Purpose4/5

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

The description uses a specific verb ('Force-refresh') and identifies the resource ('your personal tick list from Mountain Project'). It is clear about the operation, though it does not explicitly name the sibling tool mp_list_ticks to draw a contrast, so it stops just short of full differentiation.

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

Usage Guidelines3/5

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

The word 'Force-refresh' implies this tool is for updating cached tick data, so the usage context is somewhat inferable. However, there is no explicit guidance on when to prefer this over mp_list_ticks or mp_tick_stats, and no mention of prerequisites such as authentication.

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

mp_find_routesB

Find routes in an area using Mountain Project route finder filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoSort order (default: popularity desc)
typeNoClimbing type
limitNoMax routes
areaIdYesArea ID to search within
stylesNoRoute styles to include
gradeMaxNoMaximum YDS grade, e.g. 5.11d
gradeMinNoMinimum YDS grade, e.g. 5.10a
minStarsNoMinimum star rating

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description carries full responsibility for behavioral disclosure, but it only states the action. It does not mention pagination, default size/order behavior beyond the sort description, authentication needs, rate limits, or the shape of the returned route data.

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?

A single, front-loaded sentence with no filler. Every word adds meaning, and it is immediately clear what the tool does.

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

Completeness3/5

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

The description plus a fully documented schema is enough to make a basic call, but without an output schema or annotations, an agent is left guessing about the return format and whether results are paginated or capped. The description could usefully add one sentence about the response.

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

Parameters3/5

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

Schema description coverage is 100%, so each parameter is already documented. The description adds no parameter-specific detail, which is acceptable; the baseline of 3 applies.

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

Purpose4/5

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

The description uses a specific verb ('Find') with a clear resource ('routes in an area') and identifies the mechanism ('route finder filters'). This distinguishes it from sibling tools like mp_get_route (single route) or mp_get_area (area details), though it doesn't explicitly name them.

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

Usage Guidelines3/5

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

The mention of 'in an area' implies this is the filter-based route-listing tool, which gives some context for selection. However, it never states when to prefer mp_find_routes over mp_search or mp_get_route, and no exclusions or alternatives are given.

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

mp_get_areaA

Get detailed information about a climbing area by numeric ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
areaIdYesMountain Project area ID

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. 'Get' clearly indicates a read-only operation, but the description does not disclose what 'detailed information' includes, how missing or invalid IDs are handled, or whether authentication is required. Basic behavioral intent is clear, but important details remain implicit.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that conveys the essential information with no filler. It is appropriately concise for a tool with one parameter.

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

Completeness3/5

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

For a one-parameter getter, the description covers the core operation but lacks details about the response content, error behavior, or prerequisites such as authentication. Without an output schema or annotations, these gaps are noticeable but not crippling for a simple read tool.

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

Parameters3/5

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

Schema description coverage is 100%, with areaId documented as 'Mountain Project area ID'. The description only echoes that it is a numeric ID, adding no extra semantic meaning beyond the schema. Baseline 3 is appropriate.

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 ('Get'), identifies the resource ('climbing area'), and specifies the access method ('by numeric ID'). This clearly differentiates it from siblings like mp_search (search-based) and mp_get_route (route-specific).

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

Usage Guidelines3/5

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

The description implies the tool is used when the caller already has a numeric area ID, but it does not explicitly state when to prefer this over mp_search or mp_resolve_id, nor any exclusions. Usage context is clear but not elaborated.

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

mp_get_routeA

Get detailed information about a climbing route by numeric ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
routeIdYesMountain Project route ID

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It only says 'Get detailed information', implying a read operation, but does not disclose output shape, failure behavior, authentication needs, or any side effects. This is a thin description for a tool that could return complex route data.

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 one succinct sentence with no filler. It front-loads the action and resource, then states the identifying input. Every word contributes to the tool's purpose.

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

Completeness4/5

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

For a single-parameter lookup tool, the description plus schema is largely sufficient to select and invoke the tool correctly. It could mention what information is returned or note that no auth is required, but the low complexity makes the current description acceptable.

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

Parameters3/5

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

Schema description coverage is 100%, with the single routeId parameter already documented as 'Mountain Project route ID'. The description adds the word 'numeric', which matches the integer type but does not add meaningful new semantics beyond the schema.

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

Purpose5/5

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

The description states a specific verb ('Get'), a clear resource ('detailed information about a climbing route'), and the key selection criterion ('by numeric ID'). This distinguishes it from siblings like mp_get_area and mp_search, which target different resources or use different lookup modes.

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

Usage Guidelines3/5

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

Usage context is implied: an agent should call this when it has a numeric route ID and wants route details. However, there is no explicit guidance on when to prefer this over mp_search or mp_find_routes, nor any mention of prerequisites or when not to use it.

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

mp_list_ticksB

List your personal ticks, auto-fetching from MP if cache is empty or stale.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoFilter by tick year
limitNoMax ticks
styleNoTick style, e.g. Lead, Follow
gradeMaxNoMaximum grade
gradeMinNoMinimum grade
areaContainsNoFilter location breadcrumb

TDQS

B3.2/5.0
Behavior3/5

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

The description discloses a meaningful side effect: it will auto-fetch from MP when cache is empty or stale, revealing network and cache behavior not visible in the input schema. However, it does not explain cache freshness criteria, authentication requirements, or whether the returned data could be stale, so not all behavioral traits are covered.

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

Conciseness5/5

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

One sentence that immediately states the operation and the key caching behavior, with no filler or repetition of schema details. It is well structured and front-loaded.

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

Completeness2/5

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

The tool has 6 optional filters and no output schema, and the description omits return value shape, pagination/limit behavior, and how it differs from mp_fetch_ticks. Without annotations, this leaves an agent under-informed for constructing the best call.

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

Parameters3/5

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

All six parameters are fully described in the input schema, so the description does not need to repeat them. The description adds no extra meaning or examples for grade/area filter formats, leaving baseline schema value intact.

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

Purpose4/5

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

The description states a clear action ('List') and resource ('your personal ticks'), and indicates the MP data source and caching behavior. It does not explicitly distinguish itself from the sibling mp_fetch_ticks, leaving some ambiguity about when to prefer this over that tool.

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

Usage Guidelines2/5

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

No guidance is given about when to use this tool versus alternatives such as mp_fetch_ticks. The auto-fetch note implicitly says cache is handled, but there are no exclusions, prerequisites, or conditions specifying when a different tool should be chosen.

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

mp_resolve_idA

Extract a numeric route or area ID from a Mountain Project URL or prefixed ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlOrIdYesURL, routes.123, areas.456, or numeric ID

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It clearly states the transformation performed (extracting a numeric route/area ID) and the accepted input formats, which is strong transparency for a simple resolver. It does not specify behavior for invalid or ambiguous inputs, but this is a relatively minor gap for a utility of this simplicity.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler or redundant information. Every word contributes to explaining what the tool does and what inputs it accepts.

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

Completeness4/5

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

For a one-parameter utility with full schema documentation, the description covers the input forms and clearly states the expected output. The main missing piece is the exact return format or error behavior, but given the low complexity of the tool and the absence of an output schema, the description is largely complete.

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

Parameters3/5

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

The schema already provides 100% coverage of the urlOrId parameter with a helpful description of accepted formats. The main description reinforces those formats but does not add substantial new semantic meaning beyond what the schema already documents, so a baseline score of 3 is appropriate.

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 ('Extract') and clearly identifies the resource (numeric route or area ID) and the accepted input forms (URL or prefixed ID). This clearly distinguishes it from sibling tools like mp_search or mp_get_route, which operate on queries or resolved IDs rather than converting input into an ID.

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

Usage Guidelines3/5

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

The description implies the tool should be used when you have a Mountain Project URL or prefixed ID and need the numeric ID for subsequent calls, but it does not explicitly state when to use it versus alternatives. There is no explicit when-not-to-use guidance, though the intended context is fairly inferable.

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

mp_set_sessionB

Set or refresh the Mountain Project session cookie at runtime.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdNoNumeric MP user ID
persistNoSave to session file (default: true)
usernameNoMP username slug
apSessionYesap_session cookie value
xsrfTokenNoXSRF-TOKEN cookie value

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'set or refresh' without mentioning side effects like disk persistence (despite a persist parameter in the schema), whether prior authentication is needed, or what happens to the running session. This is a significant gap for a state-mutating tool.

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

Conciseness5/5

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

The description is a single concise sentence that immediately states the core action and target. It is front-loaded with the primary verb and resource, with no filler or redundant wording.

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

Completeness2/5

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

This is a session-mutation tool with no output schema and no annotations, so the description needs to provide more operational context. It omits return behavior, side effects, and the authentication flow it participates in. While the schema thoroughly documents parameters, the description alone would not fully prepare an agent to call this tool correctly in context.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline of 3 applies. Each parameter already has a clear explanation ('ap_session cookie value', 'Save to session file'), and the tool description adds nothing beyond what the schema provides. No parameter semantics are missing or ambiguous.

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 specific verb-resource language ('Set or refresh the Mountain Project session cookie at runtime') and clearly distinguishes this tool from the read/search siblings like mp_search and mp_get_route. The purpose is immediately understandable.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to use this tool, when not to, or how it relates to the similarly authentication-oriented sibling mp_auth_status. The phrase 'at runtime' hints at dynamic use, but no prerequisites, exclusions, or alternative routing is provided.

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

mp_tick_statsC

Aggregate statistics over your personal tick list.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearToNoInclude ticks through this year
groupByYesHow to group tick counts
yearFromNoInclude ticks from this year

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full behavioral disclosure burden. It states the operation is aggregation, but does not disclose what statistics are produced, whether it is read-only, how missing data is handled, or what output shape to expect. This is minimal behavioral transparency for a no-annotation tool.

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

Conciseness4/5

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

The description is one short, front-loaded sentence with no wasted words. It communicates the core action and scope immediately, though it lacks any structural breakdown of options or outputs.

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

Completeness2/5

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

There is no output schema, so the description should compensate by explaining what the aggregate statistics look like, but it does not. It also does not clarify how yearFrom and yearTo interact, whether all years are included by default, or how grouped results are returned. For a tool with 3 parameters and no output schema, this is incomplete.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already explains groupBy, yearFrom, and yearTo, including the enum values for groupBy. The description adds the 'personal tick list' scoping context, which is useful, but does not need to repeat parameter details. Baseline 3 is appropriate given the high schema coverage.

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

Purpose4/5

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

The description clearly states a specific verb ('Aggregate statistics') and a resource ('your personal tick list'), which makes the tool's core purpose understandable. It does not explicitly distinguish itself from siblings like mp_list_ticks or mp_fetch_ticks, but 'statistics' implies aggregation rather than raw listing.

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

Usage Guidelines2/5

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

There is no guidance about when to use this tool versus alternatives such as mp_fetch_ticks or mp_list_ticks. The phrase 'your personal tick list' implies it operates on the user's own ticks, but no explicit context, exclusions, or alternative routing is provided.

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. 10 tool updatesv1.0.0
    • First observedmp_auth_status
    • First observedmp_fetch_ticks
    • First observedmp_find_routes
    • First observedmp_get_area
    • First observedmp_get_route
    • First observedmp_list_ticks
    • First observedmp_resolve_id
    • First observedmp_search
    • First observedmp_set_session
    • First observedmp_tick_stats

TDQS

A3.6/5.0

Scored across 10 tools

Disambiguation4/5

Most tools are clearly distinguished by resource and action (search, get_route, get_area, find_routes, resolve_id, tick operations). Minor overlap exists between mp_search and mp_find_routes (both find routes, though in different contexts) and between mp_fetch_ticks and mp_list_ticks (list auto-fetches, fetch forces refresh), but descriptions clarify the boundaries.

Naming Consistency4/5

All tools share the mp_ prefix and most follow verb_noun structure (mp_search, mp_get_route, mp_set_session, mp_fetch_ticks, mp_list_ticks). Two names deviate: mp_auth_status (noun phrase) and mp_tick_stats (noun phrase), which break the pattern slightly but remain predictable and readable.

Tool Count5/5

Ten tools is well-scoped for a climbing data and personal tick-list server. Each tool covers a distinct aspect of the domain—searching, retrieving, resolving IDs, session management, and tick lifecycle—without unnecessary redundancy or bloat.

Completeness5/5

The tool surface covers the core read-only workflows for Mountain Project: searching and fetching routes/areas, resolving URLs to IDs, and managing personal tick data (auth, session, refresh, list, stats). No obvious dead ends; the main missing operations like creating/deleting ticks or routes are external to the API's likely scope.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Enables AI assistants to search and browse mountaineers.org for activities, courses, trip reports, and routes, and optionally access authenticated user data such as upcoming activities, badges, and member profiles.
    28
    20 npm
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables users to interact with the Griptonite indoor climbing app, allowing them to log climbs, browse routes and grades, and retrieve activity feeds and rankings.
    22
    MIT