BeMap MCP server
Gives your AI coding assistant (Claude, Codex, Gemini CLI, Cursor, Copilot and others) the BeNomad BeMap API: every operation and field, and what most values mean. The assistant looks things up instead of guessing, and checks each request before it is sent.
Package @benomad/bemap-mcp · v0.0.1-dev.134
What your assistant gets#
Documentation, and the small program that serves it:
- the BeMap API reference (operations, fields, types, allowed values) generated from BeMap's own OpenAPI specification, with what BeMap's code declares about it: what most values mean, and the role a service needs where its endpoint declares one;
- BeNomad Tiles' API reference, from its own specification;
- BeMap's guides and SDK pages, with its tutorials in corrected copies checked against production;
- the service limits of BeMap's production (points per request, radii…);
- a skill: plain-text advice on choosing a service and avoiding BeMap's traps, with example requests and responses, for every assistant but Claude Desktop, which loads no skill from an extension.
No BeMap source code, no account or customer data, no map data, no calculation engine: the only results in it are documentation examples. It works offline and without an account; only sending a real request needs one.
Tools#
| Tool | Purpose | Needs credentials |
|---|---|---|
bemap_list_services | Catalogue: every service and its operations | no |
bemap_status | Which release the snapshot describes, and whether an environment runs it | no (live check: yes) |
bemap_limits | Request limits, map data release, geocoding back-ends | no (live check: yes) |
bemap_search | Ranked search over operations, schemas, fields, enum values and guides | no |
bemap_get_operation | One endpoint in full: method, URL, request body, response | no |
bemap_get_schema | One type: its fields, and what every enum value means | no |
bemap_read_guide | BeMap's guides and SDK pages; its tutorials in BeNomad's corrected copies | no |
bemap_map_setup | For any platform: asks which BeMap, which map and with or without an account; then the hosts, the sign-in and every guide using that map | no (live defaults: yes) |
bemap_try_request | Check a body against the specification, then send it | yes (validateOnly: no) |
Install#
Download from https://github.com/BeNomadSAS/bemap-mcp/releases, the newest
release, under Assets: benomad-bemap-<version>.mcpb for Claude Desktop,
benomad-bemap-mcp-<version>.tgz for every other assistant. Or clone the
repository instead of taking the .tgz (step 1).
A BeMap account is needed only to send live requests; reading the documentation works without one.
Claude Desktop: the extension#
Download benomad-bemap-<version>.mcpb from the release's Assets and
double-click it, or open Settings → Extensions → Advanced settings → Install
Extension… and pick it. Claude Desktop runs it with its own Node.js. Fill in your BeMap account in
the extension's settings, or leave them empty to read the documentation only.
The key is kept in your system keychain.
Desktop loads no skill from an extension: the tools work, the skill's advice
(step 3 below) is not there. To upgrade, install the new .mcpb.
Every other assistant#
You need Node.js 18 or later.
1. Install the package#
Download benomad-bemap-mcp-<version>.tgz from the release's Assets, then:
mkdir -p ~/bemap-mcp && cd ~/bemap-mcp
npm init -y >/dev/null
npm install /path/to/benomad-bemap-mcp-<version>.tgzIn Windows PowerShell:
New-Item -ItemType Directory -Force -Path "$HOME\bemap-mcp" | Out-Null
Set-Location "$HOME\bemap-mcp"
npm init -y | Out-Null
npm install C:\path\to\benomad-bemap-mcp-<version>.tgzOr from the repository: the easiest to keep up to date. The same in a terminal and in PowerShell:
cd ~
git clone https://github.com/BeNomadSAS/bemap-mcp.git
cd bemap-mcp
npm installTake one way, not both. From a clone, the server in step 2 is
src/index.js in that folder, instead of
node_modules/@benomad/bemap-mcp/src/index.js.
2. Register it#
Claude Code, in a terminal or in VS Code, it is the same registration. The
claude command needs the Claude Code CLI: the VS Code extension alone does not
add it. From that folder:
claude mcp add -s user bemap \
--env BEMAP_USER=your-account \
--env BEMAP_KEY=your-api-key \
--env BEMAP_ENV=prod \
-- node "$(pwd)/node_modules/@benomad/bemap-mcp/src/index.js"In PowerShell, on one line: keep the quotes around '--': without them,
PowerShell drops it when claude was installed with npm, and the command fails.
claude mcp add -s user bemap --env BEMAP_USER=your-account --env BEMAP_KEY=your-api-key --env BEMAP_ENV=prod '--' node "$PWD\node_modules\@benomad\bemap-mcp\src\index.js"- Leave out the three
--envto read the documentation only. prodis the environment you build on;betalets you try what is coming.-s usermakes the server available in every project.- Already registered? Run
claude mcp remove bemap -s userfirst. In VS Code, then click Reconnect next tobemapin the MCP servers panel.
Type your account and key in your own terminal, never in a conversation with the assistant.
Other assistants use the same server, each in its own configuration file.
Give the absolute path to node_modules/@benomad/bemap-mcp/src/index.js (with
forward slashes on Windows) and drop env to read the documentation only.
Cursor: ~/.cursor/mcp.json
{
"mcpServers": {
"bemap": {
"command": "node",
"args": ["/absolute/path/to/node_modules/@benomad/bemap-mcp/src/index.js"],
"env": { "BEMAP_USER": "your-account", "BEMAP_KEY": "your-api-key", "BEMAP_ENV": "prod" }
}
}
}VS Code with GitHub Copilot: your user mcp.json, key servers
{
"servers": {
"bemap": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/node_modules/@benomad/bemap-mcp/src/index.js"],
"env": { "BEMAP_USER": "your-account", "BEMAP_KEY": "your-api-key", "BEMAP_ENV": "prod" }
}
}
}Open it from the command palette: MCP: Open User Configuration. The key is
servers, not mcpServers. Not the workspace's .vscode/mcp.json: teams
commit that file, and your key would go with it.
Devin Desktop (formerly Windsurf): ~/.config/devin/mcp_config.json
On Windows the file is %APPDATA%\devin\mcp_config.json.
{
"mcpServers": {
"bemap": {
"command": "node",
"args": ["/absolute/path/to/node_modules/@benomad/bemap-mcp/src/index.js"],
"env": { "BEMAP_USER": "your-account", "BEMAP_KEY": "your-api-key", "BEMAP_ENV": "prod" }
}
}
}OpenAI Codex CLI: ~/.codex/config.toml
[mcp_servers.bemap]
command = "node"
args = ["/absolute/path/to/node_modules/@benomad/bemap-mcp/src/index.js"]
env = { BEMAP_USER = "your-account", BEMAP_KEY = "your-api-key", BEMAP_ENV = "prod" }
tool_timeout_sec = 180Codex stops a tool after 60 s otherwise, and a long EV route can take longer.
Gemini CLI: ~/.gemini/settings.json
{
"mcpServers": {
"bemap": {
"command": "node",
"args": ["/absolute/path/to/node_modules/@benomad/bemap-mcp/src/index.js"],
"env": { "BEMAP_USER": "your-account", "BEMAP_KEY": "your-api-key", "BEMAP_ENV": "prod" }
}
}
}Add mcpServers beside the file's other settings; gemini mcp list shows the
server.
Zed: your user settings.json, key context_servers
{
"context_servers": {
"bemap": {
"command": "node",
"args": ["/absolute/path/to/node_modules/@benomad/bemap-mcp/src/index.js"],
"env": { "BEMAP_USER": "your-account", "BEMAP_KEY": "your-api-key", "BEMAP_ENV": "prod" }
}
}
}The file is ~/.config/zed/settings.json, or %APPDATA%\Zed\settings.json on
Windows.
3. Install the skill#
From the folder you installed the package in (~/bemap-mcp):
npx --no-install bemap-install-skillFrom a clone, in the clone: node scripts/install-skill.js.
It writes the skill where the assistants read it: ~/.claude/skills/ and
~/.agents/skills/. Run it again after every upgrade; with --check it says
whether your copy is current. Then restart your assistant. Run from another
folder, npx would look for the name on the public npm registry.
Check it works#
Ask your assistant:
Using the bemap tools, what are the required parameters for a routing request?
The answer names destinations.
If something is wrong#
- The assistant does not see the tools: check
claude mcp list(or/mcpin Claude Code's VS Code panel), then restart the assistant. - "BeMap rejected the credentials": check the account and the key, and that the account exists on the environment you chose.
400 Access Denied: the account lacks that service's entitlement. Ask BeNomad to provision it.403 "Wrong site": the key's use is locked to a web site, and the assistant is not one: use a key without that restriction.- A field does not exist on your environment:
bemap_statussays which BeMap release the package describes, and whether yours runs it. - "timed out after 120000 ms": a long EV route can take longer: add
BEMAP_TIMEOUT_SECONDS=300to the server'senv, and in Codex raisetool_timeout_secwith it. Claude Desktop may stop waiting after about a minute, whatever the extension's timeout setting. - A live call fails with a certificate error (
UNABLE_TO_VERIFY_LEAF_SIGNATURE,SELF_SIGNED_CERT_IN_CHAIN): your network uses its own certificate authority: addNODE_EXTRA_CA_CERTS=/path/to/company-ca.pemto the server'senv(in Claude Desktop, "Company certificate file"). - Every live call fails behind a proxy: live calls go straight to BeMap and
do not use
HTTPS_PROXY. Check requests withvalidateOnly, or use a network that reaches BeMap directly. - "is plain HTTP … nothing is sent": your own installation's address starts
with
http://: use itshttps://address, or, on a network you trust, addBEMAP_ALLOW_INSECURE_HTTP=1(in Claude Desktop, "Allow plain HTTP").
Upgrading#
- Claude Desktop: install the new
.mcpb. - The package: install the new
.tgzthe same way, then, from that folder,npx --no-install bemap-install-skillagain. - A clone:
git pull,npm install, thennode scripts/install-skill.js.
Then restart your assistant.
Support#
bgis-support@benomad.com