OurFamilyWizard MCP
This server connects to AllTrails, enabling natural-language access to trail data, user profiles, and hiking history. All tools are read-only.
Trail Discovery & Search
Search AllTrails by name or free-text query, with optional filtering by record type (trails, cities, areas, etc.)
List trails by US state/region or by country, with pagination
Resolve place names to AllTrails location records (country, state, city, area, POI) with coordinates
Trail Information
Get trail details (name, location, length, elevation gain, difficulty, rating, route type)
Fetch trail reviews (user, rating, comment)
View trail photos with image URLs and metadata
Get trail weather overview
Export trail route as a GPX 1.1 document with track points and elevation data
User & Personal Data
View the signed-in user's profile
List a user's saved lists (favorites and custom lists) and their items
List completed trails for the signed-in user or a public profile
Access activity feeds (local, timeline, or personal posts) with pagination
Diagnostics
Run a healthcheck to verify the connection and diagnose issues with the fetchproxy bridge
Provides natural-language access to AllTrails for searching trails, retrieving trail details, reviews, photos, weather, GPX export, and accessing user-specific data like saved lists and completed trails.
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., "@OurFamilyWizard MCPWhat's on the kids' calendar this week?"
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.
AllTrails MCP
A Model Context Protocol server that connects Claude to AllTrails, giving you natural-language access to trail search, trail details, reviews, photos, weather, and your own saved lists and hiking history.
AI-developed project. This codebase was entirely built and is actively maintained by Claude. No human has audited the implementation. Review all code and tool permissions before use.
Unofficial and unsupported. AllTrails has no public API. This server reverse-engineers the internal API used by alltrails.com. That API is fronted by DataDome bot protection and governed by AllTrails' Terms of Service. It may break without notice, and automated access may violate their ToS — a prior third-party AllTrails project was disabled at AllTrails' request. Use this only for your own account, at your own discretion.
What you can do
Ask Claude things like:
"Find waterfall trails near Portland, Oregon"
"What's the AllTrails rating and length of trail 10236086?"
"Summarize the recent reviews for this trail"
"What trails have I marked completed?"
"Show me the trails on my saved 'weekend hikes' list"
Related MCP server: Cozi MCP Server
Requirements
Claude Desktop (or any MCP host)
Node.js 22.5 or later
The fetchproxy Transporter browser extension and a signed-in alltrails.com tab (see Authentication)
Acknowledgement of Terms
By using this MCP server, you acknowledge and agree to the following:
1. This server accesses AllTrails using your own signed-in session. It reuses the cookies from your own browser session; it cannot access anyone else's account or private data.
2. AllTrails' Terms of Service govern your use of this server, just as they govern your direct use of AllTrails. AllTrails restricts automated access and scraping, and fronts its API with bot protection. Automated use through this server may breach those terms. You are agreeing to AllTrails' terms every time you invoke a tool.
3. Personal use only. This project is not affiliated with, endorsed by, or sponsored by AllTrails, LLC. It is a personal automation tool. Do not use it to bulk-extract AllTrails' data, to build a competing product, or in any way that burdens their service.
4. You accept full responsibility for any consequences — technical (rate-limiting, CAPTCHA challenges, account action) or otherwise. The maintainer provides no warranty and no support.
This section is the maintainer's good-faith summary — it is not legal advice and does not modify or supersede AllTrails' actual ToS.
Installation
1. Clone and build
git clone https://github.com/chrischall/alltrails-mcp.git
cd alltrails-mcp
npm install
npm run build2. Add to Claude Desktop
Edit your Claude Desktop config file:
Mac:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Add the alltrails entry inside "mcpServers" (create the key if it doesn't exist):
{
"mcpServers": {
"alltrails": {
"command": "node",
"args": ["/absolute/path/to/alltrails-mcp/dist/index.js"]
}
}
}Replace /absolute/path/to/alltrails-mcp with the path where you cloned the repo.
3. Restart Claude Desktop
Quit completely (Cmd+Q on Mac, not just close the window) and relaunch.
4. Verify
Ask Claude: "Search AllTrails for trails near me."
Authentication
AllTrails fronts its internal API with DataDome bot protection, and DataDome fingerprints the HTTP client itself — a cookie copied out of the browser and replayed from Node gets rejected even while the browser sails through. So the fetchproxy bridge is required: every API request runs as a same-origin fetch inside your own signed-in alltrails.com tab, reusing your authenticated session. There is no stored-cookie mode.
Requirements: the fetchproxy Transporter extension installed, a signed-in alltrails.com tab open, and a one-time pair-code approval on first use (the trust persists).
The x-at-key app key AllTrails' own client sends is never stored in this repo or your config — the server captures the live value from your tab's own API traffic on first need, keeps it in memory only, and re-captures automatically if AllTrails rotates it. The alltrails_healthcheck tool round-trips a probe through the bridge and tells you which hop broke.
Configuration
Env var | Required | Purpose |
| No | Numeric user id for the per-user tools; defaults to the signed-in user via |
| No | fetchproxy concentrator port (default |
| No | Override the corresponding request headers. |
| No | Per-request timeout in ms (default |
| No |
|
Available tools
All tools are read-only — this server never writes to AllTrails.
Tool | What it does |
| Search AllTrails by trail or place name — free-text queries use the same suggestions endpoint as the alltrails.com search box ( |
| Resolve a place name to AllTrails location records (country/state/city/area/POI) with each one's kind, coordinates, slug, and disambiguation label |
| Trail details — name, overview, length, elevation gain, difficulty, rating, route type, location ( |
| User reviews for a trail — |
| Photos for a trail — slim records with a fetchable image |
| Export a trail's route as GPX 1.1 (track points + elevation) |
| Weather overview for a trail |
| The signed-in user's profile |
| A user's saved lists / favorites |
| The trails saved in a list, by list id — ordered |
| A user's completed trails |
| A user's activity feed ( |
| Round-trips a probe through the fetchproxy bridge and reports role/port/timing plus a plain-English hint about which hop broke |
The per-user tools default to the signed-in user (resolved via /api/alltrails/me or ALLTRAILS_USER_ID); pass userId to target a public profile.
Response shape: view
alltrails_search, alltrails_get_trail, alltrails_get_trail_reviews,
alltrails_get_trail_photos, alltrails_get_list_items and
alltrails_get_activity_feed take a view parameter with two rungs:
| What you get |
| The default. The slim projection described in the table above — the fields a caller acts on. Nothing to pass. |
| AllTrails' whole untouched record. |
Compact is the default deliberately. These projections existed before, behind
compact: false and a tool description asking the caller to please opt in — and
an efficiency that has to be requested is one that usually is not. Ask for
view: "full" when you need a field the projection drops; the commonest is
route geometry from alltrails_get_trail.
viewis notdetail.alltrails_get_trailalso takesdetail(basic/medium/offline), and that one is a passthrough to AllTrails — it decides what the API sends us.viewdecides what this server hands you. Route geometry needs both:detail: "offline"to fetch it andview: "full"to keep it. The collision is exactly why the fleet parameter is namedview.One projection is not a subset:
alltrails_get_trail_photos'urlis derived by the compact rung (AllTrails' record carries no image URL), soview: "full"does not contain it.
Troubleshooting
403 Forbidden — AllTrails' DataDome protection rejected the request. This usually means the tab isn't signed in (or DataDome is challenging it) — sign into alltrails.com in an open tab and retry.
"AllTrails bridge: …" — the bridge itself failed before reaching AllTrails (extension not running, pairing not approved, no tab). Run alltrails_healthcheck for a diagnosis, and check the Transporter extension popup.
"AllTrails: capturing the x-at-key app key failed…" — the key is read off a request your tab makes while the call is waiting, and an idle tab makes none. Refreshing first does not help: the extension only listens for the duration of the call, so a reload that finished before it started happened while nothing was listening. Run the tool again and reload a signed-in www.alltrails.com tab while it is running.
Empty / unexpected results — the internal AllTrails endpoints are undocumented and change over time; responses may shift. Enable ALLTRAILS_DEBUG_LOG=1 to inspect the raw traffic on stderr.
Development
npm test # run the vitest suite
npm run build # tsc → dist/, then esbuild bundle → dist/bundle.js
npm run dev # node --env-file=.env dist/index.js (requires built dist)vitest.config.ts enforces 100% coverage on src/** (except the stdio entry point). Main is protected — all changes land via PR. See CLAUDE.md for the full PR + release flow.
Project structure
src/
index.ts MCP server entry (runMcp + StdioServerTransport)
protocol.ts Wire-level constants (BASE_URL, app key, headers)
transport.ts createAllTrailsTransport(): the fetchproxy bridge transport
client.ts AllTrailsClient — bridge requests, live x-at-key capture, 429 retry
config.ts Env parsing (api key, headers, timeout, port, user id, debug)
validate.ts parseAllTrails(): zod validation of responses at call sites
tools/
_shared.ts Response helpers + resolveUserId
trails.ts get_trail, reviews, photos, weather, gpx export
explore.ts search, list by state/country
user.ts profile, saved lists, completed trails, activity feed
healthcheck.ts alltrails_healthcheck (bridge diagnostics)
tests/ Mirrors src/; mocks AllTrailsClient.request via vi.spyOnRequest flow
Every API request runs as a same-origin fetch inside your signed-in alltrails.com tab, via the fetchproxy bridge (src/transport.ts, the shared createFetchproxyTransport factory). The browser carries its own cookies; the server attaches only the AllTrails protocol headers (x-at-key etc.), which an in-tab fetch doesn't add on its own. There is no Node-direct mode — DataDome fingerprints the HTTP client, so only in-tab requests are reliable.
Also see the fetchproxy README for extension install instructions.
License
MIT
Available Tools
13 toolsalltrails_get_activity_feedARead-only
Get an AllTrails user's activity feed (recorded hikes and posts). Defaults to the signed-in user; pass a userId to target a specific public profile. Without a feed argument this returns the feed DIRECTORY (the available feeds: local, timeline (following), personal (own posts)) — pass feed to get the actual items. Returns slim projections by default; pass view:"full" for the whole records.
| Name | Required | Description | Default |
|---|---|---|---|
| feed | No | Which feed to read: local (nearby activity), timeline (people you follow), personal (own posts). Omit to list the available feeds. | |
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact returns { count, hasNextPage, nextCursor, items: [{ type, timestamp, description, user, trail, activity, review }] } — and the no-feed directory as { name, displayName } per feed; "full" returns AllTrails' whole records. | |
| cursor | No | Opaque nextCursor from a previous page, for pagination | |
| userId | No | Numeric AllTrails user id. Defaults to the signed-in user. | |
| maxItems | No | Max items per page (server-side) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes safety, and the description adds meaningful non-obvious behavior beyond it: the dual-mode response (directory vs actual items), the default-to-signed-in-user behavior, and the slim-versus-full projection switch. No contradiction with the annotation.
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?
Three compact sentences, front-loaded with the purpose, with every sentence earning its place (purpose, target resolution, dual-mode behavior, projection behavior). No fluff or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter tool with no output schema, the description covers the essential decision points: how to select a feed, how to target a user, and how the view parameter changes the response. Combined with the 100% schema coverage, an agent has what it needs to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and every parameter carries a description, so the baseline is 3. The tool description does add connective value by explaining the feed omission-to-directory behavior and the view projection default, but the schema already documents the enum values and response shapes in detail, so the description adds limited extra meaning.
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 opens with a specific verb-plus-resource statement ('Get an AllTrails user's activity feed (recorded hikes and posts)') that clearly delimits the scope. It additionally clarifies the target resolution (signed-in user vs userId), which helps distinguish it from the sibling trail/GPX/list tools, though it never names an alternative explicitly.
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 gives explicit conditional invocation context: omitting 'feed' returns the feed directory, passing 'feed' returns items, and userId defaults to the signed-in user. This is clear usage context with no ambiguity, though it offers no exclusions or named alternatives among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alltrails_get_list_itemsARead-only
Get the trails saved in an AllTrails list by its numeric list id (from alltrails_list_user_lists, or a public "list" record from alltrails_search). Items are sparse references: each carries a trailId (hydrate with alltrails_get_trail), the curator's order, and any notes — not trail details. Returns slim { trailId, type, order, notes, addedAt } entries sorted by order by default; pass view:"full" for the whole records.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact returns { count, items: [{ trailId, type, order, notes, addedAt }] } sorted by the curator's order; "full" returns AllTrails' whole list-item records in the order they arrived. | |
| listId | Yes | Numeric AllTrails list id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint already covers the read-only safety profile, and the description adds valuable behavioral facts beyond annotations: sparse item shape, default sort by curator order, compact vs full view semantics, and the explicit warning that trail details are not included. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and input provenance, then gives the sparse-reference warning and return shape. Each sentence carries essential information with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list-fetch tool with no output schema, the description adequately covers input provenance, output shape, default ordering, the full-view option, and the correct hydration path for trail details. Pagination is not mentioned, but the tool's simplicity makes that non-material.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning by explaining where listId comes from and that compact is the default view with slim sorted output. However, the view parameter's full behavior is already thoroughly documented in the schema, so the additional semantic value is moderate.
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 states a specific verb and resource ('Get the trails saved in an AllTrails list'), identifies the required numeric list id and its source, and explicitly distinguishes the returned sparse items from trail details, pointing to alltrails_get_trail for hydration. This clearly separates it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent when to use the tool: after obtaining a list id from alltrails_list_user_lists or a public list from alltrails_search. It also warns that items are not trail details and names alltrails_get_trail as the hydration alternative, so the tool selection versus siblings is explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alltrails_get_profileARead-only
Get the signed-in AllTrails user profile (via /api/alltrails/me). Requires a signed-in session.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds the exact API endpoint and authentication requirement, which provides useful behavioral context. It does not detail any side effects or output format, but given the simplicity, it is adequate.
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 extremely concise with two sentences: the first states the action and resource, and the second adds authentication. No superfluous information.
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 has no parameters and no output schema, the description provides all necessary context: what it does, the underlying API, and a prerequisite. It is fully sufficient for an agent to decide when and how to invoke it.
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?
There are no parameters, and the schema coverage is 100%. The description does not need to add parameter info, but it does mention the endpoint, which aids understanding. A score of 4 is appropriate for a parameterless tool with sufficient context.
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 it gets the signed-in user profile using a specific verb ('Get') and resource ('user profile'). It distinguishes from sibling tools like alltrails_get_activity_feed and alltrails_get_trail, which are about different resources.
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 prerequisite ('Requires a signed-in session'), which guides when the tool can be used. It does not explicitly list alternative tools or when not to use it, but the context is clear and no sibling tool serves the same purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alltrails_get_trailARead-only
Get details for a single AllTrails trail by its numeric trail id. Returns name, location, length, elevation gain, difficulty, rating, route type, and (at higher detail levels) route geometry. Returns a slim projection by default (name, overview, length in m+mi, elevation gain, difficulty, rating, route type, location); pass view:"full" for the whole record and geometry.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact returns { name, overview, length in m+mi, elevation gain in m+ft, difficulty, rating, route type, location }, unwrapped from the one-element envelope; "full" returns the whole record, route geometry included (which also needs detail:"offline" to be fetched at all). | |
| detail | No | Detail level. "medium" (default) is a good overview; "offline" includes full route geometry. | |
| trailId | Yes | Numeric AllTrails trail id (e.g. "10236086") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true, and the description adds meaningful behavior beyond that: it explains default slim projection, how to request full records, and that geometry depends on higher detail levels. This gives an agent a clear picture of what the tool returns without over-explaining.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose, then concise detail about default vs full output. Every sentence earns its place; no filler or redundant restatement.
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?
With no output schema, the description enumerates the main return fields and distinguishes compact vs full responses. It is complete enough for a simple read-by-id tool, though the relationship between view:full and detail:offline for geometry is slightly clearer in the schema than in the description.
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 all three parameters and their enums. The description restates the default projection and the role of view/full, but does not add substantial semantic value beyond what the schema already provides.
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?
States a specific verb and resource: get details for a single AllTrails trail by numeric trail id. Clearly distinguishes this from siblings like alltrails_search and alltrails_get_trail_reviews by emphasizing a single trail identified by id.
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 makes clear this is the right tool when you already have a numeric trail id and want trail details. It does not explicitly name alternatives or say when not to use it, but the by-id framing provides enough context to route an agent correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alltrails_get_trail_gpxARead-only
Export an AllTrails trail's route as a GPX 1.1 document (track points with per-point elevation), built from the trail's offline-detail route geometry. Returns raw GPX XML suitable for saving to a .gpx file or importing into navigation apps.
| Name | Required | Description | Default |
|---|---|---|---|
| trailId | Yes | Numeric AllTrails trail id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds meaningful behavioral detail: the output is raw GPX XML, built from offline-detail route geometry, with per-point elevation. This goes beyond the annotation without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the core action and output format, then adds useful context about the document's content and intended use.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only export tool with no output schema, the description fully covers what the tool returns and how it can be used. Nothing essential is missing for an agent to invoke and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with trailId already described as 'Numeric AllTrails trail id'. The description does not add parameter-level detail beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Export') with a clear resource ('an AllTrails trail's route') and a concrete output ('GPX 1.1 document'). It clearly differentiates this tool from siblings like alltrails_get_trail or alltrails_get_trail_photos, as the GPX export purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states the intended use case: obtaining a trail route as GPX for saving or importing into navigation apps. It does not explicitly name alternatives or exclusions, but the context is strong enough that an agent can infer when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alltrails_get_trail_photosARead-only
Get photos for an AllTrails trail by its numeric trail id. Returns just { id, title, likeCount, user, uploadedAt, url } per photo by default — the url serves the actual image; pass view:"full" for the whole records.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact returns { count, photos: [{ id, title, likeCount, user, uploadedAt, url }] } — the url is DERIVED and signed here, so "full" (AllTrails' whole photo records) does not contain it. No route geometry either way — that is alltrails_get_trail. | |
| trailId | Yes | Numeric AllTrails trail id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, which the description matches. The description adds real behavioral context: the default compact shape, that url is derived/signed and absent from 'full' mode, and that compact drops fields. This goes beyond what annotations alone convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, purpose first, with no filler. The return-shape detail earns its place since there is no output schema, though 'the whole records' is slightly vague.
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?
No output schema exists, so the description must own the return contract — it details the compact shape and the derived-url caveat, and the schema's view parameter fills in the 'full' semantics. Combined, an agent has enough information to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (both trailId and view are fully documented), so the baseline is 3. The description restates the numeric-id requirement and the view toggle but adds little semantic value beyond what the schema's view description already covers.
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?
States a specific verb ('Get'), resource ('photos'), and identifier ('numeric trail id'). The resource is clearly distinct from siblings like alltrails_get_trail, alltrails_get_trail_reviews, and alltrails_get_trail_gpx, so an agent can select it correctly without opening other schemas.
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 view parameter explicitly excludes route geometry and names the alternative ('No route geometry either way — that is alltrails_get_trail'), giving a concrete when-not-to-use signal. It doesn't cover when to choose this over sibling photo-adjacent tools, but the one stated exclusion is precise and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alltrails_get_trail_reviewsARead-only
Get user reviews for an AllTrails trail by its numeric trail id. Returns just { user, rating, comment } per review by default; pass view:"full" for the whole records.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact returns { count, reviews: [{ user, rating, comment }] }; "full" returns AllTrails' whole review records. (No route geometry either way — that is alltrails_get_trail.) | |
| limit | No | Max reviews to return (default 20) | |
| trailId | Yes | Numeric AllTrails trail id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers safety, and the description adds valuable behavioral scope: returns compact { user, rating, comment } by default, view:"full" for whole records. It also clarifies what is NOT returned in the schema note. This goes beyond the annotation without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences, front-loaded with the tool's purpose and followed by the essential response-shape distinction. No filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with no output schema, the description supplies the default response shape, the full variant, and a sibling exclusion. The schema documents all parameters. Minor missing details like rating representation or empty-result behavior are not material for a simple review-list tool.
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 all three parameters. The description's mention of 'view:"full"' adds no meaning beyond the enum description. 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?
States a specific verb and resource: 'Get user reviews for an AllTrails trail by its numeric trail id.' It is clearly distinct from siblings like alltrails_get_trail_photos, alltrails_get_trail_weather, and alltrails_get_trail.
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 main description doesn't give broad when-to-use guidance, but the view parameter explicitly excludes route geometry: 'No route geometry either way — that is alltrails_get_trail.' This redirects agents to the correct sibling for geometry. Combined with the focused tool name, selection is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alltrails_get_trail_weatherARead-only
Get the weather overview for an AllTrails trail by its numeric trail id.
| Name | Required | Description | Default |
|---|---|---|---|
| trailId | Yes | Numeric AllTrails trail id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers side-effect safety, but the description adds little behavioral context beyond restating the purpose. It does not mention what the weather overview includes, units, freshness, or availability, so an agent gets minimal extra transparency.
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 front-loaded sentence with no filler. It states the verb, resource, and input requirement clearly, achieving maximum efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only tool, the description provides the required identifier and the general return topic. Without an output schema, slightly more detail about what a 'weather overview' contains would be useful, but all information needed to make the call is present.
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 already documents trailId as 'Numeric AllTrails trail id' with 100% coverage. The description repeats 'numeric trail id' without adding new semantic details such as how to obtain the id, valid ranges, or formatting constraints. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (Get), a concrete resource (weather overview), and the key input (numeric trail id). It clearly distinguishes this tool from siblings like alltrails_get_trail_gpx or alltrails_get_trail_reviews by focusing on weather.
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 makes the usage context clear: call this tool when you need the weather overview for a trail identified by numeric id. It doesn't explicitly name alternatives or exclusions, but the purpose is unambiguous enough for correct routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alltrails_healthcheckVerify the fetchproxy bridge end-to-endARead-onlyIdempotent
Round-trips a small public www.alltrails.com URL (/api/alltrails/v3/trails/10236086?detail=basic) through the fetchproxy bridge and returns diagnostics: the bridge's role (host/peer/null), port, version, the extension link (linked / pair pending / not attached / never answered), the elapsed round-trip time, and a plain-English hint distinguishing 'bridge never came up' from 'extension not connected' from 'real www.alltrails.com-side problem'. Read-only, no auth required. Call this when a real tool fails and you want to know which hop broke.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark read-only and idempotent, and the description goes further by detailing exactly what the tool does externally: it fetches a small public URL through the bridge and reports bridge role, port, version, extension-link state, elapsed time, and a plain-English failure-mode hint. It also explicitly states 'Read-only, no auth required,' matching the annotations without contradiction.
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 front-loaded with the core action, then enumerates the diagnostic outputs, and closes with a clear usage directive. Every sentence adds necessary context for selecting and invoking the tool; there is no filler or redundancy beyond the helpful read-only/auth note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter healthcheck with no output schema, the description is remarkably complete: it names the exact URL being tested, lists the returned diagnostics, explains the failure-mode hint, and states the intended use case. An agent has enough context to invoke the tool and interpret its result without additional documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the baseline for this dimension is 4. The description correctly implies no input is needed by showing the fixed URL and the diagnostic nature of the tool, adding no irrelevant parameter guidance.
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 states a precise verb and resource: it 'round-trips a small public www.alltrails.com URL through the fetchproxy bridge' and returns diagnostics. This clearly distinguishes the healthcheck from sibling data-retrieval tools like alltrails_get_trail or alltrails_search.
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 gives an explicit trigger: 'Call this when a real tool fails and you want to know which hop broke.' It also notes it is read-only and requires no auth, which clarifies safe invocation. It does not explicitly enumerate when not to use it, but the diagnostic purpose is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alltrails_list_completed_trailsARead-only
List the trails an AllTrails user has marked completed. Defaults to the signed-in user; pass a userId to target a specific public profile.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | No | Numeric AllTrails user id. Defaults to the signed-in user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true signals this is a read-only operation, so the description doesn't need to restate that. The description adds a subtle nuance: it says 'Defaults to the signed-in user; pass a userId to target a specific public profile,' which implies authentication might be needed for the default, but it doesn't clarify permission requirements (e.g., might fail for private profiles). This is minor additional context beyond the annotation, but it doesn't disclose potential errors or limits (e.g., pagination, rate limits), so a 3 is appropriate.
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 front-loads the core purpose and then adds the optional parameter context. It is concise with no fluff, though it could be slightly more compact by combining clauses. Overall, it 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 low complexity (single optional parameter), a high-coverage schema, and a read-only hint, the description is nearly complete. It explains the default behavior and how to target other users, which is essential for correct invocation. It doesn't cover potential edge cases like empty results or auth failures, but those are not strictly needed for a simple list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the userId parameter fully (100% coverage), including its type and default behavior. The description echoes this but doesn't add much new semantic value—it just restates the default. Since schema coverage is high, the baseline is 3, and the description meets it without going beyond.
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: listing trails marked as completed by an AllTrails user. It specifies the main resource ('trails'), the action ('List'), and the modifier ('completed'). It also distinguishes the default behavior (signed-in user) from an optional override (specific user ID), which helps differentiate it from sibling tools that list other user content (e.g., alltrails_list_user_lists) or fetch single trails (alltrails_get_trail).
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 clear context on when to use the tool: to list completed trails for a user. It notes the default behavior (signed-in user) and when to pass a userId (to target a specific public profile). However, it does not explicitly state when NOT to use it or mention alternatives, such as using alltrails_list_user_lists for user-created lists, but the sibling list and tool names make the distinction inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alltrails_list_user_listsARead-only
List an AllTrails user's saved lists (favorites, custom lists). Defaults to the signed-in user; pass a userId to target a specific public profile.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | No | Numeric AllTrails user id. Defaults to the signed-in user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already indicates a safe read operation. The description adds useful context about favorites/custom lists and that userId targets a public profile, but does not describe return shape or pagination. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the action and object, then provide the only necessary scope detail. There is no filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only operation with one optional parameterachment, the description covers purpose, scope, and target-user selection. Return value details are not providedhol, but they are reasonably inferable for a list operation and no output schema exists to clarify further.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the userId parameter description already states that it defaults to the signed-in user. The tool description reinforces this and adds the 'specific public profile' detail, but does not add substantial meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific verb 'List' and the resource 'an AllTrails user's saved lists', with a parenthetical clarifying that it includes favorites and custom lists. This is distinct from siblings like alltrails_get_list_items, which operates on the contents of a single list.
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 clearly explains the default behavior for the signed-in user and how to target a specific public profile by passing userId. It does not explicitly name alternatives or state when not to use this tool, but the context is sufficient for basic selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alltrails_resolve_locationARead-only
Resolve a place name to AllTrails location records — country / state / city / area / point of interest — with each one's kind, coordinates, URL slug, and disambiguation label. Useful for pinning down which "Oregon" (state vs the towns) or getting a place's coordinates/slug. NOTE: the returned id is an Algolia search id and is NOT the id the trail-listing tools take; to find trails for a place, feed the resolved name back into alltrails_search.
| Name | Required | Description | Default |
|---|---|---|---|
| kinds | No | Which place kinds to return (default: all — country, state, city, area, poi) | |
| limit | No | Max results to return (default 10) | |
| query | Yes | Place name to resolve, e.g. "portland oregon" or "zion" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes safety, so the description needed to add behavioral nuance beyond that. It adds the critical caveat that the returned id is an Algolia search id, not the trail-listing id, and reveals what fields are returned (kind, coordinates, slug, disambiguation label). This is meaningful behavioral context beyond the annotation, though it does not detail error cases or coordinate formatting.
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 compact and well-structured: the core function and outputs come first, followed by a practical use case, then a critical caveat. Every sentence earns its place and none are redundant with the schema or annotations.
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?
With no output schema, the description adequately explains what the tool returns: location records with kind, coordinates, URL slug, and disambiguation label. It also covers the most important integration gotcha (the Algolia id) and directs the agent to the correct next step for trail lookup. The parameter behavior is already fully documented in the schema, so nothing critical is missing.
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 descriptions cover all three parameters at 100%, so the baseline is 3. The description adds value beyond the schema by explaining the disambiguation use case ('which Oregon') and by clarifying that query results are location records rather than trail records. This helps an agent understand query intent more deeply than the schema alone.
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 states a specific verb and resource: 'Resolve a place name to AllTrails location records,' and enumerates the kinds of locations included (country/state/city/area/POI) plus returned fields. It clearly distinguishes this tool from trail-listing tools by noting the returned id is not the id those tools accept. This is unambiguous and differentiates from siblings like alltrails_search and alltrails_get_trail.
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 explicitly states when the tool is useful, such as disambiguating 'Oregon' or fetching coordinates/slug. It also gives a direct routing instruction: feed the resolved name back into alltrails_search to find trails. This is strong practical guidance that tells an agent when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alltrails_searchARead-only
Search AllTrails by name. A free-text query goes to the suggestions endpoint the alltrails.com search box itself uses — relevance is good and the limit is honored. Results may mix record types (trail, poi, area, city, …); pass types=["trail"] to narrow. lat/lng are accepted for backward compatibility but verified ignored by the API (2026-07-02) — results carry an implicit account/IP geo bias instead. Without a query this falls back to the legacy explore search, which returns trails anchored to the signed-in account's location. Results come back as slim per-result summaries, capped at limit client-side, by default; pass view:"full" for AllTrails' whole records.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | Deprecated — the API ignores it (verified 2026-07-02) | |
| lng | No | Deprecated — the API ignores it (verified 2026-07-02) | |
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact returns slim per-result summaries capped at limit; "full" returns AllTrails' whole records. | |
| limit | No | Max results to return (default 20) | |
| query | No | Free-text search, e.g. "angels landing" or "waterfall trails" | |
| types | No | Record types to return (default: all). e.g. ["trail"] for trails only. Only applied when query is provided; silently ignored on the no-query legacy browse fallback. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description carries the behavioral burden and fully delivers. It discloses that lat/lng are ignored, geo-bias applies, the fallback behavior depends on signed-in account, and that results are capped client-side by default — all non-obvious behaviors the agent could not infer from schema or annotations.
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 front-loaded with the core purpose and each subsequent sentence earns its place by explaining a distinct behavioral nuance. Though it is detailed, it remains tightly organized with no redundant fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with no output schema and six optional parameters, the description covers all relevant behaviors: query semantics, type filtering, fallback, parameter deprecations, geo-bias, result shape, and default limits. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds meaningful per-parameter semantics beyond the schema: lat/ng verified ignored, types only applied when query is provided and silently ignored on fallback, view affects response fullness, and limit is honored. This directly helps an agent choose parameter values correctly.
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 begins with a specific verb-resource pair, 'Search AllTrails by name,' and clearly differentiates this free-text search tool from sibling get/resolve/list tools. It explains the underlying suggestions endpoint and the result set can mix record types, making the tool's scope unmistakable.
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 gives clear context on when to use the tool, such as when a free-text query is needed, and explains how to narrow results with types. It also documents the no-query fallback behavior, but it does not explicitly name sibling alternatives or state when not to use this tool in favor of, say, alltrails_get_trail or alltrails_resolve_location.
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.
12 tool updates
v3.0.0- Changed
alltrails_get_activity_feed1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
alltrails_get_list_items1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
alltrails_get_trail1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
alltrails_get_trail_gpx1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
alltrails_get_trail_photos1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
alltrails_get_trail_reviews1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
alltrails_get_trail_weather1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
alltrails_healthcheck1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
alltrails_list_completed_trails1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
alltrails_list_user_lists1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
alltrails_resolve_location1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
alltrails_search1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
6 tool updates
v2.3.1- Changed
alltrails_get_activity_feed2 fields changed- removed
Input schema / properties / compactRemoved value: -{ - "description": "Return slim projections instead of the full records (default false)", - "type": "boolean" -} - added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact returns { count, hasNextPage, nextCursor, items: [{ type, timestamp, description, user, trail, activity, review }] } — and the no-feed directory as { name, displayName } per feed; \"full\" returns AllTrails' whole records.", + "enum": [ + "compact", + "full" + ], + "type": "string" +}
- Changed
alltrails_get_list_items2 fields changed- removed
Input schema / properties / compactRemoved value: -{ - "description": "Return slim per-item entries sorted by order (default false)", - "type": "boolean" -} - added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact returns { count, items: [{ trailId, type, order, notes, addedAt }] } sorted by the curator's order; \"full\" returns AllTrails' whole list-item records in the order they arrived.", + "enum": [ + "compact", + "full" + ], + "type": "string" +}
- Changed
alltrails_get_trail2 fields changed- removed
Input schema / properties / compactRemoved value: -{ - "description": "Return a slim projection instead of the full record (default false)", - "type": "boolean" -} - added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact returns { name, overview, length in m+mi, elevation gain in m+ft, difficulty, rating, route type, location }, unwrapped from the one-element envelope; \"full\" returns the whole record, route geometry included (which also needs detail:\"offline\" to be fetched at all).", + "enum": [ + "compact", + "full" + ], + "type": "string" +}
- Changed
alltrails_get_trail_photos2 fields changed- removed
Input schema / properties / compactRemoved value: -{ - "description": "Return a slim projection per photo (default false)", - "type": "boolean" -} - added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact returns { count, photos: [{ id, title, likeCount, user, uploadedAt, url }] } — the url is DERIVED and signed here, so \"full\" (AllTrails' whole photo records) does not contain it. No route geometry either way — that is alltrails_get_trail.", + "enum": [ + "compact", + "full" + ], + "type": "string" +}
- Changed
alltrails_get_trail_reviews2 fields changed- removed
Input schema / properties / compactRemoved value: -{ - "description": "Return a slim { user, rating, comment } per review (default false)", - "type": "boolean" -} - added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact returns { count, reviews: [{ user, rating, comment }] }; \"full\" returns AllTrails' whole review records. (No route geometry either way — that is alltrails_get_trail.)", + "enum": [ + "compact", + "full" + ], + "type": "string" +}
- Changed
alltrails_search2 fields changed- removed
Input schema / properties / compactRemoved value: -{ - "description": "Return slim per-result summaries capped at limit instead of the full records (default false)", - "type": "boolean" -} - added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact returns slim per-result summaries capped at limit; \"full\" returns AllTrails' whole records.", + "enum": [ + "compact", + "full" + ], + "type": "string" +}
4 tool updates
v2.0.0- Added
alltrails_get_list_items - Removed
alltrails_list_trails_by_country - Removed
alltrails_list_trails_by_state - Added
alltrails_resolve_location
13 tool updates
v1.0.0- First observed
alltrails_get_activity_feed - First observed
alltrails_get_profile - First observed
alltrails_get_trail - First observed
alltrails_get_trail_gpx - First observed
alltrails_get_trail_photos - First observed
alltrails_get_trail_reviews - First observed
alltrails_get_trail_weather - First observed
alltrails_healthcheck - First observed
alltrails_list_completed_trails - First observed
alltrails_list_trails_by_country - First observed
alltrails_list_trails_by_state - First observed
alltrails_list_user_lists - First observed
alltrails_search
TDQS
Scored across 13 tools
Each tool targets a distinct resource or action (trail, reviews, photos, weather, lists, feed, profile), so there is little overlap. The main potential confusion is between alltrails_search and alltrails_resolve_location, but the descriptions clarify their different purposes.
All tools follow the alltrails_ prefix with a verb_noun structure (get_trail, list_user_lists, get_list_items). Minor deviations: alltrails_search and alltrails_healthcheck omit a noun object, but the overall pattern is highly predictable.
With 13 tools, the set is well-scoped for an AllTrails client: search, trail details, media, weather, GPX export, lists, user stats, and diagnostics. Each tool earns its place, and the count is in the ideal range.
The tool set covers a broad read-only AllTrails surface—trail information, reviews, photos, weather, GPX, lists, completed trails, activity feed, and profile. Minor gaps exist (e.g., no public user profile fetch, no way to modify lists), but they are not critical for typical navigation and exploration use cases.
Maintenance
Related MCP Connectors
Family schedules and household tools with OAuth. External calendars remain read-only.
Manage your family's calendars and lists in Cozi. View, create, and update appointments; organize…
Log baby feedings, diapers, and sleep; manage family tasks, meals, recipes, groceries, and trips.
Private family planner for schedules, tasks, checklists, attachments, and availability.
Related MCP Servers
- -licenseAqualityNot gradedmaintenanceEnables management of Cozi Family Organizer shopping lists and todo lists through natural language. Supports creating, editing, and organizing family lists with real-time sync to the Cozi platform.9-
- AlicenseAqualityAmaintenanceEnables AI assistants to manage Cozi Family Organizer accounts, including creating and updating shopping/todo lists, managing calendar appointments, and accessing family member information.12195 npm3MIT
- AlicenseAqualityAmaintenanceConnects Claude to OurFamilyWizard for natural-language access to co-parenting messages, calendar, expenses, and journal.10123 npmMIT
- FlicenseNot gradedqualityCmaintenanceEnables logging food into MyFitnessPal diary via natural language, supporting search, log, quick add, and diary retrieval.-