Skip to content

Lander Configuration

This page is the reference for how the Lander agent is configured and what it stores on disk. The one bootstrap setting is the control-plane URL, usually injected by MDM; device ownership is not configured here — it comes from whoever authenticates when Lander prompts them (see Credentials). Everything else — which MCPs are installed and proxied, their tool policy, and their logging/redaction settings — is managed from the AlienGiraffe Connector and persisted here by Lander; you don’t hand-edit this file. For the handful of commands you do run, see the Lander CLI.

Environment variables take precedence over values persisted in ~/.lander.json, which take precedence over defaults. In a fleet, MDM injects these (see the Intune, Jamf, and Kandji guides).

VariablePurposeDefault
LANDER_ENV_MANAGER_URLControl-plane base URL for registration, inventory, and eventshttp://localhost:8080 (dev placeholder)
LANDER_OWNER_EMAILDeprecated — no longer determines ownership; see below(empty)
LANDER_PORTHTTP daemon port (HTTP-stream mirroring)8082

LANDER_ENV_MANAGER_URL and LANDER_OWNER_EMAIL are persisted into ~/.lander.json on first run; LANDER_PORT is a flag/env value only.

The unified config and state file. Written atomically and validated on load.

{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_TOKEN": "..." },
"type": "stdio",
"installedIn": ["claude-desktop", "claude-code"],
"availableTools": [
{ "name": "list_issues", "description": "...", "enabled": true },
{ "name": "delete_repo", "description": "...", "enabled": false }
],
"proxied": true,
"originalConfig": { "command": "npx", "args": ["..."] },
"logging": {
"enabled": true,
"level": "info",
"access": true,
"query": true,
"maxBytes": 10485760,
"maxFiles": 5
}
}
},
"proxiedMCPs": ["github"],
"logging": { "enabled": true, "level": "info", "access": true, "query": true, "maxBytes": 10485760, "maxFiles": 5 },
"envManagerUrl": "https://control-plane.example.com/v1",
"ownerEmail": "dev@example.com"
}
FieldDescription
mcpServersMap of MCP name → its configuration and state (see below)
proxiedMCPsNames of MCPs currently mirrored
loggingGlobal default logging config (per-MCP overrides win)
envManagerUrlPersisted control-plane URL
ownerEmailPersisted owner email — deprecated, retained for the signed payload; ownership comes from the authenticated user
FieldDescription
command / args / envHow the real MCP server is launched (kept locally; never reported to the control plane)
typeTransport: stdio or http
installedInWhich agents have this MCP configured
availableToolsTools, each with an enabled flag for tool-level control
proxiedWhether mirroring is currently on
originalConfigBackup of the pre-install configuration, used to restore the agent losslessly when the Connector revokes the MCP
loggingPer-MCP logging override
KeyDefaultEffect
enabledtrueMaster switch for this scope
levelinfodebug / info / warn / error
accesstrueWrite metadata logs (access.log)
querytrueWrite full-payload logs (query.log); set false to redact
maxBytes10485760Rotation size per file (10 MiB)
maxFiles5Rotated files retained per MCP
PathModePurpose
~/.lander.json0644Unified config and state (above)
~/.lander/certs/device.key0600ECDSA P-256 private key
~/.lander/certs/device.crt0644Self-signed device certificate
~/.lander/credentials.json0600Signed-in user’s Connector tokens (see Credentials)
~/.lander/device.json0600Registration state: serial, brand, model, deviceId, fingerprint, owner, last register/inventory timestamps
~/.lander/logs/service.{out,err}Daemon stdout/stderr
~/.lander/logs/<mcp-name>/access.logPer-MCP metadata audit (rotated)
~/.lander/logs/<mcp-name>/query.logPer-MCP full-payload audit (rotated)
~/Library/LaunchAgents/com.aliengiraffe.lander.plistlaunchd service definition

~/.lander/credentials.json holds the tokens for the user who authenticated — which Lander prompts for on its own (see Authentication). It is what lets the control plane attribute the device — and the events it reports — to a real person.

  • Written at mode 0600, and refused if its permissions have loosened rather than silently trusted. If you see Lander reject the file, fix the mode or sign in again; it will not fall back to running unauthenticated.
  • Keyed by control-plane URL, so pointing Lander at a different Connector does not reuse the wrong credential.
  • Refreshed automatically five minutes ahead of expiry. A revoked or rejected refresh token clears the file, and Lander prompts the user to authenticate again.
  • Kept separate from ~/.lander/device.json (device identity, not secrets) and from ~/.lander.json (managed config).

Deleting the file signs the host out locally but leaves the token valid until it expires; lander auth logout revokes it control-plane-side.

Lander discovers MCPs by reading each agent’s own configuration. See Supported Agents for the full list and paths.