MCP Server
The Model Context Protocol (MCP) server provides a standardized interface that allows any compatible AI model or agent to access your Follow data securely.
Connect to our MCP server natively in Claude, Cursor, and other clients, or use the mcp-remote module for backwards compatibility with clients that do not support remote MCP.
Follow's MCP server follows the authenticated remote MCP spec, so the server is centrally hosted and managed. The server has tools available for managing locations, monitoring stations, controlling locks, listing access codes, and tracking usage, with more functionality on the way. Feedback on its functionality is welcomed.
Setup instructions
General
Our MCP server supports Streamable HTTP transports. This transport uses OAuth 2.1 with PKCE for authentication at the following address:
https://mcp.follow.tech/mcp
For instructions for specific clients, read on...
Claude Desktop
From Claude settings > Connectors, add a new connector with the URL https://mcp.follow.tech/mcp.
Alternatively, add the following to your configuration file (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):
{
"mcpServers": {
"follow": {
"url": "https://mcp.follow.tech/mcp"
}
}
}
Claude Code
claude mcp add --transport http follow https://mcp.follow.tech/mcp
Then run /mcp once you've opened a Claude Code session to go through the authentication flow.
Cursor
To add the MCP to Cursor, open Settings > MCP Servers and add a new server with the following configuration:
{
"mcpServers": {
"follow": {
"url": "https://mcp.follow.tech/mcp"
}
}
}
Visual Studio Code
CTRL/CMD + P and search for MCP: Add Server, then select Command (stdio) and enter:
npx mcp-remote https://mcp.follow.tech/mcp
Enter the name Follow and hit enter. Activate the server using MCP: List Servers, selecting Follow, then Start Server.
Alternatively, add the following to your .vscode/settings.json:
{
"mcp": {
"servers": {
"follow": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.follow.tech/mcp"]
}
}
}
}
Windsurf
CTRL/CMD + ,to open Windsurf settings.- Scroll to Cascade > MCP servers.
- Select Add Server > Add custom server.
- Add the following:
{
"mcpServers": {
"follow": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.follow.tech/mcp"]
}
}
}
Others
Many other tools now support MCP servers. You can configure them to use Follow's MCP server with the following settings:
- Command:
npx - Arguments:
-y mcp-remote https://mcp.follow.tech/mcp - Environment: None
Available tools
The assistant discovers tools automatically when connected. They are scoped to your account — an OWNER only ever sees their own locations, stations, rentals and customers.
Assets & devices
list_locations,get_location,list_rental_durationslist_stations,list_equipmentlist_station_codes,list_lock_codes,list_station_events
Live device operations — billed (count against your API quota)
get_station_status,get_locks_status,get_lock_statusunlock_lock— requires the elevatedmcp:unlockscope (see below)
Rentals & business data
list_rentals(current / history),get_rentalget_payment_attempts— every Stripe charge attempt on a rental's invoice (timestamps, outcome, decline reason), to diagnose failed or retried paymentsget_revenue_summary(by month, location or station),get_rental_statslist_customers,get_customerget_available_equipments— find equipment that could replace a rental's current one (same station, active lock, not already busy elsewhere)update_rental— reschedule a rental's start, or swap its equipment for anotherget_extend_options— how far a rental can be extended right now (hours bounded by Stripe pre-authorization headroom and equipment availability)extend_rental— extend a Stripe-paid rental by a chosen number of hours (priced at the plain hourly rate), charging it out of the rental's existing pre-authorization instead of making a new charge
get_rental also returns the rental's status history (events): every status transition with its timestamp, cause (payment confirmed, automatic timeout, closed by an admin, ended by the customer…) and the acting admin when applicable — so "why is this rental closed?" is one call.
Filtering, ranking & compact output
These tools are built to answer a question in a single small response rather than dumping raw data:
list_rentalsfilters server-side bylocation_id,station_id, date range (from/to, on the rental start date),invoice_status(e.g.PAID,FAILED,CANCELED), andrental_status— pluspage/page_size. Prefer filters over paging through everything.list_customersacceptsfrom/to,location_id, andinvoice_status. Each row carriesrentalCountandpaidRentalCount; settinginvoice_status(e.g.PAID) keeps only customers with such a rental and ranks them by that count — so "customers with the most charged rentals last year" is one call.- Compact by default: list tools return a lean summary per row. Pass
verbose: truefor the full objects, useget_rentalfor one rental in full, orformat: csvfor a compact tabular export. - For counts, totals or rankings, prefer
get_rental_stats/get_revenue_summary/list_customersover listing rentals. - Very large results are truncated with a
_metanote (how many were returned, the total, and how to narrow) instead of failing — so a query never overflows silently. - Rental
start/endare returned in Europe/Paris local time (ISO 8601 with the UTC offset, e.g.2026-08-03T13:00:00+02:00) — every location is in France, so there's no per-location timezone to resolve.
Station health & telemetry — free
list_station_health— which stations are online/offline or low on battery right nowget_station_telemetry_history— voltage & signal trends over timeget_station_connectivity— when a station disconnected (downtime windows)
Usage
get_usage,get_lock_usage
Only the live device operations above are metered. Account-data operations (rentals — including rescheduling, swapping equipment or extending a rental's duration — revenue, customers, telemetry history) are free.
Customer name, email and phone are redacted by default. Tools that can surface them (list_rentals, get_rental, list_customers, get_customer) only return PII when called with include_pii: true, and only ever for your own account's customers.
unlock_lock opens a physical lock, so it needs the mcp:unlock scope in addition to the default mcp:tools (read) scope. When you authorize the server you'll see the requested permissions on the consent screen. If your client only requested read access, unlock_lock returns a clear "re-authorize with the mcp:unlock permission" message — reconnect and approve unlock access to use it. All other tools work with the default scope.
FAQ
What can the AI assistant do?
The MCP server gives the AI assistant tools to manage your locations; monitor station status, voltage, signal and connectivity history; check lock states and unlock locks; list access codes and events; list rentals and customers with their full status history and payment attempts; reschedule a rental, swap its equipment, or extend its duration; report revenue and rental statistics; and track API usage. The assistant will discover the available tools automatically when connected.
Do I need a separate account?
No. You log in with your existing Follow credentials during the OAuth flow. Your account must have an ADMIN or OWNER role to access the MCP server.
Can the AI assistant unlock doors?
Yes, the unlock tool is available. The assistant will typically confirm before executing an unlock. It requires the elevated mcp:unlock scope (approved on the consent screen when you authorize) and is a billed operation that counts against your API quota.
Why am I seeing an authentication error?
Try clearing cached auth info by running the following in your terminal:
rm -rf ~/.mcp-auth
Then reconnect. If the issue persists, make sure you are using a supported Node.js version (20+).
What happens if my session expires?
The MCP server automatically refreshes tokens when possible. If the session has fully expired, your AI client will prompt you to re-authenticate through the browser.
What's next?
- Browse the full API Reference for all available endpoints
- Review Error Handling for troubleshooting common issues
- Contact [email protected] for questions or feedback