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 "Install 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 ( |
| User reviews for a trail ( |
| Photos for a trail ( |
| 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 ( |
| 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.
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 capture only sees requests your tab itself makes, and an idle tab makes none. Open or refresh a signed-in www.alltrails.com page and retry.
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. Set compact=true for slim projections.
| 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. | |
| cursor | No | Opaque nextCursor from a previous page, for pagination | |
| userId | No | Numeric AllTrails user id. Defaults to the signed-in user. | |
| compact | No | Return slim projections instead of the full records (default false) | |
| maxItems | No | Max items per page (server-side) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds behavioral detail beyond readOnlyHint annotation: defaults to signed-in user, can target public profiles, feed argument determines directory vs items, pagination via cursor. No contradictions.
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 main action, no wasted words. Every sentence adds value.
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 5 parameters, no output schema, and only readOnlyHint annotation, description fully explains all relevant behavior: directory vs items, defaults, pagination, and compact mode.
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 covers 100% of parameters; description adds semantics: feed omission meaning, compact slim projections, cursor for pagination, and default userId behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it gets an activity feed (recorded hikes and posts), distinguishes from sibling tools that focus on profiles, trails, etc. Provides specific verb+resource with contextual details.
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?
Explains use of feed argument to get items versus omitting to get directory, and compact option for slim projections. No explicit when-not-to-use, but context is clear given sibling names.
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. Set compact=true for slim { trailId, type, order, notes, addedAt } entries sorted by order.
| Name | Required | Description | Default |
|---|---|---|---|
| listId | Yes | Numeric AllTrails list id | |
| compact | No | Return slim per-item entries sorted by order (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds that items are sparse references, that compact=true returns slim entries sorted by order, and that the list id is numeric. No contradictions 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 a single efficient paragraph. It front-loads the main purpose, then explains the nature of items and the compact option without any wasted words.
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 only two parameters and no output schema, the description fully covers what the tool does, the content of items, and how to proceed for full details. It references sibling tools appropriately.
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% (listId required, compact optional boolean). The description adds meaning beyond the schema by explaining that compact=true returns entries sorted by order, and that listId is numeric, which is not in the schema description.
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 gets trails saved in an AllTrails list by numeric list id, specifying that items are sparse references (trailId, order, notes) and not trail details. It distinguishes from siblings like alltrails_get_trail by noting the need for hydration.
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 explains when to use the tool (with a list id from alltrails_list_user_lists or alltrails_search) and suggests using alltrails_get_trail for full details. It could be improved by explicitly stating not to use this tool if full trail details are needed.
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. Set compact=true for a slim projection (name, overview, length in m+mi, elevation gain, difficulty, rating, route type, location) — recommended unless you need the full record or geometry.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | Detail level. "medium" (default) is a good overview; "offline" includes full route geometry. | |
| compact | No | Return a slim projection instead of the full record (default false) | |
| 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 indicate readOnlyHint=true; description adds detail about return fields and the impact of the 'compact' and 'detail' parameters, which is valuable beyond annotations. No contradictions.
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: first defines purpose and returns, second recommends compact usage. No unnecessary words, front-loaded with key info.
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?
Covers return fields, detail levels, and compact option. No output schema exists, but description provides sufficient overview. Lacks error handling or authentication notes, but that's acceptable for a read-only 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 coverage is 100%, but description adds practical context: recommends compact for slim projection, explains detail levels (medium default, offline includes geometry). Adds meaning beyond basic schema descriptions.
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 explicitly states 'Get details for a single AllTrails trail by its numeric trail id' and lists the returned fields. It clearly distinguishes from sibling tools that list or search trails.
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?
Provides guidance on when to use compact=true ('recommended unless you need the full record or geometry'). Does not explicitly compare to other tools but implies this is for single-trail lookup.
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 description adds context about using offline-detail route geometry and returning raw GPX XML, without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, concise and front-loaded with the key action and output format, no 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 export tool with one parameter, description covers purpose, output format, and use case adequately. No output schema, but return type is stated.
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 has 100% coverage with one parameter 'trailId' described as 'Numeric AllTrails trail id'. Description does not add further parameter details beyond schema, so baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool exports a trail's route as GPX 1.1 with per-point elevation, distinguishing it from sibling tools like alltrails_get_trail which likely return trail metadata.
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?
Implies usage for saving GPX files or importing into navigation apps, but does not explicitly state when to use this versus alternatives 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.
alltrails_get_trail_photosARead-only
Get photos for an AllTrails trail by its numeric trail id. Set compact=true to return just { id, title, likeCount, user, uploadedAt, url } per photo — the url serves the actual image.
| Name | Required | Description | Default |
|---|---|---|---|
| compact | No | Return a slim projection per photo (default false) | |
| trailId | Yes | Numeric AllTrails trail id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds behavioral detail: the compact=true parameter returns a specific projection with listed fields, and explains that the url serves the actual image. No contradictions 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 focused sentences, no filler. Front-loaded with core purpose, then details on the optional parameter. Every statement 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?
No output schema, so description compensates with compact output details. However, fails to describe the full output (when compact=false), pagination, or error handling. Adequate for a simple read tool but could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% but the description enhances meaning for the 'compact' parameter by listing the exact fields returned and clarifying the url role. This adds value beyond the schema's simple 'slim projection' text.
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?
Clearly states the tool retrieves photos for a trail by numeric ID, using specific verb 'Get' and resource 'photos for an AllTrails trail'. Distinguishes from sibling tools like alltrails_get_trail (which gets trail info) and alltrails_get_trail_reviews.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool over siblings. Does not mention alternatives or when to avoid using it. Users must infer from the name and context.
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. Set compact=true to return just { user, rating, comment } per review.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max reviews to return (default 20) | |
| compact | No | Return a slim { user, rating, comment } per review (default false) | |
| trailId | Yes | Numeric AllTrails trail id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the readOnlyHint annotation by explaining the compact parameter's effect on the output structure. It does not mention other behaviors like pagination or rate limits, but the annotation already covers safety.
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: first states the purpose, second gives a specific usage tip. No unnecessary words, and the key information is front-loaded.
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 absence of an output schema, the description explains the compact output but does not detail the full response when compact=false. It covers the essential parameters and purpose, but could be more complete with default response fields.
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?
With 100% schema description coverage, the baseline is 3. The description adds some meaning for the compact parameter by repeating its structure, but it does not provide additional semantic value beyond what the schema already states for the other parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'user reviews for an AllTrails trail', and identifies the key parameter 'numeric trail id'. This distinguishes the tool from siblings like alltrails_get_trail_photos or alltrails_get_trail_gpx.
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 a usage tip about setting compact=true, indicating when to use that option. However, it does not explicitly state when not to use this tool or compare it to alternatives beyond the implied distinction from 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_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?
Annotations already declare readOnlyHint=true, so the description adds minimal behavioral context. It mentions 'weather overview' but does not clarify any caching, freshness, or error handling behavior. Annotations carry the safety burden.
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 sentence that front-loads the action and resource, with no extraneous words. It is optimally concise for a simple tool with one parameter.
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 lack of output schema, the description is vague about what the 'weather overview' includes (e.g., temperature, conditions, forecast period). For a data-returning tool, more detail on the response structure would improve completeness. Adequate but has gaps.
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 parameter description 'Numeric AllTrails trail id' is already in the schema. The tool description repeats this without adding new semantic meaning beyond 'weather overview' context. Baseline 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 clearly states the verb 'Get', the resource 'weather overview for an AllTrails trail', and the method 'by its numeric trail id'. It distinguishes this tool from siblings focusing on other aspects like trail details, GPX, photos, or reviews.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for fetching weather for a specific trail using its ID, but it does not provide explicit guidance on when to use this tool versus alternatives like alltrails_get_trail (which may include weather) or alltrails_get_trail_gpx. No when-not or alternative mentions.
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 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'. Call this when a real tool fails and you want to know which hop broke. Read-only, no auth required.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description significantly adds behavioral context beyond the annotations (readOnlyHint, openWorldHint, idempotentHint). It details the specific URL hit, the diagnostics returned (role, port, version, RTT, hint), and states 'Read-only, no auth required', reinforcing 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 two sentences: the first packs all functional details efficiently, the second provides clear usage guidance. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers purpose, usage, behavior, and expected output (diagnostics). Despite no output schema, it explicitly names the returned fields and hint logic, making it self-contained.
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 zero parameters, so schema coverage is trivially 100%. The description does not need to explain parameters. Baseline score of 4 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 clearly states it performs a round-trip test through the fetchproxy bridge using a specific small URL, and lists the exact diagnostics returned. This verb+resource specificity distinguishes it perfectly from sibling data-retrieval 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?
Explicitly says 'Call this when a real tool fails' which is a clear usage condition. However, it does not explicitly state when not to use, though the context of sibling tools makes this evident.
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?
Annotations already declare readOnlyHint: true. Description adds context about default signed-in user and public profile requirement for userId. No contradictions.
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 front-loaded sentences with zero waste. Essential information is presented efficiently.
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, and description omits return format or behavior for invalid userId. Adequate but not fully complete for a 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 covers 100% of the single parameter with adequate description. The tool description merely echoes the schema, adding no extra 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?
Clearly states the verb 'List' and resource 'completed trails' with scope (signed-in user or specific public profile). Distinguishes from sibling tools like alltrails_get_activity_feed.
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?
Specifies when to use (list completed trails) and how to target a user via optional userId. Lacks explicit when-not or alternatives, but context is clear.
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 description adds context beyond the readOnlyHint annotation by stating the default behavior (signed-in user) and targeting public profiles. It does not disclose other behavioral traits like pagination, ordering, or whether private custom lists are included, but the annotation already covers the read-only nature.
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 sentence that efficiently conveys the action, resource, default behavior, and optional parameter. No wasted words.
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 absence of an output schema, the description does not mention the return structure (e.g., list of list names, IDs, or how favorites vs custom lists are returned). For a simple tool, this is a minor gap.
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% for the single optional parameter. The description adds minor clarification (defaults to signed-in user, targets public profiles) but does not significantly enhance understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'List', the resource 'an AllTrails user's saved lists', and specifies subtypes 'favorites, custom lists'. It distinguishes from sibling tools like alltrails_list_completed_trails by focusing on saved lists.
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 for when to use the tool (listing saved lists) and explains the optional userId parameter for targeting specific profiles. It does not explicitly mention when not to use it or alternatives, but the context of siblings offers some guidance.
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 annotations already declare readOnlyHint=true, so the description does not need to restate safety. It adds value by disclosing that the returned id is an Algolia search id and is not the id used by trail-listing tools, which is important behavioral context. It also lists the fields returned. There is 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 a single, well-structured paragraph that front-loads the core purpose. It contains no superfluous information and the important note about the id is placed at the end, making it easy to scan.
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 that there is no output schema, the description does a good job listing the returned fields (kind, coordinates, URL slug, disambiguation label) and mentions the id's nature. It could be slightly improved by explicitly stating that the result is a list of location records, but overall it is complete enough for a tool with three parameters and clear constraints.
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% (all three parameters have descriptions). The description adds extra value by providing example queries ('portland oregon', 'zion') and clarifying the purpose of the query parameter. It also explains the default behavior for kinds and limit implicitly. This goes beyond 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 clearly states the tool resolves a place name to AllTrails location records, listing the types (country/state/city/area/poi) and the returned fields (kind, coordinates, URL slug, disambiguation label). It also distinguishes itself from the sibling alltrails_search by noting the returned id is not for trail-listing tools and directing users to alltrails_search for that purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool, such as pinning down ambiguous place names like 'Oregon' or obtaining coordinates/slugs. It also includes a crucial note about the returned id not being suitable for trail-listing tools and instructs users to feed the resolved name into alltrails_search for finding trails, effectively indicating both when to use and when not to use this tool.
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. Set compact=true (strongly recommended) for slim summaries capped at limit client-side.
| 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) | |
| 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. | |
| compact | No | Return slim per-result summaries capped at limit instead of the full records (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses critical behaviors: exact endpoint, relevance, limit honoring, result mixing, deprecated lat/lng ignored, implicit geo bias, fallback to legacy explore, and compact mode behavior. No contradictions.
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 dense with information and every sentence adds value. It is well-structured but could be slightly more concise. Still, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (search with fallback, deprecated params, mixing types, no output schema), the description covers all necessary aspects: behavior modes, parameter caveats, and output characteristics (compact, client-side cap).
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 baseline 3. The description adds significant value beyond schema: explains lat/lng are ignored, recommends compact, explains types narrowing only with query, and confirms limit is honored.
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 'Search AllTrails by name' with a specific verb and resource. It explains the endpoint and relevance, and distinguishes from sibling tools by noting result mixing and fallback behavior.
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 when to use with or without query, suggests narrowing with types, recommends compact=true, and notes backward compatibility of lat/lng. It does not explicitly contrast with siblings but implies usage for free-text search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Every tool targets a distinct aspect of AllTrails: trail details, photos, reviews, weather, GPX, search, user lists, activity feed, completed trails, profile, location resolution, and diagnostics. No two tools have overlapping purposes, making selection unambiguous.
All tools follow a consistent `alltrails_<verb>_<object>` pattern using snake_case, with verbs like get, list, resolve, search. The only outlier is `alltrails_healthcheck`, which still uses the prefix and conveys its diagnostic role clearly, maintaining overall consistency.
With 13 tools, the set is well-scoped for the AllTrails domain. It covers trail exploration, user data, search, and diagnostics without feeling bloated or sparse. Each tool serves a clear purpose and contributes to a coherent interface.
The tool set thoroughly covers read-only operations for AllTrails, including trail details, photos, reviews, weather, GPX export, user lists, activity feed, and completed trails. Gaps include lack of write/create operations (e.g., saving trails, posting reviews) and possible missing features like trail conditions or directions, but these are reasonable omissions for a read-only server.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
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.
OneHaus household tools: tasks, calendar, contacts, pets, vehicles, documents and more.
Log, query, and edit expenses, budgets, and accounts in Manilo from any MCP-compatible AI assistant.
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
- AlicenseAqualityCmaintenanceEnables AI assistants to manage Cozi Family Organizer accounts, including creating and updating shopping/todo lists, managing calendar appointments, and accessing family member information.12253MIT
- AlicenseAqualityAmaintenanceConnects Claude to OurFamilyWizard for natural-language access to co-parenting messages, calendar, expenses, and journal.9217MIT
- AlicenseNot gradedqualityBmaintenanceEnables interaction with Baby Daybook data through Firebase, allowing users to manage babies, activities, growth, sleep predictions, and more via natural language commands.43MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/chrischall/alltrails-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server