@nexalware/mcp
OfficialClick on "Deploy 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., "@@nexalware/mcpturn on the back porch light"
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.
@nexalware/mcp
Nexalware as an MCP server, over stdio. Point any MCP-aware host (Claude Desktop, Claude Code, Cursor, etc.) at it, and your device control tools show up automatically, the host's own model decides when to call them. It's a thin wrapper around the TypeScript SDK, same operations, same permissions, just discoverable instead of hand-coded.
Building your own agent instead of using a pre-built host? Use the SDK directly, in TypeScript or Python. It's one function call away in code you already control, no subprocess or protocol discovery needed.
Get an API key
Create one on the dashboard (API Keys), scoped with a DeviceGrant to only the device(s) this agent should touch. This key ends up sitting in a local config file, least privilege matters more here than for a typical server-side integration.
Related MCP server: Relay
Claude Code
claude mcp add nexalware -e NEXALWARE_API_KEY=nxw_live_sk_your_key_here -- npx -y @nexalware/mcpClaude Desktop, or any host using a mcpServers config file
Add this block to the host's MCP config (Claude Desktop: Settings -> Developer -> Edit Config):
{
"mcpServers": {
"nexalware": {
"command": "npx",
"args": ["-y", "@nexalware/mcp"],
"env": {
"NEXALWARE_API_KEY": "nxw_live_sk_your_key_here"
}
}
}
}Restart the host afterward, tools only load at startup.
Environment variables
Variable | Required | Meaning |
| yes | The key from the step above. The server exits immediately with an error if this is missing. |
| no | Override for a self-hosted or staging deployment. Defaults to the production API. |
Using npx -y @nexalware/mcp (not a pinned version) means every launch runs the latest published release, no separate update step.
Troubleshooting
Invalid API key — either a placeholder was never replaced (nxw_live_sk_your_key_here sent as-is fails exactly like this, not with a clearer error), or a server process from before you changed the key is still running. Fully restart the host after any key/command change (for VS Code: File → Exit, then reopen) — claude mcp list can show Connected while an already-open session is still talking to a stale process holding the old key.
Windows PowerShell 5.1 drops a bare --, so claude mcp add fails with error: unknown option '-y'. Quote it:
claude mcp add nexalware --scope user -e "NEXALWARE_API_KEY=nxw_live_sk_your_key_here" '--' npx -y '@nexalware/mcp'If the server times out or keeps disconnecting, npx -y contacts the npm registry on every start, which can exceed the client's startup timeout on a slow connection. Install the package once and run it with node directly instead:
npm install -g @nexalware/mcp
claude mcp remove nexalware --scope user
claude mcp add nexalware --scope user -e "NEXALWARE_API_KEY=nxw_live_sk_your_key_here" '--' node "$(npm config get prefix)\node_modules\@nexalware\mcp\dist\bin\nexalware-mcp.js"Run npm install -g @nexalware/mcp again whenever you want to update, since this method skips the auto-latest behavior described above.
Tools
Every tool takes and returns the same shape as its equivalent TypeScript SDK method, a failed call comes back as a normal MCP tool error with the same message the API itself returns, not a crash. The model reads each tool's parameter descriptions straight from its schema at call time, the breakdown below is the same information, written out for a human deciding what to wire up or debugging what the agent just did.
list_devices
The devices this key can actually act on, only what its own DeviceGrant(s) cover, never the rest of the account. The natural first call, an agent that doesn't already know a deviceId starts here instead of guessing one.
projectId(string, optional) — Narrow the list to one project. Leave it out to list every device this key can reach.
get_device_commands
The command catalog a device accepts, so the agent knows what cmd values are actually valid before calling send_command.
deviceId(string, required) — From a priorlist_devicescall, shaped likedev_a1b2c3.
send_command
The general-purpose way to make a device do something.
deviceId(string, required) — Which device to command.cmd(string, required) — Must match anamefromget_device_commands, case-sensitive.params(object, optional) — Only if that command's catalog entry declares aparamsSchema, shape depends entirely on the specific command.
turn_device_on / turn_device_off
Shorthand for the ON/OFF command.
deviceId(string, required) — Which device to turn on/off.
get_device_telemetry
Historical telemetry readings, newest first.
deviceId(string, required) — Which device's history to read.metric(string, optional) — Only this metric name, e.g.power_draw. Omit to get every metric.limit(number, optional) — Max rows, 1-1000, defaults to 100.since(number, optional) — Unix milliseconds, only readings at or after this time.
get_latest_telemetry
Current state plus the most recent reading per metric, in one call.
deviceId(string, required) — Which device to snapshot.
list_sub_devices
Physical devices connected locally behind this one, if it's acting as a master. Empty until the master's own firmware reports one.
deviceId(string, required) — The master device's id, not a sub-device id.
get_sub_device
One sub-device's current state and capabilities.
deviceId(string, required) — The master device's id.subDeviceId(string, required) — From a priorlist_sub_devicescall, shaped likesub_x1y2z3.
get_sub_device_telemetry
Same idea as get_device_telemetry, scoped to one sub-device.
deviceId(string, required) — The master device's id.subDeviceId(string, required) — Which sub-device's history to read.metric/limit/since(optional) — Same meaning as inget_device_telemetry.
send_sub_device_command
Send a command to one sub-device behind a master, instead of the master itself.
deviceId(string, required) — The master device's id.subDeviceId(string, required) — Which sub-device to target.cmd(string, required) — Whatever command name the sub-device itself declared it accepts (its own vocabulary, not a Nexalware-defined catalog).params(object, optional) — Arguments for that command, if it needs any.
list_schedules
A device's active (PENDING or ACTIVE) schedules.
deviceId(string, required) — Which device's schedules to list.
get_schedule_context
The commands available to schedule for a device, same catalog as get_device_commands.
deviceId(string, required) — Which device to check.
create_schedule
Create or replace one of a device's 5 schedule slots, firing onCommand at onTs and offCommand at offTs. Calling this again with the same slot overwrites what was there.
deviceId(string, required) — Which device to schedule.slot(number, required) — Which of the 5 fixed slots to use, an integer 0 to 4.onTs(number, required) — Unix seconds to fireonCommand.offTs(number, required) — Unix seconds to fireoffCommand.label(string, optional) — Shown on the dashboard, max 7 characters.enabled(boolean, optional) — Omit to default enabled;falsecreates it disabled.onCommand(object, optional) —{ command, params? }. Defaults to{ command: "ON" }if omitted.offCommand(object, optional) — Same shape, defaults to{ command: "OFF" }.
update_schedule
Update an existing schedule slot, only the fields provided are changed.
deviceId(string, required) — Which device's schedule to update.slot(number, required) — Which slot (0-4), must already exist.onTs/offTs/label/enabled/onCommand/offCommand(all optional) — Same meaning as increate_schedule, include only what's changing.
delete_schedule
Cancel a schedule slot.
deviceId(string, required) — Which device's schedule to cancel.slot(number, required) — Which slot (0-4) to cancel.
get_schedule_history
A device's completed or cancelled schedules, most recent first.
deviceId(string, required) — Which device to check.
What it can't do
Nothing outside the calling key's own DeviceGrant. There's no tool to create a grant, register a device, or manage API keys, those stay dashboard-only, an MCP tool call is only ever as capable as the key you gave it, never able to expand its own access.
create_schedule/update_schedule fire existing commands from a device's catalog, they can't invent new ones. Defining, editing, or deleting a command definition itself stays a dashboard-only action.
Links
SDK Reference (TypeScript) / SDK Reference (Python) - the same operations, called directly from your own code.
Device Orchestration - what
list_sub_devices/send_sub_device_commandactually operate on.
License
MIT
Available Tools
17 toolscreate_scheduleA
Create or replace one of a device's schedule slots (0-4), firing onCommand at onTs and offCommand at offTs. Rejected if the calling key has no permission for either command.
| Name | Required | Description | Default |
|---|---|---|---|
| onTs | Yes | Unix seconds to fire onCommand. | |
| slot | Yes | Which of the device's 5 schedule slots (0-4) to use. | |
| label | No | Short label shown on the dashboard, max 7 characters. | |
| offTs | Yes | Unix seconds to fire offCommand. | |
| enabled | No | ||
| deviceId | Yes | The device's public id, e.g. dev_a1b2c3. | |
| onCommand | No | Defaults to { command: "ON" }. | |
| offCommand | No | Defaults to { command: "OFF" }. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the permission-rejection behavior and the on/off command timing, but it does not explain what 'replace' does to an existing slot (e.g., whether it silently overwrites), what the response is, or other mutation 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 tightly written sentences with no filler. The core operation is front-loaded, and the permission constraint follows logically as a secondary condition.
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 rich input schema (88% coverage) and no output schema, the description covers the essential operation and permission constraint adequately. It is slightly incomplete on replace semantics and idempotency, which matters for a mutation tool, but it is not deficient overall.
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 high at 88%, so the schema already documents nearly all parameters including slot range, labels, and command defaults. The description adds only a restatement of the onTs/offTs firing behavior, not new semantic detail beyond what the schema provides.
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 a specific verb and resource: create or replace a device's schedule slot, with slot range 0-4 and the on/off firing behavior. Clear enough to identify the operation, but it does not distinguish itself from the sibling update_schedule, which is a closely related mutation.
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?
Mentions a permission prerequisite (rejected if the calling key lacks permission for either command), which is useful context. However, it gives no explicit guidance on when to use this tool versus update_schedule, delete_schedule, or list_schedules, so usage must be inferred from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_scheduleC
Cancel a schedule slot.
| Name | Required | Description | Default |
|---|---|---|---|
| slot | Yes | Which schedule slot (0-4) to cancel. | |
| deviceId | Yes | The device's public id, e.g. dev_a1b2c3. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden for a destructive mutation. It does not state whether canceling clears the slot, deletes it permanently, is reversible, or what permissions are required.
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?
A single short sentence with no filler, front-loading the verb and resource. It is efficient, though the extreme brevity leaves no room for useful context.
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 destructive, annotation-free mutation tool with no output schema, the description is too thin: it omits reversibility, permission requirements, and result behavior. The schema documents its two parameters well, but the behavioral gap remains.
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 both parameters are documented with types, range, and an example device id format. The description adds no parameter meaning beyond the schema, so the baseline of 3 applies.
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 a specific verb (Cancel) and resource (schedule slot), which distinguishes it from sibling create_schedule, update_schedule, and list_schedules. However, 'schedule slot' is not defined and no scope details are given, so it falls short of a full 5.
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?
There is no guidance on when to cancel a slot versus calling update_schedule or create_schedule, no prerequisites, and no exclusions. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_device_commandsA
List the commands a device accepts: name, label, and the params each one expects.
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | Yes | The device's public id, e.g. dev_a1b2c3. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It does describe the shape of the output (name, label, params), but says nothing about read-only safety, error behavior for an invalid deviceId, or whether results are paginated.
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?
One sentence, no filler, with the verb-and-resource front-loaded and the returned fields appended as a compact clause. Every word 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?
For a simple single-param read tool with no output schema and no annotations, the description covers purpose and expected return contents adequately. Minor gaps remain around safety profile and error cases, but nothing an agent needs to call it correctly is missing.
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?
There is a single parameter (deviceId) with 100% schema description coverage, including a format example (dev_a1b2c3). The description adds no parameter meaning beyond the schema, so the baseline 3 applies.
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 a specific verb (List) and resource (commands a device accepts) plus the returned fields, so an agent can distinguish it from send_command, which dispatches rather than enumerates. It does not name a sibling explicitly, so it stops short of a 5.
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?
Usage is only implied: listing a device's accepted commands naturally precedes send_command, but the description never states when to use it, when not to, or which sibling it pairs with.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_device_telemetryA
Read a device's telemetry history, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows to return, defaults to 100. | |
| since | No | Unix ms, only readings recorded at or after this time. | |
| metric | No | Only return readings for this metric. | |
| deviceId | Yes | The device's public id, e.g. dev_a1b2c3. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the sort order (newest first) and that it is a read. It does not state permissions, pagination behavior, or that limit defaults to 100 (that lives only in the schema).
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?
A single short sentence with zero waste, and the resource is front-loaded ahead of the ordering qualifier.
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 4-parameter read tool with no annotations and no output schema, the description is minimal viable: it conveys read-only intent and ordering but omits any mention of the filtering capabilities (since, metric) or result-size controls that an agent should understand before calling.
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 all four parameters (deviceId, limit, since, metric) are already documented in the schema. The description adds no syntax or semantics beyond what is structured, so the baseline 3 applies.
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 a specific verb ('Read'), resource ('device's telemetry history'), and an ordering convention ('newest first'). It implicitly separates from get_latest_telemetry by promising history rather than the latest reading, but never names that sibling explicitly.
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?
Usage is only implied: 'history' suggests this is for retrieving past readings rather than the current one. There is no explicit when-to-use or when-not-to-use guidance, and the sibling get_latest_telemetry / get_sub_device_telemetry alternatives are never mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_latest_telemetryB
Read a device's current state plus the most recent reading per telemetry metric.
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | Yes | The device's public id, e.g. dev_a1b2c3. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the return scope (current state plus latest reading per metric), but omits auth requirements, rate limits, pagination, and whether historical data is excluded. Read-only nature is only implied by 'Read'.
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?
A single sentence that is front-loaded and contains no filler. Every word contributes to the core 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?
For a simple one-parameter read tool with no annotations or output schema, the description states what is returned but leaves ambiguity versus sibling telemetry tools and lacks behavioral constraints. It is adequate but incomplete for reliable selection.
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?
There is one parameter and schema description coverage is 100%, so the schema fully documents deviceId. The description adds no syntax or semantic meaning beyond what the schema provides, making the baseline 3 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?
States a specific verb ('Read') and resource ('device's current state plus the most recent reading per telemetry metric'). It does not explicitly differentiate this from sibling tools like get_device_telemetry or get_sub_device_telemetry; 'latest' implies recency but no contrast is drawn.
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 when-to-use guidance, no alternatives named, and no exclusions. The description implies a snapshot use case but does not tell the agent when to choose this over get_device_telemetry.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_schedule_contextA
List the commands available to schedule for a device, same catalog as get_device_commands.
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | Yes | The device's public id, e.g. dev_a1b2c3. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'List' clearly signals a non-mutating read, and the equivalence-to-get_device_commands note adds useful context, but auth requirements, device state prerequisites, and result shape are not disclosed.
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?
A single tight sentence with the action front-loaded; nothing is wasted. The trailing comparison clause is slightly redundant with the main purpose statement but earns its place for routing.
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 no annotations and no output schema, the description partially compensates by indicating the return is a command catalog identical to get_device_commands, but it leaves the response format and any device-state prerequisites unspecified for a tool whose name suggests broader '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 description coverage is 100% for the single required deviceId parameter, so the schema already documents the format and example. The description adds only the implicit device scoping and no syntax or constraint detail 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 a specific verb ('List') and resource ('commands available to schedule for a device'), and distinguishes itself from the sibling get_device_commands by asserting catalog equivalence. The name 'get_schedule_context' is vaguer than the description, but the description itself is clear.
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?
Names the alternative (get_device_commands) and states the condition of equivalence, which helps an agent route correctly. It does not state any when-not or any prerequisite beyond the device scope, so it falls short of full 5-level guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_schedule_historyA
List a device's completed or cancelled schedules, most recent first.
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | Yes | The device's public id, e.g. dev_a1b2c3. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It usefully discloses the result ordering ('most recent first') and the status filter, but says nothing about pagination, result limits, or whether the history is bounded in time. Read-only nature is only implied by 'List'.
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?
A single, front-loaded sentence with the verb, resource, and ordering constraint; no filler or redundant clauses.
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 read-only list with a fully documented single parameter and no output schema, the description covers what the tool returns at a conceptual level (completed/cancelled schedules, newest first). Minor gaps remain on pagination and volume of history, which matter for list endpoints.
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?
There is one parameter with 100% schema description coverage (deviceId, including a format example), so the schema already does the work. The description adds no extra meaning about the identifier beyond restating that it is a device's schedules, which is the baseline 3 case.
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 a specific verb (List) and resource (a device's schedules) narrowed to completed/cancelled statuses, which implicitly separates it from the sibling list_schedules. It never names the alternative explicitly, so an agent must infer the distinction from the status filter alone.
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 status scope ('completed or cancelled') implies this is the historical/audit view rather than the active-schedule view, but there is no explicit when-to-use statement, no mention of list_schedules as the alternative, and no prerequisites stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sub_deviceC
Read one sub-device's current state and capabilities.
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | Yes | The master device's public id. | |
| subDeviceId | Yes | The sub-device's public id, e.g. sub_x1y2z3. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read via 'Read' but says nothing about required permissions, error behavior when the sub-device is unknown, or what 'capabilities' actually returns.
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?
A single compact sentence with the resource and scope front-loaded and no wasted words. It could be marginally more useful with one routing clause, but it is efficiently 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?
With no output schema and no annotations, the description should ideally clarify the return shape ('current state and capabilities' gestures at it but stays vague) and any auth requirements. It is adequate for a two-parameter read but leaves real 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 coverage is 100%, so both deviceId and subDeviceId are already documented in the schema (master device public id, sub-device public id). The description adds nothing about parameter syntax or relationships, so the baseline 3 applies.
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 a specific verb ('Read') and resource ('one sub-device') plus scope ('current state and capabilities'). It clearly signals single-item retrieval, which distinguishes it from list_sub_devices and get_sub_device_telemetry, though it never names those siblings explicitly.
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 when-to-use guidance and no mention of alternatives such as get_sub_device_telemetry or list_sub_devices. The agent must infer that this is the single-sub-device state fetch from the phrase 'Read one' alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sub_device_telemetryA
Read one sub-device's telemetry history, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows to return, defaults to 100. | |
| since | No | Unix ms, only readings recorded at or after this time. | |
| metric | No | Only return readings for this metric. | |
| deviceId | Yes | The master device's public id. | |
| subDeviceId | Yes | The sub-device's public id, e.g. sub_x1y2z3. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the behavioral burden; it does disclose the read-only nature ('Read') and the result ordering ('newest first'), which is real value beyond the schema. However, it says nothing about pagination behavior beyond the limit cap, rate limits, or error cases for unknown ids.
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?
A single tight sentence with the resource and ordering front-loaded and zero filler. Every word 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?
For a simple read-only query tool with a fully documented schema and no output schema, the description covers purpose, scope, and ordering adequately. The main omission is guidance on the limit/since interplay and how to page further, which is minor for this complexity level.
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 all five parameters (deviceId, subDeviceId, limit, since, metric) are already documented in the schema, including the default of 100 for limit and the Unix-ms meaning of since. The description adds no parameter-level syntax or constraints, so the baseline 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?
States a clear verb ('Read') and resource ('one sub-device's telemetry history') and adds a useful scope/order detail ('newest first'). It implicitly distinguishes this from get_device_telemetry and get_latest_telemetry by specifying a single sub-device and a full history, though it never names those alternatives explicitly.
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?
Usage is only implied: an agent can infer this is for retrieving historical readings from one sub-device, but the description never says when to choose it over get_latest_telemetry (latest only) or get_device_telemetry (master device). No exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_devicesA
List the devices this API key can actually act on - only what its own DeviceGrant(s) cover, never the rest of the account. Call this first to discover valid deviceId values instead of guessing or asking the user to paste one in.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | Only list devices in this project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and usefully discloses the critical scoping rule: returns only what the API key's DeviceGrant(s) cover, never the rest of the account. It does not describe response structure, pagination, or error behavior, so it adds substantial context but is not exhaustive.
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 tight sentences with zero waste. The scoping constraint and the primary usage recommendation are both front-loaded, so an agent gets the critical information immediately.
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 one-parameter list tool with no output schema and no annotations, the description covers the essential scope and discovery purpose well. It implies the return is valid deviceId values but does not describe the full response shape, leaving a minor gap in an otherwise complete definition.
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 single projectId parameter is already fully documented in the schema. The description adds no parameter-level meaning beyond that, making the baseline 3 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?
States a specific verb and resource (list devices) and immediately scopes it to what the API key's DeviceGrant(s) cover, distinguishing it from account-wide or sub-device listings. An agent can identify this as the grant-scoped device enumerator without opening the schema.
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 'Call this first to discover valid deviceId values instead of guessing or asking the user to paste one in,' giving clear when-to-use context and an implied alternative behavior. It does not name a sibling tool as an alternative or state when not to use it, so it falls short of the top tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_schedulesB
List a device's active (pending or currently running) schedules.
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | Yes | The device's public id, e.g. dev_a1b2c3. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does add useful behavioral context by disclosing that only pending/running schedules are returned (a filter not in the schema), but it says nothing about result size, ordering, pagination, or permissions needed to read schedules.
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?
A single tight sentence with the scope constraint front-loaded and no filler. The parenthetical definition of 'active' is slightly redundant but clarifies an otherwise ambiguous term, so it 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?
For a simple one-parameter read tool with full schema coverage this is minimally adequate, but with no annotations and no output schema the description should say more about what comes back (e.g., pagination, whether empty results are possible) to fully guide invocation.
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?
There is one parameter (deviceId) with 100% schema description coverage, so the schema already documents it fully (including the example format). The description adds no parameter-level information, which is the expected baseline when the 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?
States a specific verb (List) and resource (a device's schedules) and narrows scope to active ones, parenthetically defining active as 'pending or currently running'. It is clear what the tool returns, but it does not name or distinguish itself from siblings like get_schedule_history, get_schedule_context, or list_devices, so the agent must infer which schedule-listing tool to pick.
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?
There is no when-to-use guidance at all. With siblings such as get_schedule_history and get_schedule_context in the same family, the description never says when to call this one versus those, nor what prerequisites (e.g., a valid deviceId) exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sub_devicesA
List the physical sub-devices connected locally behind this device, if it's acting as a master. Empty until the master actually reports one, this never includes software agents.
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | Yes | The master device's public id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does useful work: it discloses that results are conditional on the master role, will be empty until the master reports a sub-device, and never includes software agents. It does not mention auth requirements or pagination, but the key behavioral traits are surfaced.
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?
A single tight sentence front-loads the operation and scope, with the role condition and exclusion clause appended without waste. Nothing could be removed without losing information.
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 one-parameter read-only listing with no output schema, the description covers the salient edge cases (empty until reported, no software agents) and the master-role precondition. Auth/permission context is missing but not critical for a list operation.
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?
There is one parameter (deviceId) with 100% schema description coverage, so the schema already documents it fully. The description notes the master-role context that makes deviceId meaningful but adds no syntax or format detail beyond the schema. Baseline 3 applies.
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 a specific verb (List) and resource (physical sub-devices connected locally behind this device), plus the role condition (acting as a master). It also carves out what it does NOT return (software agents), which helps distinguish it from list_devices, though it never names a sibling tool explicitly.
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 phrase "if it's acting as a master" implies when the tool is applicable and that it may return nothing otherwise. However, it gives no explicit when-to-use/when-not guidance relative to alternatives like get_sub_device or list_devices, leaving the agent to infer routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_commandA
Send a command to a device. Check get_device_commands first for valid cmd names and expected params. Rejected if the calling key has no permission for this device/command.
| Name | Required | Description | Default |
|---|---|---|---|
| cmd | Yes | Command name, matches one of get_device_commands' results. | |
| params | No | Arguments for this command, only if its command definition declares a paramsSchema. | |
| deviceId | Yes | The device's public id, e.g. dev_a1b2c3. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it discloses the permission-rejection behavior and the ordering dependency on get_device_commands, which is genuinely useful. However, it says nothing about the command's side effects, whether it is reversible, or what a successful invocation returns for a mutating tool.
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 short sentences, each earnings its place: action, prerequisite, and failure condition, with the core action front-loaded. No filler.
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?
No output schema exists, so return values need not be explained, but with zero annotation coverage and a mutation-like tool the description should do more to characterize effects and reversibility. Missing child are minor given a fully documented schema, but the behavioral picture is thin.
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 all three parameters are documented inline (cmd matches get_device_commands results, params only when a paramsSchema exists, deviceId format). The description repeats the get_device_commands link but adds no syntax or format detail beyond the schema, so the baseline 3 is correct.
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 a specific verb (send) and resource (a command to a device), so the core action is unambiguous. It does not distinguish itself from the sibling send_sub_device_command, leaving an agent to infer the device-vs-sub-device split from names alone.
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?
Gives a concrete prerequisite (call get_device_commands first for valid cmd names and expected params) and a failure condition (rejected if the calling key lacks permission). It stops short of saying when to prefer this over send_sub_device_command, so it is clear context without explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_sub_device_commandA
Send a command to one specific sub-device behind a master, instead of the master itself. Not validated against a catalog, Nexalware relays it opaquely, the master and sub-device interpret it.
| Name | Required | Description | Default |
|---|---|---|---|
| cmd | Yes | Command name, whatever the sub-device declared it accepts. | |
| params | No | Arguments for this command, only if its command definition declares a paramsSchema. | |
| deviceId | Yes | The master device's public id. | |
| subDeviceId | Yes | The sub-device's public id, e.g. sub_x1y2z3. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose real behavioral traits: the command is not validated against a catalog and is relayed opaquely for the master/sub-device to interpret. That tells the agent errors won't be caught here and gives a mental model of the relay path. It omits failure/timeout behavior and side-effect characteristics, keeping it short of 5.
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?
Front-loaded with the core purpose and kept to two tight sentences with no filler. The second sentence is a slightly run-on triple clause, but every clause carries information an agent needs about the unvalidated relay.
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 an opaque, unvalidated mutation-style command with no annotations and no output schema, the description covers what the tool does and its non-validating nature, but leaves open what the agent should expect on failure, whether the device acknowledges/returns anything, and any auth or reachability requirements. Adequate but with clear gaps for this 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 cmd, params, deviceId, and subDeviceId are already documented (including the 'only if paramsSchema is declared' nuance for params). The description adds no extra parameter meaning, so the baseline 3 applies.
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?
Specific verb (send) plus resource (command to a specific sub-device behind a master) and an explicit scope contrast: 'instead of the master itself.' This lets an agent distinguish it from the sibling send_command (which targets the master) without reading either schema.
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 phrase 'instead of the master itself' implicitly routes the agent here when the target is a sub-device rather than the master, which is meaningful selection guidance. It stops short of naming send_command as the alternative or stating preconditions (e.g., that the sub-device must be reachable), so it is clear context but not full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
turn_device_offB
Shorthand for sending the OFF command to a device.
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | Yes | The device's public id, e.g. dev_a1b2c3. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It states the command sent ('OFF command') but says nothing about permissions, side effects, reversibility, or what happens if the device is already off, which is minimal for a mutation tool.
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 a single front-loaded sentence with no wasted words. It gets straight to the point without unnecessary repetition or delay.
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 one-parameter command, the description plus schema is enough to call the tool correctly, but it omits usage routing to send_command and any behavioral context. Given no annotations and no output schema, it leaves notable gaps for an agent choosing between siblings.
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 fully documents the single deviceId parameter with an example value, and the description adds no further parameter meaning. With 100% schema description coverage, the 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 states a specific action: sending the OFF command to a device, which distinguishes it from turn_device_on. However, it does not explicitly differentiate itself from the sibling send_command, which could also send OFF, leaving the agent to infer that this is the specialized shorthand.
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 word 'Shorthand' implies the tool is a convenience wrapper for sending an OFF command, giving an implied use case. Yet it never says when to use this versus send_command or turn_device_on, nor does it provide any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
turn_device_onB
Shorthand for sending the ON command to a device.
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | Yes | The device's public id, e.g. dev_a1b2c3. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden. It reveals that this is a write/command operation ('sending the ON command'), but says nothing about idempotency, required permissions, error behavior, or what a device already on does.
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?
One short sentence, front-loaded with the action and resource, with no filler.
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 trivial single-parameter command tool with no output schema this is close to adequate, but the missing relationship to send_command/turn_device_off and any note on idempotency leaves a gap an agent cannot fill from structured data.
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 single deviceId parameter has 100% schema description coverage with a concrete example format, so the schema already does the work. The description adds no meaning 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 a specific action (turning a device on) and the resource (device), and the phrasing implicitly distinguishes it from the sibling turn_device_off. It does not explicitly name the sibling or confirm it is the same as send_command with an ON payload, so it stops short of a 5.
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 guidance on when to use this versus turn_device_off, send_command, or send_sub_device_command. The word 'Shorthand' hints at an equivalence but never states when that shorthand is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_scheduleC
Update an existing schedule slot, only the fields provided are changed.
| Name | Required | Description | Default |
|---|---|---|---|
| onTs | No | ||
| slot | Yes | Which schedule slot (0-4) to update. | |
| label | No | ||
| offTs | No | ||
| enabled | No | ||
| deviceId | Yes | The device's public id, e.g. dev_a1b2c3. | |
| onCommand | No | ||
| offCommand | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose a meaningful trait – partial/patch semantics, since only provided fields are changed – but omits permission requirements, error behavior for invalid slots, and whether omitted fields are truly preserved versus reset.
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?
A single tight sentence with the key constraint (partial update) front-loaded and no filler. It is appropriately sized, though the brevity leaves no room for the guidance the tool needs.
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 mutation tool with no annotations, no output schema, nested objects, and 8 parameters at 25% coverage, the description is too thin. It should cover permissions, the meaning of slot range, the on/off command pairing, and error conditions.
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 only 25% across 8 parameters, so the description needs to compensate but does not mention any parameter at all. The schema documents slot, deviceId, and command name, leaving onTs, offTs, label, enabled, and params undocumented in both places.
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 a specific verb and resource (update an existing schedule slot) and clarifies scope. It does not explicitly differentiate from create_schedule or delete_schedule, but the verb makes the distinction reasonably clear.
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 gives no guidance on when to use this versus create_schedule, delete_schedule, or other schedule tools, and no prerequisites. An agent must infer usage from the name alone.
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.
17 tool updates
v0.1.5- First observed
create_schedule - First observed
delete_schedule - First observed
get_device_commands - First observed
get_device_telemetry - First observed
get_latest_telemetry - First observed
get_schedule_context - First observed
get_schedule_history - First observed
get_sub_device - First observed
get_sub_device_telemetry - First observed
list_devices - First observed
list_schedules - First observed
list_sub_devices - First observed
send_command - First observed
send_sub_device_command - First observed
turn_device_off - First observed
turn_device_on - First observed
update_schedule
TDQS
Scored across 17 tools
Tools are largely distinct by resource (device vs sub-device) and action (telemetry, command, schedule). Minor overlap exists between turn_device_on/off and send_command, and between get_device_commands and get_schedule_context, but descriptions clarify the boundaries.
All tool names use a consistent snake_case verb_noun pattern (get_, list_, send_, turn_, create_, update_, delete_). The only slight deviation is turn_device_on/off, but it remains readable and consistent with the overall style.
17 tools is slightly above the ideal range but justified by the need to cover devices, sub-devices, telemetry, commands, and schedules. Each tool appears to serve a distinct purpose with no redundant operations.
The surface covers device discovery, command catalog, sending commands, telemetry (latest and history), sub-device operations, and full schedule lifecycle (create/update/delete/list/history/context). Minor gaps exist, such as no device metadata update or sub-device command catalog, but core workflows are complete.
Maintenance
Related MCP Connectors
An authenticated remote MCP server for user-owned devices and one-shot capability invocation.
327 dev tools via REST API and MCP. Generate Dockerfiles, schemas, K8s, APIs, and more.
The OpenRouter for tools. One MCP connection gives any AI agent 254 hosted tools, pay per call.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides a standardized MCP interface for interacting with Shopify tools and services, enabling unified API access and compatibility with MCP-compliant clients.1MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to access a unified catalog of tools from various APIs (OpenAPI, GraphQL, MCP, Google Discovery) through the MCP protocol.173 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables aggregation, filtering, transformation, and composition of tools from multiple MCP servers through a single proxy with tool views.5AGPL 3.0
- AlicenseAqualityAmaintenanceEnables MCP-capable clients to query the tool registry, check install status, get tool recommendations for CTF or bug-bounty work, and run installed security tools through a governed execution path.1566MIT