Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.footstep.ai/llms.txt

Use this file to discover all available pages before exploring further.

If you use an AI assistant like Claude, ChatGPT, Cursor, or Windsurf, you can connect it to Footstep to get directions, find places, compare routes, and more - all by asking in plain English.

What you can do

Plan a journey

  • “How do I walk from Kings Cross to Tower Bridge?”
  • “Directions to Buckingham Palace from my hotel”
  • “What’s the fastest way to drive from Heathrow to Cambridge?”

Compare travel options

  • “Should I walk or cycle from the office to the station?”
  • “Compare driving vs cycling - which is hillier?”
  • “What’s the flattest route between these two places?”

Find places

  • “Find coffee shops near Kings Cross”
  • “Are there any supermarkets within walking distance?”
  • “What restaurants are near 51.53, -0.12?”

Find stops on the way

  • “Are there any petrol stations on my route to Cambridge?”
  • “Find a coffee shop on the way that won’t add more than 5 minutes”

Check reachability

  • “How far can I cycle in 20 minutes from Liverpool Street?”
  • “Show me everywhere I can walk to in 15 minutes from here”

Work with addresses

  • “Where is 10 Downing Street?”
  • “What address is at 51.5034, -0.1276?”
  • “Geocode these 5 addresses and tell me which ones are in London”

Analyse terrain and elevation

  • “What’s the elevation profile between these two coordinates?”
  • “How much climbing is there on this walking route?”
  • “Is this route flat or hilly?”

Analyse a recorded activity

  • “Clean up this GPS trace from my bike ride”
  • “What roads did I travel on during this run?”
  • “Show me the terrain and surface quality of my recorded walk”

Optimise multiple stops

  • “Find the best order to visit these 8 delivery addresses”
  • “I need to visit 5 clients today - what’s the most efficient route?”

How to set it up

You need two things: a Footstep API key and an AI assistant that supports MCP.

1. Get an API key

Sign up at footstep.ai and create an API key from your dashboard. It starts with sk_live_.

2. Connect your assistant

The setup depends on which assistant you use. In most cases you paste a small config block into a settings file. Nothing to install. Claude Desktop - Go to Settings > Developer > Edit Config, then paste:
{
  "mcpServers": {
    "footstep": {
      "url": "https://mcp.footstep.ai",
      "headers": {
        "x-api-key": "sk_live_your_key_here"
      }
    }
  }
}
Cursor / Windsurf / VS Code - Add a .mcp.json file to your project folder:
{
  "mcpServers": {
    "footstep": {
      "url": "https://mcp.footstep.ai",
      "headers": {
        "x-api-key": "sk_live_your_key_here"
      }
    }
  }
}
Replace sk_live_your_key_here with your actual API key. For other clients (OpenAI, Gemini, Vercel AI SDK), see the full configuration guide.

3. Start asking

Once connected, just ask your assistant anything from the examples above. It will automatically use the right Footstep tool and explain the results.

Tips

  • Be specific about how you want to travel. “Walking directions” and “cycling directions” give different results - cycling accounts for bike lanes and road surfaces, walking accounts for footpaths and stairs.
  • Mention terrain if you care about it. Ask “what’s the flattest route?” or “how hilly is this?” and the assistant will include elevation and difficulty information.
  • Give coordinates if you have them. You can mix place names and coordinates: “Directions from 51.53, -0.12 to Tower Bridge”.
  • Ask follow-up questions. After getting directions, you can ask “is there a flatter alternative?” or “how about by bike instead?”.

Map-rendering clients

If you’re building a chat app that renders Footstep results on a map (deck.gl, MapLibre, Leaflet, Mapbox, Cesium…), the response is already shaped for you. Every renderer-aware tool returns a render array of framework-agnostic GeoJSON layer descriptors — drop them straight into your map library, no decoder required:
const result = await tools.get_directions.execute({
  locations: [{ lat: 51.5, lon: -0.1 }, { lat: 55.95, lon: -3.19 }],
});

for (const layer of result.render ?? []) {
  // layer.kind: "linestring" | "point" | "polygon" | "h3-cells" | …
  // layer.data: GeoJSON Feature / FeatureCollection (or kind-specific shape)
  // layer.bbox: [minLng, minLat, maxLng, maxLat]
  myMap.addLayer(layer);
}
See render envelopes for the full kind taxonomy and per-library examples.

Token-conscious LLM agents

Standalone chat agents that don’t render maps (Claude Desktop, terminal CLIs, text-only chatbots) can pass compact: true on every tool call to suppress geometry, render envelopes, elevation samples, and full hex grids — leaving only summary fields:
import { experimental_createMCPClient } from "ai";

const mcpClient = await experimental_createMCPClient({
  transport: {
    type: "sse",
    url: "https://mcp.footstep.ai",
    headers: { "x-api-key": process.env.FOOTSTEP_API_KEY! },
  },
});

const rawTools = await mcpClient.tools();

// Set `compact: true` on every tool call to receive summary-only responses.
const tools = Object.fromEntries(
  Object.entries(rawTools).map(([name, tool]) => [
    name,
    {
      ...tool,
      execute: (args: Record<string, unknown>, opts: unknown) =>
        tool.execute({ ...args, compact: true }, opts),
    },
  ]),
);
See response defaults & controls for the full flag matrix.