starlink-blade-mcp
Provides tools for monitoring and controlling a Starlink dish locally via gRPC, including status, alerts, obstruction maps, history, diagnostics, and write operations (reboot, stow, unstow) with safety gates.
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., "@starlink-blade-mcpcheck the current status of my Starlink dish"
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.
starlink-blade-mcp
Local-first Starlink dish monitoring and control via the Model Context Protocol.
Talks directly to your dish over the local gRPC interface (192.168.100.1:9200) — no cloud API, no enterprise credentials, no internet dependency. Built on starlink-grpc-core, the same library that powers the Home Assistant Starlink integration.
Why this MCP?
starlink-blade-mcp | |||
Interface | Local gRPC (dish hardware) | Enterprise cloud API | Public SpaceX API |
Auth required | None (LAN access only) | OAuth2 enterprise credentials | None |
Works offline | Yes | No | No |
Residential dish | Yes | Enterprise fleet only | N/A (satellite tracking) |
Dish control | Reboot, stow, unstow | Read-only telemetry | None |
Obstruction map | 12-wedge directional data | Aggregate only | None |
Alert detail | 22 flags with descriptions | Basic status | None |
Token efficiency | Statistical summaries | Raw JSON | Raw JSON |
Related MCP server: Unoffical Polestar 2 MCP
Tools
Read (no authentication required)
Tool | Description |
| Dish identity, state, connectivity, throughput, SNR, orientation |
| Active alert flags (22 types) with human-readable descriptions |
| Obstruction fraction, 12-wedge directional map, timing |
| Throughput/latency/power as min/avg/max summary (configurable window) |
| GPS coordinates (requires opt-in in Starlink app) |
| Hardware version, firmware, GPS satellites, alert count |
Write (gated)
Tool | Description |
| Restart the dish (2-5 min downtime) |
| Stow dish face-down for storage/transport |
| Resume normal satellite tracking |
Write operations require dual gating:
STARLINK_WRITE_ENABLED=trueenvironment variableconfirm=trueparameter on each call
Quick Start
# Install
uv pip install starlink-blade-mcp
# Run (dish must be reachable at 192.168.100.1)
starlink-blade-mcp
# Or with uv
uvx starlink-blade-mcpClaude Code
{
"mcpServers": {
"starlink": {
"command": "uvx",
"args": ["starlink-blade-mcp"],
"env": {
"STARLINK_WRITE_ENABLED": "false"
}
}
}
}Claude Desktop
{
"mcpServers": {
"starlink": {
"command": "uvx",
"args": ["starlink-blade-mcp"],
"env": {
"STARLINK_DISH_ADDRESS": "192.168.100.1:9200",
"STARLINK_WRITE_ENABLED": "false"
}
}
}
}Configuration
Variable | Default | Description |
|
| Dish gRPC endpoint |
|
| gRPC timeout in seconds |
|
| Enable reboot/stow/unstow |
|
|
|
|
| HTTP transport bind address |
|
| HTTP transport port |
Network Requirements
The Starlink dish exposes an unauthenticated gRPC server at 192.168.100.1:9200 on the local network. Requirements:
Device running the MCP must be on the Starlink LAN (or have a route to
192.168.100.1)No credentials or API keys needed
GPS location requires opt-in: Starlink app > Settings > Advanced > Debug Data
The dish's 192.168.100.1 address is not configurable
Starlink router (default)
Works out of the box. The dish, router, and your devices are all on the same network.
Third-party router in bypass mode (UniFi, pfSense, etc.)
In bypass mode, the Starlink router hands its CGNAT WAN IP to your router's WAN interface. The dish management interface (192.168.100.1) sits on a separate /24 subnet on the WAN side — your router won't know how to reach it without a static route.
Static route configuration (UniFi example):
UniFi Network > Settings > Routing > Static Routes:
Field | Value |
Destination |
|
Next Hop | WAN interface (Starlink-facing port) |
Distance | 1 |
Some router firmware also requires a secondary IP on the WAN interface in the 192.168.100.0/24 range (e.g. 192.168.100.2/24) for traffic to egress on that subnet. This depends on whether your firmware handles interface-scoped routes correctly — UniFi has been inconsistent here across versions.
Once the route is in place, both 192.168.100.1:9200 (gRPC) and 192.168.100.1:80 (Starlink web UI) become reachable from your LAN.
Remote / headless sites
Run the MCP server on any host that can reach 192.168.100.1 — a local machine, a container on a NAS, or any device on the Starlink-connected network.
Security Model
No credentials stored or transmitted — the dish gRPC endpoint is unauthenticated by design
LAN-only access — the gRPC interface is not exposed to the internet
Write operations double-gated — environment variable + per-call confirmation
No telemetry or phone-home — all data stays local between the MCP server and the dish
No cloud API dependency — works during internet outages (ideal for monitoring them)
Token Efficiency
The starlink_history tool returns statistical summaries (min/avg/max per metric) rather than raw per-second samples. A 900-second window produces ~8 lines of output vs ~5,400 lines of raw data.
History Summary (last 60 samples, 1s intervals)
metric min avg max unit
--------------------------------------------
ping_drop 0.0000 0.0021 0.0150
latency 22.1 34.5 89.2 ms
down 0.5 45.2 120.3 Mbps
up 0.1 8.4 25.1 Mbps
power 48.2 52.1 58.9 W
snr 7.8 9.2 10.1 dBDevelopment
git clone https://github.com/groupthink-dev/starlink-blade-mcp
cd starlink-blade-mcp
# Install with dev dependencies
make install-dev
# Run quality checks
make check
# Run tests (mocked — no dish required)
make test
# Run e2e tests (requires live dish on LAN)
make test-e2e
# Run with coverage
make test-covSidereal Marketplace
This MCP is available as a certified plugin in the Sidereal Marketplace. Install directly from Settings > MCPs in the Sidereal app.
The plugin manifest provides:
Credential-free setup (auto-discovers dish on LAN)
Write operation toggle in Settings UI
Connection test validation
Custom dish address for non-standard networks
Roadmap
Power save / sleep schedule control (read + set via
dish_power_saveproto)Hardware self-test results (extended diagnostics from proto)
Webhook triggers for alert state changes (Sidereal event dispatch)
Firmware update tracking and notification
Multi-dish support (mesh network with multiple terminals)
Obstruction map visualization (SVG/image generation)
License
MIT
Available Tools
9 toolsstarlink_alertsA
Get active dish alerts with human-readable descriptions.
Checks 22 alert flags covering hardware (motors, thermal), connectivity (ethernet speed, signal), environment (water, obstruction), and policy (roaming, movement). Only active alerts are shown.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 carries the full burden of behavior. It discloses the filtering behavior ('Only active alerts are shown') and the human-readable format, which is genuinely useful. However, it doesn't touch on connection requirements, availability considerations, or any other behavioral environment; with a 0-vs-machine summary that has no annotations, that is an acceptable but not exceptional showing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each carrying weight: the lead states the verb/resource/output format, and the second details the 22-flag taxonomy and the only-stateful-actives filter. Nothing is wasted and the front-loaded opening immediately tells the agent what it gets.
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 0 parameters and an output schema present, the description fully covers the decisions an agent needs to make: whether this tool matches the user's need (alerts/conditions), which domains it touches (hardware, connectivity, environment, policy), and the shape of what is returned (human-readable active alerts). Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the description has nothing to add and gets the baseline of 4. The empty input schema and 100% coverage mean the structured data is already complete.
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 a specific verb and resource ('Get active dish alerts') and adds concrete scope by enumerating the 22 alert flags across four categories (hardware, connectivity, obstruction, policy). It is clearly differentiated from most siblings by content, but it never explicitly distinguishes itself from near-neighbors like starlink_status or starlink_diagnostics, which overlap in territory.
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 implies usage context (when you suspect an issue, this surfaces active faults across those sensor categories) but gives no explicit exclusions or alternatives. With seven siblings including starlink_obstruction, which overlaps on the 'obstruction' flag category, an explicit 'use starlink_obstruction instead for detailed obstruction data' would be a meaningful upgrade.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
starlink_diagnosticsA
Get hardware diagnostics: firmware, GPS status, active alert count.
Useful for troubleshooting — shows hardware version, software version, dish state with description, uptime, GPS satellite count, and total active alerts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 carries the full burden of disclosing behavior. It implies a read-only operation via 'Get' and lists the fields returned, but does not explicitly state that it has no side effects, requires no authentication, or is non-destructive. The output schema likely covers return structure, but the description adds no explicit safety or side-effect information.
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 short paragraphs, with the main action and core items front-loaded. It is efficient and free of fluff, though the second sentence repeats somewhat the list from the first (e.g., firmware, alerts). Still, it earns its place by elaborating the fields, so it's concise overall.
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 zero parameters and an output schema, the description need not explain return values. It provides the essential context ('troubleshooting') and lists all key data points. The only gap is the lack of explicit routing guidance toward siblings, which slightly reduces completeness for an agent choosing among multiple similar tools.
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, so the schema trivially covers everything. Per calibration, the baseline is 4 for a no-parameter tool; the description correctly avoids inventing parameter details. It adds no parameter-specific meaning because none exists, which 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 opens with a specific verb+resource ('Get hardware diagnostics') and enumerates the exact data points (firmware, GPS status, alert count). It clearly distinguishes this from siblings like starlink_status or starlink_alerts by focusing on hardware-level diagnostics, so an agent can differentiate without inspecting further.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Useful for troubleshooting' gives a general context but stops short of explicit when-to-use versus alternatives. It does not state when NOT to use this tool or point to a specific sibling for narrower tasks (e.g., starlink_alerts for alert details), leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
starlink_historyA
Get recent throughput/latency/power history as statistical summary (min/avg/max).
Returns aggregated stats over the requested sample window — much more token-efficient than raw per-second data. Covers ping drop rate, latency, download/upload throughput, power consumption, and SNR.
| Name | Required | Description | Default |
|---|---|---|---|
| samples | No | Number of 1-second samples (max ~900) |
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 carries the burden of behavioral disclosure. It reveals that the tool aggregates data into min/avg/max, covers specific metrics, and is intentionally token-efficient. For a read-only history query, these are the key behavioral traits, though edge cases and exact time-window semantics are not discussed.
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 short, front-loaded with the main purpose, and adds useful details about metrics and token efficiency. There is slight redundancy between 'statistical summary' and 'aggregated stats', but overall it is lean and well structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one optional parameter and an output schema, the description covers the essential invocation context: what data is returned, the aggregation approach, and the metrics involved. It lacks explicit sibling comparisons, but the tool is simple enough that this is a minor 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 only parameter is fully documented in the schema with default, minimum, maximum, and unit ('Number of 1-second samples'). The description adds context about sample windows but does not materially expand beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('recent throughput/latency/power history'), and clarifies the output form ('statistical summary (min/avg/max)'). It is clear, though it does not explicitly differentiate itself from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies a clear use case — retrieving aggregated stats over a sample window rather than raw per-second data — and mentions token efficiency. However, it does not name sibling alternatives or state explicit when-to-use/when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
starlink_locationA
Get dish GPS location (latitude, longitude, altitude).
Requires opt-in: Starlink app → Settings → Advanced → Debug Data. Returns 'unavailable' if GPS sharing is not enabled.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 carries the full behavioral burden. It discloses that GPS sharing must be enabled and that the tool returns 'unavailable' if not, which is important for an agent to interpret results. It does not mention side effects, but as a read-only getter that is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise, front-loaded sentences: the first states the action and primary output, the second adds the requirement and potential failure mode. No superfluous words or repetition of schema 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?
For a parameterless tool, the description fully covers the necessary context: what it returns, the opt-in prerequisite, and the behavior when that prerequisite is unmet. An output schema exists, so detailed return-structure documentation is not required.
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 schema description coverage is 100%, so the baseline per rubric is 4. The description adds value by specifying the output (latitude, longitude, altitude) and the 'unavailable' fallback, which is not present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Get dish GPS location (latitude, longitude, altitude)' – a specific verb (get), resource (dish GPS location), and the output fields. This clearly differentiates it from sibling tools like starlink_status or starlink_reboot.
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 identifies a prerequisite (opt-in via Debug Data) but does not explicitly state when to use this tool versus alternatives or name any sibling tool as a replacement. It implies usage when GPS location is needed, but lacks explicit exclusions or routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
starlink_obstructionA
Get obstruction data: fraction obstructed, 12-wedge directional map, and timing.
Shows overall obstruction percentage, whether currently obstructed, average obstruction duration and interval, and per-wedge fractions (12 directions around the dish).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 carries the full behavioral disclosure burden. It does disclose what data is returned (overall obstruction percentage, current obstruction state, average duration/interval, per-wedge fractions), which is useful, but it does not mention prerequisites, failure modes, data freshness, or explicitly confirm that the operation is read-only beyond the verb 'Get'.
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 line states the purpose, and the second line elaborates with concrete output details. Every sentence contributes value with no filler 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 zero parameters, an output schema, and a focused read-only purpose, the description covers the essential information an agent needs to invoke the tool correctly. It could be slightly more complete with usage context relative to sibling tools, but that is already addressed by the clear scope and name.
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 the baseline is 4. The description adds useful semantics about what the returned obstruction data means, including the 12-direction wedge breakdown, which enriches the otherwise empty input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('obstruction data'), then enumerates the concrete outputs: fraction obstructed, 12-wedge directional map, and timing details. This clearly distinguishes it from sibling tools like starlink_status or starlink_diagnostics by focusing solely on obstruction metrics.
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 implies this tool should be used when obstruction-related metrics are needed, and the tool name reinforces that. However, it provides no explicit guidance about when to prefer this over starlink_status, starlink_diagnostics, or starlink_history, nor any when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
starlink_rebootA
Reboot the Starlink dish. Requires STARLINK_WRITE_ENABLED=true AND confirm=true.
The dish will lose connectivity for 2-5 minutes during restart. Use this to recover from stuck states or apply pending firmware updates.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Must be true to execute reboot |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 clearly warns that the dish will lose connectivity for 2–5 minutes, which is critical for a disruptive reboot operation. It also mentions the write-enable prerequisite, providing useful operational context beyond the raw tool name.
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: it states the action, prerequisites, impact, and intended use cases in two sentences with no 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 single-parameter reboot tool with an output schema, the description covers what the tool does, when to use it, what preconditions exist, and the most important behavioral consequence (connectivity loss). Nothing essential is missing for an agent to decide whether and how to invoke it.
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 already documents the confirm parameter with 100% coverage ya la descripción refuerza que debe ser true para ejecutar el reinicio. The description adds practical meaning by tying the confirm flag to the execution precondition, which is valuable beyond the schema's default value.
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 and resource ('Reboot the Starlink dish') and clearly distinguishes this from the sibling read-only tools like starlink_status and starlink_alerts. The action is unambiguous and unique among the siblings.
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 explicit use cases: 'recover from stuck states or apply pending firmware updates.' It also states prerequisites (STARLINK_WRITE_ENABLED=true and confirm=true), though it does not explicitly list when not to use it or contrast with alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
starlink_statusA
Get current dish status: identity, connectivity, signal quality, orientation, uptime.
Returns compact summary with dish ID, hardware/software version, state, ping drop rate, latency, throughput, SNR, and antenna orientation.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 carries the full burden. It discloses that the tool returns a compact summary and lists included fields, but it does not explicitly state that it is read-only, has no side effects, or mention any limitations such as data freshness or error conditions. The 'Get' wording implies a read operation, but more behavioral clarity would be helpful.
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: the first states the purpose and scope, and the second details the output fields. Every sentence adds value, and there is no redundant or filler content.
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 parameterless status-read tool with an output schema present, the description is sufficiently complete: it names the current-status scope and the key returned data categories. It does not elaborate on how this differs from related diagnostics tools, but that is more of a usage-guidance gap than a contextual completeness failure.
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, which is the baseline-4 case. The description correctly adds no parameter-specific details because none are needed, and the empty input schema confirms this.
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 and resource ('Get current dish status') and enumerates the content areas: identity, connectivity, signal quality, orientation, and uptime. It clearly describes what the tool does, though it does not explicitly differentiate itself from the sibling starlink_diagnostics tool.
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 the sibling tools such as starlink_diagnostics, starlink_history, or starlink_alerts. The intended usage can be inferred from the name and description, but no alternatives or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
starlink_stowA
Stow the dish (point face-down for storage or transport).
Requires STARLINK_WRITE_ENABLED=true AND confirm=true. The dish will lose connectivity while stowed. Use starlink_unstow to resume.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Must be true to stow the dish |
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 carries the full burden and handles it well. It discloses the operational requirement, the destructive consequence ('The dish will lose connectivity while stowed'), and the recovery path via starlink_unstow. This gives an agent adequate behavioral understanding beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: purpose, precondition, consequence, and recovery. It is front-loaded with the main action and avoids filler or repetition.
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 single-parameter mutation tool with an output schema and no annotations, the description covers the essential context: what the tool does, when it is allowed, what happens while stowed, and how to undo it. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents confirm as 'Must be true to stow the dish'. The description reiterates this requirement but does not add meaning beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Stow the dish'), the target resource, and the physical result ('point face-down for storage or transport'). It also distinguishes itself from sibling tools by naming starlink_unstow as the way to resume, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: stow for storage/transport, and use starlink_unstow to resume. It also states preconditions (STARLINK_WRITE_ENABLED=true and confirm=true). It does not explicitly list when not to use the tool or name alternatives beyond unstow, but the guidance is solid.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
starlink_unstowA
Unstow the dish (resume normal satellite tracking).
Requires STARLINK_WRITE_ENABLED=true AND confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Must be true to unstow the dish |
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 carries the burden of behavioral disclosure. It discloses that the tool requires write-enablement and confirmation, which is useful, but it does not describe side effects, reversibility, or what happens if the dish is already unstowed. The description adds some behavioral context but not full transparency.
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 with no wasted words. The core action is front-loaded, and the critical requirements are stated immediately after.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a simple one-parameter schema and an output schema, so the description does not need to explain return values. However, for a mutating action with no annotations, it would benefit from stating side effects or reversibility. It is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the confirm parameter. The description reinforces that confirm must be true, which adds a small amount of semantic clarity, but it does not go beyond the schema's own description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Unstow') and resource ('the dish'), and clarifies the action as resuming normal satellite tracking. It is clear enough to distinguish from the sibling starlink_stow, though it does not explicitly name that sibling.
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 clearly states the required precondition (STARLINK_WRITE_ENABLED=true) and the confirmation requirement (confirm=true). It does not explicitly discuss when not to use it or mention alternatives, but the context is clear for a write action among read-only siblings.
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.
9 tool updates
v0.2.0- First observed
starlink_alerts - First observed
starlink_diagnostics - First observed
starlink_history - First observed
starlink_location - First observed
starlink_obstruction - First observed
starlink_reboot - First observed
starlink_status - First observed
starlink_stow - First observed
starlink_unstow
TDQS
Scored across 9 tools
Each tool targets a distinct aspect of Starlink dish management: status, alerts, obstruction, history, location, diagnostics, and three write operations (reboot/stow/unstow). The only potential confusion is between starlink_status and starlink_diagnostics, which both report firmware/state/uptime, but their descriptions differentiate status (connectivity summary) from diagnostics (troubleshooting detail).
All tool names follow a consistent starlink_<noun> pattern, with verbs only for the write operations (reboot, stow, unstow). This is a predictable and uniform convention across the entire set.
Nine tools is well-scoped for a Starlink dish management server: six read-only monitoring/diagnostic operations and three write operations cover the core domain without redundancy or bloat.
The surface covers the main Starlink dish operations: status, alerts, obstruction, history, location, diagnostics, reboot, stow, and unstow. Minor gaps exist (e.g., no tool for changing dish settings or updating firmware), but the core monitoring and recovery workflows are complete.
Maintenance
Related MCP Connectors
Real-time planetary signal engine and Model Context Protocol (MCP) server for autonomous AI agents.
MCP server wrapping the Tesla Fleet API and TeslaMate API
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Syslog receiver and MCP server for homelab log intelligence.
Related MCP Servers
- AlicenseAqualityDmaintenanceA Model Context Protocol (MCP) server designed to easily dump your codebase context into Large Language Models (LLMs).13 npm3Apache 2.0
- AlicenseNot gradedqualityDmaintenanceAn MCP (Model Context Protocol) server that exposes Polestar 2 vehicle data to AI assistants like Claude. Query your car's battery status, vehicle info, and health data through natural conversation.1MIT
- AlicenseAqualityBmaintenanceA developer-focused server that exposes information from VW vehicles via a Model Context Protocol (MCP) interface. This project is designed for integration, automation, and experimentation with connected car data.33CC BY-SA 4.0
- AlicenseNot gradedqualityCmaintenanceProvides live astronomical telemetry and space data, including ISS tracking, NASA APOD, and solar weather, via a Model Context Protocol server with SSE and JSON-RPC support.MIT