{"id":"319bdcb7-fbc3-41e3-83b8-bcf155795ffe","entityType":"agent","slug":"clawhub-chrischall-alltrails","name":"alltrails","canonicalUrl":"https://www.xpersona.co/agent/clawhub-chrischall-alltrails","canonicalPath":"/agent/clawhub-chrischall-alltrails","generatedAt":"2026-10-10T11:51:26.194Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T09:19:51.377Z","emptyReason":null},"description":"This skill should be used when the user asks about AllTrails hiking/trail data. Triggers on phrases like \"find trails near\", \"AllTrails\", \"trail details\", \"hike reviews\", \"trail conditions\", \"my saved trails\", \"trails I've completed\", or any request involving hiking trails, trail search, reviews, photos, or a user's AllTrails lists and activity. Skill: alltrails Owner: chrischall Summary: This skill should be used when the user asks about AllTrails hiking/trail data. Triggers on phrases like \"find trails near\", \"AllTrails\", \"trail details\", \"hike reviews\", \"trail conditions\", \"my saved trails\", \"trails I've completed\", or any request involving hiking trails, trail search, reviews, photos, or a user's AllTrails lists and activity. Tags: latest:3.1.8 Version h","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.5K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s17cjx1a349nz5apaqp02vgz4h85728z:alltrails","sourceUrl":"https://clawhub.ai/chrischall/alltrails","homepage":"https://clawhub.ai/chrischall/skills/alltrails","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/chrischall/alltrails","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/chrischall/skills/alltrails","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":64,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"This skill should be used when the user asks about AllTrails hiking/trail data. Triggers on phrases like \"find trails near\", \"AllTrails\", \"trail details\", \"hike"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T09:19:51.377Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T09:19:51.377Z","emptyReason":null},"stars":null,"forks":null,"downloads":1529,"packageName":null,"latestVersion":"3.1.8","tractionLabel":"1.5K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T09:19:51.377Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T09:19:51.377Z","lastCrawledAt":"2026-10-10T09:19:51.377Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T09:19:51.377Z","lastVerifiedAt":null,"highlights":[{"version":"3.1.8","createdAt":"2026-10-09T23:23:11.280Z","changelog":"- Removed the file: skill-card.md. - No changes to user-facing features or documentation.","fileCount":3,"zipByteSize":4901},{"version":"3.1.7","createdAt":"2026-10-07T13:39:25.542Z","changelog":"- Removed the skill-card.md file. - No changes to functionality or user-facing features.","fileCount":3,"zipByteSize":4878},{"version":"3.1.6","createdAt":"2026-10-05T02:48:12.557Z","changelog":"- Removed the skill-card.md file. - No changes to core functionality or available tools. - Documentation, toolset, and usage remain the same.","fileCount":3,"zipByteSize":4890},{"version":"3.1.5","createdAt":"2026-10-03T01:41:28.633Z","changelog":"- Removed the skill-card.md file from the project. - No user-facing features or behavior were changed.","fileCount":3,"zipByteSize":4822},{"version":"3.1.4","createdAt":"2026-09-28T13:55:42.344Z","changelog":"- Updated setup instructions to reference the ContextMint Bridge extension (formerly fetchproxy extension), with new install link and details. - Clarified requirements for browser extension: specify Chrome as preferred browser and note public source and .sha256-checkable zips. - Removed the file skill-card.md.","fileCount":3,"zipByteSize":4979},{"version":"3.1.3","createdAt":"2026-09-25T15:50:52.710Z","changelog":"- Removed the skill-card.md file. - No functional changes to the skill itself.","fileCount":3,"zipByteSize":4738},{"version":"3.1.2","createdAt":"2026-09-23T21:42:56.867Z","changelog":"- Removed the documentation file skill-card.md. - No changes to features, functionality, or APIs. - No user-facing impact; this update is internal and only affects project documentation files.","fileCount":3,"zipByteSize":4950},{"version":"3.1.1","createdAt":"2026-09-23T15:46:03.257Z","changelog":"- Removed the skill-card.md file from the project. - No changes to user-facing features or documented APIs.","fileCount":3,"zipByteSize":4781}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17cjx1a349nz5apaqp02vgz4h85728z:alltrails","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-alltrails/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-alltrails/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-alltrails/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-alltrails/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-alltrails/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-alltrails/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T11:51:26.191Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-alltrails/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-alltrails/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-alltrails/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-alltrails/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-10T09:19:51.377Z","emptyReason":null},"readme":"Skill: alltrails\n\nOwner: chrischall\n\nSummary: This skill should be used when the user asks about AllTrails hiking/trail data. Triggers on phrases like \"find trails near\", \"AllTrails\", \"trail details\", \"hike reviews\", \"trail conditions\", \"my saved trails\", \"trails I've completed\", or any request involving hiking trails, trail search, reviews, photos, or a user's AllTrails lists and activity.\n\nTags: latest:3.1.8\n\nVersion history:\n\nv3.1.8 | 2026-10-09T23:23:11.280Z | auto\n\n- Removed the file: skill-card.md.\n- No changes to user-facing features or documentation.\n\nv3.1.7 | 2026-10-07T13:39:25.542Z | auto\n\n- Removed the skill-card.md file.\n- No changes to functionality or user-facing features.\n\nv3.1.6 | 2026-10-05T02:48:12.557Z | auto\n\n- Removed the skill-card.md file.\n- No changes to core functionality or available tools.\n- Documentation, toolset, and usage remain the same.\n\nv3.1.5 | 2026-10-03T01:41:28.633Z | auto\n\n- Removed the skill-card.md file from the project.\n- No user-facing features or behavior were changed.\n\nv3.1.4 | 2026-09-28T13:55:42.344Z | auto\n\n- Updated setup instructions to reference the ContextMint Bridge extension (formerly fetchproxy extension), with new install link and details.\n- Clarified requirements for browser extension: specify Chrome as preferred browser and note public source and .sha256-checkable zips.\n- Removed the file skill-card.md.\n\nv3.1.3 | 2026-09-25T15:50:52.710Z | auto\n\n- Removed the skill-card.md file.\n- No functional changes to the skill itself.\n\nv3.1.2 | 2026-09-23T21:42:56.867Z | auto\n\n- Removed the documentation file skill-card.md.\n- No changes to features, functionality, or APIs. \n- No user-facing impact; this update is internal and only affects project documentation files.\n\nv3.1.1 | 2026-09-23T15:46:03.257Z | auto\n\n- Removed the skill-card.md file from the project.\n- No changes to user-facing features or documented APIs.\n\nv3.1.0 | 2026-09-20T02:52:00.371Z | auto\n\n- Removed the skill-card.md file.\n- No changes to core functionality or user workflows.\n- Documentation and usage remain unchanged.\n\nv3.0.0 | 2026-09-17T23:36:33.486Z | auto\n\n- Removed the skill-card.md file.\n- No changes to user-facing features or functionality.\n\nv2.3.5 | 2026-09-15T18:43:27.799Z | auto\n\n- Removed the skill-card.md file.\n- No changes to functionality or user-facing features.\n\nv2.3.4 | 2026-09-14T13:16:52.793Z | auto\n\n- Removed the file: skill-card.md\n- No functional or user-facing changes introduced; this is a minor internal cleanup.\n\nv2.3.3 | 2026-09-11T02:44:47.436Z | auto\n\n- Removed the skill-card.md file.\n- Updated instructions in SKILL.md for troubleshooting key-capture stalls: now advises to re-run the tool and reload an alltrails.com tab while the tool is running, instead of refreshing beforehand.\n\nv2.3.2 | 2026-09-10T17:49:00.785Z | auto\n\n- Removed the skill-card.md file.\n- No changes to features or functionality.\n\nv2.3.1 | 2026-09-09T21:16:12.718Z | auto\n\n- Removed the skill summary file (skill-card.md).\n- No changes to code or functionality; documentation and tool descriptions remain unchanged.\n\nv2.3.0 | 2026-09-04T22:20:38.759Z | auto\n\n**Introduces a new `view` parameter for more flexible, slim-by-default responses.**\n\n- All major tools now support a `view` parameter: `view: \"compact\"` (default, returns only key fields) or `view: \"full\"` (returns the original full record).\n- Documentation updated to clarify the difference between `view` and `detail`, and to specify exactly which fields are included in each tool's compact result.\n- Sample invocations and workflows adjusted for new `view` defaults.\n- Removed unused file: `skill-card.md`.\n\nv2.2.0 | 2026-08-29T13:53:56.112Z | auto\n\n- Removed the skill-card.md file. \n- No user-facing feature changes. \n- No updates to tools or documented workflows.\n\nv2.1.5 | 2026-08-28T21:06:58.609Z | auto\n\n- Removed the skill-card.md file.\n- No changes to user-facing features or functionality.\n\nv2.1.4 | 2026-08-28T11:34:22.681Z | auto\n\n- Skill name changed from \"alltrails-mcp\" to \"alltrails\".\n- Removed the skill-card.md file.\n- Updated internal references and identifiers to use the new skill name.\n- No changes to functionality or available tools.\n\nv2.1.3 | 2026-08-06T00:43:02.139Z | auto\n\n- Removed the file skill-card.md.\n- No changes to functionality or configuration.\n- Documentation and features remain unchanged.\n\nv2.1.2 | 2026-07-30T12:53:51.278Z | auto\n\n- Removed the skill-card.md file.\n- No changes to functionality or user-facing features.\n\nv2.1.1 | 2026-07-27T02:56:48.067Z | auto\n\n- Updated skill description and documentation to clarify triggers, usage instructions, and safety notes.\n- Added expanded guidance on setup, fetchproxy requirements, and compact output options.\n- Detailed tool reference tables for discovery, trail detail, per-user data, and diagnostics.\n- Included clear workflow examples for typical use cases.\n- Emphasized read-only access, API limitations, and troubleshooting tips.\n\nArchive index:\n\nArchive v3.1.8: 3 files, 4901 bytes\n\nFiles: skill-card.md (2003b), SKILL.md (7842b), _meta.json (128b)\n\nFile v3.1.8:SKILL.md\n\n---\nname: alltrails\ndescription: This skill should be used when the user asks about AllTrails hiking/trail data. Triggers on phrases like \"find trails near\", \"AllTrails\", \"trail details\", \"hike reviews\", \"trail conditions\", \"my saved trails\", \"trails I've completed\", or any request involving hiking trails, trail search, reviews, photos, or a user's AllTrails lists and activity.\n---\n\n# alltrails-mcp\n\n**Unofficial** MCP server for AllTrails — read-only access to trail search, details, reviews, photos, weather, and a signed-in user's saved lists / completed trails / activity feed.\n\n> ⚠️ AllTrails has **no public API**. This server reverse-engineers the internal one used by alltrails.com, which is fronted by DataDome bot protection and governed by AllTrails' Terms of Service. It may break at any time, and automated use may violate their ToS. Use at your own discretion for your own account.\n\n- **npm:** [npmjs.com/package/alltrails-mcp](https://www.npmjs.com/package/alltrails-mcp)\n- **Source:** [github.com/chrischall/alltrails-mcp](https://github.com/chrischall/alltrails-mcp)\n\n## Setup\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"alltrails\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"alltrails-mcp\"]\n    }\n  }\n}\n```\n\nEvery API request routes through the **fetchproxy** browser bridge — it runs as a same-origin fetch inside your signed-in alltrails.com tab (DataDome fingerprints Node-originated requests, so there is no stored-cookie mode). Requirements: the ContextMint Bridge extension installed (https://github.com/nullnet-app/contextmint-bridge/releases — the fetchproxy extension renamed, same maintainer; public source, `.sha256`-checkable release zips; use Chrome for now), a signed-in alltrails.com tab open, and a one-time pair-code approval on first use. The `x-at-key` app key is never stored in code or config — it is captured live from the tab's own API traffic and held in memory only.\n\n## Tools\n\n### `view` — slim by default\n\nEvery tool marked `view?` below answers in one of two shapes, and the cheap one\nis what you get for free:\n\n- **`view: \"compact\"` (the default)** — a slim projection of just the fields\n  you act on. Each tool's row says exactly which.\n- **`view: \"full\"`** — AllTrails' whole untouched record.\n\nYou do not pass anything to get the compact answer. Reach for `view: \"full\"`\nonly when you need a field the projection drops — most often route geometry\nfrom `alltrails_get_trail`.\n\n**`view` is not `detail`.** `alltrails_get_trail` also takes a `detail`\n(`basic`/`medium`/`offline`) argument, and that one is forwarded to AllTrails —\nit decides what the API sends *us*. `view` decides what we hand back to you.\nFull route geometry needs **both**: `detail: \"offline\"` to fetch it and\n`view: \"full\"` to keep it.\n\n### Discovery (still routed through the signed-in fetchproxy bridge)\n| Tool | Notes |\n|------|-------|\n| `alltrails_search(query?, types?, lat?, lng?, limit?, view?)` | Search AllTrails by name. A free-text `query` uses the same suggestions endpoint as the alltrails.com search box (good relevance; may mix record types — pass `types: [\"trail\"]` for trails only). `lat`/`lng` are ignored by the API (results carry an implicit account/IP geo bias). Returns slim per-result summaries capped at `limit` by default; `view: \"full\"` returns AllTrails' whole records. This is the way to find trails in/near a place. |\n| `alltrails_resolve_location(query, kinds?, limit?)` | Resolve a place name to AllTrails location records — `country`/`state`/`city`/`area`/`poi` — each with `{ name, kind, id, slug, latitude, longitude, region, country, label }`. Good for disambiguating (which \"Oregon\"?) or getting a place's coordinates/slug. |\n\n### Trail detail\n| Tool | Notes |\n|------|-------|\n| `alltrails_get_trail(trailId, detail?, view?)` | Trail details. `detail`: `basic` \\| `medium` (default) \\| `offline` (includes route geometry) — this one goes to AllTrails. Returns a slim projection by default (name, overview, length in m+mi, elevation gain in m+ft, difficulty, rating, route type, location); `view: \"full\"` returns the whole record, route geometry included. |\n| `alltrails_get_trail_reviews(trailId, limit?, view?)` | User reviews (default limit 20). Returns just `{ user, rating, comment }` per review, under `{ count, reviews }`, by default; `view: \"full\"` returns AllTrails' whole review records. |\n| `alltrails_get_trail_photos(trailId, view?)` | Trail photos. Returns `{ id, title, likeCount, user, uploadedAt, url }` per photo, under `{ count, photos }`, by default — `url` serves the actual image and is derived by the projection, so it is **not** in the `view: \"full\"` record. |\n| `alltrails_get_trail_gpx(trailId)` | Export the trail's route as a GPX 1.1 document (track points with per-point elevation) — save to `.gpx` or import into nav apps. |\n| `alltrails_get_trail_weather(trailId)` | Weather overview for the trail. |\n\n### Per-user (requires a signed-in session)\n| Tool | Notes |\n|------|-------|\n| `alltrails_get_profile` | The signed-in user's profile (`/api/alltrails/me`). |\n| `alltrails_list_user_lists(userId?)` | Saved lists / favorites. Defaults to the signed-in user. |\n| `alltrails_get_list_items(listId, view?)` | The trails saved in a list, by list id (from `list_user_lists`, or a public `list` record from `search`). Items are **sparse references** — each is `{ trailId, type, order, notes, addedAt }`; hydrate details with `get_trail`. By default the items are projected to those five fields and sorted by the curator's `order`; `view: \"full\"` returns the whole records, in the order AllTrails sent them. |\n| `alltrails_list_completed_trails(userId?)` | Trails marked completed. Defaults to the signed-in user. |\n| `alltrails_get_activity_feed(userId?, feed?, maxItems?, cursor?, view?)` | Activity feed. Without `feed` it returns the feed **directory** (just `{ name, displayName }` per feed by default); pass `feed`: `local` (nearby activity) \\| `timeline` (people you follow) \\| `personal` (own posts) for the actual items. Paginate with `cursor` (from `nextCursor`). Items are projected to `{ type, timestamp, user, trail, activity stats, review }` by default; `view: \"full\"` returns AllTrails' whole records. |\n\n`userId` defaults to the signed-in user (resolved via `/api/alltrails/me`, or `ALLTRAILS_USER_ID`).\n\n### Diagnostics\n| Tool | Notes |\n|------|-------|\n| `alltrails_healthcheck` | Round-trips a probe through the fetchproxy bridge and reports role/port/timing plus a hint distinguishing \"bridge never came up\" from \"extension not connected\" from \"AllTrails-side problem\". Call it when a real tool fails. |\n\n## Workflows\n\n**Find a trail and read reviews:**\n1. `alltrails_search(query: \"angels landing\", types: [\"trail\"])` → pick a trail id\n2. `alltrails_get_trail(trailId)` → details\n3. `alltrails_get_trail_reviews(trailId)` → what hikers say\n\n**Review your own hiking history:**\n1. `alltrails_get_profile` → confirm you're signed in\n2. `alltrails_list_completed_trails()` / `alltrails_list_user_lists()`\n\n## Caution\n\n- All tools are **read-only** — this server never writes to AllTrails.\n- Compact summaries include both metric and imperial fields (`lengthMeters`/`lengthMiles`, `elevationGainMeters`/`elevationGainFeet`) — no unit conversion needed.\n- A `403` usually means the tab isn't signed in — sign into alltrails.com in an open tab and retry. An \"AllTrails bridge:\" error means the bridge itself failed — run `alltrails_healthcheck`. A key-capture stall means the tab is idle — re-run the tool and reload a www.alltrails.com tab **while it is running**, since the key is read off a request made during the call and refreshing beforehand is not seen.\n- Trail/user ids are numeric strings as they appear in AllTrails URLs.\n\nFile v3.1.8:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"alltrails\",\n  \"version\": \"3.1.8\",\n  \"publishedAt\": 1791588191280\n}\n\nFile v3.1.8:skill-card.md\n\n## Description:\n\nHelps agents find trails, reviews, photos, and weather on AllTrails and access a signed-in user's saved trails and activity through an unofficial read-only integration.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nHikers and agents helping them can search trails, review trail details and conditions, and retrieve saved lists or completed hikes when the user has a signed-in AllTrails session.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The unofficial integration uses a signed-in browser tab and bridge to access personal hiking data.\n\nMitigation: Use project-scoped configuration, inspect the npm package and bridge before installing, and remove the server and extension when no longer needed.\n\nRisk: Generic hiking requests may activate access to AllTrails data unexpectedly.\n\nMitigation: Confirm the user's intent before retrieving account-backed lists or activity.\n\n## Reference(s):\n\n- [AllTrails skill listing](https://clawhub.ai/chrischall/skills/alltrails)\n- [alltrails-mcp npm package](https://www.npmjs.com/package/alltrails-mcp)\n- [ContextMint Bridge releases](https://github.com/nullnet-app/contextmint-bridge/releases)\n\n## Skill Output:\n\n**Output Type(s):** [Text, JSON, GPX files, Configuration guidance]\n\n**Output Format:** [Markdown guidance, structured trail data, or GPX 1.1 route export]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Read-only trail and account-backed data; compact responses by default, with full records available on request.]\n\n## Skill Version(s):\n\n3.1.8 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v3.1.7: 3 files, 4878 bytes\n\nFiles: skill-card.md (1974b), SKILL.md (7842b), _meta.json (128b)\n\nFile v3.1.7:SKILL.md\n\n---\nname: alltrails\ndescription: This skill should be used when the user asks about AllTrails hiking/trail data. Triggers on phrases like \"find trails near\", \"AllTrails\", \"trail details\", \"hike reviews\", \"trail conditions\", \"my saved trails\", \"trails I've completed\", or any request involving hiking trails, trail search, reviews, photos, or a user's AllTrails lists and activity.\n---\n\n# alltrails-mcp\n\n**Unofficial** MCP server for AllTrails — read-only access to trail search, details, reviews, photos, weather, and a signed-in user's saved lists / completed trails / activity feed.\n\n> ⚠️ AllTrails has **no public API**. This server reverse-engineers the internal one used by alltrails.com, which is fronted by DataDome bot protection and governed by AllTrails' Terms of Service. It may break at any time, and automated use may violate their ToS. Use at your own discretion for your own account.\n\n- **npm:** [npmjs.com/package/alltrails-mcp](https://www.npmjs.com/package/alltrails-mcp)\n- **Source:** [github.com/chrischall/alltrails-mcp](https://github.com/chrischall/alltrails-mcp)\n\n## Setup\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"alltrails\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"alltrails-mcp\"]\n    }\n  }\n}\n```\n\nEvery API request routes through the **fetchproxy** browser bridge — it runs as a same-origin fetch inside your signed-in alltrails.com tab (DataDome fingerprints Node-originated requests, so there is no stored-cookie mode). Requirements: the ContextMint Bridge extension installed (https://github.com/nullnet-app/contextmint-bridge/releases — the fetchproxy extension renamed, same maintainer; public source, `.sha256`-checkable release zips; use Chrome for now), a signed-in alltrails.com tab open, and a one-time pair-code approval on first use. The `x-at-key` app key is never stored in code or config — it is captured live from the tab's own API traffic and held in memory only.\n\n## Tools\n\n### `view` — slim by default\n\nEvery tool marked `view?` below answers in one of two shapes, and the cheap one\nis what you get for free:\n\n- **`view: \"compact\"` (the default)** — a slim projection of just the fields\n  you act on. Each tool's row says exactly which.\n- **`view: \"full\"`** — AllTrails' whole untouched record.\n\nYou do not pass anything to get the compact answer. Reach for `view: \"full\"`\nonly when you need a field the projection drops — most often route geometry\nfrom `alltrails_get_trail`.\n\n**`view` is not `detail`.** `alltrails_get_trail` also takes a `detail`\n(`basic`/`medium`/`offline`) argument, and that one is forwarded to AllTrails —\nit decides what the API sends *us*. `view` decides what we hand back to you.\nFull route geometry needs **both**: `detail: \"offline\"` to fetch it and\n`view: \"full\"` to keep it.\n\n### Discovery (still routed through the signed-in fetchproxy bridge)\n| Tool | Notes |\n|------|-------|\n| `alltrails_search(query?, types?, lat?, lng?, limit?, view?)` | Search AllTrails by name. A free-text `query` uses the same suggestions endpoint as the alltrails.com search box (good relevance; may mix record types — pass `types: [\"trail\"]` for trails only). `lat`/`lng` are ignored by the API (results carry an implicit account/IP geo bias). Returns slim per-result summaries capped at `limit` by default; `view: \"full\"` returns AllTrails' whole records. This is the way to find trails in/near a place. |\n| `alltrails_resolve_location(query, kinds?, limit?)` | Resolve a place name to AllTrails location records — `country`/`state`/`city`/`area`/`poi` — each with `{ name, kind, id, slug, latitude, longitude, region, country, label }`. Good for disambiguating (which \"Oregon\"?) or getting a place's coordinates/slug. |\n\n### Trail detail\n| Tool | Notes |\n|------|-------|\n| `alltrails_get_trail(trailId, detail?, view?)` | Trail details. `detail`: `basic` \\| `medium` (default) \\| `offline` (includes route geometry) — this one goes to AllTrails. Returns a slim projection by default (name, overview, length in m+mi, elevation gain in m+ft, difficulty, rating, route type, location); `view: \"full\"` returns the whole record, route geometry included. |\n| `alltrails_get_trail_reviews(trailId, limit?, view?)` | User reviews (default limit 20). Returns just `{ user, rating, comment }` per review, under `{ count, reviews }`, by default; `view: \"full\"` returns AllTrails' whole review records. |\n| `alltrails_get_trail_photos(trailId, view?)` | Trail photos. Returns `{ id, title, likeCount, user, uploadedAt, url }` per photo, under `{ count, photos }`, by default — `url` serves the actual image and is derived by the projection, so it is **not** in the `view: \"full\"` record. |\n| `alltrails_get_trail_gpx(trailId)` | Export the trail's route as a GPX 1.1 document (track points with per-point elevation) — save to `.gpx` or import into nav apps. |\n| `alltrails_get_trail_weather(trailId)` | Weather overview for the trail. |\n\n### Per-user (requires a signed-in session)\n| Tool | Notes |\n|------|-------|\n| `alltrails_get_profile` | The signed-in user's profile (`/api/alltrails/me`). |\n| `alltrails_list_user_lists(userId?)` | Saved lists / favorites. Defaults to the signed-in user. |\n| `alltrails_get_list_items(listId, view?)` | The trails saved in a list, by list id (from `list_user_lists`, or a public `list` record from `search`). Items are **sparse references** — each is `{ trailId, type, order, notes, addedAt }`; hydrate details with `get_trail`. By default the items are projected to those five fields and sorted by the curator's `order`; `view: \"full\"` returns the whole records, in the order AllTrails sent them. |\n| `alltrails_list_completed_trails(userId?)` | Trails marked completed. Defaults to the signed-in user. |\n| `alltrails_get_activity_feed(userId?, feed?, maxItems?, cursor?, view?)` | Activity feed. Without `feed` it returns the feed **directory** (just `{ name, displayName }` per feed by default); pass `feed`: `local` (nearby activity) \\| `timeline` (people you follow) \\| `personal` (own posts) for the actual items. Paginate with `cursor` (from `nextCursor`). Items are projected to `{ type, timestamp, user, trail, activity stats, review }` by default; `view: \"full\"` returns AllTrails' whole records. |\n\n`userId` defaults to the signed-in user (resolved via `/api/alltrails/me`, or `ALLTRAILS_USER_ID`).\n\n### Diagnostics\n| Tool | Notes |\n|------|-------|\n| `alltrails_healthcheck` | Round-trips a probe through the fetchproxy bridge and reports role/port/timing plus a hint distinguishing \"bridge never came up\" from \"extension not connected\" from \"AllTrails-side problem\". Call it when a real tool fails. |\n\n## Workflows\n\n**Find a trail and read reviews:**\n1. `alltrails_search(query: \"angels landing\", types: [\"trail\"])` → pick a trail id\n2. `alltrails_get_trail(trailId)` → details\n3. `alltrails_get_trail_reviews(trailId)` → what hikers say\n\n**Review your own hiking history:**\n1. `alltrails_get_profile` → confirm you're signed in\n2. `alltrails_list_completed_trails()` / `alltrails_list_user_lists()`\n\n## Caution\n\n- All tools are **read-only** — this server never writes to AllTrails.\n- Compact summaries include both metric and imperial fields (`lengthMeters`/`lengthMiles`, `elevationGainMeters`/`elevationGainFeet`) — no unit conversion needed.\n- A `403` usually means the tab isn't signed in — sign into alltrails.com in an open tab and retry. An \"AllTrails bridge:\" error means the bridge itself failed — run `alltrails_healthcheck`. A key-capture stall means the tab is idle — re-run the tool and reload a www.alltrails.com tab **while it is running**, since the key is read off a request made during the call and refreshing beforehand is not seen.\n- Trail/user ids are numeric strings as they appear in AllTrails URLs.\n\nFile v3.1.7:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"alltrails\",\n  \"version\": \"3.1.7\",\n  \"publishedAt\": 1791380365542\n}\n\nFile v3.1.7:skill-card.md\n\n## Description:\n\nHelps users find hiking trails and view trail details, reviews, weather, and their AllTrails account activity through an unofficial read-only integration.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nHikers and other AllTrails users can find trails, check details and reviews, export routes, and look up their saved lists or completed hikes when signed in.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: A signed-in browser session can expose saved lists, completed trails, profile, and activity without clear per-use confirmation.\n\nMitigation: Invoke only for explicit AllTrails requests and confirm before retrieving account-linked data.\n\nRisk: The unofficial integration relies on an internal AllTrails API and browser bridge that may stop working or conflict with AllTrails' terms.\n\nMitigation: Review the integration and applicable terms before installing or using it; do not rely on it for critical trail decisions.\n\n## Reference(s):\n\n- [AllTrails skill release](https://clawhub.ai/chrischall/skills/alltrails)\n- [AllTrails MCP package](https://www.npmjs.com/package/alltrails-mcp)\n- [ContextMint Bridge releases](https://github.com/nullnet-app/contextmint-bridge/releases)\n\n## Skill Output:\n\n**Output Type(s):** [Text, GPX data]\n\n**Output Format:** [Text summaries and GPX 1.1 XML for trail route exports]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Read-only results; account data requires a signed-in AllTrails session.]\n\n## Skill Version(s):\n\n3.1.7 (source: server-resolved release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v3.1.6: 3 files, 4890 bytes\n\nFiles: skill-card.md (2041b), SKILL.md (7842b), _meta.json (128b)\n\nFile v3.1.6:SKILL.md\n\n---\nname: alltrails\ndescription: This skill should be used when the user asks about AllTrails hiking/trail data. Triggers on phrases like \"find trails near\", \"AllTrails\", \"trail details\", \"hike reviews\", \"trail conditions\", \"my saved trails\", \"trails I've completed\", or any request involving hiking trails, trail search, reviews, photos, or a user's AllTrails lists and activity.\n---\n\n# alltrails-mcp\n\n**Unofficial** MCP server for AllTrails — read-only access to trail search, details, reviews, photos, weather, and a signed-in user's saved lists / completed trails / activity feed.\n\n> ⚠️ AllTrails has **no public API**. This server reverse-engineers the internal one used by alltrails.com, which is fronted by DataDome bot protection and governed by AllTrails' Terms of Service. It may break at any time, and automated use may violate their ToS. Use at your own discretion for your own account.\n\n- **npm:** [npmjs.com/package/alltrails-mcp](https://www.npmjs.com/package/alltrails-mcp)\n- **Source:** [github.com/chrischall/alltrails-mcp](https://github.com/chrischall/alltrails-mcp)\n\n## Setup\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"alltrails\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"alltrails-mcp\"]\n    }\n  }\n}\n```\n\nEvery API request routes through the **fetchproxy** browser bridge — it runs as a same-origin fetch inside your signed-in alltrails.com tab (DataDome fingerprints Node-originated requests, so there is no stored-cookie mode). Requirements: the ContextMint Bridge extension installed (https://github.com/nullnet-app/contextmint-bridge/releases — the fetchproxy extension renamed, same maintainer; public source, `.sha256`-checkable release zips; use Chrome for now), a signed-in alltrails.com tab open, and a one-time pair-code approval on first use. The `x-at-key` app key is never stored in code or config — it is captured live from the tab's own API traffic and held in memory only.\n\n## Tools\n\n### `view` — slim by default\n\nEvery tool marked `view?` below answers in one of two shapes, and the cheap one\nis what you get for free:\n\n- **`view: \"compact\"` (the default)** — a slim projection of just the fields\n  you act on. Each tool's row says exactly which.\n- **`view: \"full\"`** — AllTrails' whole untouched record.\n\nYou do not pass anything to get the compact answer. Reach for `view: \"full\"`\nonly when you need a field the projection drops — most often route geometry\nfrom `alltrails_get_trail`.\n\n**`view` is not `detail`.** `alltrails_get_trail` also takes a `detail`\n(`basic`/`medium`/`offline`) argument, and that one is forwarded to AllTrails —\nit decides what the API sends *us*. `view` decides what we hand back to you.\nFull route geometry needs **both**: `detail: \"offline\"` to fetch it and\n`view: \"full\"` to keep it.\n\n### Discovery (still routed through the signed-in fetchproxy bridge)\n| Tool | Notes |\n|------|-------|\n| `alltrails_search(query?, types?, lat?, lng?, limit?, view?)` | Search AllTrails by name. A free-text `query` uses the same suggestions endpoint as the alltrails.com search box (good relevance; may mix record types — pass `types: [\"trail\"]` for trails only). `lat`/`lng` are ignored by the API (results carry an implicit account/IP geo bias). Returns slim per-result summaries capped at `limit` by default; `view: \"full\"` returns AllTrails' whole records. This is the way to find trails in/near a place. |\n| `alltrails_resolve_location(query, kinds?, limit?)` | Resolve a place name to AllTrails location records — `country`/`state`/`city`/`area`/`poi` — each with `{ name, kind, id, slug, latitude, longitude, region, country, label }`. Good for disambiguating (which \"Oregon\"?) or getting a place's coordinates/slug. |\n\n### Trail detail\n| Tool | Notes |\n|------|-------|\n| `alltrails_get_trail(trailId, detail?, view?)` | Trail details. `detail`: `basic` \\| `medium` (default) \\| `offline` (includes route geometry) — this one goes to AllTrails. Returns a slim projection by default (name, overview, length in m+mi, elevation gain in m+ft, difficulty, rating, route type, location); `view: \"full\"` returns the whole record, route geometry included. |\n| `alltrails_get_trail_reviews(trailId, limit?, view?)` | User reviews (default limit 20). Returns just `{ user, rating, comment }` per review, under `{ count, reviews }`, by default; `view: \"full\"` returns AllTrails' whole review records. |\n| `alltrails_get_trail_photos(trailId, view?)` | Trail photos. Returns `{ id, title, likeCount, user, uploadedAt, url }` per photo, under `{ count, photos }`, by default — `url` serves the actual image and is derived by the projection, so it is **not** in the `view: \"full\"` record. |\n| `alltrails_get_trail_gpx(trailId)` | Export the trail's route as a GPX 1.1 document (track points with per-point elevation) — save to `.gpx` or import into nav apps. |\n| `alltrails_get_trail_weather(trailId)` | Weather overview for the trail. |\n\n### Per-user (requires a signed-in session)\n| Tool | Notes |\n|------|-------|\n| `alltrails_get_profile` | The signed-in user's profile (`/api/alltrails/me`). |\n| `alltrails_list_user_lists(userId?)` | Saved lists / favorites. Defaults to the signed-in user. |\n| `alltrails_get_list_items(listId, view?)` | The trails saved in a list, by list id (from `list_user_lists`, or a public `list` record from `search`). Items are **sparse references** — each is `{ trailId, type, order, notes, addedAt }`; hydrate details with `get_trail`. By default the items are projected to those five fields and sorted by the curator's `order`; `view: \"full\"` returns the whole records, in the order AllTrails sent them. |\n| `alltrails_list_completed_trails(userId?)` | Trails marked completed. Defaults to the signed-in user. |\n| `alltrails_get_activity_feed(userId?, feed?, maxItems?, cursor?, view?)` | Activity feed. Without `feed` it returns the feed **directory** (just `{ name, displayName }` per feed by default); pass `feed`: `local` (nearby activity) \\| `timeline` (people you follow) \\| `personal` (own posts) for the actual items. Paginate with `cursor` (from `nextCursor`). Items are projected to `{ type, timestamp, user, trail, activity stats, review }` by default; `view: \"full\"` returns AllTrails' whole records. |\n\n`userId` defaults to the signed-in user (resolved via `/api/alltrails/me`, or `ALLTRAILS_USER_ID`).\n\n### Diagnostics\n| Tool | Notes |\n|------|-------|\n| `alltrails_healthcheck` | Round-trips a probe through the fetchproxy bridge and reports role/port/timing plus a hint distinguishing \"bridge never came up\" from \"extension not connected\" from \"AllTrails-side problem\". Call it when a real tool fails. |\n\n## Workflows\n\n**Find a trail and read reviews:**\n1. `alltrails_search(query: \"angels landing\", types: [\"trail\"])` → pick a trail id\n2. `alltrails_get_trail(trailId)` → details\n3. `alltrails_get_trail_reviews(trailId)` → what hikers say\n\n**Review your own hiking history:**\n1. `alltrails_get_profile` → confirm you're signed in\n2. `alltrails_list_completed_trails()` / `alltrails_list_user_lists()`\n\n## Caution\n\n- All tools are **read-only** — this server never writes to AllTrails.\n- Compact summaries include both metric and imperial fields (`lengthMeters`/`lengthMiles`, `elevationGainMeters`/`elevationGainFeet`) — no unit conversion needed.\n- A `403` usually means the tab isn't signed in — sign into alltrails.com in an open tab and retry. An \"AllTrails bridge:\" error means the bridge itself failed — run `alltrails_healthcheck`. A key-capture stall means the tab is idle — re-run the tool and reload a www.alltrails.com tab **while it is running**, since the key is read off a request made during the call and refreshing beforehand is not seen.\n- Trail/user ids are numeric strings as they appear in AllTrails URLs.\n\nFile v3.1.6:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"alltrails\",\n  \"version\": \"3.1.6\",\n  \"publishedAt\": 1791168492557\n}\n\nFile v3.1.6:skill-card.md\n\n## Description:\n\nHelps users find hiking trails and review trail details, weather, and their own AllTrails lists and activity through an unofficial read-only integration.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nHikers and trip planners use this skill to search trails, read trail details and reviews, and inspect their own saved trails and hiking history with a signed-in AllTrails session.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: A signed-in browser session can expose your AllTrails profile, saved lists, completed trails, and activity to the integration.\n\nMitigation: Invoke it only for explicit AllTrails requests, and review the npm package and browser extension before installing them.\n\nRisk: This unofficial integration relies on an internal AllTrails API that may change; automated use may conflict with AllTrails terms.\n\nMitigation: Use it with your own account at your discretion and confirm important trail information directly with AllTrails.\n\n## Reference(s):\n\n- [AllTrails skill on ClawHub](https://clawhub.ai/chrischall/skills/alltrails)\n- [alltrails-mcp npm package](https://www.npmjs.com/package/alltrails-mcp)\n- [ContextMint Bridge releases](https://github.com/nullnet-app/contextmint-bridge/releases)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Structured trail data, GPX route data]\n\n**Output Format:** [Markdown or structured data; GPX 1.1 for route exports]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Read-only AllTrails lookups; personal results require a signed-in browser session.]\n\n## Skill Version(s):\n\n3.1.6 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v3.1.5: 3 files, 4822 bytes\n\nFiles: skill-card.md (1796b), SKILL.md (7842b), _meta.json (128b)\n\nFile v3.1.5:SKILL.md\n\n---\nname: alltrails\ndescription: This skill should be used when the user asks about AllTrails hiking/trail data. Triggers on phrases like \"find trails near\", \"AllTrails\", \"trail details\", \"hike reviews\", \"trail conditions\", \"my saved trails\", \"trails I've completed\", or any request involving hiking trails, trail search, reviews, photos, or a user's AllTrails lists and activity.\n---\n\n# alltrails-mcp\n\n**Unofficial** MCP server for AllTrails — read-only access to trail search, details, reviews, photos, weather, and a signed-in user's saved lists / completed trails / activity feed.\n\n> ⚠️ AllTrails has **no public API**. This server reverse-engineers the internal one used by alltrails.com, which is fronted by DataDome bot protection and governed by AllTrails' Terms of Service. It may break at any time, and automated use may violate their ToS. Use at your own discretion for your own account.\n\n- **npm:** [npmjs.com/package/alltrails-mcp](https://www.npmjs.com/package/alltrails-mcp)\n- **Source:** [github.com/chrischall/alltrails-mcp](https://github.com/chrischall/alltrails-mcp)\n\n## Setup\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"alltrails\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"alltrails-mcp\"]\n    }\n  }\n}\n```\n\nEvery API request routes through the **fetchproxy** browser bridge — it runs as a same-origin fetch inside your signed-in alltrails.com tab (DataDome fingerprints Node-originated requests, so there is no stored-cookie mode). Requirements: the ContextMint Bridge extension installed (https://github.com/nullnet-app/contextmint-bridge/releases — the fetchproxy extension renamed, same maintainer; public source, `.sha256`-checkable release zips; use Chrome for now), a signed-in alltrails.com tab open, and a one-time pair-code approval on first use. The `x-at-key` app key is never stored in code or config — it is captured live from the tab's own API traffic and held in memory only.\n\n## Tools\n\n### `view` — slim by default\n\nEvery tool marked `view?` below answers in one of two shapes, and the cheap one\nis what you get for free:\n\n- **`view: \"compact\"` (the default)** — a slim projection of just the fields\n  you act on. Each tool's row says exactly which.\n- **`view: \"full\"`** — AllTrails' whole untouched record.\n\nYou do not pass anything to get the compact answer. Reach for `view: \"full\"`\nonly when you need a field the projection drops — most often route geometry\nfrom `alltrails_get_trail`.\n\n**`view` is not `detail`.** `alltrails_get_trail` also takes a `detail`\n(`basic`/`medium`/`offline`) argument, and that one is forwarded to AllTrails —\nit decides what the API sends *us*. `view` decides what we hand back to you.\nFull route geometry needs **both**: `detail: \"offline\"` to fetch it and\n`view: \"full\"` to keep it.\n\n### Discovery (still routed through the signed-in fetchproxy bridge)\n| Tool | Notes |\n|------|-------|\n| `alltrails_search(query?, types?, lat?, lng?, limit?, view?)` | Search AllTrails by name. A free-text `query` uses the same suggestions endpoint as the alltrails.com search box (good relevance; may mix record types — pass `types: [\"trail\"]` for trails only). `lat`/`lng` are ignored by the API (results carry an implicit account/IP geo bias). Returns slim per-result summaries capped at `limit` by default; `view: \"full\"` returns AllTrails' whole records. This is the way to find trails in/near a place. |\n| `alltrails_resolve_location(query, kinds?, limit?)` | Resolve a place name to AllTrails location records — `country`/`state`/`city`/`area`/`poi` — each with `{ name, kind, id, slug, latitude, longitude, region, country, label }`. Good for disambiguating (which \"Oregon\"?) or getting a place's coordinates/slug. |\n\n### Trail detail\n| Tool | Notes |\n|------|-------|\n| `alltrails_get_trail(trailId, detail?, view?)` | Trail details. `detail`: `basic` \\| `medium` (default) \\| `offline` (includes route geometry) — this one goes to AllTrails. Returns a slim projection by default (name, overview, length in m+mi, elevation gain in m+ft, difficulty, rating, route type, location); `view: \"full\"` returns the whole record, route geometry included. |\n| `alltrails_get_trail_reviews(trailId, limit?, view?)` | User reviews (default limit 20). Returns just `{ user, rating, comment }` per review, under `{ count, reviews }`, by default; `view: \"full\"` returns AllTrails' whole review records. |\n| `alltrails_get_trail_photos(trailId, view?)` | Trail photos. Returns `{ id, title, likeCount, user, uploadedAt, url }` per photo, under `{ count, photos }`, by default — `url` serves the actual image and is derived by the projection, so it is **not** in the `view: \"full\"` record. |\n| `alltrails_get_trail_gpx(trailId)` | Export the trail's route as a GPX 1.1 document (track points with per-point elevation) — save to `.gpx` or import into nav apps. |\n| `alltrails_get_trail_weather(trailId)` | Weather overview for the trail. |\n\n### Per-user (requires a signed-in session)\n| Tool | Notes |\n|------|-------|\n| `alltrails_get_profile` | The signed-in user's profile (`/api/alltrails/me`). |\n| `alltrails_list_user_lists(userId?)` | Saved lists / favorites. Defaults to the signed-in user. |\n| `alltrails_get_list_items(listId, view?)` | The trails saved in a list, by list id (from `list_user_lists`, or a public `list` record from `search`). Items are **sparse references** — each is `{ trailId, type, order, notes, addedAt }`; hydrate details with `get_trail`. By default the items are projected to those five fields and sorted by the curator's `order`; `view: \"full\"` returns the whole records, in the order AllTrails sent them. |\n| `alltrails_list_completed_trails(userId?)` | Trails marked completed. Defaults to the signed-in user. |\n| `alltrails_get_activity_feed(userId?, feed?, maxItems?, cursor?, view?)` | Activity feed. Without `feed` it returns the feed **directory** (just `{ name, displayName }` per feed by default); pass `feed`: `local` (nearby activity) \\| `timeline` (people you follow) \\| `personal` (own posts) for the actual items. Paginate with `cursor` (from `nextCursor`). Items are projected to `{ type, timestamp, user, trail, activity stats, review }` by default; `view: \"full\"` returns AllTrails' whole records. |\n\n`userId` defaults to the signed-in user (resolved via `/api/alltrails/me`, or `ALLTRAILS_USER_ID`).\n\n### Diagnostics\n| Tool | Notes |\n|------|-------|\n| `alltrails_healthcheck` | Round-trips a probe through the fetchproxy bridge and reports role/port/timing plus a hint distinguishing \"bridge never came up\" from \"extension not connected\" from \"AllTrails-side problem\". Call it when a real tool fails. |\n\n## Workflows\n\n**Find a trail and read reviews:**\n1. `alltrails_search(query: \"angels landing\", types: [\"trail\"])` → pick a trail id\n2. `alltrails_get_trail(trailId)` → details\n3. `alltrails_get_trail_reviews(trailId)` → what hikers say\n\n**Review your own hiking history:**\n1. `alltrails_get_profile` → confirm you're signed in\n2. `alltrails_list_completed_trails()` / `alltrails_list_user_lists()`\n\n## Caution\n\n- All tools are **read-only** — this server never writes to AllTrails.\n- Compact summaries include both metric and imperial fields (`lengthMeters`/`lengthMiles`, `elevationGainMeters`/`elevationGainFeet`) — no unit conversion needed.\n- A `403` usually means the tab isn't signed in — sign into alltrails.com in an open tab and retry. An \"AllTrails bridge:\" error means the bridge itself failed — run `alltrails_healthcheck`. A key-capture stall means the tab is idle — re-run the tool and reload a www.alltrails.com tab **while it is running**, since the key is read off a request made during the call and refreshing beforehand is not seen.\n- Trail/user ids are numeric strings as they appear in AllTrails URLs.\n\nFile v3.1.5:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"alltrails\",\n  \"version\": \"3.1.5\",\n  \"publishedAt\": 1790991688633\n}\n\nFile v3.1.5:skill-card.md\n\n## Description:\n\nHelps users search AllTrails for hikes and review trail details, conditions, photos, and their own hiking activity.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nHikers and other users can discover trails, review route information and conditions, and, when authorized, inspect their saved trails and activity.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Broad trail-related triggers could expose personal AllTrails data from a signed-in session without a clear request.\n\nMitigation: Invoke account-scoped tools only when the user explicitly requests saved trails, completed trails, profile, or activity.\n\nRisk: The unofficial integration uses an external npm package and a bridge to a signed-in browser tab.\n\nMitigation: Review the package and browser bridge before installation, and use them only for explicit AllTrails tasks.\n\n## Reference(s):\n\n- [AllTrails MCP npm package](https://www.npmjs.com/package/alltrails-mcp)\n- [ContextMint Bridge releases](https://github.com/nullnet-app/contextmint-bridge/releases)\n\n## Skill Output:\n\n**Output Type(s):** [Text, GPX route data]\n\n**Output Format:** [Markdown or GPX 1.1 XML]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Trail and account results may include reviews, photos, weather, saved lists, and activity.]\n\n## Skill Version(s):\n\n3.1.5 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v3.1.4: 3 files, 4979 bytes\n\nFiles: skill-card.md (2273b), SKILL.md (7842b), _meta.json (128b)\n\nFile v3.1.4:SKILL.md\n\n---\nname: alltrails\ndescription: This skill should be used when the user asks about AllTrails hiking/trail data. Triggers on phrases like \"find trails near\", \"AllTrails\", \"trail details\", \"hike reviews\", \"trail conditions\", \"my saved trails\", \"trails I've completed\", or any request involving hiking trails, trail search, reviews, photos, or a user's AllTrails lists and activity.\n---\n\n# alltrails-mcp\n\n**Unofficial** MCP server for AllTrails — read-only access to trail search, details, reviews, photos, weather, and a signed-in user's saved lists / completed trails / activity feed.\n\n> ⚠️ AllTrails has **no public API**. This server reverse-engineers the internal one used by alltrails.com, which is fronted by DataDome bot protection and governed by AllTrails' Terms of Service. It may break at any time, and automated use may violate their ToS. Use at your own discretion for your own account.\n\n- **npm:** [npmjs.com/package/alltrails-mcp](https://www.npmjs.com/package/alltrails-mcp)\n- **Source:** [github.com/chrischall/alltrails-mcp](https://github.com/chrischall/alltrails-mcp)\n\n## Setup\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"alltrails\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"alltrails-mcp\"]\n    }\n  }\n}\n```\n\nEvery API request routes through the **fetchproxy** browser bridge — it runs as a same-origin fetch inside your signed-in alltrails.com tab (DataDome fingerprints Node-originated requests, so there is no stored-cookie mode). Requirements: the ContextMint Bridge extension installed (https://github.com/nullnet-app/contextmint-bridge/releases — the fetchproxy extension renamed, same maintainer; public source, `.sha256`-checkable release zips; use Chrome for now), a signed-in alltrails.com tab open, and a one-time pair-code approval on first use. The `x-at-key` app key is never stored in code or config — it is captured live from the tab's own API traffic and held in memory only.\n\n## Tools\n\n### `view` — slim by default\n\nEvery tool marked `view?` below answers in one of two shapes, and the cheap one\nis what you get for free:\n\n- **`view: \"compact\"` (the default)** — a slim projection of just the fields\n  you act on. Each tool's row says exactly which.\n- **`view: \"full\"`** — AllTrails' whole untouched record.\n\nYou do not pass anything to get the compact answer. Reach for `view: \"full\"`\nonly when you need a field the projection drops — most often route geometry\nfrom `alltrails_get_trail`.\n\n**`view` is not `detail`.** `alltrails_get_trail` also takes a `detail`\n(`basic`/`medium`/`offline`) argument, and that one is forwarded to AllTrails —\nit decides what the API sends *us*. `view` decides what we hand back to you.\nFull route geometry needs **both**: `detail: \"offline\"` to fetch it and\n`view: \"full\"` to keep it.\n\n### Discovery (still routed through the signed-in fetchproxy bridge)\n| Tool | Notes |\n|------|-------|\n| `alltrails_search(query?, types?, lat?, lng?, limit?, view?)` | Search AllTrails by name. A free-text `query` uses the same suggestions endpoint as the alltrails.com search box (good relevance; may mix record types — pass `types: [\"trail\"]` for trails only). `lat`/`lng` are ignored by the API (results carry an implicit account/IP geo bias). Returns slim per-result summaries capped at `limit` by default; `view: \"full\"` returns AllTrails' whole records. This is the way to find trails in/near a place. |\n| `alltrails_resolve_location(query, kinds?, limit?)` | Resolve a place name to AllTrails location records — `country`/`state`/`city`/`area`/`poi` — each with `{ name, kind, id, slug, latitude, longitude, region, country, label }`. Good for disambiguating (which \"Oregon\"?) or getting a place's coordinates/slug. |\n\n### Trail detail\n| Tool | Notes |\n|------|-------|\n| `alltrails_get_trail(trailId, detail?, view?)` | Trail details. `detail`: `basic` \\| `medium` (default) \\| `offline` (includes route geometry) — this one goes to AllTrails. Returns a slim projection by default (name, overview, length in m+mi, elevation gain in m+ft, difficulty, rating, route type, location); `view: \"full\"` returns the whole record, route geometry included. |\n| `alltrails_get_trail_reviews(trailId, limit?, view?)` | User reviews (default limit 20). Returns just `{ user, rating, comment }` per review, under `{ count, reviews }`, by default; `view: \"full\"` returns AllTrails' whole review records. |\n| `alltrails_get_trail_photos(trailId, view?)` | Trail photos. Returns `{ id, title, likeCount, user, uploadedAt, url }` per photo, under `{ count, photos }`, by default — `url` serves the actual image and is derived by the projection, so it is **not** in the `view: \"full\"` record. |\n| `alltrails_get_trail_gpx(trailId)` | Export the trail's route as a GPX 1.1 document (track points with per-point elevation) — save to `.gpx` or import into nav apps. |\n| `alltrails_get_trail_weather(trailId)` | Weather overview for the trail. |\n\n### Per-user (requires a signed-in session)\n| Tool | Notes |\n|------|-------|\n| `alltrails_get_profile` | The signed-in user's profile (`/api/alltrails/me`). |\n| `alltrails_list_user_lists(userId?)` | Saved lists / favorites. Defaults to the signed-in user. |\n| `alltrails_get_list_items(listId, view?)` | The trails saved in a list, by list id (from `list_user_lists`, or a public `list` record from `search`). Items are **sparse references** — each is `{ trailId, type, order, notes, addedAt }`; hydrate details with `get_trail`. By default the items are projected to those five fields and sorted by the curator's `order`; `view: \"full\"` returns the whole records, in the order AllTrails sent them. |\n| `alltrails_list_completed_trails(userId?)` | Trails marked completed. Defaults to the signed-in user. |\n| `alltrails_get_activity_feed(userId?, feed?, maxItems?, cursor?, view?)` | Activity feed. Without `feed` it returns the feed **directory** (just `{ name, displayName }` per feed by default); pass `feed`: `local` (nearby activity) \\| `timeline` (people you follow) \\| `personal` (own posts) for the actual items. Paginate with `cursor` (from `nextCursor`). Items are projected to `{ type, timestamp, user, trail, activity stats, review }` by default; `view: \"full\"` returns AllTrails' whole records. |\n\n`userId` defaults to the signed-in user (resolved via `/api/alltrails/me`, or `ALLTRAILS_USER_ID`).\n\n### Diagnostics\n| Tool | Notes |\n|------|-------|\n| `alltrails_healthcheck` | Round-trips a probe through the fetchproxy bridge and reports role/port/timing plus a hint distinguishing \"bridge never came up\" from \"extension not connected\" from \"AllTrails-side problem\". Call it when a real tool fails. |\n\n## Workflows\n\n**Find a trail and read reviews:**\n1. `alltrails_search(query: \"angels landing\", types: [\"trail\"])` → pick a trail id\n2. `alltrails_get_trail(trailId)` → details\n3. `alltrails_get_trail_reviews(trailId)` → what hikers say\n\n**Review your own hiking history:**\n1. `alltrails_get_profile` → confirm you're signed in\n2. `alltrails_list_completed_trails()` / `alltrails_list_user_lists()`\n\n## Caution\n\n- All tools are **read-only** — this server never writes to AllTrails.\n- Compact summaries include both metric and imperial fields (`lengthMeters`/`lengthMiles`, `elevationGainMeters`/`elevationGainFeet`) — no unit conversion needed.\n- A `403` usually means the tab isn't signed in — sign into alltrails.com in an open tab and retry. An \"AllTrails bridge:\" error means the bridge itself failed — run `alltrails_healthcheck`. A key-capture stall means the tab is idle — re-run the tool and reload a www.alltrails.com tab **while it is running**, since the key is read off a request made during the call and refreshing beforehand is not seen.\n- Trail/user ids are numeric strings as they appear in AllTrails URLs.\n\nFile v3.1.4:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"alltrails\",\n  \"version\": \"3.1.4\",\n  \"publishedAt\": 1790603742344\n}\n\nFile v3.1.4:skill-card.md\n\n## Description:\n\nHelps agents find AllTrails hiking routes and read trail details, reviews, photos, weather, and signed-in account activity.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nHikers and agents assisting them can search for trails, compare route details and reviews, and retrieve saved lists or completed hikes when the user requests access to their account.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The unofficial integration relies on a signed-in browser session and may expose account details to the agent.\n\nMitigation: Review the package and browser extension before installation; use profile, saved-list, completed-trail, and activity tools only when account access is intended.\n\nRisk: Broad hiking-related triggers may activate the integration unexpectedly.\n\nMitigation: Confirm the user wants AllTrails data before accessing the signed-in session, especially for personal information.\n\nRisk: Unofficial access can break or conflict with AllTrails terms.\n\nMitigation: Review applicable terms, consider pinning package and extension versions, and verify trail information before relying on it.\n\n## Reference(s):\n\n- [ClawHub alltrails release](https://clawhub.ai/chrischall/skills/alltrails)\n- [alltrails-mcp npm package](https://www.npmjs.com/package/alltrails-mcp)\n- [alltrails-mcp source](https://github.com/chrischall/alltrails-mcp)\n- [ContextMint Bridge releases](https://github.com/nullnet-app/contextmint-bridge/releases)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Configuration guidance, GPX route data]\n\n**Output Format:** [Markdown or text; GPX 1.1 for exported routes]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Trail results are compact by default; full records and route geometry are available on request.]\n\n## Skill Version(s):\n\n3.1.4 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v3.1.3: 3 files, 4738 bytes\n\nFiles: skill-card.md (1885b), SKILL.md (7662b), _meta.json (128b)\n\nFile v3.1.3:SKILL.md\n\n---\nname: alltrails\ndescription: This skill should be used when the user asks about AllTrails hiking/trail data. Triggers on phrases like \"find trails near\", \"AllTrails\", \"trail details\", \"hike reviews\", \"trail conditions\", \"my saved trails\", \"trails I've completed\", or any request involving hiking trails, trail search, reviews, photos, or a user's AllTrails lists and activity.\n---\n\n# alltrails-mcp\n\n**Unofficial** MCP server for AllTrails — read-only access to trail search, details, reviews, photos, weather, and a signed-in user's saved lists / completed trails / activity feed.\n\n> ⚠️ AllTrails has **no public API**. This server reverse-engineers the internal one used by alltrails.com, which is fronted by DataDome bot protection and governed by AllTrails' Terms of Service. It may break at any time, and automated use may violate their ToS. Use at your own discretion for your own account.\n\n- **npm:** [npmjs.com/package/alltrails-mcp](https://www.npmjs.com/package/alltrails-mcp)\n- **Source:** [github.com/chrischall/alltrails-mcp](https://github.com/chrischall/alltrails-mcp)\n\n## Setup\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"alltrails\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"alltrails-mcp\"]\n    }\n  }\n}\n```\n\nEvery API request routes through the **fetchproxy** browser bridge — it runs as a same-origin fetch inside your signed-in alltrails.com tab (DataDome fingerprints Node-originated requests, so 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 `x-at-key` app key is never stored in code or config — it is captured live from the tab's own API traffic and held in memory only.\n\n## Tools\n\n### `view` — slim by default\n\nEvery tool marked `view?` below answers in one of two shapes, and the cheap one\nis what you get for free:\n\n- **`view: \"compact\"` (the default)** — a slim projection of just the fields\n  you act on. Each tool's row says exactly which.\n- **`view: \"full\"`** — AllTrails' whole untouched record.\n\nYou do not pass anything to get the compact answer. Reach for `view: \"full\"`\nonly when you need a field the projection drops — most often route geometry\nfrom `alltrails_get_trail`.\n\n**`view` is not `detail`.** `alltrails_get_trail` also takes a `detail`\n(`basic`/`medium`/`offline`) argument, and that one is forwarded to AllTrails —\nit decides what the API sends *us*. `view` decides what we hand back to you.\nFull route geometry needs **both**: `detail: \"offline\"` to fetch it and\n`view: \"full\"` to keep it.\n\n### Discovery (still routed through the signed-in fetchproxy bridge)\n| Tool | Notes |\n|------|-------|\n| `alltrails_search(query?, types?, lat?, lng?, limit?, view?)` | Search AllTrails by name. A free-text `query` uses the same suggestions endpoint as the alltrails.com search box (good relevance; may mix record types — pass `types: [\"trail\"]` for trails only). `lat`/`lng` are ignored by the API (results carry an implicit account/IP geo bias). Returns slim per-result summaries capped at `limit` by default; `view: \"full\"` returns AllTrails' whole records. This is the way to find trails in/near a place. |\n| `alltrails_resolve_location(query, kinds?, limit?)` | Resolve a place name to AllTrails location records — `country`/`state`/`city`/`area`/`poi` — each with `{ name, kind, id, slug, latitude, longitude, region, country, label }`. Good for disambiguating (which \"Oregon\"?) or getting a place's coordinates/slug. |\n\n### Trail detail\n| Tool | Notes |\n|------|-------|\n| `alltrails_get_trail(trailId, detail?, view?)` | Trail details. `detail`: `basic` \\| `medium` (default) \\| `offline` (includes route geometry) — this one goes to AllTrails. Returns a slim projection by default (name, overview, length in m+mi, elevation gain in m+ft, difficulty, rating, route type, location); `view: \"full\"` returns the whole record, route geometry included. |\n| `alltrails_get_trail_reviews(trailId, limit?, view?)` | User reviews (default limit 20). Returns just `{ user, rating, comment }` per review, under `{ count, reviews }`, by default; `view: \"full\"` returns AllTrails' whole review records. |\n| `alltrails_get_trail_photos(trailId, view?)` | Trail photos. Returns `{ id, title, likeCount, user, uploadedAt, url }` per photo, under `{ count, photos }`, by default — `url` serves the actual image and is derived by the projection, so it is **not** in the `view: \"full\"` record. |\n| `alltrails_get_trail_gpx(trailId)` | Export the trail's route as a GPX 1.1 document (track points with per-point elevation) — save to `.gpx` or import into nav apps. |\n| `alltrails_get_trail_weather(trailId)` | Weather overview for the trail. |\n\n### Per-user (requires a signed-in session)\n| Tool | Notes |\n|------|-------|\n| `alltrails_get_profile` | The signed-in user's profile (`/api/alltrails/me`). |\n| `alltrails_list_user_lists(userId?)` | Saved lists / favorites. Defaults to the signed-in user. |\n| `alltrails_get_list_items(listId, view?)` | The trails saved in a list, by list id (from `list_user_lists`, or a public `list` record from `search`). Items are **sparse references** — each is `{ trailId, type, order, notes, addedAt }`; hydrate details with `get_trail`. By default the items are projected to those five fields and sorted by the curator's `order`; `view: \"full\"` returns the whole records, in the order AllTrails sent them. |\n| `alltrails_list_completed_trails(userId?)` | Trails marked completed. Defaults to the signed-in user. |\n| `alltrails_get_activity_feed(userId?, feed?, maxItems?, cursor?, view?)` | Activity feed. Without `feed` it returns the feed **directory** (just `{ name, displayName }` per feed by default); pass `feed`: `local` (nearby activity) \\| `timeline` (people you follow) \\| `personal` (own posts) for the actual items. Paginate with `cursor` (from `nextCursor`). Items are projected to `{ type, timestamp, user, trail, activity stats, review }` by default; `view: \"full\"` returns AllTrails' whole records. |\n\n`userId` defaults to the signed-in user (resolved via `/api/alltrails/me`, or `ALLTRAILS_USER_ID`).\n\n### Diagnostics\n| Tool | Notes |\n|------|-------|\n| `alltrails_healthcheck` | Round-trips a probe through the fetchproxy bridge and reports role/port/timing plus a hint distinguishing \"bridge never came up\" from \"extension not connected\" from \"AllTrails-side problem\". Call it when a real tool fails. |\n\n## Workflows\n\n**Find a trail and read reviews:**\n1. `alltrails_search(query: \"angels landing\", types: [\"trail\"])` → pick a trail id\n2. `alltrails_get_trail(trailId)` → details\n3. `alltrails_get_trail_reviews(trailId)` → what hikers say\n\n**Review your own hiking history:**\n1. `alltrails_get_profile` → confirm you're signed in\n2. `alltrails_list_completed_trails()` / `alltrails_list_user_lists()`\n\n## Caution\n\n- All tools are **read-only** — this server never writes to AllTrails.\n- Compact summaries include both metric and imperial fields (`lengthMeters`/`lengthMiles`, `elevationGainMeters`/`elevationGainFeet`) — no unit conversion needed.\n- A `403` usually means the tab isn't signed in — sign into alltrails.com in an open tab and retry. An \"AllTrails bridge:\" error means the bridge itself failed — run `alltrails_healthcheck`. A key-capture stall means the tab is idle — re-run the tool and reload a www.alltrails.com tab **while it is running**, since the key is read off a request made during the call and refreshing beforehand is not seen.\n- Trail/user ids are numeric strings as they appear in AllTrails URLs.\n\nFile v3.1.3:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"alltrails\",\n  \"version\": \"3.1.3\",\n  \"publishedAt\": 1790351452710\n}\n\nFile v3.1.3:skill-card.md\n\n## Description:\n\nProvides read-only AllTrails trail discovery, details, reviews, weather, and access to a signed-in user's saved lists and hiking history.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nHikers and other AllTrails users can ask an agent to find trails, review trail information, and explore their own saved lists and completed hikes.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The unofficial integration uses internal AllTrails APIs and may violate AllTrails terms or stop working.\n\nMitigation: Review the terms and accept the integration's limitations before installing or relying on it.\n\nRisk: The browser bridge uses a signed-in AllTrails tab and a fetchproxy extension to access account data.\n\nMitigation: Request only trail or account data you intend to access, and review the npm package and source before trusting it.\n\n## Reference(s):\n\n- [AllTrails skill on ClawHub](https://clawhub.ai/chrischall/skills/alltrails)\n- [alltrails-mcp npm package](https://www.npmjs.com/package/alltrails-mcp)\n- [alltrails-mcp source code (linked by skill)](https://github.com/chrischall/alltrails-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [Text, JSON, GPX]\n\n**Output Format:** [Text responses, structured trail data, and GPX 1.1 route exports]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Read-only; compact records by default, with full records on request.]\n\n## Skill Version(s):\n\n3.1.3 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v3.1.2: 3 files, 4950 bytes\n\nFiles: skill-card.md (2361b), SKILL.md (7662b), _meta.json (128b)\n\nFile v3.1.2:SKILL.md\n\n---\nname: alltrails\ndescription: This skill should be used when the user asks about AllTrails hiking/trail data. Triggers on phrases like \"find trails near\", \"AllTrails\", \"trail details\", \"hike reviews\", \"trail conditions\", \"my saved trails\", \"trails I've completed\", or any request involving hiking trails, trail search, reviews, photos, or a user's AllTrails lists and activity.\n---\n\n# alltrails-mcp\n\n**Unofficial** MCP server for AllTrails — read-only access to trail search, details, reviews, photos, weather, and a signed-in user's saved lists / completed trails / activity feed.\n\n> ⚠️ AllTrails has **no public API**. This server reverse-engineers the internal one used by alltrails.com, which is fronted by DataDome bot protection and governed by AllTrails' Terms of Service. It may break at any time, and automated use may violate their ToS. Use at your own discretion for your own account.\n\n- **npm:** [npmjs.com/package/alltrails-mcp](https://www.npmjs.com/package/alltrails-mcp)\n- **Source:** [github.com/chrischall/alltrails-mcp](https://github.com/chrischall/alltrails-mcp)\n\n## Setup\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"alltrails\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"alltrails-mcp\"]\n    }\n  }\n}\n```\n\nEvery API request routes through the **fetchproxy** browser bridge — it runs as a same-origin fetch inside your signed-in alltrails.com tab (DataDome fingerprints Node-originated requests, so 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 `x-at-key` app key is never stored in code or config — it is captured live from the tab's own API traffic and held in memory only.\n\n## Tools\n\n### `view` — slim by default\n\nEvery tool marked `view?` below answers in one of two shapes, and the cheap one\nis what you get for free:\n\n- **`view: \"compact\"` (the default)** — a slim projection of just the fields\n  you act on. Each tool's row says exactly which.\n- **`view: \"full\"`** — AllTrails' whole untouched record.\n\nYou do not pass anything to get the compact answer. Reach for `view: \"full\"`\nonly when you need a field the projection drops — most often route geometry\nfrom `alltrails_get_trail`.\n\n**`view` is not `detail`.** `alltrails_get_trail` also takes a `detail`\n(`basic`/`medium`/`offline`) argument, and that one is forwarded to AllTrails —\nit decides what the API sends *us*. `view` decides what we hand back to you.\nFull route geometry needs **both**: `detail: \"offline\"` to fetch it and\n`view: \"full\"` to keep it.\n\n### Discovery (still routed through the signed-in fetchproxy bridge)\n| Tool | Notes |\n|------|-------|\n| `alltrails_search(query?, types?, lat?, lng?, limit?, view?)` | Search AllTrails by name. A free-text `query` uses the same suggestions endpoint as the alltrails.com search box (good relevance; may mix record types — pass `types: [\"trail\"]` for trails only). `lat`/`lng` are ignored by the API (results carry an implicit account/IP geo bias). Returns slim per-result summaries capped at `limit` by default; `view: \"full\"` returns AllTrails' whole records. This is the way to find trails in/near a place. |\n| `alltrails_resolve_location(query, kinds?, limit?)` | Resolve a place name to AllTrails location records — `country`/`state`/`city`/`area`/`poi` — each with `{ name, kind, id, slug, latitude, longitude, region, country, label }`. Good for disambiguating (which \"Oregon\"?) or getting a place's coordinates/slug. |\n\n### Trail detail\n| Tool | Notes |\n|------|-------|\n| `alltrails_get_trail(trailId, detail?, view?)` | Trail details. `detail`: `basic` \\| `medium` (default) \\| `offline` (includes route geometry) — this one goes to AllTrails. Returns a slim projection by default (name, overview, length in m+mi, elevation gain in m+ft, difficulty, rating, route type, location); `view: \"full\"` returns the whole record, route geometry included. |\n| `alltrails_get_trail_reviews(trailId, limit?, view?)` | User reviews (default limit 20). Returns just `{ user, rating, comment }` per review, under `{ count, reviews }`, by default; `view: \"full\"` returns AllTrails' whole review records. |\n| `alltrails_get_trail_photos(trailId, view?)` | Trail photos. Returns `{ id, title, likeCount, user, uploadedAt, url }` per photo, under `{ count, photos }`, by default — `url` serves the actual image and is derived by the projection, so it is **not** in the `view: \"full\"` record. |\n| `alltrails_get_trail_gpx(trailId)` | Export the trail's route as a GPX 1.1 document (track points with per-point elevation) — save to `.gpx` or import into nav apps. |\n| `alltrails_get_trail_weather(trailId)` | Weather overview for the trail. |\n\n### Per-user (requires a signed-in session)\n| Tool | Notes |\n|------|-------|\n| `alltrails_get_profile` | The signed-in user's profile (`/api/alltrails/me`). |\n| `alltrails_list_user_lists(userId?)` | Saved lists / favorites. Defaults to the signed-in user. |\n| `alltrails_get_list_items(listId, view?)` | The trails saved in a list, by list id (from `list_user_lists`, or a public `list` record from `search`). Items are **sparse references** — each is `{ trailId, type, order, notes, addedAt }`; hydrate details with `get_trail`. By default the items are projected to those five fields and sorted by the curator's `order`; `view: \"full\"` returns the whole records, in the order AllTrails sent them. |\n| `alltrails_list_completed_trails(userId?)` | Trails marked completed. Defaults to the signed-in user. |\n| `alltrails_get_activity_feed(userId?, feed?, maxItems?, cursor?, view?)` | Activity feed. Without `feed` it returns the feed **directory** (just `{ name, displayName }` per feed by default); pass `feed`: `local` (nearby activity) \\| `timeline` (people you follow) \\| `personal` (own posts) for the actual items. Paginate with `cursor` (from `nextCursor`). Items are projected to `{ type, timestamp, user, trail, activity stats, review }` by default; `view: \"full\"` returns AllTrails' whole records. |\n\n`userId` defaults to the signed-in user (resolved via `/api/alltrails/me`, or `ALLTRAILS_USER_ID`).\n\n### Diagnostics\n| Tool | Notes |\n|------|-------|\n| `alltrails_healthcheck` | Round-trips a probe through the fetchproxy bridge and reports role/port/timing plus a hint distinguishing \"bridge never came up\" from \"extension not connected\" from \"AllTrails-side problem\". Call it when a real tool fails. |\n\n## Workflows\n\n**Find a trail and read reviews:**\n1. `alltrails_search(query: \"angels landing\", types: [\"trail\"])` → pick a trail id\n2. `alltrails_get_trail(trailId)` → details\n3. `alltrails_get_trail_reviews(trailId)` → what hikers say\n\n**Review your own hiking history:**\n1. `alltrails_get_profile` → confirm you're signed in\n2. `alltrails_list_completed_trails()` / `alltrails_list_user_lists()`\n\n## Caution\n\n- All tools are **read-only** — this server never writes to AllTrails.\n- Compact summaries include both metric and imperial fields (`lengthMeters`/`lengthMiles`, `elevationGainMeters`/`elevationGainFeet`) — no unit conversion needed.\n- A `403` usually means the tab isn't signed in — sign into alltrails.com in an open tab and retry. An \"AllTrails bridge:\" error means the bridge itself failed — run `alltrails_healthcheck`. A key-capture stall means the tab is idle — re-run the tool and reload a www.alltrails.com tab **while it is running**, since the key is read off a request made during the call and refreshing beforehand is not seen.\n- Trail/user ids are numeric strings as they appear in AllTrails URLs.\n\nFile v3.1.2:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"alltrails\",\n  \"version\": \"3.1.2\",\n  \"publishedAt\": 1790199776867\n}\n\nFile v3.1.2:skill-card.md\n\n## Description:\n\nThis skill should be used when the user asks about AllTrails hiking/trail data. Triggers on phrases like \"find trails near\", \"AllTrails\", \"trail details\", \"hike reviews\", \"trail conditions\", \"my saved trails\", \"trails I've completed\", or any request involving hiking trails, trail search, reviews, photos, or a user's AllTrails lists and activity.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to let an agent retrieve read-only AllTrails trail search results, trail details, reviews, photos, weather, saved lists, completed trails, and activity data through the alltrails-mcp server.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill uses an unofficial reverse-engineered AllTrails integration that may break or conflict with AllTrails terms.\n\nMitigation: Use it only when you accept the third-party integration risk, and remove the MCP entry if you no longer need AllTrails access.\n\nRisk: The MCP server depends on a signed-in browser tab and can expose account-scoped AllTrails data to the agent.\n\nMitigation: Prefer project-level MCP configuration, keep the browser bridge disabled when not in use, and close or sign out of the AllTrails tab when access is not needed.\n\nRisk: The trigger scope is broader than necessary for hiking and trail prompts.\n\nMitigation: Review activation behavior before deployment and keep the skill enabled only in workspaces where AllTrails access is expected.\n\n## Reference(s):\n\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown with JSON configuration examples and tool guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Produces read-only AllTrails MCP setup guidance, workflow steps, and compact or full trail data responses depending on tool view settings.]\n\n## Skill Version(s):\n\n3.1.2 (source: release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v3.1.1: 3 files, 4781 bytes\n\nFiles: skill-card.md (1980b), SKILL.md (7662b), _meta.json (128b)\n\nFile v3.1.1:SKILL.md\n\n---\nname: alltrails\ndescription: This skill should be used when the user asks about AllTrails hiking/trail data. Triggers on phrases like \"find trails near\", \"AllTrails\", \"trail details\", \"hike reviews\", \"trail conditions\", \"my saved trails\", \"trails I've completed\", or any request involving hiking trails, trail search, reviews, photos, or a user's AllTrails lists and activity.\n---\n\n# alltrails-mcp\n\n**Unofficial** MCP server for AllTrails — read-only access to trail search, details, reviews, photos, weather, and a signed-in user's saved lists / completed trails / activity feed.\n\n> ⚠️ AllTrails has **no public API**. This server reverse-engineers the internal one used by alltrails.com, which is fronted by DataDome bot protection and governed by AllTrails' Terms of Service. It may break at any time, and automated use may violate their ToS. Use at your own discretion for your own account.\n\n- **npm:** [npmjs.com/package/alltrails-mcp](https://www.npmjs.com/package/alltrails-mcp)\n- **Source:** [github.com/chrischall/alltrails-mcp](https://github.com/chrischall/alltrails-mcp)\n\n## Setup\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"alltrails\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"alltrails-mcp\"]\n    }\n  }\n}\n```\n\nEvery API request routes through the **fetchproxy** browser bridge — it runs as a same-origin fetch inside your signed-in alltrails.com tab (DataDome fingerprints Node-originated requests, so 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 `x-at-key` app key is never stored in code or config — it is captured live from the tab's own API traffic and held in memory only.\n\n## Tools\n\n### `view` — slim by default\n\nEvery tool marked `view?` below answers in one of two shapes, and the cheap one\nis what you get for free:\n\n- **`view: \"compact\"` (the default)** — a slim projection of just the fields\n  you act on. Each tool's row says exactly which.\n- **`view: \"full\"`** — AllTrails' whole untouched record.\n\nYou do not pass anything to get the compact answer. Reach for `view: \"full\"`\nonly when you need a field the projection drops — most often route geometry\nfrom `alltrails_get_trail`.\n\n**`view` is not `detail`.** `alltrails_get_trail` also takes a `detail`\n(`basic`/`medium`/`offline`) argument, and that one is forwarded to AllTrails —\nit decides what the API sends *us*. `view` decides what we hand back to you.\nFull route geometry needs **both**: `detail: \"offline\"` to fetch it and\n`view: \"full\"` to keep it.\n\n### Discovery (still routed through the signed-in fetchproxy bridge)\n| Tool | Notes |\n|------|-------|\n| `alltrails_search(query?, types?, lat?, lng?, limit?, view?)` | Search AllTrails by name. A free-text `query` uses the same suggestions endpoint as the alltrails.com search box (good relevance; may mix record types — pass `types: [\"trail\"]` for trails only). `lat`/`lng` are ignored by the API (results carry an implicit account/IP geo bias). Returns slim per-result summaries capped at `limit` by default; `view: \"full\"` returns AllTrails' whole records. This is the way to find trails in/near a place. |\n| `alltrails_resolve_location(query, kinds?, limit?)` | Resolve a place name to AllTrails location records — `country`/`state`/`city`/`area`/`poi` — each with `{ name, kind, id, slug, latitude, longitude, region, country, label }`. Good for disambiguating (which \"Oregon\"?) or getting a place's coordinates/slug. |\n\n### Trail detail\n| Tool | Notes |\n|------|-------|\n| `alltrails_get_trail(trailId, detail?, view?)` | Trail details. `detail`: `basic` \\| `medium` (default) \\| `offline` (includes route geometry) — this one goes to AllTrails. Returns a slim projection by default (name, overview, length in m+mi, elevation gain in m+ft, difficulty, rating, route type, location); `view: \"full\"` returns the whole record, route geometry included. |\n| `alltrails_get_trail_reviews(trailId, limit?, view?)` | User reviews (default limit 20). Returns just `{ user, rating, comment }` per review, under `{ count, reviews }`, by default; `view: \"full\"` returns AllTrails' whole review records. |\n| `alltrails_get_trail_photos(trailId, view?)` | Trail photos. Returns `{ id, title, likeCount, user, uploadedAt, url }` per photo, under `{ count, photos }`, by default — `url` serves the actual image and is derived by the projection, so it is **not** in the `view: \"full\"` record. |\n| `alltrails_get_trail_gpx(trailId)` | Export the trail's route as a GPX 1.1 document (track points with per-point elevation) — save to `.gpx` or import into nav apps. |\n| `alltrails_get_trail_weather(trailId)` | Weather overview for the trail. |\n\n### Per-user (requires a signed-in session)\n| Tool | Notes |\n|------|-------|\n| `alltrails_get_profile` | The signed-in user's profile (`/api/alltrails/me`). |\n| `alltrails_list_user_lists(userId?)` | Saved lists / favorites. Defaults to the signed-in user. |\n| `alltrails_get_list_items(listId, view?)` | The trails saved in a list, by list id (from `list_user_lists`, or a public `list` record from `search`). Items are **sparse references** — each is `{ trailId, type, order, notes, addedAt }`; hydrate details with `get_trail`. By default the items are projected to those five fields and sorted by the curator's `order`; `view: \"full\"` returns the whole records, in the order AllTrails sent them. |\n| `alltrails_list_completed_trails(userId?)` | Trails marked completed. Defaults to the signed-in user. |\n| `alltrails_get_activity_feed(userId?, feed?, maxItems?, cursor?, view?)` | Activity feed. Without `feed` it returns the feed **directory** (just `{ name, displayName }` per feed by default); pass `feed`: `local` (nearby activity) \\| `timeline` (people you follow) \\| `personal` (own posts) for the actual items. Paginate with `cursor` (from `nextCursor`). Items are projected to `{ type, timestamp, user, trail, activity stats, review }` by default; `view: \"full\"` returns AllTrails' whole records. |\n\n`userId` defaults to the signed-in user (resolved via `/api/alltrails/me`, or `ALLTRAILS_USER_ID`).\n\n### Diagnostics\n| Tool | Notes |\n|------|-------|\n| `alltrails_healthcheck` | Round-trips a probe through the fetchproxy bridge and reports role/port/timing plus a hint distinguishing \"bridge never came up\" from \"extension not connected\" from \"AllTrails-side problem\". Call it when a real tool fails. |\n\n## Workflows\n\n**Find a trail and read reviews:**\n1. `alltrails_search(query: \"angels landing\", types: [\"trail\"])` → pick a trail id\n2. `alltrails_get_trail(trailId)` → details\n3. `alltrails_get_trail_reviews(trailId)` → what hikers say\n\n**Review your own hiking history:**\n1. `alltrails_get_profile` → confirm you're signed in\n2. `alltrails_list_completed_trails()` / `alltrails_list_user_lists()`\n\n## Caution\n\n- All tools are **read-only** — this server never writes to AllTrails.\n- Compact summaries include both metric and imperial fields (`lengthMeters`/`lengthMiles`, `elevationGainMeters`/`elevationGainFeet`) — no unit conversion needed.\n- A `403` usually means the tab isn't signed in — sign into alltrails.com in an open tab and retry. An \"AllTrails bridge:\" error means the bridge itself failed — run `alltrails_healthcheck`. A key-capture stall means the tab is idle — re-run the tool and reload a www.alltrails.com tab **while it is running**, since the key is read off a request made during the call and refreshing beforehand is not seen.\n- Trail/user ids are numeric strings as they appear in AllTrails URLs.\n\nFile v3.1.1:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"alltrails\",\n  \"version\": \"3.1.1\",\n  \"publishedAt\": 1790178363257\n}\n\nFile v3.1.1:skill-card.md\n\n## Description:\n\nProvides read-only AllTrails trail search, trail details, reviews, photos, weather, GPX export, and signed-in user list/activity access through an unofficial MCP integration.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agent users use this skill to answer hiking trail questions, retrieve AllTrails trail data, and inspect personal saved or completed trail activity when the user has an active signed-in AllTrails browser session.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill relies on an unofficial, reverse-engineered AllTrails integration through a signed-in browser tab.\n\nMitigation: Install and use it only when the user is comfortable with that unofficial access model.\n\nRisk: Account-scoped tools can expose personal AllTrails data such as saved trails, completed trails, profile, and activity feed.\n\nMitigation: Use account-scoped tools only after explicit user direction and keep the interaction read-only.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/chrischall/skills/alltrails)\n- [alltrails-mcp npm package](https://www.npmjs.com/package/alltrails-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown with setup JSON and structured trail data summaries]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Read-only account-scoped AllTrails data may be returned when the user is signed in through the browser bridge.]\n\n## Skill Version(s):\n\n3.1.1 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v3.1.0: 3 files, 4895 bytes\n\nFiles: skill-card.md (2268b), SKILL.md (7662b), _meta.json (128b)\n\nFile v3.1.0:SKILL.md\n\n---\nname: alltrails\ndescription: This skill should be used when the user asks about AllTrails hiking/trail data. Triggers on phrases like \"find trails near\", \"AllTrails\", \"trail details\", \"hike reviews\", \"trail conditions\", \"my saved trails\", \"trails I've completed\", or any request involving hiking trails, trail search, reviews, photos, or a user's AllTrails lists and activity.\n---\n\n# alltrails-mcp\n\n**Unofficial** MCP server for AllTrails — read-only access to trail search, details, reviews, photos, weather, and a signed-in user's saved lists / completed trails / activity feed.\n\n> ⚠️ AllTrails has **no public API**. This server reverse-engineers the internal one used by alltrails.com, which is fronted by DataDome bot protection and governed by AllTrails' Terms of Service. It may break at any time, and automated use may violate their ToS. Use at your own discretion for your own account.\n\n- **npm:** [npmjs.com/package/alltrails-mcp](https://www.npmjs.com/package/alltrails-mcp)\n- **Source:** [github.com/chrischall/alltrails-mcp](https://github.com/chrischall/alltrails-mcp)\n\n## Setup\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"alltrails\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"alltrails-mcp\"]\n    }\n  }\n}\n```\n\nEvery API request routes through the **fetchproxy** browser bridge — it runs as a same-origin fetch inside your signed-in alltrails.com tab (DataDome fingerprints Node-originated requests, so 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 `x-at-key` app key is never stored in code or config — it is captured live from the tab's own API traffic and held in memory only.\n\n## Tools\n\n### `view` — slim by default\n\nEvery tool marked `view?` below answers in one of two shapes, and the cheap one\nis what you get for free:\n\n- **`view: \"compact\"` (the default)** — a slim projection of just the fields\n  you act on. Each tool's row says exactly which.\n- **`view: \"full\"`** — AllTrails' whole untouched record.\n\nYou do not pass anything to get the compact answer. Reach for `view: \"full\"`\nonly when you need a field the projection drops — most often route geometry\nfrom `alltrails_get_trail`.\n\n**`view` is not `detail`.** `alltrails_get_trail` also takes a `detail`\n(`basic`/`medium`/`offline`) argument, and that one is forwarded to AllTrails —\nit decides what the API sends *us*. `view` decides what we hand back to you.\nFull route geometry needs **both**: `detail: \"offline\"` to fetch it and\n`view: \"full\"` to keep it.\n\n### Discovery (still routed through the signed-in fetchproxy bridge)\n| Tool | Notes |\n|------|-------|\n| `alltrails_search(query?, types?, lat?, lng?, limit?, view?)` | Search AllTrails by name. A free-text `query` uses the same suggestions endpoint as the alltrails.com search box (good relevance; may mix record types — pass `types: [\"trail\"]` for trails only). `lat`/`lng` are ignored by the API (results carry an implicit account/IP geo bias). Returns slim per-result summaries capped at `limit` by default; `view: \"full\"` returns AllTrails' whole records. This is the way to find trails in/near a place. |\n| `alltrails_resolve_location(query, kinds?, limit?)` | Resolve a place name to AllTrails location records — `country`/`state`/`city`/`area`/`poi` — each with `{ name, kind, id, slug, latitude, longitude, region, country, label }`. Good for disambiguating (which \"Oregon\"?) or getting a place's coordinates/slug. |\n\n### Trail detail\n| Tool | Notes |\n|------|-------|\n| `alltrails_get_trail(trailId, detail?, view?)` | Trail details. `detail`: `basic` \\| `medium` (default) \\| `offline` (includes route geometry) — this one goes to AllTrails. Returns a slim projection by default (name, overview, length in m+mi, elevation gain in m+ft, difficulty, rating, route type, location); `view: \"full\"` returns the whole record, route geometry included. |\n| `alltrails_get_trail_reviews(trailId, limit?, view?)` | User reviews (default limit 20). Returns just `{ user, rating, comment }` per review, under `{ count, reviews }`, by default; `view: \"full\"` returns AllTrails' whole review records. |\n| `alltrails_get_trail_photos(trailId, view?)` | Trail photos. Returns `{ id, title, likeCount, user, uploadedAt, url }` per photo, under `{ count, photos }`, by default — `url` serves the actual image and is derived by the projection, so it is **not** in the `view: \"full\"` record. |\n| `alltrails_get_trail_gpx(trailId)` | Export the trail's route as a GPX 1.1 document (track points with per-point elevation) — save to `.gpx` or import into nav apps. |\n| `alltrails_get_trail_weather(trailId)` | Weather overview for the trail. |\n\n### Per-user (requires a signed-in session)\n| Tool | Notes |\n|------|-------|\n| `alltrails_get_profile` | The signed-in user's profile (`/api/alltrails/me`). |\n| `alltrails_list_user_lists(userId?)` | Saved lists / favorites. Defaults to the signed-in user. |\n| `alltrails_get_list_items(listId, view?)` | The trails saved in a list, by list id (from `list_user_lists`, or a public `list` record from `search`). Items are **sparse references** — each is `{ trailId, type, order, notes, addedAt }`; hydrate details with `get_trail`. By default the items are projected to those five fields and sorted by the curator's `order`; `view: \"full\"` returns the whole records, in the order AllTrails sent them. |\n| `alltrails_list_completed_trails(userId?)` | Trails marked completed. Defaults to the signed-in user. |\n| `alltrails_get_activity_feed(userId?, feed?, maxItems?, cursor?, view?)` | Activity feed. Without `feed` it returns the feed **directory** (just `{ name, displayName }` per feed by default); pass `feed`: `local` (nearby activity) \\| `timeline` (people you follow) \\| `personal` (own posts) for the actual items. Paginate with `cursor` (from `nextCursor`). Items are projected to `{ type, timestamp, user, trail, activity stats, review }` by default; `view: \"full\"` returns AllTrails' whole records. |\n\n`userId` defaults to the signed-in user (resolved via `/api/alltrails/me`, or `ALLTRAILS_USER_ID`).\n\n### Diagnostics\n| Tool | Notes |\n|------|-------|\n| `alltrails_healthcheck` | Round-trips a probe through the fetchproxy bridge and reports role/port/timing plus a hint distinguishing \"bridge never came up\" from \"extension not connected\" from \"AllTrails-side problem\". Call it when a real tool fails. |\n\n## Workflows\n\n**Find a trail and read reviews:**\n1. `alltrails_search(query: \"angels landing\", types: [\"trail\"])` → pick a trail id\n2. `alltrails_get_trail(trailId)` → details\n3. `alltrails_get_trail_reviews(trailId)` → what hikers say\n\n**Review your own hiking history:**\n1. `alltrails_get_profile` → confirm you're signed in\n2. `alltrails_list_completed_trails()` / `alltrails_list_user_lists()`\n\n## Caution\n\n- All tools are **read-only** — this server never writes to AllTrails.\n- Compact summaries include both metric and imperial fields (`lengthMeters`/`lengthMiles`, `elevationGainMeters`/`elevationGainFeet`) — no unit conversion needed.\n- A `403` usually means the tab isn't signed in — sign into alltrails.com in an open tab and retry. An \"AllTrails bridge:\" error means the bridge itself failed — run `alltrails_healthcheck`. A key-capture stall means the tab is idle — re-run the tool and reload a www.alltrails.com tab **while it is running**, since the key is read off a request made during the call and refreshing beforehand is not seen.\n- Trail/user ids are numeric strings as they appear in AllTrails URLs.\n\nFile v3.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"alltrails\",\n  \"version\": \"3.1.0\",\n  \"publishedAt\": 1789872720371\n}\n\nFile v3.1.0:skill-card.md\n\n## Description:\n\nThis skill helps an agent answer AllTrails hiking and trail-data requests, including trail search, trail details, reviews, photos, weather, saved lists, completed trails, and account activity.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to connect an agent to read-only AllTrails trail discovery, trail-detail, review, photo, weather, and signed-in account activity workflows.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill uses an unofficial AllTrails integration through a signed-in browser session.\n\nMitigation: Use it only for explicit AllTrails tasks and only with an account/session the user is comfortable exposing to the agent.\n\nRisk: Broad hiking requests may cause access to account-linked AllTrails activity data.\n\nMitigation: Ask for confirmation before invoking account-specific tools such as profile, saved lists, completed trails, or activity feed.\n\nRisk: The integration may break or behave inconsistently because it depends on AllTrails internal behavior and bot-protection flow.\n\nMitigation: Run the healthcheck when tool calls fail and treat returned data as advisory until confirmed against AllTrails directly.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/chrischall/skills/alltrails)\n- [alltrails-mcp npm Package](https://www.npmjs.com/package/alltrails-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown with inline JSON configuration and tool-use guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May return compact or full trail, review, photo, weather, GPX, list, profile, and activity data depending on the invoked AllTrails tool and view setting.]\n\n## Skill Version(s):\n\n3.1.0 (source: ClawHub release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v3.0.0: 3 files, 4960 bytes\n\nFiles: skill-card.md (2484b), SKILL.md (7662b), _meta.json (128b)\n\nFile v3.0.0:SKILL.md\n\n---\nname: alltrails\ndescription: This skill should be used when the user asks about AllTrails hiking/trail data. Triggers on phrases like \"find trails near\", \"AllTrails\", \"trail details\", \"hike reviews\", \"trail conditions\", \"my saved trails\", \"trails I've completed\", or any request involving hiking trails, trail search, reviews, photos, or a user's AllTrails lists and activity.\n---\n\n# alltrails-mcp\n\n**Unofficial** MCP server for AllTrails — read-only access to trail search, details, reviews, photos, weather, and a signed-in user's saved lists / completed trails / activity feed.\n\n> ⚠️ AllTrails has **no public API**. This server reverse-engineers the internal one used by alltrails.com, which is fronted by DataDome bot protection and governed by AllTrails' Terms of Service. It may break at any time, and automated use may violate their ToS. Use at your own discretion for your own account.\n\n- **npm:** [npmjs.com/package/alltrails-mcp](https://www.npmjs.com/package/alltrails-mcp)\n- **Source:** [github.com/chrischall/alltrails-mcp](https://github.com/chrischall/alltrails-mcp)\n\n## Setup\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"alltrails\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"alltrails-mcp\"]\n    }\n  }\n}\n```\n\nEvery API request routes through the **fetchproxy** browser bridge — it runs as a same-origin fetch inside your signed-in alltrails.com tab (DataDome fingerprints Node-originated requests, so 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 `x-at-key` app key is never stored in code or config — it is captured live from the tab's own API traffic and held in memory only.\n\n## Tools\n\n### `view` — slim by default\n\nEvery tool marked `view?` below answers in one of two shapes, and the cheap one\nis what you get for free:\n\n- **`view: \"compact\"` (the default)** — a slim projection of just the fields\n  you act on. Each tool's row says exactly which.\n- **`view: \"full\"`** — AllTrails' whole untouched record.\n\nYou do not pass anything to get the compact answer. Reach for `view: \"full\"`\nonly when you need a field the projection drops — most often route geometry\nfrom `alltrails_get_trail`.\n\n**`view` is not `detail`.** `alltrails_get_trail` also takes a `detail`\n(`basic`/`medium`/`offline`) argument, and that one is forwarded to AllTrails —\nit decides what the API sends *us*. `view` decides what we hand back to you.\nFull route geometry needs **both**: `detail: \"offline\"` to fetch it and\n`view: \"full\"` to keep it.\n\n### Discovery (still routed through the signed-in fetchproxy bridge)\n| Tool | Notes |\n|------|-------|\n| `alltrails_search(query?, types?, lat?, lng?, limit?, view?)` | Search AllTrails by name. A free-text `query` uses the same suggestions endpoint as the alltrails.com search box (good relevance; may mix record types — pass `types: [\"trail\"]` for trails only). `lat`/`lng` are ignored by the API (results carry an implicit account/IP geo bias). Returns slim per-result summaries capped at `limit` by default; `view: \"full\"` returns AllTrails' whole records. This is the way to find trails in/near a place. |\n| `alltrails_resolve_location(query, kinds?, limit?)` | Resolve a place name to AllTrails location records — `country`/`state`/`city`/`area`/`poi` — each with `{ name, kind, id, slug, latitude, longitude, region, country, label }`. Good for disambiguating (which \"Oregon\"?) or getting a place's coordinates/slug. |\n\n### Trail detail\n| Tool | Notes |\n|------|-------|\n| `alltrails_get_trail(trailId, detail?, view?)` | Trail details. `detail`: `basic` \\| `medium` (default) \\| `offline` (includes route geometry) — this one goes to AllTrails. Returns a slim projection by default (name, overview, length in m+mi, elevation gain in m+ft, difficulty, rating, route type, location); `view: \"full\"` returns the whole record, route geometry included. |\n| `alltrails_get_trail_reviews(trailId, limit?, view?)` | User reviews (default limit 20). Returns just `{ user, rating, comment }` per review, under `{ count, reviews }`, by default; `view: \"full\"` returns AllTrails' whole review records. |\n| `alltrails_get_trail_photos(trailId, view?)` | Trail photos. Returns `{ id, title, likeCount, user, uploadedAt, url }` per photo, under `{ count, photos }`, by default — `url` serves the actual image and is derived by the projection, so it is **not** in the `view: \"full\"` record. |\n| `alltrails_get_trail_gpx(trailId)` | Export the trail's route as a GPX 1.1 document (track points with per-point elevation) — save to `.gpx` or import into nav apps. |\n| `alltrails_get_trail_weather(trailId)` | Weather overview for the trail. |\n\n### Per-user (requires a signed-in session)\n| Tool | Notes |\n|------|-------|\n| `alltrails_get_profile` | The signed-in user's profile (`/api/alltrails/me`). |\n| `alltrails_list_user_lists(userId?)` | Saved lists / favorites. Defaults to the signed-in user. |\n| `alltrails_get_list_items(listId, view?)` | The trails saved in a list, by list id (from `list_user_lists`, or a public `list` record from `search`). Items are **sparse references** — each is `{ trailId, type, order, notes, addedAt }`; hydrate details with `get_trail`. By default the items are projected to those five fields and sorted by the curator's `order`; `view: \"full\"` returns the whole records, in the order AllTrails sent them. |\n| `alltrails_list_completed_trails(userId?)` | Trails marked completed. Defaults to the signed-in user. |\n| `alltrails_get_activity_feed(userId?, feed?, maxItems?, cursor?, view?)` | Activity feed. Without `feed` it returns the feed **directory** (just `{ name, displayName }` per feed by default); pass `feed`: `local` (nearby activity) \\| `timeline` (people you follow) \\| `personal` (own posts) for the actual items. Paginate with `cursor` (from `nextCursor`). Items are projected to `{ type, timestamp, user, trail, activity stats, review }` by default; `view: \"full\"` returns AllTrails' whole records. |\n\n`userId` defaults to the signed-in user (resolved via `/api/alltrails/me`, or `ALLTRAILS_USER_ID`).\n\n### Diagnostics\n| Tool | Notes |\n|------|-------|\n| `alltrails_healthcheck` | Round-trips a probe through the fetchproxy bridge and reports role/port/timing plus a hint distinguishing \"bridge never came up\" from \"extension not connected\" from \"AllTrails-side problem\". Call it when a real tool fails. |\n\n## Workflows\n\n**Find a trail and read reviews:**\n1. `alltrails_search(query: \"angels landing\", types: [\"trail\"])` → pick a trail id\n2. `alltrails_get_trail(trailId)` → details\n3. `alltrails_get_trail_reviews(trailId)` → what hikers say\n\n**Review your own hiking history:**\n1. `alltrails_get_profile` → confirm you're signed in\n2. `alltrails_list_completed_trails()` / `alltrails_list_user_lists()`\n\n## Caution\n\n- All tools are **read-only** — this server never writes to AllTrails.\n- Compact summaries include both metric and imperial fields (`lengthMeters`/`lengthMiles`, `elevationGainMeters`/`elevationGainFeet`) — no unit conversion needed.\n- A `403` usually means the tab isn't signed in — sign into alltrails.com in an open tab and retry. An \"AllTrails bridge:\" error means the bridge itself failed — run `alltrails_healthcheck`. A key-capture stall means the tab is idle — re-run the tool and reload a www.alltrails.com tab **while it is running**, since the key is read off a request made during the call and refreshing beforehand is not seen.\n- Trail/user ids are numeric strings as they appear in AllTrails URLs.\n\nFile v3.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"alltrails\",\n  \"version\": \"3.0.0\",\n  \"publishedAt\": 1789688193486\n}\n\nFile v3.0.0:skill-card.md\n\n## Description:\n\nProvides read-only AllTrails hiking and trail data, including trail search, trail details, reviews, photos, weather, GPX route export, and signed-in account lists or activity.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to answer questions about hiking trails, trail conditions, reviews, photos, weather, GPX routes, and their own AllTrails saved or completed trail data through a signed-in browser session.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can read personal AllTrails profile, saved-list, completed-trail, and activity-feed data when those tools are invoked.\n\nMitigation: Use the skill only with accounts and sessions you intend to expose, and avoid personal-data tools unless the request requires them.\n\nRisk: The skill depends on an unofficial AllTrails integration through a signed-in browser session and may fail if the site, session, or bridge state changes.\n\nMitigation: Keep the browser bridge paired only when needed, confirm the AllTrails tab is signed in, and use the healthcheck tool when requests fail.\n\nRisk: AllTrails data access is read-only but may still be governed by AllTrails terms and site controls.\n\nMitigation: Use the skill at the user's discretion for their own account and review proposed uses before relying on automated access.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/chrischall/skills/alltrails)\n- [npm package: alltrails-mcp](https://www.npmjs.com/package/alltrails-mcp)\n- [Source repository: alltrails-mcp](https://github.com/chrischall/alltrails-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown with JSON configuration examples and tool-result summaries]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May include compact or full AllTrails records, GPX route content, reviews, photos, weather summaries, and diagnostics depending on the invoked tool.]\n\n## Skill Version(s):\n\n3.0.0 (source: release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.","readmeExcerpt":"Skill: alltrails Owner: chrischall Summary: This skill should be used when the user asks about AllTrails hiking/trail data. Triggers on phrases like \"find trails near\", \"AllTrails\", \"trail details\", \"hike reviews\", \"trail conditions\", \"my saved trails\", \"trails I've completed\", or any request involving hiking trails, trail search, reviews, photos, or a user's AllTrails lists and activity. Tags: latest:3.1.8 Version h","codeSnippets":[],"executableExamples":[{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"alltrails\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"alltrails-mcp\"]\n    }\n  }\n}"},{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"alltrails\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"alltrails-mcp\"]\n    }\n  }\n}"},{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"alltrails\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"alltrails-mcp\"]\n    }\n  }\n}"},{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"alltrails\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"alltrails-mcp\"]\n    }\n  }\n}"},{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"alltrails\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"alltrails-mcp\"]\n    }\n  }\n}"},{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"alltrails\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"alltrails-mcp\"]\n    }\n  }\n}"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: alltrails\ndescription: This skill should be used when the user asks about AllTrails hiking/trail data. Triggers on phrases like \"find trails near\", \"AllTrails\", \"trail details\", \"hike reviews\", \"trail conditions\", \"my saved trails\", \"trails I've completed\", or any request involving hiking trails, trail search, reviews, photos, or a user's AllTrails lists and activity.\n---\n\n# alltrails-mcp\n\n**Unofficial** MCP server for AllTrails — read-only access to trail search, details, reviews, photos, weather, and a signed-in user's saved lists / completed trails / activity feed.\n\n> ⚠️ AllTrails has **no public API**. This server reverse-engineers the internal one used by alltrails.com, which is fronted by DataDome bot protection and governed by AllTrails' Terms of Service. It may break at any time, and automated use may violate their ToS. Use at your own discretion for your own account.\n\n- **npm:** [npmjs.com/package/alltrails-mcp](https://www.npmjs.com/package/alltrails-mcp)\n- **Source:** [github.com/chrischall/alltrails-mcp](https://github.com/chrischall/alltrails-mcp)\n\n## Setup\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"alltrails\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"alltrails-mcp\"]\n    }\n  }\n}\n```\n\nEvery API request routes through the **fetchproxy** browser bridge — it runs as a same-origin fetch inside your signed-in alltrails.com tab (DataDome fingerprints Node-originated requests, so there is no stored-cookie mode). Requirements: the ContextMint Bridge extension installed (https://github.com/nullnet-app/contextmint-bridge/releases — the fetchproxy extension renamed, same maintainer; public source, `.sha256`-checkable release zips; use Chrome for now), a signed-in alltrails.com tab open, and a one-time pair-code approval on first use. The `x-at-key` app key is never stored in code or config — it is captured live from the tab's own API traffic and held in memory only.\n\n## Tools\n\n### `view` — slim by default\n\nEvery tool marked `view?` below answers in one of two shapes, and the cheap one\nis what you get for free:\n\n- **`view: \"compact\"` (the default)** — a slim projection of just the fields\n  you act on. Each tool's row says exactly which.\n- **`view: \"full\"`** — AllTrails' whole untouched record.\n\nYou do not pass anything to get the compact answer. Reach for `view: \"full\"`\nonly when you need a field the projection drops — most often route geometry\nfrom `alltrails_get_trail`.\n\n**`view` is not `detail`.** `alltrails_get_trail` also takes a `detail`\n(`basic`/`medium`/`offline`) argument, and that one is forwarded to AllTrails —\nit decides what the API sends *us*. `view` decides what we hand back to you.\nFull route geometry needs **both**: `detail: \"offline\"` to fetch it and\n`view: \"full\"` to keep it.\n\n### Discovery (still routed through the signed-in fetchproxy bridge)\n| Tool | Notes |\n|------|-------|\n| `alltrails_search(query?, types?, lat?, lng?, limit?, view?)` | Search AllTrails "},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"alltrails\",\n  \"version\": \"3.1.8\",\n  \"publishedAt\": 1791588191280\n}"},{"path":"skill-card.md","content":"## Description:\n\nHelps agents find trails, reviews, photos, and weather on AllTrails and access a signed-in user's saved trails and activity through an unofficial read-only integration.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nHikers and agents helping them can search trails, review trail details and conditions, and retrieve saved lists or completed hikes when the user has a signed-in AllTrails session.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The unofficial integration uses a signed-in browser tab and bridge to access personal hiking data.\n\nMitigation: Use project-scoped configuration, inspect the npm package and bridge before installing, and remove the server and extension when no longer needed.\n\nRisk: Generic hiking requests may activate access to AllTrails data unexpectedly.\n\nMitigation: Confirm the user's intent before retrieving account-backed lists or activity.\n\n## Reference(s):\n\n- [AllTrails skill listing](https://clawhub.ai/chrischall/skills/alltrails)\n- [alltrails-mcp npm package](https://www.npmjs.com/package/alltrails-mcp)\n- [ContextMint Bridge releases](https://github.com/nullnet-app/contextmint-bridge/releases)\n\n## Skill Output:\n\n**Output Type(s):** [Text, JSON, GPX files, Configuration guidance]\n\n**Output Format:** [Markdown guidance, structured trail data, or GPX 1.1 route export]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Read-only trail and account-backed data; compact responses by default, with full records available on request.]\n\n## Skill Version(s):\n\n3.1.8 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"This skill should be used when the user asks about AllTrails hiking/trail data. Triggers on phrases like \"find trails near\", \"AllTrails\", \"trail details\", \"hike reviews\", \"trail conditions\", \"my saved trails\", \"trails I've completed\", or any request involving hiking trails, trail search, reviews, photos, or a user's AllTrails lists and activity. Skill: alltrails Owner: chrischall Summary: This skill should be used when the user asks about AllTrails hiking/trail data. Triggers on phrases like \"find trails near\", \"AllTrails\", \"trail details\", \"hike reviews\", \"trail conditions\", \"my saved trails\", \"trails I've completed\", or any request involving hiking trails, trail search, reviews, photos, or a user's AllTrails lists and activity. Tags: latest:3.1.8 Version h","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1239,"uniquenessScore":45,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T09:19:51.377Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T09:19:51.377Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T11:51:26.194Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}