meshcore-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MESHCORE_HOST | No | Home node TCP host — the companion_radio_wifi path. Set this or MESHCORE_SERIAL_PATH, not both. | |
| MESHCORE_PORT | No | TCP port for MESHCORE_HOST (default '5000'). | 5000 |
| MESHCORE_SERIAL_PATH | No | USB serial device path (e.g. /dev/ttyACM0) — the serial alternative to MESHCORE_HOST. | |
| MESHCORE_LOGIN_PASSWORD | No | Default login/admin password for remote nodes (default '' — the guest password). | |
| MESHCORE_NODE_PASSWORDS | No | JSON object of per-node overrides: { "rocky-ridge": "secret" } (keyed by node id or name). | |
| MESHCORE_TRAFFIC_CAPACITY | No | Recent-traffic ring-buffer size (default the buffer's own default). | |
| MESHCORE_REQUEST_TIMEOUT_MS | No | Device request timeout, ms (default '10000'). | 10000 |
| MESHCORE_LOGIN_PASSWORD_FILE | No | Read the default password from a file instead (its trailing newline is stripped). Set this or MESHCORE_LOGIN_PASSWORD, not both. | |
| MESHCORE_NODE_PASSWORDS_FILE | No | Read that same JSON map from a file instead — keeps node secrets out of the environment and your MCP config (chmod 600 it). Set this or MESHCORE_NODE_PASSWORDS, not both. | |
| MESHCORE_ADMIN_REPLY_TIMEOUT_MS | No | How long the remote-admin path waits for a CLI reply, ms (default '15000'). | 15000 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"subscribe": true,
"listChanged": true
} |
| completions | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_node_healthA | Consolidated health snapshot for a node: identity, radio, battery, uptime/queue, and packet/radio stats. Omit |
| survey_meshA | List the home node and every known contact, with each contact's advertised role and last-heard time — a roster for spotting quiet or missing nodes. |
| get_recent_trafficA | Recent live mesh traffic from the rolling buffer, oldest→newest, each tagged with structural provenance (kind + decrypt-verified). Optional |
| send_messageA | Transmit a text message. |
| set_channelA | Configure a channel slot on the connected node. Omit |
| delete_channelA | Remove a channel slot on the connected node, addressed by |
| trace_pathA | Trace a route through the mesh and report each repeater hop's SNR. Give an explicit |
| adminA | Run one enumerated admin command against a node. Benign: • advert [home+remote] — mode: flood (mesh-wide) or zerohop (neighbours only) • sync-time [home+remote] — no params • log-start [remote] — no params • log-stop [remote] — no params • set-time [remote] — epochSecs: absolute time as epoch seconds (firmware rejects backwards clocks) • discover-neighbors [remote] — no params Config: • set-tx-power [home+remote] — dbm: transmit power in dBm, 1–22 • set-radio [home+remote] — freqMhz: centre frequency in MHz (e.g. 910.525); kHz/Hz also accepted, bwKhz: bandwidth in kHz (sub-GHz: 62.5, 125, 250, 500; 2.4GHz/SX128x goes higher, up to 1000); Hz (62500) also accepted, sf: spreading factor, 5–12, cr: coding rate 5–8 (the 'n' in 4/n); '4/5' also accepted • set-name [home+remote] — name: advertised name, ≤32 bytes • set-location [home+remote] — lat: latitude in degrees, lon: longitude in degrees • set-repeat [remote] — enabled: true to enable packet repeating • set-dutycycle [remote] — percent: duty-cycle limit, 1–100 (percent) • set-path-hash-mode [remote] — mode: path-hash mode 0|1|2 (1-byte/2-byte/3-byte advertised prefixes; 64/32/21 flood cap respectively) • set-loop-detect [remote] — level: loop-detection aggressiveness • set-flood-max [remote] — hops: max flood hop count, 0–64 • set-radio-rxgain [remote] — enabled: true to enable boosted RX gain • tempradio [remote] — freqMhz: centre frequency in MHz (e.g. 910.525); kHz/Hz also accepted, bwKhz: bandwidth in kHz (sub-GHz: 62.5, 125, 250, 500; 2.4GHz/SX128x goes higher, up to 1000); Hz (62500) also accepted, sf: spreading factor, 5–12, cr: coding rate 5–8 (the 'n' in 4/n); '4/5' also accepted, timeoutMins: auto-revert timeout in minutes (≥1) • set-tx-delay [remote] — factor: TX delay factor 0–2 • set-direct-tx-delay [remote] — factor: direct TX delay factor 0–2 • set-rx-delay [remote] — secs: RX processing delay 0–20s • set-airtime-factor [remote] — factor: airtime factor 0–9 • set-interference-threshold [remote] — value: interference threshold (firmware-defined units) • set-agc-reset-interval [remote] — secs: AGC reset interval in seconds; firmware rounds to a multiple of 4 (0 disables) • set-multi-acks [remote] — enabled: true to enable multi-ack support • set-flood-advert-interval [remote] — hours: flood-advert interval in hours, 3–168 • set-advert-interval [remote] — minutes: zero-hop advert interval in minutes, 60–240; firmware stores it as /2 (use even values) • set-owner-info [remote] — text: owner info shown in adverts; '|' in the string becomes a newline • set-adc-multiplier [remote] — value: ADC multiplier 0.0–10.0 (0 = board default) • powersaving [remote] — enabled: true to enable sleep-between-TX power saving • region [remote] — sub: status | save | allowf (region: region name (prefix-matched)) | denyf (region: region name (prefix-matched)) | get (region: region name (prefix-matched)) | home-get | home-set (region: region name to set as home) | default-get | default-set (region: region name to set as default; use '' to clear) | put (name: new region name, parent: optional parent region; defaults to wildcard) | remove (region: region name (exact match)) | list-allowed | list-denied • gps [remote] — sub: status | on | off | sync | setloc | advert-get | advert-set (policy: none | share | prefs) • sensor [remote] — sub: get (key: sensor setting key to read) | set (key: sensor setting key to write, value: new value (string-typed; firmware parses per setting)) | list (startIndex: optional pagination start index (134-char chunks)) Sensitive (writes secrets / grants access): • set-admin-password [remote] — password: new admin password, ≤15 chars • set-permission [remote] — pubKey: hex public key, level: guest|read|readwrite|admin, or null to revoke (downgrade to guest — the firmware has no explicit removal, only a level-0 demotion) • set-allow-read-only [remote] — enabled: true to enable read-only mode • set-guest-password [remote] — password: new guest password, ≤15 chars Destructive (data/identity loss or reboot): • reboot [home+remote] — no params • log-erase [remote] — no params • clear-stats [remote] — no params • remove-neighbor [remote] — pubKeyPrefix: hex public-key prefix • set-private-key [remote] — hex: new private key as 64 hex chars (32 bytes) • start-ota [remote] — no params • clkreboot [remote] — no params |
| set_credentialA | Persist the password the server will use to log into |
| forget_credentialA | Remove the server's stored login password for |
| import_contactA | Add a contact to the local node's roster from its advert-packet bytes (hex). Typically obtained from another node's |
| export_contactA | Return the advert-packet bytes (hex) for a contact, suitable for another node's |
| share_contactA | Broadcast a contact's advert across the mesh. Other nodes that receive the advert can route to this contact without having heard its own transmissions. Costs airtime. |
| remove_contactA | Drop a contact from the local node's roster. Local-only — does not tell any other node. The contact may reappear if its advert is heard again under auto-add mode; combine with |
| reset_pathA | Clear the local cached forwarding path to a contact. The next direct send to that contact re-discovers the route. Useful when a known path has gone stale (a repeater rebooted, topology changed) and direct sends are failing or taking longer than expected. |
| set_contact_pathA | Set an explicit forwarding path (a sequence of repeater path-hash bytes, up to 64) to a contact. Advanced: only when you want to override automatic path discovery. Pass |
| set_auto_add_contactsA | Set whether new contacts heard via adverts are added to the local roster automatically ( |
| reboot_nodeA | Reboot a node — the home companion or a remote repeater. Omit |
| broadcast_advertA | Send an advert from a node — home or remote. |
| sync_clockA | Set a node's clock to the controller's current time. Omit |
| set_tx_powerA | Set the radio transmit power in dBm on a node. Omit |
| set_radioA | Set frequency (MHz), bandwidth (kHz), spreading factor, and coding rate on a node. Omit |
| set_node_nameA | Rename a node's advertised mesh name. Omit |
| set_node_locationA | Set a node's advertised lat/lon (decimal degrees). Omit |
| get_node_versionA | Read a remote repeater's firmware version + build date string. Equivalent to |
| get_node_boardA | Read a remote repeater's hardware board / model identifier. Equivalent to |
| get_node_clockA | Read a remote repeater's current device clock (HH:MM - D/M/Y UTC). Equivalent to |
| get_node_neighborsA | List a remote repeater's recent neighbours (up to 8), each as |
| discover_neighborsA | Broadcast a node-discovery request from a remote repeater. Replies populate its neighbour list — read it back with |
| get_node_configA | Read one of a remote repeater's configuration values by key (e.g. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| morning-mesh-check | A daily health sweep of the mesh: survey the roster, flag nodes not heard from recently, and spot-check anything that looks off. |
| diagnose-quiet-node | Work out why a specific node has gone quiet: check its health, recent traffic to and from it, when it was last heard, and its neighbours. |
| draft-outage-notice | Draft a concise outage notice for a node over a time window, and optionally send it once you approve. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| nodes | The mesh as seen through the home node: the home device plus every known contact, each with its advertised role and last-heard time. |
| contacts | The home node's stored contact list — each contact's name, public key, role, and last-heard time. |
| channels | Configured channel slots on the connected node (index, name, key). |
| traffic-live | A rolling, subscribable feed of recent mesh traffic, each event tagged with structural provenance (kind + decrypt-verified). Subscribe to be notified as new events arrive, then re-read to fetch them. Verified channel messages and unverified channel datagrams are marked distinctly and never conflated. |
| help | How to use this server — orientation, the admin catalogue, and recipes. |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/dpup/meshcore-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server