meshcore-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@meshcore-mcpsurvey the mesh"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
meshcore-mcp
A Model Context Protocol server that exposes a MeshCore node — and the mesh reachable through it — as a clean, high-signal interface for any AI agent or tool.
Quick start — add it to Claude Code pointed at a node, then ask "survey the mesh":
claude mcp add meshcore --env MESHCORE_HOST=<node-ip> -- npx -y @dpup/meshcore-mcp
claude -p 'survey the mesh'meshcore-mcp wraps a @dpup/meshcore-ts
MeshCoreClient behind a small, deliberately shaped surface of MCP tools,
resources, and prompts. Point an MCP client at a node and operate the mesh in
natural language — survey nodes, read recent traffic, send messages, and run
curated admin commands — with structured, digested results instead of raw frames.
It is the device layer, and ungated by design: no conversation policy, no admin-channel gate, no coalescing, no autonomous behavior. A human at Claude Code is the policy, and approves each step; an autonomous agent brings its own. Same server, correct in both cases — its job is to be a faithful, well-shaped device interface, and to mark read-versus-action on every tool so a consuming policy layer, or a reviewing human, can reason about safety mechanically.
The commands are ungated. send_message, set_channel, delete_channel,
trace_path, and admin transmit on the mesh and change device state with no
built-in approval or policy layer of their own. With Claude Code you
approve every tool call — that human-in-the-loop is the gate, and what makes
interactive use safe. For autonomous or headless use, put your own policy
layer in front (that is meshcore-elmer's job) — don't point an unattended
agent at a live mesh without one. Every tool is annotated read-only vs. action
(readOnlyHint / destructiveHint) so a policy layer, or a reviewing human,
can reason about safety mechanically.
Use it with Claude Code
meshcore-mcp is a local-process server (stdio). The simplest consumer is a
human operator with Claude Code: add one entry to your MCP configuration,
pointing it at a node, and operate the mesh in plain language — Claude Code
prompts before every tool call, so no policy layer is needed (see the warning
above).
Pick the config that matches how your node is flashed. A MeshCore node runs
either a WiFi companion firmware (companion_radio_wifi, reached over TCP/IP)
or a USB/serial companion firmware — one transport per build. Set the matching
variable; setting both is rejected at startup with a legible error.
WiFi / IP companion — point it at the node's address (default port 5000):
{
"mcpServers": {
"meshcore": {
"command": "npx",
"args": ["-y", "@dpup/meshcore-mcp"],
"env": {
"MESHCORE_HOST": "192.168.1.50",
"MESHCORE_PORT": "5000"
}
}
}
}USB / serial companion — point it at the device path (/dev/ttyACM0 on
Linux, /dev/tty.usbmodemXXXX on macOS, COM3 on Windows):
{
"mcpServers": {
"meshcore": {
"command": "npx",
"args": ["-y", "@dpup/meshcore-mcp"],
"env": {
"MESHCORE_SERIAL_PATH": "/dev/ttyACM0"
}
}
}
}Serial needs Node's native
serialportbindings — the publishednpx/ binary path runs on Node, so this just works (thebundev entrypoint can't load the serial native module).
The server reads its home node and credentials from the environment its launcher hands it; a malformed or missing config exits non-zero with a legible message (never a stack trace).
Variable | Meaning |
| Home node TCP host — the |
| TCP port for |
| USB serial device path (e.g. |
| Default login/admin password for remote nodes (default |
| Read the default password from a file instead (its trailing newline is stripped). Set this or |
| JSON object of per-node overrides: |
| Read that same JSON map from a file instead — keeps node secrets out of the environment and your MCP config ( |
| Device request timeout, ms (default |
| Recent-traffic ring-buffer size (default the buffer's own default). |
| How long the remote-admin path waits for a CLI reply, ms (default |
The --host, --port, and --serial flags override the corresponding env vars.
Try it with no radio (simulator)
No MeshCore hardware? examples/sim-server.ts serves
the exact same MCP surface over stdio, but backed by
@dpup/meshcore-sim over a small
simulated mesh — with a real-time clock so live traffic actually flows while you
poke at it. Point Claude Code at it:
git clone https://github.com/dpup/meshcore-mcp && cd meshcore-mcp && bun install
claude mcp add meshcore-sim -- bun "$(pwd)/examples/sim-server.ts"Then ask Claude to "survey the mesh", "check the health of Rocky Ridge",
"show recent traffic", or "preview an admin reboot of Rocky Ridge". The
production binary (src/cli.ts) talks only to real devices; the simulator is a
dev dependency and never ships — this entrypoint is the hardware-free way to try
the server. Remote admin execution round-trips too: the sim-server configures
reactive responders (meshcore-sim ≥ 0.2.0), so login → CliData → reply returns
a plausible CLI reply instead of timing out.
Related MCP server: @lex-tools/codebase-context-dumper
The surface
A short, action-oriented surface: a handful of well-shaped tools beats dozens of
fine-grained ones. Reads are exposed as read-only tools (not only as
resources) because tools are what every MCP client reliably surfaces to the model
for active querying. The login / logout handshake is never exposed — it is
mechanical, and lives inside the tools that need it.
Tools
Tool | Intent | Annotations |
| Consolidated health snapshot — identity, radio, battery, uptime/queue, packet/radio stats. Omit | read-only · idempotent |
| One roster of the home node and every known contact, with advertised role and last-heard time — for spotting quiet or missing nodes. | read-only · idempotent |
| Recent live mesh traffic from the rolling buffer, oldest→newest, each tagged with structural provenance. | read-only · idempotent |
| Transmit a message to a contact (name / hex prefix) or channel ( | action · not idempotent — a resend is a second transmission |
| Run one enumerated admin command against a node, home or remote; collapses the remote | destructive (statically conservative); per-command risk tier in the result |
admin's command is drawn from an enumerated, curated set of 16 commands —
see the guide — extensible, but never
free-form text. Each command declares a risk tier (benign · config ·
sensitive · destructive) that maps deterministically to per-command
annotations, surfaced in the structured result.
Resources
Resource | URI | Notes |
Live mesh traffic |
| Subscribable. A rolling feed of inbound events; the server pushes |
Mesh roster |
| Pull-style: the home device plus every known contact, each with role and last-heard time. |
Contacts |
| Pull-style: the home node's stored contact list — name, public key, role, location, last-heard. |
Decrypt-verification is structural, not a wire flag: meshcore-ts
distinguishes a verified channelMessage from an unverified channelData
datagram (and a direct contactMessage from either), and the stream preserves
that distinction. That is exactly what lets a downstream gate's negative cases be
representable — an unverified admin-channel datagram never surfaces as a verified
channel message.
Prompts
Prompt | Args | Frames |
| — | A daily health sweep: survey the roster, flag quiet nodes, spot-check the suspicious ones. |
|
| Work out why a node has gone quiet — health, recent traffic, last-heard, context. |
|
| Draft a concise outage notice over a time window, and send it on approval. |
A prompt frames; it does not freeze: each poses a well-formed task and points the agent at the real tools by name, and the agent still reasons freely. No policy, no secrets.
Install
meshcore-mcp is an MCP server, not a library you import — "installing" it
means registering its launch command with an MCP client.
Claude Code —
claude mcp add(see Use it with Claude Code above). The client launches the server on demand vianpx; nothing to install globally.Any other MCP client (Cursor, Windsurf, …) — put the same command in that client's MCP config:
npx -y @dpup/meshcore-mcp, with theMESHCORE_*env vars above.Prefer a pinned, on-PATH binary? Install it globally and point the client's
commandatmeshcore-mcp:npm i -g @dpup/meshcore-mcp # or: bun add -g / pnpm add -g @dpup/meshcore-mcp
ESM-only, Node.js ≥ 18.
Embedding the server in your own host (the
createServerAPI)? Add it as a dependency instead —npm install @dpup/meshcore-mcp— and see Quickstart — embed a sim-backed server.
Documentation
Guide — concepts and recipes: configuring the home node, the tool surface and annotations, the live stream and provenance, the
adminset and dry-run, the three consumers, and testing your own agent against a sim-backed server.API reference — the complete, generated reference: every exported symbol, with full signatures and types.
Quickstart — embed a sim-backed server
You can drive the whole server in-process with no hardware, against
@dpup/meshcore-sim: inject a
SimConnection where production would build MeshCoreClient.tcp(host, port),
drive a virtual SimClock, and call tools through a real in-memory MCP Client.
Nothing below MeshService can tell a sim from a radio — this is the seam the
whole test strategy hangs on.
Add it as a dependency first — npm install @dpup/meshcore-mcp — then:
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { InMemoryTransport } from "@modelcontextprotocol/sdk/inMemory.js";
import { MeshCoreClient } from "@dpup/meshcore-ts";
import { SimClock, SimConnection, defineWorld, node, contact } from "@dpup/meshcore-sim";
import { createServer, MeshService } from "@dpup/meshcore-mcp";
// 1. A simulated mesh — no radio. The home node plus one contact.
const world = defineWorld({
homeNodeId: "home",
nodes: [node("home", { name: "Base" }), node("alice", { name: "Alice" })],
contacts: [contact("Alice", "alice")],
});
// 2. The injected clock the whole server takes its time from.
const clock = new SimClock();
// 3. A real MeshCoreClient over the sim Connection — the production seam.
const meshClient = new MeshCoreClient(new SimConnection({ world, clock }).asConnection(), {
autoSync: true,
});
const service = new MeshService(meshClient, clock);
await service.start();
// 4. Wire createServer to an in-memory MCP Client (no sockets, no stdio).
const server = createServer({ service });
const client = new Client({ name: "demo", version: "0.0.0" });
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
await Promise.all([server.connect(serverTransport), client.connect(clientTransport)]);
// 5. Call a tool exactly as Claude Code would.
const health = await client.callTool({ name: "get_node_health", arguments: {} });
console.log(health.structuredContent);
await client.close();
await server.close();
await service.stop();In production, cli.ts does the same wiring over MeshCoreClient.tcp(host, port)
and a SystemClock, served on a StdioServerTransport — that's what the
meshcore-mcp binary (and the Claude Code config above) launches.
See it in action
examples/demo.ts is a guided tour — it builds a world,
drives the real server through an in-memory MCP Client, and walks the whole
feature set: tools (home + an offline repeater failing cleanly), the live stream
with verified vs. unverified provenance side by side, and an admin dry-run
preview then a scripted exec. No hardware, fully deterministic:
bun examples/demo.ts # or --seed <n> / a positional seedIn a real terminal the tour is ANSI-colored; re-run it with any
--seedand the output is identical every time.
Develop
bun install
bun run typecheck # tsc --noEmit (strict)
bun run test # vitest — incl. full-stack tests over a sim-backed server
bun run build # emit dist/ (ESM + .d.ts + the meshcore-mcp binary)
bun run dev # run the server over stdio
bun run docs # regenerate docs/api.md from the sourceSee AGENTS.md for architecture and contribution notes.
Design notes
Two contracts, one server.
meshcore-mcpis a thin server wedged between the MCP protocol above (@modelcontextprotocol/sdk'sMcpServer) and the@dpup/meshcore-tsdevice client below. It owns neither. Almost every design decision falls out of taking both seriously.Injected client + clock.
MeshServicetakes itsMeshCoreClientandClockby injection — production buildsMeshCoreClient.tcp(host, port)with aSystemClock; tests buildnew MeshCoreClient(sim.asConnection())with aSimClock. Nothing belowMeshServiceknows which it got, and time always comes from the clock — never rawDate.now()/setTimeout.Provenance is a hard requirement. The live stream carries each event's sender, channel identity, and structural decrypt-verification, because a downstream policy layer can only function if it knows which channel a message genuinely arrived on.
Ungated by design. No policy, no admin-channel gate, no scheduling, no autonomous behavior. That belongs to a consumer; keeping the server free of it is exactly what lets the same artifact serve a human at a terminal and an autonomous agent without compromise.
License
MIT © Dan Pupius
Available Tools
30 toolsadminRun an admin commandADestructive
Run one enumerated admin command against a node. node is the home node (its name or key prefix) or a remote repeater (name / hex prefix). Pass dryRun: true to preview the intent without contacting the device. Each command carries a risk tier (surfaced in the result). Commands:
Read:
• ver [remote] — no params
• board [remote] — no params
• clock [remote] — no params
• neighbors [remote] — no params
• get-config [remote] — key: config key to read; prv.key is intentionally excluded (firmware blocks remote read for security)
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
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | ||
| command | Yes | the admin command name (see the catalogue in this description); an unknown name returns the valid list | |
| params | No | ||
| dryRun | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| command | Yes | |
| tier | Yes | |
| annotations | Yes | the deterministic per-command risk hints this tier maps to; surfaced here (not as MCP tool-level annotations) because `admin` is one multiplexed tool |
| dryRun | Yes | |
| via | No | |
| preview | No | |
| reply | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations indicating destructive behavior, the description adds significant context: it categorizes commands by risk tier (Read, Benign, Config, Sensitive, Destructive), explains the dryRun flag for previewing effects, and provides specific behavioral notes (e.g., firmware rejecting backwards clocks, key exclusion for security).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a clear summary and then structured into categorized command blocks. While lengthy, every sentence serves to document a command or parameter, making it efficient for its purpose. Could be further optimized but remains functional.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (many commands, nested parameters, output schema), the description covers all aspects: command catalog, parameter details, dryRun behavior, risk tiers, and error handling (unknown command returns valid list). The output schema is separate, so completeness is high.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has low coverage (25%), but the description fully compensates by enumerating every valid command and its sub-parameters with detailed syntax and constraints. This adds immense meaning beyond the minimal schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the purpose: 'Run one enumerated admin command against a node.' It specifies the resource (admin commands) and the action (run against a node). The extensive list of commands distinguishes this tool from sibling tools that target specific operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context for when to use the tool (to run admin commands) but does not explicitly exclude alternatives or guide when to use sibling tools instead of this general tool. The listing of commands implies coverage, but no direct guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
broadcast_advertBroadcast an advertA
Send an advert from a node — home or remote. mode selects between flood (mesh-wide) and zerohop (immediate neighbours only). Omit node to target home. Equivalent to admin <node> advert { mode }. Costs airtime; flood propagates mesh-wide.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | flood (mesh-wide) or zerohop (neighbours only) | flood |
| node | No | target node (contact name or hex public-key prefix); omit to target the home node | |
| dryRun | No | preview the intent without contacting the device |
Output Schema
| Name | Required | Description |
|---|---|---|
| command | Yes | |
| tier | Yes | |
| annotations | Yes | the deterministic per-command risk hints this tier maps to; surfaced here (not as MCP tool-level annotations) because `admin` is one multiplexed tool |
| dryRun | Yes | |
| via | No | |
| preview | No | |
| reply | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-read-only, non-destructive, non-idempotent behavior. The description adds value by noting 'Costs airtime; flood propagates mesh-wide', which are key behavioral traits not captured by annotations. However, it does not detail all edge cases (e.g., behavior on invalid nodes).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core purpose and mode selection. Every sentence adds value: purpose, node usage, cost/propagation. No wasted words, clearly structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (3 parameters, no required fields, enum, output schema exists), the description covers the essential behavioral aspects (mode, node targets, cost). It lacks explanation of dryRun output or error handling, but the output schema likely fills gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description reinforces the meaning of 'mode' and 'node' (e.g., 'omit to target home') but does not add significant extra semantic detail beyond what the schema provides for all parameters, especially 'dryRun'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Send an advert') and the resource ('from a node'). It distinguishes between flood and zerohop modes and gives a specific equivalent to the admin command, helping the agent understand its purpose among sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use each mode ('flood' vs 'zerohop') and how to target the home node by omitting the 'node' parameter. It warns about airtime costs and mesh-wide propagation, but does not explicitly exclude alternative tools or provide when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_channelDelete a channelADestructiveIdempotent
Remove a channel slot on the connected node, addressed by index or by name. List channels via the meshcore://channels resource.
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | channel slot to delete | |
| name | No | channel name to delete (resolved to its slot) |
Output Schema
| Name | Required | Description |
|---|---|---|
| index | Yes | the channel slot that was cleared |
| name | No | the deleted channel's name, where known |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true. Description adds minor context about addressing but no new behavioral traits beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two focused sentences with no redundancy. Action and key constraint front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With full schema coverage, annotations, and output schema present, the description is sufficient for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage; description does not add meaning beyond what the schema provides for index and name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Remove a channel slot' with specific addressing by index or name. Distinguishes from related tools like set_channel and the listing resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context to list channels first via meshcore://channels, implying prerequisite. Does not explicitly state when not to use or compare to other mutation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_neighborsTrigger a node's neighbour discoveryA
Broadcast a node-discovery request from a remote repeater. Replies populate its neighbour list — read it back with get_node_neighbors(node). Equivalent to admin <node> discover-neighbors. Required node.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | target node (contact name or hex public-key prefix); required (this command isn't implemented on companion firmware so it can't target home) | |
| dryRun | No | preview the intent without contacting the device |
Output Schema
| Name | Required | Description |
|---|---|---|
| command | Yes | |
| tier | Yes | |
| annotations | Yes | the deterministic per-command risk hints this tier maps to; surfaced here (not as MCP tool-level annotations) because `admin` is one multiplexed tool |
| dryRun | Yes | |
| via | No | |
| preview | No | |
| reply | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool sends a broadcast request that populates a neighbor list (a write operation), consistent with readOnlyHint=false and destructiveHint=false. It adds context beyond annotations by explaining the side effect and how to retrieve results, but does not cover failure modes or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with no filler. The primary action is stated first, followed by outcome and alternative invocation. Every sentence provides value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core action and result, and references sibling tools for reading neighbors. With an output schema present, it does not need to detail return values. Minor gaps: no mention of error scenarios or idempotency, but adequate for a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description repeats that 'node' is required and references the admin command, but adds minimal new semantic detail beyond the schema. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('broadcast') and resource ('node-discovery request'), clearly indicating the action. It distinguishes from sibling tools like 'admin' by stating it is equivalent to 'admin <node> discover-neighbors', and references 'get_node_neighbors' for reading results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions that the tool is equivalent to an admin command and requires a node, but does not provide explicit when-to-use or when-not-to-use guidance compared to alternatives like 'admin' or other discovery tools. It lacks exclusions or context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_contactExport a contactARead-onlyIdempotent
Return the advert-packet bytes (hex) for a contact, suitable for another node's import_contact. Omit target to export the home node's own advert (useful for sharing identity off-mesh).
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | contact name or hex public-key prefix; omit to export the home node |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | the exported contact's advertised name (or the home node's name) |
| publicKey | Yes | the exported contact's hex public key |
| advertHex | Yes | the advert packet as hex bytes — pass to another node's import_contact |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds context beyond annotations: output format (hex bytes), suitability for import_contact. Annotations already indicate read-only and idempotent, so description complements well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists, description covers all needed aspects: purpose, parameter behavior, and use case for off-mesh identity sharing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage 100% and description adds value by explaining the behavior when parameter is omitted, going beyond schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it returns advert-packet bytes for a contact, distinguishes from sibling import_contact by specifying the output format and usage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on omitting target to export home node's advert. Does not explicitly exclude alternatives but implies use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forget_credentialForget a node's stored admin passwordADestructiveIdempotent
Remove the server's stored login password for node. Subsequent admin / remote get_node_health calls fall back to the env default credential (the guest password, unless MESHCORE_LOGIN_PASSWORD / MESHCORE_NODE_PASSWORDS is set). removed is false when no entry existed — the end state is the same either way. Marked destructive: the stored password is gone after this call.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | contact name or hex public-key prefix of the node |
Output Schema
| Name | Required | Description |
|---|---|---|
| node | Yes | |
| removed | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive and idempotent. Description adds value by explaining the fallback behavior and clarifying that the end state is the same whether an entry existed or not, beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, front-loaded with the core action, followed by useful context and a note on destructiveness. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter, annotations covering safety, and the description covering fallback, idempotency behavior, and the return flag 'removed', the tool is fully documented for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and describes 'node' as contact name or hex public-key prefix. Description uses the parameter but does not add new semantic details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Remove the server's stored login password for `node`' with a specific verb and resource. Distinguishes from sibling 'set_credential' by describing the opposite action and fallback behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains that after removal, admin/health calls fall back to default credentials, giving context on when to use. Mentions return value nuance. Lacks explicit when-not or alternative tools, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_node_boardRead a remote node's hardware boardARead-onlyIdempotent
Read a remote repeater's hardware board / model identifier. Equivalent to admin <node> board. Required node. For the home node, use get_node_health() (the firmware.manufacturerModel field) — that's the structured equivalent via the companion protocol, no admin call needed.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | target node (contact name or hex public-key prefix); required (this command isn't implemented on companion firmware so it can't target home) | |
| dryRun | No | preview the intent without contacting the device |
Output Schema
| Name | Required | Description |
|---|---|---|
| command | Yes | |
| tier | Yes | |
| annotations | Yes | the deterministic per-command risk hints this tier maps to; surfaced here (not as MCP tool-level annotations) because `admin` is one multiplexed tool |
| dryRun | Yes | |
| via | No | |
| preview | No | |
| reply | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint, so the description adds minimal behavioral context beyond equating it to an admin command. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words: first sentence states purpose, second provides usage guidance. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given rich annotations and an output schema, the description covers purpose, usage alternatives, and parameter requirement adequately without missing critical context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description repeats the schema's note about node not targeting home. No additional meaning added beyond schema, meeting baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it reads a remote repeater's hardware board/model identifier, distinguishing it from siblings by noting the alternative for home node via get_node_health().
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says node is required, and instructs to use get_node_health() for the home node as a better alternative, providing clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_node_clockRead a remote node's current clockARead-onlyIdempotent
Read a remote repeater's current device clock (HH:MM - D/M/Y UTC). Equivalent to admin <node> clock. Required node. For the home node, use get_node_health() (the deviceTimeMs field) — that's the structured equivalent via the companion protocol, no admin call needed.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | target node (contact name or hex public-key prefix); required (this command isn't implemented on companion firmware so it can't target home) | |
| dryRun | No | preview the intent without contacting the device |
Output Schema
| Name | Required | Description |
|---|---|---|
| command | Yes | |
| tier | Yes | |
| annotations | Yes | the deterministic per-command risk hints this tier maps to; surfaced here (not as MCP tool-level annotations) because `admin` is one multiplexed tool |
| dryRun | Yes | |
| via | No | |
| preview | No | |
| reply | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds valuable context about the output format, the requirement for a remote node, and the equivalence to an admin command. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The first sentence states the core function and output format, the second provides the alternative for home node. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With full schema coverage, rich annotations, and an output schema present, the description completes the picture by explaining the remote-only constraint, output format, and alternative usage. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds extra semantic info for the required 'node' parameter, explaining it cannot target the home node due to firmware limitations. This provides meaning beyond the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it reads a remote repeater's current device clock, specifies the output format (HH:MM - D/M/Y UTC), and distinguishes from the sibling tool get_node_health for the home node. This provides a specific verb+resource with clear differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs when to use this tool (for remote nodes) and when not to (for home node, use get_node_health). Also notes it is equivalent to an admin command, providing clear context and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_node_configRead a remote node's config valueARead-onlyIdempotent
Read one of a remote repeater's configuration values by key (e.g. tx, radio, name, freq, flood.max, path.hash.mode). Equivalent to admin <node> get-config { key }. Required node. The reply is a single line of text the agent parses. For the home node's radio / identity config, use get_node_health() (structured fields cover the common ones — radio, firmware, location, autoAddContacts).
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | config key to read; `prv.key` is intentionally excluded (firmware blocks remote read for security) | |
| node | Yes | target node (contact name or hex public-key prefix); required (this command isn't implemented on companion firmware so it can't target home) | |
| dryRun | No | preview the intent without contacting the device |
Output Schema
| Name | Required | Description |
|---|---|---|
| command | Yes | |
| tier | Yes | |
| annotations | Yes | the deterministic per-command risk hints this tier maps to; surfaced here (not as MCP tool-level annotations) because `admin` is one multiplexed tool |
| dryRun | Yes | |
| via | No | |
| preview | No | |
| reply | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior. The description adds that the reply is a single line of text and mentions the intentional exclusion of 'prv.key' for security, which is beyond annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two focused sentences with no redundancy. Each sentence serves a clear purpose: stating the function and providing an alternative use case.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (not shown), the description adequately covers purpose, usage, and a behavioral note. A minor gap is the lack of explicit return value structure, but output schema fills that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all parameters. The description adds value by listing example keys and noting the 'prv.key' exclusion, but does not significantly expand beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads a specific config value by key from a remote node, with examples. It distinguishes from sibling get_node_health which covers structured fields for the home node.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly notes the required 'node' parameter and directs users to get_node_health for home node config. However, it does not provide exhaustive guidance on when to avoid this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_node_healthGet node healthARead-onlyIdempotent
Consolidated health snapshot for a node: identity, radio, battery, uptime/queue, and packet/radio stats. Omit node for the connected home node; pass a contact name or hex public-key prefix for a remote repeater (logs in and reads its status).
| Name | Required | Description | Default |
|---|---|---|---|
| node | No | a contact name or hex public-key prefix for a remote node; omit for the connected home node |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| node | Yes | |
| publicKey | No | |
| role | No | |
| reachable | Yes | |
| lastHeardMs | No | |
| battery | No | |
| radio | No | |
| uptimeSecs | No | |
| txQueueLen | No | |
| stats | No | |
| deviceTimeMs | No | |
| telemetryBytes | No | |
| firmware | No | |
| location | No | |
| autoAddContacts | No | |
| degraded | No | sub-calls that failed after retries; the snapshot is partial — the listed fields are absent |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnly, destructive, idempotent, and openWorld hints. The description adds valuable context about logging into remote nodes, which implies authentication needs. Does not mention rate limits or error conditions, but rated highly due to annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each concise and purposeful. The key usage guideline is front-loaded, and no extraneous information is present, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, no need to describe return values. The description covers purpose, parameter usage, and behavioral context comprehensively for a read-only health snapshot tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% with a clear description of the 'node' parameter. The description adds nuance: omission for home node, and provides intent for remote nodes, enhancing understanding beyond the schema definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'consolidated health snapshot' and lists specific data categories (identity, radio, battery, uptime/queue, packet/radio stats). Distinguishes from siblings by focusing on a comprehensive health overview rather than specific details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to omit the parameter (home node) and when to provide it (remote repeater), with instructions on inputs. Provides context on the remote behavior (logs in and reads status), helping decide between this and other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_node_neighborsRead a remote node's recent neighboursARead-onlyIdempotent
List a remote repeater's recent neighbours (up to 8), each as {pk-prefix}:{ts}:{snr*4} in the reply text. The H15 topology data source. Equivalent to admin <node> neighbors. Required node. Pairs with discover_neighbors(node) to trigger an active probe first.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | target node (contact name or hex public-key prefix); required (this command isn't implemented on companion firmware so it can't target home) | |
| dryRun | No | preview the intent without contacting the device |
Output Schema
| Name | Required | Description |
|---|---|---|
| command | Yes | |
| tier | Yes | |
| annotations | Yes | the deterministic per-command risk hints this tier maps to; surfaced here (not as MCP tool-level annotations) because `admin` is one multiplexed tool |
| dryRun | Yes | |
| via | No | |
| preview | No | |
| reply | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. Description adds useful behavioral context: returns up to 8 neighbors in a specific format, mentions the companion firmware limitation ('can't target home'), and notes the data source. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise (three sentences) and front-loaded with the core purpose. Every sentence adds value: purpose, context, equivalent command, pairing with sibling. No redundant or vague phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (two parameters, annotations cover safety, output schema exists), the description is complete. It explains the return format, pairing with sibling, and data source. No missing critical details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. Description adds minimal extra context for `node` (companion firmware limitation) but does not address `dryRun`. Baseline of 3 is appropriate as schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'List a remote repeater's recent neighbours (up to 8)' with a specific verb and resource. It distinguishes from sibling `discover_neighbors` by mentioning it pairs with an active probe. Also notes equivalence to `admin <node> neighbors`, reinforcing the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description provides clear context: it is the H15 topology data source and pairs with `discover_neighbors(node)` for fresh data. It implicitly advises when to use each tool. However, no explicit when-not-to-use statements are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_node_versionRead a remote node's firmware versionARead-onlyIdempotent
Read a remote repeater's firmware version + build date string. Equivalent to admin <node> ver. Required node — only repeater firmware implements the ver CLI verb. For the home node, use get_node_health() (the firmware field) — that's the structured equivalent via the companion protocol, no admin call needed.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | target node (contact name or hex public-key prefix); required (this command isn't implemented on companion firmware so it can't target home) | |
| dryRun | No | preview the intent without contacting the device |
Output Schema
| Name | Required | Description |
|---|---|---|
| command | Yes | |
| tier | Yes | |
| annotations | Yes | the deterministic per-command risk hints this tier maps to; surfaced here (not as MCP tool-level annotations) because `admin` is one multiplexed tool |
| dryRun | Yes | |
| via | No | |
| preview | No | |
| reply | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint. Description adds context: it's equivalent to a CLI command, only works on repeater firmware, and returns version+date. Does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no wasted words. Front-loaded with purpose, then equivalence, then usage guidance. Ideal length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists (not shown but indicated), so return format is covered. Description adds what is returned (firmware version + build date string). With annotations and schema, the description is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers both parameters with descriptions. Description adds rationale: node is required because command isn't implemented on companion firmware, so can't target home. This adds meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it reads a remote repeater's firmware version and build date. It distinguishes from sibling get_node_health, which returns structured firmware info for the home node.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: for remote repeaters (only repeater firmware implements the ver CLI). Explicitly states when not to use: for home node, use get_node_health() instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_trafficGet recent trafficARead-onlyIdempotent
Recent live mesh traffic from the rolling buffer, oldest→newest, each tagged with structural provenance (kind + decrypt-verified). Optional since windows it — prefer a relative duration ("10m", "1h", "30s"), which is the portable form; an ISO-8601 datetime or epoch-ms also work but are wall-clock instants. Omit for all buffered traffic.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | only newer events — prefer a relative duration ("10m", "1h", "30s"), the portable form; an ISO-8601 datetime or epoch-ms also work but are wall-clock instants; omit for all buffered |
Output Schema
| Name | Required | Description |
|---|---|---|
| events | Yes | |
| count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds context about ordering (oldest→newest), tagging (provenance), and parameter behavior (relative vs wall-clock).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main purpose, followed by parameter guidance. Every sentence provides essential information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one optional parameter, rich annotations, and an output schema, the description covers purpose, usage, and parameter behavior completely. No missing context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameter 'since' is documented. The description adds value by clarifying portable form (relative duration) and noting that ISO-8601 and epoch-ms are also accepted but wall-clock instants.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves recent live mesh traffic from a rolling buffer, ordered oldest to newest, tagged with provenance. It distinguishes from sibling tools, which cover different actions like sending messages, admin, or other node info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on the 'since' parameter, including preferred relative durations and alternative formats. It doesn't explicitly exclude scenarios, but the context is clear for a read operation; alternatives are not needed given sibling diversity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_contactImport a contactAIdempotent
Add a contact to the local node's roster from its advert-packet bytes (hex). Typically obtained from another node's export_contact, a QR scan, or another out-of-band channel. The contact appears in survey_mesh and the meshcore://contacts resource after this.
| Name | Required | Description | Default |
|---|---|---|---|
| advertHex | Yes | the advert packet as hex bytes (e.g. the output of export_contact) |
Output Schema
| Name | Required | Description |
|---|---|---|
| imported | Yes | |
| lengthBytes | Yes | number of advert-packet bytes consumed |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations idempotentHint=true and destructiveHint=false are present; description adds that the contact appears in survey_mesh and contacts resource after, providing useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action, no fluff. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter, annotations, and no need to explain return values due to output schema, the description is complete and sufficient for an agent to use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a good description. The description adds context about the source of the hex bytes (export_contact output), enhancing understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool adds a contact from advert-packet bytes and specifies the source. It distinguishes from siblings like export_contact (opposite direction).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains when to use (having advert-packet bytes from export_contact, QR scan, etc.) but doesn't explicitly mention when not to use or other methods. Clear context is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reboot_nodeReboot a nodeADestructive
Reboot a node — the home companion or a remote repeater. Omit node to target home. Equivalent to admin <node> reboot; this top-level form carries the destructive-tier annotations directly. ⚠ The node is unreachable for ~30–60s while it restarts; any session ends.
| Name | Required | Description | Default |
|---|---|---|---|
| node | No | target node (contact name or hex public-key prefix); omit to target the home node | |
| dryRun | No | preview the intent without contacting the device |
Output Schema
| Name | Required | Description |
|---|---|---|
| command | Yes | |
| tier | Yes | |
| annotations | Yes | the deterministic per-command risk hints this tier maps to; surfaced here (not as MCP tool-level annotations) because `admin` is one multiplexed tool |
| dryRun | Yes | |
| via | No | |
| preview | No | |
| reply | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behaviors beyond annotations: node unreachable for 30-60s, session ends, and equivalence to admin command. Combines with annotations (destructiveHint=true) to give a full picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise: two sentences plus a warning symbol. Front-loaded with the core action and target. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and the tool's low complexity (2 optional params), the description fully covers usage, behavior, and effects. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and description does not add new information beyond schema for parameters. The description repeats the schema's note on omitting node but does not elaborate on dryRun.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Reboot a node'), specifies the target types (home companion or remote repeater), and distinguishes behavior when node parameter is omitted. It effectively differentiates from sibling tools by being the top-level reboot command.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides guidance on when to omit the node parameter and notes equivalence to an admin command. However, does not explicitly discuss when not to use the tool or compare with sibling alternatives like 'admin'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_contactRemove a contactADestructiveIdempotent
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 set_auto_add_contacts { autoAdd: false } for a sticky removal.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | contact name or hex public-key prefix to remove |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| publicKey | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive and non-read-only behavior. The description adds important context: the operation is local-only, the contact may reappear if auto-add is enabled, and suggests a mitigation. This goes beyond the annotations by explaining side effects and dependencies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three front-loaded sentences: purpose, scope, and usage note. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and clear annotations, the description covers essential behavioral and usage context. The lack of output schema content is not a major gap given it exists elsewhere. The description sufficiently informs the agent about local scope and auto-add interaction.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description of the 'target' parameter. The tool description does not add new information about the parameter beyond what the schema provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool removes a contact from the local roster ('Drop a contact from the local node's roster'), with a specific verb and resource. It also distinguishes from siblings by noting it is local-only, not affecting other nodes, which differentiates it from distributed operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides guidance on when to use and how to achieve a sticky removal by combining with set_auto_add_contacts. It explains the reappearance risk under auto-add mode. However, it does not explicitly state alternatives for removing contacts from all nodes, which may be implied by local-only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reset_pathReset cached path to a contactAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | contact name or hex public-key prefix |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| publicKey | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotentHint=true. The description adds behavioral context by explaining the effect (clears cache, next send re-discovers route) and the consequence (no direct sends affected until next one). This adds value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no wasted words. First sentence states action, second explains consequence, third gives usage scenario. Perfectly concise and structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, idempotent, non-destructive) and the presence of an output schema, the description covers all necessary aspects: what, how, when, and why. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema coverage at 100%, the description does not add extra meaning beyond the schema's parameter description. The schema already explains 'contact name or hex public-key prefix', so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool clears a local cached path, with specific verb 'clear the local cached forwarding path'. However, it does not explicitly distinguish itself from sibling tools like `set_contact_path` or `trace_path`, though the action is unique enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: when a known path has gone stale, direct sends are failing or slower. It does not explicitly state when not to use it or mention alternatives, but the usage scenario is well-explained.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageSend a messageA
Transmit a text message. target is a contact (name or hex public-key prefix) or a channel (#name, #index, or a bare channel index). A resend is a second transmission — not idempotent. Set confirm: true to wait for the delivery ack and report whether it arrived + the round-trip time. Confirmation applies to direct (contact) messages only: a channel/broadcast has no single recipient to ack, so a confirm: true channel send returns confirmationNotApplicable: true (and no delivered) rather than silently ignoring the request.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | a contact (name or hex public-key prefix) or a channel (`#name`, `#index`, or a bare channel index) | |
| text | Yes | the message text to transmit | |
| confirm | No | wait for and report the delivery ack + round-trip. Direct (contact) messages only — for a channel/broadcast send the result reports `confirmationNotApplicable: true` instead (no single recipient to ack) |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| contact | No | |
| publicKey | No | |
| channelIdx | No | |
| channelName | No | |
| text | Yes | |
| route | No | how a contact send was routed |
| delivered | No | delivery ack result (only when confirm requested, contact sends): true if acked, false if none arrived in the window |
| roundTripMs | No | round-trip time of the delivery ack, ms (when delivered) |
| confirmationNotApplicable | No | true when confirm was requested for a channel/broadcast send: there is no single recipient to ack, so delivery confirmation does not apply (delivered/roundTripMs are correctly absent) — distinct from a fire-and-forget send |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds non-idempotent behavior and confirmation scope beyond annotations (readOnlyHint=false, idempotentHint=false), with no contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with purpose, but the sentences are somewhat dense; slightly better structure would merit a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description adequately covers input semantics, idempotency, and confirmation details without needing to explain return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description largely echoes schema descriptions without adding new semantic value beyond the structured data.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Transmit a text message' and specifies target formats (contact or channel), making the tool's purpose distinct from siblings like broadcast_advert.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how to use the tool, including confirm behavior and channel limitations, but does not explicitly state when to avoid using it or compare with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_auto_add_contactsToggle auto-add for new contactsAIdempotent
Set whether new contacts heard via adverts are added to the local roster automatically (autoAdd: true, the companion default) or only when explicitly imported (autoAdd: false). Manual mode pairs well with remove_contact for a curated contact list.
| Name | Required | Description | Default |
|---|---|---|---|
| autoAdd | Yes | true to auto-add new adverts; false to require import_contact |
Output Schema
| Name | Required | Description |
|---|---|---|
| autoAdd | Yes | the new auto-add state |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotence and non-destructiveness. The description adds context about the companion default ('autoAdd: true') and explains the effect of each mode. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no redundant information. Every word earns its place, and the structure is front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple toggle nature, low parameter count, and presence of an output schema, the description is complete. It could briefly mention the return value, but that is covered by the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the boolean parameter with 100% coverage. The description adds value by specifying the companion default and suggesting manual mode's complementary use with 'remove_contact'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title 'Toggle auto-add for new contacts' and description clearly specify the verb 'Set' and resource (auto-add behavior for new contacts). It distinguishes itself from siblings like 'remove_contact' and 'import_contact' by mentioning their interplay.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a usage hint by pairing manual mode with 'remove_contact' for curated contact lists. However, it does not explicitly state when not to use the tool or list alternatives beyond that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_channelAdd or update a channelAIdempotent
Configure a channel slot on the connected node. Omit secret to generate a random private channel; omit index to use the next free slot (so a plain add won't overwrite an existing channel). Returns the channel's key so you can share it. List channels via the meshcore://channels resource.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | the channel name | |
| secret | No | 16-byte key as 32 hex chars; omit to generate a random private channel | |
| index | No | channel slot to write; omit to use the next free slot |
Output Schema
| Name | Required | Description |
|---|---|---|
| index | Yes | the channel slot the channel was written to |
| name | Yes | |
| secret | Yes | 16-byte channel key as 32 hex chars — share this for others to join |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotentHint=true, and the description adds behavioral context: it explains that omitting index uses next free slot (so plain add won't overwrite), and it returns the channel's key. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three sentences, each adding value: first sets purpose, second gives parameter guidance, third covers return value and alternative listing. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 parameters, 1 required, output schema exists), the description covers purpose, parameter behavior, return value, and alternative listing method. It is complete for an AI agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. Description adds semantics by explaining the effect of omitting 'secret' (generates random private channel) and 'index' (uses next free slot), beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool configures a channel slot on the connected node, with specific verb 'configure' and resource 'channel slot'. It distinguishes from siblings like 'delete_channel' and 'send_message' by focusing on channel configuration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance on when to omit 'secret' (to generate a random private channel) and when to omit 'index' (to use next free slot), and mentions alternative listing via 'meshcore://channels'. However, it does not explicitly state when not to use this tool versus other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_contact_pathPin an explicit path to a contactAIdempotent
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 pathHex: "" to mark the contact as direct (no repeaters). Pair with trace_path to discover a working path first.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | contact name or hex public-key prefix | |
| pathHex | Yes | repeater path-hash bytes as hex (max 64 bytes / 128 chars); empty string ⇒ direct (no hops) |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| publicKey | Yes | |
| pathHex | Yes | the path bytes that were written (hex) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotentHint=true, readOnlyHint=false, destructiveHint=false. The description adds that setting pathHex to empty string marks contact as direct, and path is up to 64 bytes, which is useful behavioral context beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose, no filler. Every sentence adds essential information: purpose, usage guidance, and parameter hint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given only two parameters, full schema coverage, and an output schema (exists), the description provides sufficient context including max length, pairing with a sibling tool, and when to use. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description adds value by explaining the meaning of empty pathHex ('mark as direct') and that pathHex represents repeater path-hash bytes, which clarifies the schema's pattern.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Set' and resource 'explicit forwarding path to a contact', distinguishing it from siblings like 'trace_path' which discovers paths, and 'reset_path' which likely clears paths. It specifies that it overrides automatic path discovery, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Advanced: only when you want to override automatic path discovery', giving clear guidance on when to use. It also recommends pairing with 'trace_path' first, but does not explicitly list alternatives or when not to use, which is a minor gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_credentialRemember a node's admin passwordAIdempotent
Persist the password the server will use to log into node for subsequent admin and remote get_node_health calls. Use this when you've learned a repeater's password out of band (e.g. via DM) and need the server to remember it across restarts. This is the server's local credential, not the node's password — it does not send anything over the mesh. The node must already be known (in the contact list) — a typo'd name is rejected so credentials don't silently land under a key that's never looked up. Overwrites any existing entry. The password (max 256 chars) is stored in the credentials file under MESHCORE_STATE_DIR with 0600 permissions, and is never echoed in the tool result. The password is opaque to the server: the device unlocks guest (read-only) or admin (full) depending on which it matches — store the admin password when you have it, since it covers reads too. If a later admin command comes back with ERR: in reply, the stored credential is likely guest-tier; overwrite via set_credential if you have the admin password. Separate from the set-admin-password admin command (which changes the node's own password).
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | contact name or hex public-key prefix of the node — must already be in the device's contact list (a typo'd node is rejected) | |
| password | Yes | the login password the server should use for this node (max 256 chars) |
Output Schema
| Name | Required | Description |
|---|---|---|
| node | Yes | |
| stored | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses overwrite behavior, storage details (file, permissions, no echo), guest vs admin tiers, and failure recovery (ERR reply), adding context beyond annotations which already convey idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured and front-loaded, but slightly verbose with extra detail on admin/guest; still every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Thoroughly covers behavior, constraints, edge cases (typo, ERR recovery), and interplay with admin/get_node_health, fully equipping the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds meaning beyond schema: node must be in contact list, password max 256 chars, explains admin/guest implications, which the schema's descriptions only hint at.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool persists a password for admin and health calls, clearly distinguishing it from siblings like forget_credential and set-admin-password.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use (out-of-band password learning) and when-not (typo rejection, not node's own password), with clear differentiation from related commands.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_node_locationSet a node's advertised locationAIdempotent
Set a node's advertised lat/lon (decimal degrees). Omit node to target home. Equivalent to admin <node> set-location { lat, lon }.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | latitude in degrees | |
| lon | Yes | longitude in degrees | |
| node | No | target node (contact name or hex public-key prefix); omit to target the home node | |
| dryRun | No | preview the intent without contacting the device |
Output Schema
| Name | Required | Description |
|---|---|---|
| command | Yes | |
| tier | Yes | |
| annotations | Yes | the deterministic per-command risk hints this tier maps to; surfaced here (not as MCP tool-level annotations) because `admin` is one multiplexed tool |
| dryRun | Yes | |
| via | No | |
| preview | No | |
| reply | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this tool as idempotent and non-destructive. The description adds the home node behavior and CLI equivalent, but doesn't provide additional behavioral context beyond what annotations cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences cover purpose, usage, and equivalent command with no wasted words. Information is front-loaded and each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, with 4 parameters and an output schema. The description covers the core purpose and key usage hint. It is nearly complete, though it could mention lat/lon bounds or validation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the baseline is 3. The description adds value by explaining the 'node' parameter's default behavior (omit for home) and clarifying that lat/lon are in decimal degrees, going beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Set' and resource 'node's advertised lat/lon', adding specificity about decimal degrees and distinguishing it from sibling tools like set_tx_power or set_contact_path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage guidance by noting that omitting the 'node' parameter targets the home node. It also gives an equivalent CLI command, but does not explicitly mention when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_node_nameSet a node's advertised nameAIdempotent
Rename a node's advertised mesh name. Omit node to target home. Equivalent to admin <node> set-name { name }. Max 32 bytes (24 if a location is set).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | advertised name, ≤32 bytes | |
| node | No | target node (contact name or hex public-key prefix); omit to target the home node | |
| dryRun | No | preview the intent without contacting the device |
Output Schema
| Name | Required | Description |
|---|---|---|
| command | Yes | |
| tier | Yes | |
| annotations | Yes | the deterministic per-command risk hints this tier maps to; surfaced here (not as MCP tool-level annotations) because `admin` is one multiplexed tool |
| dryRun | Yes | |
| via | No | |
| preview | No | |
| reply | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotent, non-destructive, non-read-only. Description adds the important behavioral constraint 'Max 32 bytes (24 if a location is set)', which goes beyond annotation details. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no fluff. Purpose stated first, then usage nuance, then critical constraint. Every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (3 params, no optional, output schema exists), the description covers purpose, key usage (omit node), and parameter constraint. Does not discuss output, but that's outside scope due to output schema. Could mention error handling for invalid names, but sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. Description adds value: clarifies name byte limit with location caveat, and repeats the omission rule for node, reinforcing the schema. This extra context justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Rename a node's advertised mesh name' with specific verb and resource. It distinguishes from siblings like set_node_location by focusing on name. The note about omitting node for home adds precision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description explains when to omit the node parameter to target home, and provides an admin command equivalent for context. However, it does not explicitly state when not to use this tool or mention alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_radioSet a node's radio parametersAIdempotent
Set frequency (MHz), bandwidth (kHz), spreading factor, and coding rate on a node. Omit node to target home. Equivalent to admin <node> set-radio { freqMhz, bwKhz, sf, cr }. ⚠ Applies after a reboot; if the new params no longer match the rest of the mesh, the node drops off the network.
| Name | Required | Description | Default |
|---|---|---|---|
| freqMhz | Yes | centre frequency in MHz (e.g. 910.525); kHz/Hz also accepted | |
| bwKhz | Yes | bandwidth in kHz (sub-GHz: 62.5, 125, 250, 500; 2.4GHz/SX128x goes higher, up to 1000); Hz (62500) also accepted | |
| sf | Yes | spreading factor, 5–12 | |
| cr | Yes | coding rate 5–8 (the 'n' in 4/n); '4/5' also accepted | |
| node | No | target node (contact name or hex public-key prefix); omit to target the home node | |
| dryRun | No | preview the intent without contacting the device |
Output Schema
| Name | Required | Description |
|---|---|---|
| command | Yes | |
| tier | Yes | |
| annotations | Yes | the deterministic per-command risk hints this tier maps to; surfaced here (not as MCP tool-level annotations) because `admin` is one multiplexed tool |
| dryRun | Yes | |
| via | No | |
| preview | No | |
| reply | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds critical behavioral info beyond annotations: delayed effect after reboot and potential node disconnection if params don't match mesh. Annotations indicate idempotent and non-destructive, but description discloses side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences plus a warning. Front-loaded with main action. No extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present, no need to describe return values. Covers purpose, node targeting, and key behavioral warning. Schema fully documents parameters. Complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description adds little beyond listing parameter names. Baseline 3 as schema does the heavy lifting; description does not provide new semantic detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action (set) and resource (radio parameters on a node). Specific about parameters (frequency, bandwidth, spreading factor, coding rate). Distinguishes from sibling tools like set_channel, set_node_name, etc., which deal with different aspects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides guidance on omitting `node` for home and warns about reboot and network drop-off. Does not explicitly mention when not to use or compare to alternatives, but the warning is valuable context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_tx_powerSet a node's transmit powerAIdempotent
Set the radio transmit power in dBm on a node. Omit node to target home. Equivalent to admin <node> set-tx-power { dbm }. ⚠ Confirm the value is legal for your band/region; some boards add a PA stage on top of the configured dBm.
| Name | Required | Description | Default |
|---|---|---|---|
| dbm | Yes | transmit power in dBm, 1–22 | |
| node | No | target node (contact name or hex public-key prefix); omit to target the home node | |
| dryRun | No | preview the intent without contacting the device |
Output Schema
| Name | Required | Description |
|---|---|---|
| command | Yes | |
| tier | Yes | |
| annotations | Yes | the deterministic per-command risk hints this tier maps to; surfaced here (not as MCP tool-level annotations) because `admin` is one multiplexed tool |
| dryRun | Yes | |
| via | No | |
| preview | No | |
| reply | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses important behaviors beyond annotations: the PA stage can amplify the configured dBm, implying the actual output may differ. Annotations already indicate idempotency, so no contradiction. Adds context about destructive potential (legal issues) despite destructiveHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus a warning emoji. Every word adds value. Front-loaded with action, then parameter details, then critical caution. Excellent conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, parameters, default behavior, and a critical safety warning. Output schema exists and need not be described. Very complete for a simple setting tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all params fully (100%). Description adds value by clarifying the default for 'node' and giving an admin command equivalent, which helps understanding. No ambiguity remains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states action (set radio transmit power) and resource (node). Specifies unit (dBm), distinguishes from siblings like set_radio by focusing on power only. Includes equivalent admin command for context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states default target (home node when omitted) and warns about legal/regional limits and PA stage. Could be improved by contrasting with set_radio's broader scope, but the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
survey_meshSurvey the meshARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| home | Yes | |
| contacts | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint, destructiveHint=false, idempotentHint, openWorldHint. Description adds that the tool returns specific fields (role, last-heard time), which is useful but does not reveal additional behavioral traits beyond annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that efficiently conveys purpose, output, and use case. No unnecessary words or repetition. Front-loaded with key action and result.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, rich annotations, and an output schema, the description is mostly complete. It explains the return content and purpose. Could be improved by mentioning ordering or whether contacts are sorted, but overall sufficient for an agent to understand usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, so schema coverage is 100%. Baseline score is 4. Description compensates by explaining what the output includes (home node, contacts, role, last-heard time), which is the semantic meaning of the tool's result.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool lists the home node and every known contact with advertised role and last-heard time. The verb 'list' and resource are specific, and the purpose ('roster for spotting quiet or missing nodes') distinguishes it from sibling tools that focus on specific subsets like neighbors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives like 'get_node_neighbors' or 'discover_neighbors'. The description implies usefulness for monitoring, but lacks direct comparison or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_clockSync a node's clockA
Set a node's clock to the controller's current time. Omit node to target home. Equivalent to admin <node> sync-time. No-op if already in sync. For an explicit epoch on a remote repeater, use admin <node> set-time { epochSecs } instead.
| Name | Required | Description | Default |
|---|---|---|---|
| node | No | target node (contact name or hex public-key prefix); omit to target the home node | |
| dryRun | No | preview the intent without contacting the device |
Output Schema
| Name | Required | Description |
|---|---|---|
| command | Yes | |
| tier | Yes | |
| annotations | Yes | the deterministic per-command risk hints this tier maps to; surfaced here (not as MCP tool-level annotations) because `admin` is one multiplexed tool |
| dryRun | Yes | |
| via | No | |
| preview | No | |
| reply | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose read/write and non-destructive nature. Description adds 'No-op if already in sync' and mentions equivalence to admin sync-time, providing useful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences cover purpose, default, equivalent command, no-op behavior, and alternative. Every sentence earns its place; no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, presence of output schema, and full annotation coverage, the description is complete: it explains what the tool does, how to use it, default behavior, edge case (no-op), and a clear alternative for a different use case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for both parameters. Description reinforces the 'omit to target home' behavior for the node parameter but adds no new information beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States precise verb+resource: 'Set a node's clock to the controller's current time.' Clearly differentiates from 'admin' tool by mentioning the equivalent command and providing an alternative for explicit epoch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: 'Omit node to target home', 'No-op if already in sync', and gives an alternative tool call for explicit epoch: 'use admin <node> set-time { epochSecs } instead.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trace_pathTrace a mesh pathA
Trace a route through the mesh and report each repeater hop's SNR. Give an explicit path of repeater hops (comma-separated hex bytes, e.g. "23,5f,3a") or a node (a contact name / hex prefix) to trace along its known out-path. A path that doesn't respond returns a timeout.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | repeater hops as comma-separated hex bytes, e.g. "23,5f,3a" (or a hex string) | |
| node | No | a contact (name or hex prefix) to trace along its known out-path |
Output Schema
| Name | Required | Description |
|---|---|---|
| completed | Yes | true when the trace round-trip completed |
| hopCount | Yes | number of repeaters on the traced path |
| hops | Yes | each hop's path hash (hex) and SNR in dB, in path order |
| lastSnr | Yes | SNR of the final hop, in dB |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds timeout behavior ('A path that doesn't respond returns a timeout') but does not disclose whether the trace modifies state or requires specific permissions. Annotations are minimal (readOnlyHint: false, but no further context).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, directly stating the purpose and parameter usage without any fluff. It is front-loaded with the core function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential aspects: what the tool does, how to use parameters, and the timeout condition. Given that there is an output schema (not shown), not detailing the return structure is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes both parameters with examples (100% coverage). The description adds context about their usage (explicit path vs. known out-path for node), which helps differentiate the two options.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Trace a route through the mesh') and what it reports (SNR per hop). It distinguishes from sibling tools like reset_path or set_contact_path by focusing on tracing rather than modifying paths.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool: to trace a route either by explicit path or by known node. It implies alternatives for path management but doesn't explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
30 tool updates
v0.1.6- First observed
admin - First observed
broadcast_advert - First observed
delete_channel - First observed
discover_neighbors - First observed
export_contact - First observed
forget_credential - First observed
get_node_board - First observed
get_node_clock - First observed
get_node_config - First observed
get_node_health - First observed
get_node_neighbors - First observed
get_node_version - First observed
get_recent_traffic - First observed
import_contact - First observed
reboot_node - First observed
remove_contact - First observed
reset_path - First observed
send_message - First observed
set_auto_add_contacts - First observed
set_channel - First observed
set_contact_path - First observed
set_credential - First observed
set_node_location - First observed
set_node_name - First observed
set_radio - First observed
set_tx_power - First observed
share_contact - First observed
survey_mesh - First observed
sync_clock - First observed
trace_path
TDQS
Many dedicated tools overlap with subcommands of the monolithic `admin` tool, causing ambiguity. For example, `get_node_board`, `get_node_clock`, `broadcast_advert`, `discover_neighbors`, and several `set_*` tools have direct equivalents in admin subcommands, making it unclear when to use which.
Most tools follow a consistent verb_noun pattern (e.g., get_node_*, set_*, send_message). The only outlier is `admin`, which is a generic verb and does not fit the pattern. Overall, naming is predictable and clear.
With 30 tools, the count is on the higher side but still reasonable for the complexity of mesh network management. Some granularity could be reduced, but the tools are logically grouped. Agents may find the list lengthy but manageable.
The tool set covers a wide range of operations: health monitoring, configuration, messaging, contact management, and path tracing. Missing operations (e.g., OTA, permission management) are accessible via the `admin` tool, so no critical gaps exist.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Real-time planetary signal engine and Model Context Protocol (MCP) server for autonomous AI agents.
A Model Context Protocol server for Wix AI tools
Connect AI agents to Replynodes over the Model Context Protocol.
Related MCP Servers
- FlicenseNot gradedqualityFmaintenanceThis server implements the Model Context Protocol to facilitate meaningful interaction and understanding development between humans and AI through structured tools and progressive interaction patterns.57-
- AlicenseAqualityDmaintenanceA Model Context Protocol (MCP) server designed to easily dump your codebase context into Large Language Models (LLMs).1123Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA server that implements the Model Context Protocol, providing a standardized way to connect AI models to different data sources and tools.1511MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables AI models to interact with Mobi instances, providing structured data exchange and command execution for ontology management, data retrieval, and content creation.2MIT
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