jt-mcp
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., "@jt-mcpWho's calling CQ POTA on 20 meters right now?"
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.
jt-mcp
Ask an AI app what WSJT-X is hearing. WSJT-X sends what it is doing and every decode to a UDP Server address; jt-mcp listens there and answers: who is calling CQ, and what kind of CQ (DX, POTA, a contest, a region), who has been heard and how well, what WSJT-X is tuned to, recent decodes and WSPR spots.
Read-only, permanently. jt-mcp never sends WSJT-X a message, so it cannot answer a call, key your transmitter or change a setting. No write, no PTT, no transmit control — a permanent constraint, not a first-version limit. The tests assert it against the source.
WSJT-X first, and WSJT-X defines the protocol. The UDP message definitions come from the
WSJT-X project — Network/NetworkMessage.hpp, at the schema WSJT-X states — because the project
that owns a definition is its authority. The code is
qso-graph-lib's, the same that
qso-graph-sim plays WSJT-X's messages with. JTDX,
WSJT-Z and MSHV are supported where they work with those definitions, and where one does not, its
difference is not implemented here. JS8Call, whose API is its own, follows WSJT-X.
This server was js8call-mcp until 2026-10-29. Part of the qso-graph
project.
Install
uvx jt-mcp # run it; nothing to installRelated MCP server: io.github.sbrunner-atx/wsjtx-mcp
Set up WSJT-X
In WSJT-X: File, Settings, Reporting, UDP Server: 127.0.0.1, port 2237 (WSJT-X's
defaults). That is all jt-mcp needs when WSJT-X runs on the same PC.
Only one program can listen on a UDP port. If GridTracker, JTAlert or another logger already
listens on 2237, give jt-mcp a different port (--udp-port) and point WSJT-X at that one.
Tools
Tool | Answers |
| Who is calling CQ, and what kind: plain, DX, activity (POTA, SOTA, WWFF, IOTA), contest (TEST, FD, RU, WW), region (NA, EU, ...), or a frequency (CQ 290). The latest per station |
| What each WSJT-X is doing: dial frequency and band, mode, DX call and grid, Tx enabled or transmitting, your call and grid |
| Recent decodes, each read into its parts (who is calling whom, grid, report, sign-off); filter by callsign, CQ only, SNR, band |
| Stations heard: how often, last SNR, last grid, mode and band |
| WSPR spots WSJT-X decoded: call, grid, power, SNR, drift |
| The listener: where it listens, who may send, what arrived, what was dropped and from where, each WSJT-X's version |
| Service version and status |
Times are UTC. Several WSJT-X instances (two radios, two bands) are kept apart by the Id each
sends, such as WSJT-X - FT-991A.
Questions it will answer
"Who's calling CQ POTA on 20 m right now?"
"Any DX calling CQ in the last ten minutes, strongest first?"
"Has W9XYZ been heard, and how strong?"
"What is WSJT-X tuned to, and is Tx enabled?"
"Why isn't anything showing up?" —
jt_diagnostics
Configure your MCP client
jt-mcp works with any MCP-compatible client. Add the server and restart the client.
Claude Desktop
Add to claude_desktop_config.json (~/Library/Application Support/Claude/ on macOS,
%APPDATA%\Claude\ on Windows):
{
"mcpServers": {
"jt": {
"command": "uvx",
"args": ["jt-mcp"]
}
}
}Claude Code
claude mcp add jt -- uvx jt-mcpChatGPT Desktop
Configure via Settings > Apps & Connectors, or in your agent definition, with the same
command and args as above.
WSJT-X on another PC
By default jt-mcp listens on 127.0.0.1, this PC alone. For WSJT-X on another PC, give one
address of this PC with --bind, and name each PC that may send with --allow:
"args": ["jt-mcp", "--bind", "192.168.1.50", "--allow", "192.168.1.40"]and set WSJT-X's UDP Server to 192.168.1.50. Listening on every interface at once
(0.0.0.0) is refused, --allow is required with a network address, and names are not
accepted, only IP addresses. A datagram from anyone else is dropped unread and counted, and
jt_diagnostics shows the count and the addresses.
What the allow list does not do. It keeps other machines out. It is not proof of who sent: a UDP sender's address can be forged by anything on the same network. What contains that is that jt-mcp only reads, so a forged datagram can mislead about what WSJT-X is doing and cannot make anything happen.
Options
jt-mcp [--bind ADDR] [--allow ADDR ...] [--udp-port N]
[--transport stdio|streamable-http] [--port N] [--version] [--help]Option | Default | |
|
| where to listen for WSJT-X |
| this PC | a PC that may send; repeatable; required with a network |
|
| WSJT-X's UDP Server port |
|
|
|
|
| the streamable-http port |
Licence
GPL-3.0-or-later. See LICENSE.
Available Tools
7 toolsget_version_infoGet Version InfoARead-onlyIdempotent
Get this server's version, what it does, and where its work is tracked.
| 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?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds that the response includes the server's purpose and source-tracking location, which is context beyond the annotations, but with an output schema present it does not need to enumerate return fields.
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 no filler; every clause (version, purpose, work tracking) names real content the caller receives.
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 zero-argument read tool with rich annotations and a full output schema, the description supplies enough to call it correctly. The only missing piece is sibling differentiation against jt_status/jt_diagnostics, which is a minor gap given how simple the tool is.
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 are zero parameters and the tool takes no arguments, so there is nothing for the description to disambiguate. Baseline 4 applies for a parameterless tool.
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 verb ('Get') and a concrete resource (this server's version) and expands the payload to include what the server does and where its work is tracked. It is clear what the tool returns, though it never contrasts itself with the nearby jt_status or jt_diagnostics tools, so an agent must infer the boundary.
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: as a no-parameter, read-only metadata call an agent can guess it is for orientation/discovery. There is no explicit statement of when to prefer it over jt_status or jt_diagnostics, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_cqJt CqARead-onlyIdempotent
Who is calling CQ, and what kind of CQ: plain, DX, an activity (POTA, SOTA, WWFF, IOTA), a contest (TEST, FD, RU, WW), a region (NA, EU, ...), or a frequency (CQ 290). The latest CQ per station, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| band | No | e.g. "20m". | |
| cq_type | No | one of plain, dx, activity, contest, region, frequency, other. | |
| instance | No | one WSJT-X by its Id; every one if left out. | |
| modifier | No | the exact word after CQ, e.g. "POTA" or "NA". | |
| since_minutes | No | how far back, 1 to 1440 (default 5). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds one genuinely useful behavioral trait beyond that — deduplication to the latest CQ per station and newest-first ordering — but says nothing about result volume or the latency implied by openWorldHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core question, and the enumerated CQ forms double as a semantic key for the cq_type filter. The parenthetical lists are dense but each item is informative rather than padding.
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?
An output schema exists, annotations cover safety, and all five parameters are documented in the schema, so the description only needs to add scope and semantics — which it does. The remaining gap is sibling disambiguation against jt_decodes/jt_heard, which matters given how many adjacent tools exist.
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 the baseline is 3, but the description earns credit by explaining what the cq_type values actually mean: 'activity' maps to POTA/SOTA/WWFF/IOTA, 'contest' to TEST/FD/RU/WW, 'region' to NA/EU, and 'frequency' to 'CQ 290'. That is meaning the schema's terse 'one of plain, dx, activity, ...' does not convey.
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 the resource and the question it answers ('Who is calling CQ, and what kind of CQ'), then enumerates the CQ categories with concrete ham-radio examples (POTA, SOTA, TEST, RU, NA, 'CQ 290'). That makes the purpose clear even though the tool name and title ('jt_cq' / 'Jt Cq') are cryptic, but it never explicitly contrasts itself with siblings such as jt_decodes or jt_heard.
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 scope ('latest CQ per station, newest first') implies when the tool is relevant, but there is no explicit statement of when to use this instead of jt_decodes or jt_heard, and no exclusions or prerequisites. An agent must infer the boundary from the word 'CQ' alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_decodesJt DecodesBRead-onlyIdempotent
Recent decodes, newest first, each read into its parts: CQ (with its type), or who is calling whom, with the grid, report or sign-off it carries.
| Name | Required | Description | Default |
|---|---|---|---|
| band | No | e.g. "20m". | |
| limit | No | at most this many, 1 to 500 (default 50). | |
| cq_only | No | CQ calls only. | |
| min_snr | No | this SNR in dB or better (-50 to 50). | |
| callsign | No | decodes sent by or to this call. | |
| instance | No | one WSJT-X by its Id; every one if left out. | |
| since_minutes | No | how far back, 1 to 1440 (default 15). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety, idempotency, and open-world behavior, and the description adds ordering ('newest first') plus parsed output shape. It does not add permissions, rate-limit, error, or default-time-window context, so the added behavioral value is modest.
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?
It is a single front-loaded sentence with little wasted wording. However, phrases like 'read into its parts' and 'sign-off it carries' are cryptic jargon that reduce immediate clarity.
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?
Rich schema descriptions, annotations, and an output schema reduce what the description must carry, and it does state ordering and output flavor. Still, it omits usage routing against obvious siblings and does not make the default recent window explicit, leaving a meaningful selection 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?
All seven parameters have 100% schema description coverage, so the schema carries parameter semantics. The description only obliquely references CQ calls and does not add band, callsign, SNR, limit, instance, or time-range 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?
Identifies the resource as 'Recent decodes' with 'newest first' ordering and describes content as CQ or who is calling whom. It is clear but does not explicitly distinguish this tool from siblings such as jt_cq or jt_heard.
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 when-to-use, when-not-to-use, or alternative-tool guidance. With siblings like jt_cq, jt_heard, and jt_wspr present, the agent must infer routing without help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_diagnosticsJt DiagnosticsBRead-onlyIdempotent
The listener itself: where it listens, who may send, what has arrived, what was dropped and from where, and each WSJT-X instance's version and last heartbeat.
| 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?
Annotations already cover readOnly, idempotent, non-destructive, and openWorld. The description adds semantic scope—listener configuration, allowed senders, dropped messages, WSJT-X heartbeats—but does not disclose operational behavior like update frequency, response size, or whether it is a live snapshot. With annotations handling safety, this is modest added value.
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?
It is a single dense fragment, not a sentence, and the noun-phrase structure buries the tool's action. The field list is compact but not front-loaded with what the tool does, which costs clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and an output schema, the main missing piece is a clear action statement and sibling differentiation. The description covers data content well but leaves an agent unsure about when to call it versus jt_status.
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, so there is nothing for the description to explain. Baseline 4 applies because the schema imposes no semantic burden.
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 is a noun-phrase inventory ('The listener itself: where it listens, who may send...') rather than a clear verb+resource statement. An agent can infer it returns listener diagnostics, but it never states what the tool does (e.g., 'returns' or 'reports'), and it makes no attempt to distinguish itself from jt_status.
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 sentence telling when to use this tool versus jt_status or any sibling, nor are there exclusions or prerequisites. The description only enumerates data fields, leaving usage entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_heardJt HeardBRead-onlyIdempotent
Stations heard since this server started: how often, last SNR, last grid sent, mode and band, first and last heard.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | last_heard (default), snr or count. | last_heard |
| limit | No | at most this many, 1 to 500 (default 50). | |
| callsign | No | one station only. | |
| since_minutes | No | heard within this many minutes, 1 to 1440 (default 60). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, open-world behavior, so the safety profile is covered. The description adds that results are cumulative from server start and lists the per-station fields reported, but says nothing about ordering behavior, whether limit truncates stations or rows, or how 'last grid sent' is derived.
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 no filler; every listed field earns its place. Slightly fragmentary grammar but appropriately sized for a simple read tool.
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?
An output schema exists and annotations cover safety, so return values need not be explained. However, the description leaves the relationship to the other JT tools unaddressed and does not clarify semantics like whether 'heard since this server started' is bounded by since_minutes or how limit interacts with sorting.
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%, and all four parameters (sort, limit, callsign, since_minutes) carry descriptions with defaults and ranges, so the schema does the heavy lifting. The description adds no parameter-level detail beyond the schema, which is the baseline 3.
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 resource (stations heard by this server) and enumerates the aggregate fields returned (count, last SNR, last grid, mode/band, first/last heard), which is more concrete than the bare name. It never names a sibling like jt_decodes, so the differentiation from per-decode listing tools is implied rather than explicit.
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 statement of when to choose this over jt_decodes, jt_wspr, or jt_cq. The phrase 'since this server started' hints at an aggregate/summary scope, but that implication is the only guidance offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_statusJt StatusARead-onlyIdempotent
What each running WSJT-X is doing now: dial frequency and band, mode, the station being worked (DX call and grid), whether Tx is enabled or transmitting, and your own call and grid.
| Name | Required | Description | Default |
|---|---|---|---|
| instance | No | one WSJT-X by the Id it sends (e.g. "WSJT-X - FT-991A"); every one if left out. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds the meaningful nuance that values reflect current live state and that results are per-instance, but says nothing about behavior when no WSJT-X is running (empty result vs. error) or about how multiple instances are keyed. Output schema offloads the return-shape burden, keeping this at a 3.
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 front-loaded sentence covering scope and every returned field, with no filler or repetition. The colon-list structure makes it scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and full parameter coverage, the description only needs to convey scope and freshness, which it does. The minor gap is what the agent should expect when the named instance isn't running or when zero instances are active.
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% and the single `instance` parameter is documented in the schema with an example Id format and default-to-all behavior. The description itself adds no parameter guidance beyond the implicit 'each ... ' framing, so 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?
The description names the resource (each running WSJT-X instance) and enumerates the exact fields observed — dial frequency/band, mode, DX call and grid, Tx state, own call/grid. That is a concrete, verifiable statement of what the tool does. It stops short of explicitly contrasting itself with siblings like jt_decodes or jt_heard, so differentiation is inferred from the field list rather than stated.
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 "now" signals this is a live snapshot rather than a history/log query, which implicitly positions it against jt_decodes and jt_heard. However, there is no explicit when-to-use, no when-not, and no sibling is named as an alternative. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_wsprJt WsprARead-onlyIdempotent
WSPR spots WSJT-X has decoded, newest first: call, grid, power, SNR, drift.
| Name | Required | Description | Default |
|---|---|---|---|
| band | No | e.g. "30m". | |
| limit | No | at most this many, 1 to 500 (default 50). | |
| callsign | No | one station only. | |
| since_minutes | No | how far back, 1 to 1440 (default 60). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, open-world, non-destructive behavior, and the description adds useful ordering ('newest first') and the returned field set. That is real context beyond structured fields, though it says nothing about rate limits or the source of freshness.
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 dense sentence with the key facts front-loaded and no filler. It is arguably too terse for a cryptically named tool ('jt_wspr'), but every clause 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?
All four parameters are optional and fully documented in the schema, an output schema exists, and annotations cover the safety profile, so the description only needs to state what the data is and how it's ordered — which it does. The one gap is sibling differentiation.
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 every parameter (band, limit, callsign, since_minutes) carries its own range/default documentation, so the baseline 3 applies. The description adds no filtering syntax or default information beyond what the schema already states.
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?
Names the specific resource (WSPR spots decoded by WSJT-X) and the fields returned, so the agent knows it's a read of WSPR spot data. However, it never distinguishes itself from siblings like jt_decodes or jt_heard, which plausibly overlap.
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 by the word 'WSPR' and 'decoded'; there is no explicit when-to-use or when-to-prefer-jt_decodes statement. With a sibling set full of decode/heard tools, an agent must guess which one to pick for WSPR data.
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.
7 tool updates
v0.2.0- First observed
get_version_info - First observed
jt_cq - First observed
jt_decodes - First observed
jt_diagnostics - First observed
jt_heard - First observed
jt_status - First observed
jt_wspr
TDQS
Scored across 7 tools
Most tools have clearly distinct purposes: version info, listener diagnostics, live WSJT-X status, CQ filtering, raw decodes, aggregated heard stations, and WSPR spots. The only mild overlap is between jt_decodes, jt_cq, and jt_heard, since CQs and heard stations are derived from decodes, but the descriptions clarify their different filters and aggregations.
Six of seven tools share a consistent `jt_` prefix with resource-oriented names (jt_status, jt_cq, jt_decodes, etc.), and the lone `get_version_info` is a minor deviation. The set is readable and predictable, though it does not follow a strict verb_noun pattern.
Seven tools is a well-scoped size for a read-only WSJT-X monitoring server. Each tool covers a distinct slice of the domain and none feels redundant or missing.
The surface covers version info, listener health, live status, CQ monitoring, decoded traffic, heard-station aggregation, and WSPR spots, which is strong for an observational server. It does not offer any control or QSO logging operations, but those may be intentionally out of scope for this monitoring-focused MCP.
Maintenance
Related MCP Connectors
Read-only access to your MetaTrader 4 and 5 accounts for AI agents: balances, open positions, trade history with win rate, live quotes, symbol specs and candles. It cannot place, modify or close orders.
Read-only Hyperliquid data for AI agents: fills, candles, funding, liquidations, wallet analytics.
Read-only local AI advice, shared reports and website audits. No PC scan or local actions.
Read-only market charts, OHLC, backtests and a view of your connected broker accounts
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables querying WSPR beacon data including live spots, band activity, top beacons, propagation paths, and SNR trends through any MCP-compatible AI assistant.9695 PyPIGPL 3.0
- AlicenseAqualityCmaintenanceAn MCP server that controls WSJT-X for amateur radio weak-signal modes (FT8/FT4, etc.) via UDP, enabling observation of status and decodes, and transmit operations like replying to CQs or sending free text.1427 PyPI1MIT
- AlicenseNot gradedqualityCmaintenanceA read-only MCP server for querying Kismet Wireless systems, enabling AI agents to retrieve network status, datasources, devices, and alerts via REST API.MIT
- AlicenseNot gradedqualityCmaintenanceEnables MCP clients to observe and inspect Sierra Chart chartbooks, charts, studies, drawings, and data, read diagnostics, and apply validated configuration changes via a local bridge, without any order execution or trading features.1MIT