nt-mcp-server
This server is an MCP server for interacting with FRC NetworkTables, letting AI agents read, write, monitor, record, and replay robot telemetry data.
Connect to a NetworkTables server (default local RobotPy sim at 127.0.0.1:5810, or by team number)
Disconnect and inspect connection state
Read single or multiple topic values and topic metadata
List/filter topics by prefix, regex, or wildcard
Write values to topics, with optional strict type checking
Subscribe to live topic updates, either as a one-shot capture/summary or as an ongoing persistent subscription
Poll and stop persistent subscriptions
Record live NetworkTables data to timestamped NDJSON files using the bundled nt-recorder CLI
List/manage recordings and inspect their metadata
Query recorded history for a topic or across prefixes
Analyze offline recordings: list unique topics, summarize values, and replay/sample events
Works as a uvx-runnable MCP server for integration with agents like opencode
Provides tools for reading, writing, and monitoring FRC NetworkTables data, allowing interaction with FIRST Robotics Competition simulators and real robot network tables.
Click 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., "@nt-mcp-serverRead the current value of /SmartDashboard/robotPosition"
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.
nt-mcp-server
What is a MCP?
The Model Context Protocol (MCP) is a standard way for AI agents to use external tools and data. The concept is established by Anthropic researchers in the end of 2024. For more information, see https://modelcontextprotocol.io/.
This server exposes FIRST Robotics Competition (FRC) NetworkTables through MCP, so a coding agent can inspect telemetry, diagnose robot behavior, and test values without manually copying data between the robot, dashboards, and code.
It works with a local RobotPy simulation by default and can also connect to a real robot.
How do I use AI while connecting to the Robot Wifi?
Obviously Robot Wifi doesn't provide Internet access, so you can't call LLM. The key is to use TWO network adapters: one for the Robot Wifi, another for Internet access. The first network adapter is usually the one inside your device that you always use to go online. For the second one, your laptop may have a Ethernet port, you can therefore connect a Ethernet cable to the
DSport of the robot radio. In other cases, you may want a USB-to-Ethernet adapter or a USB wireless network adapter. The connections should be ready to go now. Rarely you need to configure the routing table of your device to explicitly guide traffic targeting the robot IP to the correct network adapter.
Register with an agent
The package can run directly from Git with uvx, so no checkout or pre-built virtual environment is required. Install uv first, then use the setup for your agent.
Codex
codex mcp add nt -- uvx --from git+https://github.com/Mzzj114/nt-mcp-server.git nt-mcp-server
codex mcp listClaude Code
claude mcp add --scope project nt -- uvx --from git+https://github.com/Mzzj114/nt-mcp-server.git nt-mcp-server
claude mcp listOpenCode
Add the server to the project's opencode.jsonc:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"nt": {
"type": "local",
"command": [
"uvx",
"--from",
"git+https://github.com/Mzzj114/nt-mcp-server.git",
"nt-mcp-server"
],
"enabled": true
}
}
}Verify the connection with opencode mcp list.
Related MCP server: agent-comm
Tools
The server exposes 16 tools (13 live + 3 offline). Every live response includes a connected flag. Reads and writes have separate tools.
Live tools
Tool | Description |
| Start the NT4 client and wait for a connection. Defaults to |
| Stop the client, tear down persistent subscriptions and request active recordings to close. |
| Return connection state, remote peers, resolved target and package version. |
| Read one or more exact |
| Return one topic's name, NT type and properties, or null if unknown. |
| Publish an |
| Discover live topic names with optional |
| Observe selected updates for |
| Start a persistent in-memory subscription and return its |
| Read buffered events; |
| Stop the subscription and free its resources. |
| Start an NDJSON recording and immediately return its |
| Close a recording and return a compact receipt with timing, row count, topic names and truncation flags, without sample values. |
Live sampling, subscriptions, recordings and recording queries share prefixes, exact topics, regex and wildcard selectors. Entries within a list are ORed; different selector kinds are ANDed. At least one selector is required. A bare prefixes=["/"] is allowed for recordings, but refused for inline sampling and recording queries unless another selector narrows it.
nt_sample blocks for its fixed window and returns inline results. For an interactive test, call nt_start_recording, perform the test, then call nt_stop_recording. Use the returned ID for offline analysis after the file closes.
Offline recording tools
Tool | Description |
| List available files, newest first, with file metadata and persisted capture timing when available. |
| Return capture duration, NT event span, sample count, file metadata and a sorted topic list. |
| Query selected topics. Returns |
The offline directory defaults to NT_RECORDINGS_DIR or ./recordings; output_dir overrides it. Omitting recording_id selects the most recently modified recording. Queries return the resolved ID. The MCP tools refuse to inspect a recording still being written by this server; a separate CLI recorder must also be stopped before analysis.
For one topic's history:
nt_query_recording(
topics=["/SmartDashboard/Swerve/Pose X"],
recording_id="nt-record-...ndjson",
last_seconds=5,
output="summary",
)Inline sampling and offline queries are bounded by per-topic limit, total max_rows (default 5000, maximum 5000) and a 60,000-character ceiling. Summary statistics describe retained rows; rows / total_rows / truncated report reduction explicitly. Offline total_rows counts matching events before limits and decimation; live total_rows counts events after sampling/change filters and before output clipping. last_seconds uses the latest NT event timestamp, which can differ from the capture clock.
Each new recording has a sibling .meta.json sidecar. capture_duration_seconds measures capture time; event_span_seconds measures the range of NT last-change timestamps, including older immediate values. Legacy files without sidecars report duration_source="event_span".
The nt-recorder CLI remains available independently of MCP, including --team N for robot address lookup. Recordings are local to the server host; no robot-side changes are needed.
Development
Python 3.14.0 venv in
.venv; deps installed fromrequirements.txt(fastmcp==3.4.7,pyntcore==2026.2.2).Tests:
uv run pytest tests/ -v
To run the mcp server by yourself from a local checkout, start the stdio MCP server with:
uv run nt-mcp-serverEquivalent Python entry point:
python -m nt_mcp_serverFor RobotPy simulation, start the simulator from the robot project:
python -m robotpy simThen use nt_connect with its defaults to connect to 127.0.0.1:5810.
For a real robot, connect the development machine to the robot network and call nt_connect with team_number. If the agent also needs Internet access, use separate network adapters—for example, Wi-Fi for Internet and Ethernet or a USB network adapter for the robot—and configure routing if needed.
Release notes
0.3.0 — consolidated tool surface
The exposed MCP surface changes from 20 to 16 tools. Restart the MCP server/client to refresh tool discovery. These are breaking name and argument changes:
Previous call | Replacement |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Schemas describe every parameter and enforce output enums, absolute topic names, non-empty batches, positive sampling intervals, row budgets, port ranges and filename-only recording IDs. Offline reader functions in nt_recorder retain their Python API.
0.2.0 — breaking changes
nt_subscribeoutput rework: theformatparameter was removed and replaced byoutput, which defaults to"file". Callers that passedformat=must switch tooutput=. In"file"mode the response is a compact receipt (recording path, row count, topic list) with no sample values; inline modes ("summary","samples") are bounded bylimit,max_rows, and a 60,000-character ceiling.Offline tools return receipts:
nt_get_historynow includesrows/total_rows/truncated;nt_subscribe_offlinereturns{recording_id, topics, rows, total_rows, truncated}. Clipping is never silent.nt_connecttarget guards: an ambiguous target (bothteam_numberand a non-defaultserver_ip) is rejected before any state change, and re-targeting a running client is refused — callnt_disconnectfirst.nt_connection_infogainedtargetandversion:targetis the resolved connect target (nullbefore the first connect);versionis the installed package version.
License
This project is under MIT License.
Available Tools
18 toolsnt_connectB
Start the NT4 client and wait for a live connection.
| Name | Required | Description | Default |
|---|---|---|---|
| identity | No | nt-mcp | |
| server_ip | No | 127.0.0.1 | |
| server_port | No | ||
| team_number | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior. It mentions 'wait for a live connection' implying a blocking operation, but does not describe failure modes, timeouts, side effects, idempotency, or whether it replaces an existing connection. The description is too sparse to inform the agent of important behavioral traits.
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, succinct sentence with no filler, redundancy, or unnecessary detail. It is front-loaded with the core action and easily parseable, making it ideal for quick consumption.
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 likely serves as a setup step and has many siblings, the description lacks essential context. It does not explain why the tool is needed, what happens after connection, or any relationship to other tools. An output schema exists, but the description still does not cover the full scope of a connection operation, leaving gaps in an agent's understanding.
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 has 4 parameters (identity, server_ip, server_port, team_number) with zero schema descriptions (coverage 0%). The description does not elaborate on any parameter, forcing the agent to infer meaning from names and defaults. For instance, 'team_number' is ambiguous, and no explanation is given for how these parameters affect the connection.
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 'Start the NT4 client and wait for a live connection' clearly identifies the action (starting a client and waiting for connection), the resource (NT4 client), and implicitly differentiates it from siblings like nt_disconnect and nt_connection_info. It uses a specific verb and resource combination, making the purpose unmistakable.
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 no explicit guidance on when to use this tool versus alternatives, nor does it mention prerequisites, exclusions, or typical scenarios. It only states the action without explaining context such as 'call this before other NT operations' or 'avoid calling if already connected'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nt_connection_infoC
Return {"connected": bool, "connections": [...]}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only mentions the return structure and gives no information about side effects, safety, error conditions, or whether it is read-only. This is a significant gap for a tool that likely queries connection state.
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 extremely terse, consisting of a single line. While it is not verbose, it is under-specified—it does not provide enough context to be useful. The format is front-loaded but the content is insufficient, reflecting under-specification rather than effective 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?
Given that an output schema exists, the description is not required to detail return values, but it still fails to explain the tool's role. It omits any mention of what 'connections' refers to, the meaning of 'connected', or the operational context. The tool appears to be a simple query, but without context, the description is incomplete.
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 tool has zero parameters, and the schema is empty with 100% coverage by default. The baseline for 0-param tools is 4, and the description adds no parameter-related requirements. There is nothing to explain, so this score 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 only states 'Return {"connected": bool, "connections": [...]}' which is a return type pattern, but does not explicitly say what the tool does (e.g., 'Get connection info'). It hints at returning connection status but lacks a clear verb and resource. It does not differentiate from siblings like nt_get_info or nt_list_topics.
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 tool versus alternatives. It does not mention prerequisites (e.g., whether a connection must be active) or contrast with related tools like nt_connect or nt_disconnect. The absence of any usage context leaves the agent without direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nt_disconnectA
Stop the NT4 client and tear down any persistent subscriptions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states what it does (stop client, tear down subscriptions) but doesn't disclose side effects like whether it's irreversible, whether it requires confirmation, or if it affects other clients. No annotations are present to fill this gap.
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 to the point, with no unnecessary words. It effectively conveys the action in one sentence.
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 simplicity of the operation and that an output schema exists, the description is sufficiently complete. It tells what happens (client stop and subscription teardown) without needing to elaborate on 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?
The tool takes no parameters, and the schema coverage is 100% (empty). Since no parameters exist, the description adds no extra info, but the baseline is 3 due to high schema 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 the action: stop the NT4 client and tear down persistent subscriptions. It distinguishes from sibling tools like nt_connect (start) and nt_subscribe (create subscriptions).
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 is implied this is used when the client should be stopped and subscriptions cleaned up, but it doesn't explicitly state when to prefer this over other tools or mention any prerequisites (e.g., must be connected).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nt_getB
Return the JSON-normalized value of topic.
Response: {"connected": bool, "value": jsonable | null} when
connected, or {"connected": false, "error": "..."} when
disconnected.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses the tool's connection-dependent behavior (returns value when connected, error when disconnected) and defines the response structure. However, it does not mention potential side effects, timeout behavior, or whether the topic must exist.
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: the first states the core function, the second provides the response format. It is front-loaded, efficient, and contains no fluff.
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, no nested objects) and the provided response format, the description covers the essential purpose, connection state behavior, and output structure. It is missing usage guidelines and parameter details, but as a read-only simple getter, it is reasonably 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?
The input schema has one 'topic' string parameter with no descriptions (0% coverage). The description adds minimal meaning beyond 'the value of topic,' lacking details on valid topic formats, path syntax, or examples. It does not sufficiently compensate for the low schema 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 the tool returns the JSON-normalized value of a topic, using a specific verb ('Return') and a clear resource. It is distinct from siblings like nt_get_multiple by focusing on a single topic, though it does not explicitly contrast itself with them.
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 use this tool versus alternatives like nt_get_multiple or nt_subscribe. It also does not mention prerequisites such as requiring an active connection, beyond the implicit connected/disconnected response states.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nt_get_historyB
Return event history for one topic from a recording.
last_seconds selects the most recent N seconds of the recording.
sample_interval and format="summary" behave like live
nt_subscribe.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| limit | No | ||
| start | No | ||
| topic | Yes | ||
| format | No | samples | |
| output_dir | No | ||
| last_seconds | No | ||
| recording_id | No | ||
| sample_interval | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose all behavioral traits. It only mentions that 'last_seconds' selects a recent time window and that some parameters mirror nt_subscribe, but it omits details about read-only nature, required recordings, connection prerequisites, return format, or side effects. The agent is largely left in the dark.
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 brief and well-structured, with the core purpose first and parameter hints in a second sentence. No fluff or redundancy. It earns its short length, though it could include more detail without becoming bloated.
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 has 9 parameters, no annotations, and only a few words of guidance, the description is severely incomplete. It fails to explain how to specify a recording (recording_id), what output_dir does, or how start/end/limit relate to the timestamp range. The single line of purpose is insufficient for a tool this complex.
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 0%. The description only explains 'last_seconds' and partially references 'sample_interval' and 'format' via the nt_subscribe comparison. The other six parameters (end, limit, start, topic, output_dir, recording_id) are completely unexplained, leaving the agent to guess their meaning and usage.
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 ('Return event history'), the target ('for one topic'), and the scope ('from a recording'), which distinguishes it from live tools like nt_get or nt_subscribe. The verb and resource are specific and 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?
It provides some usage context by referencing 'from a recording' and notes that 'sample_interval' and 'format="summary"' behave like 'nt_subscribe', giving the agent a behavioral pointer. However, it does not explicitly state when to choose this tool over other history-related siblings (e.g., nt_get_recording_info) or when not to use it, so guidance is limited.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nt_get_infoC
Return metadata for topic.
Response: {"connected": bool, "info": {...} | null}.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It does not disclose whether this is a read-only operation, whether it requires an active connection, or what happens if the topic does not exist. The response format is given, but behavioral traits like error handling or side effects are not mentioned.
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 very short and to the point, with no wasted words. It includes the response format, which is useful. However, it is under-specified, which is a completeness issue rather than a conciseness issue.
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) and the presence of an output schema, the description is minimal but not entirely inadequate. However, it lacks context about the tool's role among many siblings, and the output schema is not shown to the agent, so the description should explain the response more. The lack of usage guidance and behavioral transparency makes it incomplete.
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 one parameter 'topic' with no description, and the description does not elaborate on its meaning beyond the name. It does not specify the expected format (e.g., string identifier, path) or any constraints. With 0% schema description coverage, the description should compensate but does not.
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 it returns metadata for a topic, which is a clear verb+resource. However, it does not distinguish itself from sibling tools like nt_get or nt_get_multiple, which likely also retrieve data. The response format is shown, but the purpose could be more specific about what 'metadata' includes.
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 use this tool versus alternatives. It does not mention that nt_get_multiple might be used for multiple topics, or that nt_connection_info might be relevant for connection status. The description lacks any context about typical use cases or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nt_get_multipleB
Return values for every requested topic.
Response: {"connected": bool, "values": {topic: value}}.
| Name | Required | Description | Default |
|---|---|---|---|
| topics | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full burden and it does add the response structure `{'connected': bool, 'values': {topic: value}}`, which gives useful behavioral shape. However, the semantics of the 'connected' field are left entirely unexplained, and there is no disclosure of error behavior, partial-failure handling, or what happens for invalid topics.
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 efficiently minimal: a one-sentence purpose followed by a structured response format line. It is front-loaded and wastes no words. The phrasing 'every requested topic' is slightly awkward and could be smoother, but the overall structure earns points for channeling information into a compact, parseable form.
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 low complexity (one parameter) and the presence of an output schema, the description is nearly adequate. However, it misses chances to clarify the meaning of the 'connected' boolean, the relationship to nt_get, and whether duplicate or unknown topics in the request cause failures. It does document the response shape, which partially compensates for the missing semantics.
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 description coverage is 0%, and the description fails to compensate despite the low coverage. While the phrase 'requested topic' loosely echoes the 'topics' parameter, it adds no semantic detail, constraints, format, or examples beyond what the schema already states (array of strings).
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 strong action verb ('Return') with a clear resource ('values for every requested topic'), making the batch-read purpose obvious. It distinguishes from nt_get via the name's 'multiple' qualifier, though the description text itself doesn't explicitly contrast with siblings, 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 explicit guidance is provided on when to use this tool vs. alternatives. The existence of nt_get (singular) makes the batch-vs-single contrast inferable, but the description never states when to prefer this tool, names an alternative, or gives a rule of thumb, leaving the agent to infer all usage context from the name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nt_get_recording_infoC
Return metadata about a recording.
Includes duration, total sample count, topic count, file size and timestamps.
| Name | Required | Description | Default |
|---|---|---|---|
| output_dir | No | ||
| recording_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. 'Return metadata' suggests a read-only operation, but it does not explicitly state that there are no side effects, describe error behavior, or clarify data-source dependencies. Listing output fields adds some value, but the output schema likely already covers the return values.
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 very concise: one front-loaded purpose sentence followed by a compact list of returned metadata fields. Every sentence contributes to understanding the tool 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?
Despite having an output schema, the tool has two undocumented parameters, zero required parameters, and no usage guidance. The description does not provide enough context for an agent to confidently select and invoke the tool 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 description coverage is 0%, and the description does not explain either parameter. 'Recording' indirectly hints at recording_id, but output_dir is completely unexplained, and both parameters are optional, creating ambiguity about what the tool actually needs.
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 'Return metadata about a recording' and enumerates the key fields returned, which makes the primary purpose easy to grasp. However, it does not explicitly distinguish itself from siblings like nt_get_info or nt_list_recordings.
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 use this tool over alternatives such as nt_get_info or nt_list_recordings. The description implies it is for recording metadata, but it does not state prerequisites, exclusions, or alternative tool recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nt_list_recordingsA
List available NDJSON recordings in the output directory.
Each entry includes id, path, size_bytes, modified
(Unix float) and modified_iso (UTC ISO-8601).
| Name | Required | Description | Default |
|---|---|---|---|
| output_dir | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry behavioral disclosure on its own. It accurately describes a non-destructive listing operation and the returned fields, but it does not mention behavior of the output_dir default, sorting, or error cases. There is 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 and front-loaded, using one clear purpose sentence and a compact list of returned fields. Every sentence contributes meaningful information without redundancy or 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?
This is a simple one-parameter list tool with an output schema available, so describing return values in detail is unnecessary. The description covers the main purpose and result shape, but slightly under-specifies the output_dir parameter behavior and lacks any caveats or edge-case 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?
The sole parameter output_dir has 0% schema description coverage. The description mentions 'the output directory' but never explicitly explains the output_dir parameter, its null default, or how the path is resolved. This provides only minimal compensation for the missing parameter documentation.
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 ('List available NDJSON recordings') and the scope ('in the output directory'). It also lists the returned entry fields, making the tool's purpose explicit and distinct from siblings like nt_get_recording_info or nt_list_topics.
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 no guidance on when to use this tool versus related tools such as nt_get_recording_info or nt_list_topics, and no exclusions or alternative recommendations. The only usage context is implied by the phrase 'List available recordings'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nt_list_topicsB
Return topic names, filtered by prefix, regex, and/or wildcard.
Response: {"connected": bool, "topics": [...]}.
| Name | Required | Description | Default |
|---|---|---|---|
| regex | No | ||
| prefix | No | ||
| wildcard | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It adds the response format {'connected': bool, 'topics': [...]}, which is useful, but it omits filter combination semantics, connection requirements, and behavior when no topics match.
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 concise sentences, front-loading the core operation and then providing a compact response format. Every word is relevant and there is 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 simple list tool with all-optional filters, the description is mostly adequate, but it misses the important distinction from nt_list_topics_offline and does not explain how filters combine. The response format partially compensates for the lack of a full 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?
Schema description coverage is 0%, so the description must compensate for parameter meaning. It only restates the three filter names—prefix, regex, and wildcard—without explaining their syntax, how they interact, or their defaults, adding little beyond the schema property names.
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 begins with 'Return topic names, filtered by prefix, regex, and/or wildcard', which clearly states the operation, resource, and filtering dimensions. It does not explicitly contrast with sibling tool nt_list_topics_offline, but the response shape mentioning 'connected' hints at the online 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?
No guidance is provided on when to use this tool versus nt_list_topics_offline or whether an active connection is required. The description lists filter options but gives no decision framework or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nt_list_topics_offlineC
List unique topic names in a recording, optionally filtered.
| Name | Required | Description | Default |
|---|---|---|---|
| regex | No | ||
| prefix | No | ||
| wildcard | No | ||
| output_dir | No | ||
| recording_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must carry the full behavioral burden. The description only says 'list unique topic names,' providing no insight into side effects, permissions, performance implications, or what 'filtered' entails. It fails to disclose any behavioral characteristics beyond the most basic function.
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 one concise, single sentence with no filler. It is appropriately brief for the function it describes, though this brevity comes at the cost of completeness.
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?
Despite having an output schema and five parameters, the description is severely underpowered. It doesn't explain what a 'recording' is, how filters work, what the output schema contains, or how this offline tool differs from its online counterpart. The lack of any supplementary information makes it impossible for an agent to use this tool 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?
With 0% schema description coverage and no parameter documentation in the description, this tool offers no additional meaning beyond the parameter names (regex, prefix, wildcard, etc.). The description's 'optionally filtered' is too vague to clarify how parameters work or interact.
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 lists unique topic names from a recording and can be filtered. It uses a specific verb and resource. However, it doesn't explicitly distinguish itself from the sibling tool nt_list_topics, though the 'offline' in the name provides some 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?
There is no guidance on when to use this tool versus alternatives like nt_list_topics or nt_subscribe_offline. The phrase 'optionally filtered' is the only hint, but no explicit context, examples, or exclusions are provided. It fails to help the agent choose between this and related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nt_poll_subscriptionA
Return buffered samples for a persistent subscription.
Response:
{"connected": bool, "samples": {topic: [{"time", "value"}, ...]}}.
clear=True empties the buffer after reading.
| Name | Required | Description | Default |
|---|---|---|---|
| clear | No | ||
| subscription_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the behavioral burden. It discloses the output shape, the connected flag, and the important side effect that clear=True empties the buffer after reading. It does not explain error cases or lifecycle requirements, but for a simple polling tool this is fairly transparent.
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 compact and front-loaded. The first sentence states the action, and the following code block and clear=True note add necessary detail without filler. 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?
For a two-parameter, simple polling tool with an output schema, this is nearly complete. It includes the response format and the key clear-buffer behavior. It lacks a bit of context about how persistent subscriptions are created or how this relates to nt_start_subscription, but the core behavior is well specified.
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 0%, so the description must compensate. It explains clear=True empties the buffer, which is useful semantics beyond the schema. However, subscription_id is only defined by its name and schema type, with no guidance about how to obtain it or what happens if it is invalid.
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's function: 'Return buffered samples for a persistent subscription.' This uses a specific verb and resource, and the 'persistent subscription' phrasing distinguishes it from one-shot getters like nt_get and nt_get_multiple. The response shape also reinforces 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?
The description provides clear context that this tool is for polling a persistent subscription's buffer. It does not explicitly name alternatives or say when not to use it, but the persistent-subscription framing makes the intended use case reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nt_setA
Publish value to topic.
Response: {"connected": bool, "ok": bool, "warning": str | null}.
strict_type_check=True refuses mismatched writes instead of only
warning about them.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | ||
| value | Yes | ||
| strict_type_check | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It provides the response format ('Response: {"connected": bool, "ok": bool, "warning": str | null}') and explains strict_type_check behavior ('refuses mismatched writes instead of only warning'). This gives meaningful insight into the tool's operation, though it omits prerequisites like connection state.
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, all information-dense: the action, the response format, and the strict_type_check nuance. No redundant language, and key content is 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?
The description covers the core action and response, but misses important context like the need to be connected to a server (given sibling tools nt_connect/nt_disconnect) and potential constraints on value types. For a tool in a larger connected system, this is a noticeable gap.
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 has 0% description coverage, so the description must compensate. It effectively explains strict_type_check ('refuses mismatched writes'), but topic and value are only described generically via 'Publish value to topic'. This adds some meaning but not deep detail about value types or topic format.
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 immediately states 'Publish value to topic', which is a specific verb+resource. It clearly distinguishes from sibling tools like nt_get (retrieve) and nt_set_multiple (batch operation), making the singular 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?
No explicit when-to-use or alternatives are mentioned, such as using nt_set_multiple for batch operations or ensuring a connection before publishing. The usage context is implied by the name and description, but not stated clearly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nt_set_multipleB
Write every {topic: value} pair.
Response:
{"connected": bool, "results": {topic: bool}, "warnings": {topic: str | null}}.
| Name | Required | Description | Default |
|---|---|---|---|
| updates | Yes | ||
| strict_type_check | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does reveal the response structure (connected, results, warnings), which implies partial success behavior, but it fails to mention whether the operation is atomic, whether existing values are overwritten, or the semantics of strict_type_check.
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 extremely concise (two lines) and clearly structured with the purpose and response format in a code block. It earns its place without unnecessary detail, though the response format could be considered part of the output schema rather than the description.
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 batch-write tool with an output schema, the description covers the return shape but misses key behavioral context such as atomicity, strict_type_check semantics, and connection prerequisites. It is adequate but not thorough for an agent to fully understand side effects.
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 description explains the core 'updates' parameter as 'topic: value' pairs, but it does not name the parameter or address strict_type_check. Given 0% schema coverage, the description only partially compensates for the missing parameter documentation.
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 the verb 'Write' with the resource 'topic: value pair', clearly indicating a batch write operation for multiple topics. The word 'every' distinguishes it from sibling nt_set, though it could be more explicit about being the batch variant.
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 is provided on when to use this tool versus alternatives like nt_set. It omits any context about prerequisites (e.g., connection state) or when strict_type_check should be enabled, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nt_start_subscriptionA
Open a persistent subscription and start collecting samples.
Response:
{"connected": bool, "subscription_id": str, "started": bool}.
Use nt_poll_subscription to read the buffered samples in later
turns, and nt_stop_subscription to tear it down.
| Name | Required | Description | Default |
|---|---|---|---|
| prefixes | Yes | ||
| buffer_size | No | ||
| subscription_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description mentions the response fields and the need to poll and stop, which gives a sense of the tool's behavior. But with no annotations, it does not disclose potential errors, side effects, or resource implications, leaving important transparency gaps.
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 well-structured. It states the purpose, gives the response format, and mentions the follow-up tools in a clear, direct manner without superfluous details.
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?
While the overall flow is outlined, the lack of parameter explanations and error handling makes it incomplete. The tool's complexity is moderate, but the description fails to provide essential context for confident 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?
The schema provides three parameters (prefixes, buffer_size, subscription_id) but the description offers no explanation for any of them. Since schema coverage is 0% and the description does not compensate, the agent has no idea what these parameters mean or how to use them.
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's function: 'Open a persistent subscription and start collecting samples.' It explicitly mentions the response structure and the complementary tools for polling and stopping, which distinguishes it from sibling tools like nt_subscribe or nt_poll_subscription.
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 provides a clear workflow: start, then poll, then stop. This implies when to use the tool (as the initial step in a persistent subscription flow). However, it does not explicitly contrast with other subscription methods (e.g., nt_subscribe might be one-shot), so it falls short of being fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nt_stop_subscriptionB
Stop a persistent subscription and free its resources.
| Name | Required | Description | Default |
|---|---|---|---|
| subscription_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 of behavioral disclosure. It states that resources are freed, but does not say whether the subscription_id becomes invalid, whether stopping is idempotent, or what happens to pending messages. This is minimal disclosure.
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 sentence that front-loads the action and includes no 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 one-parameter stop operation with an output schema, the description is minimally adequate. However, with no annotations and no usage or parameter guidance, it leaves the agent to infer lifecycle context and side effects.
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 0%, so the description needed to compensate by explaining subscription_id. It only indirectly ties the parameter to the persistent subscription via the tool name and description, without specifying format, how to obtain it, or any constraints.
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 ('Stop') and identifies the resource ('persistent subscription'), clearly distinguishing it from sibling tools like nt_start_subscription and nt_poll_subscription. However, it does not explicitly contrast it with alternatives, 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 implied: call this when you want to terminate a persistent subscription and release its resources. But there is no explicit when-to-use or when-not-to-use guidance, nor mention that it is the counterpart to nt_start_subscription or how it differs from nt_disconnect.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nt_subscribeA
Sample value updates under prefixes for duration seconds.
Response: {"connected": bool, "samples": {topic: [...] | summary}}.
sample_interval decimates events to one per topic per interval.
change_only skips numeric changes at or below the threshold.
format="summary" returns min/max/mean/last per topic.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | samples | |
| duration | No | ||
| prefixes | Yes | ||
| change_only | No | ||
| sample_interval | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description must disclose behavior, and it does cover response format, sample_interval decimation, change_only threshold, and format='summary' aggregation. However, it does not mention side effects (e.g., whether the subscription is one-shot or persistent), rate limits, or cleanup requirements. It provides moderate behavioral insight but leaves significant gaps.
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 exceptionally compact, using three short paragraphs to convey purpose, response format, and key parameter behaviors. Every sentence adds value, and the structure front-loads the core idea before diving into parameter specifics. No fluff or 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 complexity (5 params, output schema present), the description covers the core functionality well: sampling under prefixes, duration, decimation, change thresholds, and summary statistics. It does not address error handling, connection prerequisites, or interaction with sibling tools, but the existence of an output schema and related lifecycle tools mitigate the need for those details. A strong, focused description.
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 0%, so the description must explain parameters. It effectively details sample_interval (decimation), change_only (threshold), and format (samples vs. summary) with behavioral semantics. Prefixes and duration are left implicit, but their meaning is evident from the schema and context. This strongly compensates for the schema's lack of 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 uses a specific verb 'Sample' with a clear resource (value updates under prefixes) and a time boundary (duration). The response format is also given, which helps distinguish it from siblings like nt_subscribe_offline. However, it could be more explicit about the subscription mechanism and does not name alternatives, so a 4 is warranted.
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 is provided on when to use this tool versus siblings like nt_subscribe_offline, nt_start_subscription, or nt_poll_subscription. The description focuses solely on parameter effects and output, omitting use cases, prerequisites (e.g., an active nt_connect), or when not to use it. This leaves the agent without decision criteria for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nt_subscribe_offlineB
Return events for every topic under prefixes from a recording.
last_seconds selects the most recent N seconds. sample_interval
decimates per-topic samples, and format="summary" returns
min/max/mean/last per topic.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| limit | No | ||
| start | No | ||
| format | No | samples | |
| prefixes | Yes | ||
| output_dir | No | ||
| last_seconds | No | ||
| recording_id | No | ||
| sample_interval | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations. The description is solely burdened with behavioral traits. It mentions that 'format=summary' returns min/max/mean/last per topic, but it doesn't say what happens for the subscription until it stops, what data is returned, or about invalid parameters/permissions/errors. It does not contradict the annotations, as they are absent.
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 dense sentence with inline code; efficient in space, but the inline sentence is a bit hard to parse. Not too long.
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 output schema is provided, so the return shape need not be spelled out; yet the description doesn't give information about the'last_seconds' positions and the meaning of 'limit'/'start'/'end'. The live subscription vs offline context is implicit, not explicit.
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 many optional parameters (start, end, limit, output_dir, recording_id) and the descriptions are not provided. The description is limited to prefixes, but the interplay of the last few params is unclear. The described params: prefixes, last_seconds, sample_interval, format. Mapping between several optional params is not useful.
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: 'return events for every topic under prefixes from a recording.' This is clear and distinguishes this tool as an offline subscription tool. It doesn't name sibling tools, but the offline/recording context separates it 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 context of use is clear: this is for a recording rather than a live connection. It does not explicitly explain when to choose this over nt_subscribe or nt_get, but uses the word 'from a recording' and the 'offline' in the name.
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.
18 tool updates
v0.1.0- First observed
nt_connect - First observed
nt_connection_info - First observed
nt_disconnect - First observed
nt_get - First observed
nt_get_history - First observed
nt_get_info - First observed
nt_get_multiple - First observed
nt_get_recording_info - First observed
nt_list_recordings - First observed
nt_list_topics - First observed
nt_list_topics_offline - First observed
nt_poll_subscription - First observed
nt_set - First observed
nt_set_multiple - First observed
nt_start_subscription - First observed
nt_stop_subscription - First observed
nt_subscribe - First observed
nt_subscribe_offline
TDQS
Scored across 18 tools
Each tool serves a distinct purpose: connection management, get/set operations, topic listing, subscriptions (both transient and persistent), and recording access. No overlapping functionality.
All tools use a consistent 'nt_' prefix and follow a verb_noun pattern (e.g., nt_get, nt_set_multiple, nt_list_topics, nt_start_subscription). Naming is uniform and predictable.
With 18 tools, the set is slightly larger than typical but justified by the breadth of NetworkTables features (live/offline, subscriptions, recordings). It remains manageable and not overwhelming.
The tool surface covers all major operations: connect/disconnect, get/set (individual and bulk), topic listing, both transient and persistent subscriptions, and comprehensive recording access (list, info, history, offline subscription). No obvious gaps.
Maintenance
Related MCP Connectors
- FensoryOAuthcom.fensory
Trading MCP server for AI agents, with live market data, account reads and controlled execution.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Remote MCP server exposing your Node Command fleet (files, shell, processes, browser) to AI hosts.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables AI agents to interact with the SpaceTraders API, managing agents, fleets, contracts, and trading operations in the SpaceTraders universe.MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that enables AI coding agents to communicate, share state, and coordinate work in real time via MCP tools or REST API.221 npm8MIT
- AlicenseAqualityDmaintenanceMCP server that injects verified FTC documentation and code examples into AI assistants, enabling teams to write correct, competition-ready Java robot code through natural language.313 npm2MIT
- AlicenseCqualityDmaintenanceMCP server for Inductive Automation Ignition, enabling AI assistants to browse and write tags, query history and alarms, manage projects, and deploy Perspective views through natural language.4360 PyPI1MIT