mcp-camptocamp
This server gives an LLM read-only access to Camptocamp.org so it can look up real mountain data (routes, summits/huts, and trip reports) instead of guessing it.
Search routes (
search_routes): find routes by keyword, with optional result limit.Get route details (
get_route): full info for one route by ID (description, ratings, elevation, gear).Search waypoints (
search_waypoints): find summits, huts, shelters, bivouacs and other waypoints by name.Get waypoint details (
get_waypoint): altitude, GPS coordinates and description for one waypoint by ID.List a user's outings (
search_user_outings): trip reports published by a Camptocamp user, by user ID.Get outing details (
get_outing): one trip report by ID (conditions, weather, participants, routes).
All tools are read-only and need no account or API key; results come from the public Camptocamp API. Note this schema exposes 6 tools, while the README documents 15 in v1.4.0 (areas, books, articles, outing search/stats, etc.).
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-camptocampsearch for climbing routes in Chamonix"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-camptocamp
An MCP server that lets an LLM look up mountain routes, summits, huts and trip reports on Camptocamp.org instead of guessing them.
What it does
Ask an LLM for the altitude of a summit or the rating of a ski tour and it may answer from memory, and get it wrong. This server gives it read-only access to Camptocamp.org, the collaborative mountaineering site: routes with their ratings and descriptions, summits and huts with their altitudes, trip reports with the conditions people found, areas, guidebooks and articles. Every tool output comes from the public Camptocamp API, with the camptocamp.org link to cite, and a value Camptocamp does not have is left out, never guessed. It needs no account and no API key.
An example conversation from October 2026, run against the published server (v1.3.0); the answer's table is cut to its first 5 rows:
Prompt: Give me the top 10 of most climbed routes on l'aiguille verte. With a very concise response
Called camptocamp 20 times
Top 10 routes on the Aiguille Verte, ranked by the number of camptocamp outings logged since the site began:
#
Route
Grade
Outings
1
Couloir Whymper
AD+
241
2
Couloir Couturier
D
92
3
Arête du Jardin
D-
33*
4
Arête des Grands Montets
D
24
5
Arête du Moine
AD+
22*
…
5 more rows
* Two counts are inflated. The Arête du Jardin figure includes traverses that stop at the Aiguille du Jardin without reaching the Verte. The Arête du Moine figure includes outings where it was only the descent route.
These are camptocamp reports, not actual ascents.
Related MCP server: bergauf
Quick start
The server runs on your machine, started by your MCP client over stdio. Run it with npx, which needs Node.js 22 or later, or with Docker.
npx. Clients configured with an mcpServers JSON object, such as Claude Desktop (claude_desktop_config.json), Gemini CLI (settings.json) or Cursor (.cursor/mcp.json), take this entry:
{
"mcpServers": {
"camptocamp": {
"command": "npx",
"args": ["-y", "@olaurendeau/mcp-camptocamp"]
}
}
}In Claude Code, one command adds it for every project:
claude mcp add --transport stdio --scope user camptocamp -- npx -y @olaurendeau/mcp-camptocampDocker. Use this entry instead; the image runs on amd64 and arm64:
{
"mcpServers": {
"camptocamp": {
"command": "docker",
"args": ["run", "--rm", "-i", "ghcr.io/olaurendeau/mcp-camptocamp:latest"]
}
}
}The first start downloads the package or the image, which can outlast a client's startup timeout. Getting started shows how to download it beforehand, a smoke test, and the Docker command for Claude Code; Troubleshooting helps when the server does not show up.
The server is listed in the official MCP registry as io.github.olaurendeau/mcp-camptocamp.
Supported clients
Client | Works? | Setup |
Claude Desktop | Yes | |
Claude Code | Yes | |
ChatGPT desktop app, Codex CLI and Codex IDE extension | Yes | |
Mistral Vibe Code CLI and VS Code extension | Yes | |
Gemini CLI, Gemini Code Assist | Yes: CLI in a trusted folder, Code Assist in agent mode | |
Your own agent: OpenAI Agents SDK, Mistral Python SDK, google-genai | Yes | |
Cursor and other clients that start a local command | Yes | |
Claude.ai custom connectors, Vibe Work | With an instance you host over HTTP (v1.4.0 or later) | |
ChatGPT on the web, Gemini API | No: remote servers only |
The support matrix lists the clients covered by the client pages and the agent SDK guide, with the date each page was last checked against the vendor's docs.
Tools
15 read-only tools: one search and one detail tool per kind of Camptocamp document, a shortcut for a user's outings, get_outings, to read several outings in one call, and outing_stats, to count outings by month, year or condition (these two from v1.4.0). Search results give IDs; the get_* tools take an ID. Every tool takes lang, the language of titles and texts (fr by default; v1.3.0 or later).
Tool | What it does |
Search routes by keyword, area, waypoint, activity, rating, elevation gain, route type or configuration; paged. | |
One route by ID: ratings, elevation, practical facts, description, areas, books, waypoints and recent outings. | |
Search summits, huts, passes, crags and other waypoints by name and/or area, optionally by type; paged. | |
One waypoint by ID: altitude, GPS coordinates, hut details, access, areas, routes, books and outings. | |
Search trip reports by keyword, area, activity, ratings, conditions, elevation, dates, routes, waypoint or user. | |
The outings a Camptocamp user is listed on, by user ID; an alias of | |
One outing by ID: reported ratings and conditions, weather, report text, participants and routes. | |
Up to 10 outings by ID in | |
Count | |
Search ranges, administrative subdivisions and countries by name; the ID is reusable as | |
One area by ID: type, summary and description. | |
Search guidebooks and other books by title, book type and activity; author and ISBN searches are unreliable. | |
One book by ID: author, editor, date, ISBN, languages, waypoints, articles; 50 routes/call (not in v1.4.0). | |
Search articles (gear, technique, environment, stories) by keyword; by category, type and activity from v1.4.0. | |
One article by ID: text, author, type, and the routes, waypoints, articles, outings and books linked to it. |
Each tool page gives its inputs, generated from the registered schema, its output format, a real example and its limits: see the tool reference.
Guides
Using the tools with an LLM: which tools to chain for a region, a summit altitude, a hut, recent conditions or guidebooks; what each output line means; and a real June ski-tour example.
System prompt: a prompt to paste into your agent, so the model quotes Camptocamp, cites it and says when a value is missing.
Self-hosting over HTTP: host an instance behind a secret token for clients that only take a URL, such as Claude.ai and Vibe Work (v1.4.0 or later).
Documentation index: every page, by topic.
Development
Everything runs in Docker, through the Makefile: no local Node.js is needed. make check runs the same steps as the CI checks job: format, lint, type check, tests with enforced coverage thresholds (95 % of lines, functions and statements, 90 % of branches), build and hook tests.
Every change lands through a reviewed pull request: see CONTRIBUTING.md (in French), and Development for the make targets, the live API contract tests, releases and the stack.
License
Available Tools
6 toolsget_outingA
Get full details of a specific outing (trip report) from Camptocamp.org by its ID, including description, conditions, weather, participants, and associated routes.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Outing ID from Camptocamp |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It indicates the tool returns detailed data but does not explicitly state it is a read-only, non-destructive operation. The absence of any hint about side effects or permissions leaves some ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the purpose and lists included details. Every word adds value; no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only one parameter and no output schema, the description is reasonably complete. It covers what the tool returns and how to identify the outing. It could mention the implicit read-only nature, but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description adds little beyond restating the parameter's purpose. The description mentions 'by its ID' but does not provide additional context like format or constraints beyond the schema's exclusiveMinimum.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves full details of a specific outing by ID, listing included fields like description, conditions, weather, participants, and routes. It distinguishes itself from sibling tools like get_route, get_waypoint, and search variants.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you have an outing ID and want complete details. While it doesn't explicitly state when not to use or name alternatives, the sibling tool names provide differentiation. No exclusions are needed given the focused purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_routeA
Get full details of a specific route from Camptocamp.org by its ID, including description, ratings, elevation data, and gear requirements.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Route ID from Camptocamp |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It does not state that the tool is read-only, mention authentication needs, or disclose any side effects. This is a significant gap for a data retrieval tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that specifies the tool's action and output. It could be slightly more structured but is efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of one parameter and no output schema, the description is reasonably complete by listing key data categories. However, it could benefit from mentioning the response format or any limitations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with one parameter 'id' that is well-described. The description adds no additional parameter context beyond the schema, so it meets the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves full details of a specific route by ID, listing specific data fields like descriptions, ratings, and gear requirements. It distinguishes from siblings which search or get other entity types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the description: use when you have a route ID and need full details. However, no explicit guidance on when not to use or alternatives like search_routes is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_waypointA
Get full details of a specific waypoint from Camptocamp.org by its ID, including altitude, GPS coordinates, and description.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Waypoint ID from Camptocamp |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It only states that the tool returns full details and lists a few fields, but does not disclose whether the operation is read-only, has rate limits, authentication requirements, or error handling behavior. The description minimally describes output but not side effects or constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently conveys the core purpose and output details without any waste. It is front-loaded with the action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has only one parameter and no output schema, the description adequately covers what the tool does and what it returns (altitude, GPS coordinates, description). However, the phrase 'full details' is vague and could be more precise about all possible fields (e.g., name, type). Still, it provides sufficient context for a simple retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no additional meaning beyond the schema's 'Waypoint ID from Camptocamp'; it merely says 'by its ID'. No extra context for parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb ('Get full details'), the resource ('specific waypoint from Camptocamp.org'), and the key data fields ('altitude, GPS coordinates, and description'). It distinguishes itself from sibling tools like get_outing and search_waypoints by focusing on a single waypoint by ID.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when retrieving details of a known waypoint by its ID, but it lacks explicit guidance on when to use this tool versus alternatives like search_waypoints (which might be used for searching by criteria). No when-not-to-use or prerequisite information is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_routesA
Search for mountain routes on Camptocamp.org. Returns a list of matching routes with basic info (ID, title, activities, elevation, rating).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results | |
| query | Yes | Search query for routes (e.g. 'Mont Blanc voie normale') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It discloses the output fields but lacks details on pagination, ordering, rate limits, or other behavioral traits beyond the basic search and list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first states purpose, second describes output. Front-loaded and no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with no output schema and no annotations, the description provides adequate basic info but lacks details on ordering, pagination, and error handling. It is minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description adds marginal value. It includes an example for the query parameter, but the schema already provides descriptions for both parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches for mountain routes on Camptocamp.org and lists the returned fields (ID, title, activities, elevation, rating). It distinguishes from siblings like get_route (single route) and search_waypoints (different resource).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for searching routes but does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_user_outingsA
List outings (trip reports) published by a Camptocamp user. Returns outings with ID, title, activities, date, elevation, and rating. Use the user_id from the Camptocamp profile URL (e.g. u=430052).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results | |
| user_id | Yes | Camptocamp user ID (e.g. 430052 for username o.laurendeau) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the returned fields but does not disclose behavioral traits like pagination, ordering, rate limits, or side effects. This is adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with purpose and output details, and contains no fluff. Every sentence is essential.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with no output schema, the description covers purpose, parameters, and return fields. However, it lacks details on pagination behavior (e.g., if limit implies cursor-based pagination) and error conditions. Some context is missing for full autonomous use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds value by explaining how to derive the user_id parameter from a profile URL. The limit parameter is not elaborated beyond the schema, but the overall semantics are well-supported.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists outings (trip reports) by a Camptocamp user, specifying the return fields. It distinguishes from sibling tools like get_outing (single outing) and search_routes (different resource).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how to obtain the user_id from the profile URL, providing clear context. However, it does not explicitly mention when not to use this tool or point to alternatives for other needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_waypointsA
Search for waypoints (summits, shelters, huts, bivouacs) on Camptocamp.org. Returns a list of matching waypoints with basic info (ID, title, type, elevation).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results | |
| query | Yes | Search query for waypoints (e.g. 'Mont Blanc', 'refuge Goûter') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It states returns basic info (ID, title, type, elevation) but does not disclose search behavior (e.g., case sensitivity, partial matching, ordering, pagination). Not misleading but could be more transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with purpose, no unnecessary words. Efficient and to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with 2 parameters and no output schema, the description covers what it returns and gives examples. However, it omits mentioning the limit parameter (though schema covers it) and any ordering or result behavior. Still fairly complete given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter descriptions already provided. The description adds example queries ('Mont Blanc', 'refuge Goûter') which is helpful but does not significantly enhance understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it searches for waypoints (summits, shelters, huts, bivouacs) on Camptocamp.org and returns matching results with basic info. It uses specific verb 'search' and resource 'waypoints', distinguishing from sibling tools like get_waypoint (retrieves single waypoint).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives (e.g., get_waypoint for exact ID search). The purpose is clear, but the description does not provide context for selection among sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v1.0.0- First observed
get_outing - First observed
get_route - First observed
get_waypoint - First observed
search_routes - First observed
search_user_outings - First observed
search_waypoints
TDQS
Scored across 6 tools
Each tool targets a distinct entity (outing, route, waypoint) and action (get by ID, search). There is no overlap, and descriptions clearly differentiate them.
All tools follow a consistent verb_noun pattern: 'get_' for retrieval and 'search_' for listing. Noun forms are plural for generic searches and 'user_outings' is a clear compound noun.
With 6 tools covering the three core entities (outing, route, waypoint) with retrieval and search, the count is well-scoped and appropriate for the server's purpose.
The server lacks a general search for outings, only allowing search by user. This is a notable gap for a trip report platform where browsing all outings is essential.
Maintenance
Related MCP Connectors
Gateway between LLM agents and world data through eight tools and a bundled endpoint catalog.
Provide detailed Pokémon data and information through a standardized MCP interface. Enable LLMs an…
Curated knowledge API for AI agents - skill packs, semantic search, validated patterns.
Turn any task into the right API calls: discover, evaluate, and integrate public APIs.
Related MCP Servers
- AlicenseAqualityAmaintenanceProvides spatial context and geographic data access for LLMs through France's Géoplateforme services, including geocoding, altitude queries, administrative boundaries, cadastral data, and vector data exploration.1018 npm28MIT
- FlicenseNot gradedqualityDmaintenanceLets an LLM plan hikes anywhere in Switzerland by combining named routes, elevation profiles, weather forecasts, and public transport.7-
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to explore Swiss hiking routes with real-time closures, weather, public transport, and POIs, including GPX generation.1MIT
- AlicenseAqualityBmaintenanceEnables AI assistants to retrieve Italian Alpine and Apennine hiking data, including numbered trails, refuges, avalanche bulletins, and mountain weather forecasts, through MCP tools, resources, and prompts.91MIT