netassist
Provides network diagnostics for GitHub, including reachability checks (DNS, TCP, HTTPS status and latency), detection of hosts file entries that may affect GitHub access, and concrete suggestions for resolving connectivity issues.
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., "@netassistWhy can't I reach GitHub? Check my proxy, DNS, and hosts file."
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.
mcp-netassist
Network & proxy diagnostics as an MCP server.
Works with any MCP client — Claude Code, Claude Desktop, Cursor, Reasonix, CodeWhale, DeepSeek Harness. Point your agent at it and ask "is GitHub reachable?", "why is my proxy not working?", "what should I change?" — instead of guessing.
Built for the China-network reality: flaky GitHub, proxies that are half-configured, hosts files that fight the proxy, and TUN mode that silently overrides the system proxy.
Windows-only for now: the checks call PowerShell. The protocol layer is portable; a POSIX backend is the obvious next step.
Tools
Tool | Answers |
| Is github.com reachable right now? DNS, TCP 443, HTTPS status + latency |
| What proxy is the system using? Registry settings + env vars, including a disabled-but-leftover value |
| Which local proxy ports are alive? (defaults: 10808, 10809, 7890, 7897, 8888, 1080) |
| Full chain for any host: DNS → TCP → HTTP status |
| Which GitHub entries are pinned in the hosts file? |
| The whole preflight, with concrete suggestions about what to change |
net_doctor is the point of this server. Other tools tell you what is wrong; it tells you what to do about it:
✔ System proxy: 127.0.0.1:10808
✔ Proxy port 10808 responding
✔ GitHub reachable (HTTP 200, 312 ms)
⚠ TUN-style adapter detected: clash
Under TUN mode the system proxy setting is usually ignored — the two can fight each other.
✔ hosts file clean (no GitHub entries)
Suggested fix:
- Under TUN mode, clear the Windows system proxy (or exclude github.com) so traffic is not double-handled.Related MCP server: connectivity-diagnostics
Setup
Claude Desktop / Cursor / any JSON-configured client:
{
"mcpServers": {
"netassist": {
"command": "npx",
"args": ["-y", "github:Edge-Echo/mcp-netassist"]
}
}
}The built lib/ ships in the repository, so the GitHub form needs no build step.
From npm (once the first release is published):
{
"mcpServers": {
"netassist": {
"command": "npx",
"args": ["-y", "mcp-netassist"]
}
}
}Claude Code:
claude mcp add netassist -- npx -y github:Edge-Echo/mcp-netassistDeepSeek Harness (same diagnostics as a native plugin, plus net_doctor as an agent tool):
dsh plugin --profile web add dsh-netassistFrom a checkout:
{
"mcpServers": {
"netassist": { "command": "node", "args": ["/path/to/mcp-netassist/lib/server.js"] }
}
}In a container:
docker build -t mcp-netassist .
docker run -i --rm mcp-netassistThe image is also what directory listings use for introspection checks. Inside a Linux container the server starts and answers
initialize/tools/listnormally; the tools themselves need Windows PowerShell, and say so when it is missing.
Design notes
Read-only. No tool writes config, changes the proxy, or edits the hosts file. It reports and suggests; you decide.
Injection-safe. Every user input crosses the PowerShell boundary as Base64, never as interpolated text.
No hidden state. Each call runs its own checks; nothing is cached between calls, so results are always current.
Two dependencies (
@modelcontextprotocol/sdk,zod), no native modules.
Related
Part of the dsh-toolkit family — the same diagnostics also ship as a DeepSeek Harness plugin (dsh-netassist), which adds net_doctor as an agent tool.
License
MIT
Available Tools
6 toolsnet_diagA
Full reachability diagnosis for any host: DNS resolution, TCP connect test, then an HTTP(S) status check.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | Hostname or IP address | |
| path | No | URL path for the HTTP check (default /) | |
| port | No | TCP port to test (default 443) |
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 does disclose the sequence of operations (DNS, TCP, HTTP(S)), but omits whether the tool is read-only, how failures or timeouts are handled, and whether any state changes occur. This is partial but not complete 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 a single, front-loaded sentence with a colon followed by a compact, ordered list of checks. Every word earns its place; no redundancy or 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 absence of an output schema and annotations, the description gives a clear high-level behavior but does not cover return format, error behavior, or how this tool relates to sibling diagnostics. For a low-complexity tool with a fully documented parameter schema, this is a moderate 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?
Schema description coverage is 100%: host, path, and port are each described with types and defaults. The tool description adds no parameter-specific meaning beyond what the schema already states, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Full reachability diagnosis for any host', followed by a concrete sequence of checks (DNS, TCP, HTTP(S)). This distinguishes it from sibling tools focused on specific services like GitHub or proxy 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?
It provides clear context: use this when you need a comprehensive reachability diagnosis of any host. However, it does not explicitly reference sibling tools or state when not to use it, so it lacks exclusions and explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
net_doctorA
Run the full network preflight (system proxy, proxy ports, TUN adapters, GitHub reachability, hosts conflicts) and report each finding with concrete suggestions about what to change. Use this before blaming the network for a failure.
| Name | Required | Description | Default |
|---|---|---|---|
No 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 discloses what the tool does (runs a comprehensive diagnostic across five categories) and what it produces ('report each finding with concrete suggestions about what to change'). The diagnostic/preflight framing strongly implies a read-only, non-mutating operation. It does not state permission requirements or response format, but for a zero-parameter diagnostic tool the disclosed scope and output behavior are solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The first sentence front-loads the full scope and output behavior; the second delivers the usage guidance. Every word earns its place and nothing is redundant with the schema, which is empty. This is model concision.
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-parameter diagnostic with no output schema, the description covers the essential ground: the full check scope, the reporting behavior with suggestions, and the timing of use. An agent can decide to call it and know what to expect. It could marginally improve by routing to specific siblings for targeted checks, but nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and an empty schema, so per the rubric the baseline is 4. There is nothing for the description to add beyond what the schema provides, and it correctly requires no parameter explanation. This is the appropriate ceiling 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 uses a specific verb ('Run') and a clearly scoped resource ('the full network preflight'), then enumerates the five check categories (system proxy, proxy ports, TUN adapters, GitHub reachability, hosts conflicts). The 'full' designation plus the enumerated scope clearly distinguishes it from the targeted sibling tools like net_proxy_status and net_hosts_check, which each cover only one slice. An agent can tell exactly what this does and how it differs from its siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit usage directive: 'Use this before blaming the network for a failure.' This tells the agent when to invoke it as the first diagnostic step. It stops short of naming alternatives or explicit when-not-to-use conditions, but the 'full preflight' framing plus the enumerated sibling tools makes the intended decision point reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
net_github_statusA
Check whether github.com is reachable right now: DNS resolution, TCP 443, and the HTTPS status code with round-trip time.
| Name | Required | Description | Default |
|---|---|---|---|
No 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 disclosure. It clearly lists the three network checks performed and includes round-trip time, which is a helpful behavior detail. It does not mention failure modes, timeouts, or side effects, but for a read-only reachability probe the disclosed behavior is adequate.
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, well-structured sentence front-loads the primary purpose and appends the specific checks. Every word adds value; there is no fluff 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 zero-parameter, read-only network probe, the description provides all essential information an agent needs to decide whether to call it. The lack of an output schema is not a critical gap here because the tool's behavior is fully implied by the described checks, though a note on the response format would make it marginally more 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 tool has zero parameters, so the baseline is 4. The description correctly focuses on the tool's behavior rather than inventing parameter details. The empty schema needs no further explanation.
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 ('Check'), a specific resource ('github.com'), and the exact scope ('DNS resolution, TCP 443, and the HTTPS status code with round-trip time'). It is immediately distinguishable from sibling tools, which target proxy/diagnostic/network checks rather than a single host.
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 context: use this when you need to know whether github.com is reachable right now. It does not explicitly name alternatives or exclusions, but the specificity of the target (github.com) makes the intended use unambiguous even without referencing siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
net_hosts_checkA
Scan the Windows hosts file for GitHub-related entries. Pinned entries bypass a proxy and can go stale — this lists what is pinned.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full transparency burden. The verbs 'scan' and 'lists' clearly imply a read-only, non-destructive operation, and the explanation about proxy bypass adds behavioral insight. It doesn't explicitly state 'does not modify the file,' but that is strongly implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The action is front-loaded, followed by the reason the tool exists. 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?
For a zero-parameter, read-only tool with no output schema, the description explains the purpose, the behavior, and the result ('this lists what is pinned'). It could mention edge cases like missing file permissions, but overall it gives enough for an agent to invoke it 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?
The tool has zero parameters, so there is nothing to clarify. The baseline of 4 applies because the description correctly omits parameter details that don't exist.
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 action ('Scan'), a concrete resource ('the Windows hosts file'), and a clear scope ('GitHub-related entries'). This cleanly separates it from the siblings, which deal with GitHub status and proxy state rather than host file pinning.
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 gives context for when the tool is relevant — pinned entries bypass the proxy and can go stale — so an agent understands why to run it. However, it doesn't explicitly name alternatives or state when not to use it, stopping short of the strongest guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
net_proxy_probeB
Probe local proxy ports for TCP reachability. Defaults to the common ports (10808, 10809, 7890, 7897, 8888, 1080); pass ports to override.
| Name | Required | Description | Default |
|---|---|---|---|
| ports | No | Ports to probe (default 10808, 10809, 7890, 7897, 8888, 1080) |
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 mentions default ports and override behavior, but that is already in the schema, and it does not disclose side effects, permissions, or what the output of the probe looks like.
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, efficiently structured sentence that front-loads the core purpose before providing the default behavior. Every word earns its place, and there is no unnecessary detail.
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 explains what the tool does and its defaults, but omits the return value or output semantics, which matters given there is no output schema. It also does not clarify the relationship to the closely named sibling `net_proxy_status`, leaving the agent to infer competition.
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, `ports`, is fully described in the schema with a default list, giving 100% schema coverage. The description adds the nuance that passing `ports` overrides the defaults, but this is minimal added value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb (probe), resource (local proxy ports), and purpose (TCP reachability), making the tool's function distinct. It does not explicitly contrast with sibling tools like net_proxy_status, but the mention of local ports and defaults narrows its scope.
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 given on when to use this tool versus alternatives like net_proxy_status or net_diag. The description implies usage for checking local proxy port reachability but does not state when not to use it or provide any selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
net_proxy_statusA
Show the Windows system proxy configuration (registry) and proxy environment variables. Distinguishes "system proxy" from "TUN mode" from "no proxy", and flags a disabled-but-leftover registry value.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does well by specifying that it reads registry data and environment variables, distinguishes three proxy states, and flags a disabled-but-leftover registry value. It stops short of explicitly stating 'read-only' or noting the absence of side effects, though 'Show' strongly implies a non-mutating operation.
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 and every clause earns its place: the first names the action and target, the second clarifies the output distinctions and a notable edge case. It is front-loaded with the core purpose and contains 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?
For a zero-parameter read-only status tool with no output schema, this description is complete. It tells the agent exactly what data source is inspected, which categories may be reported, and which special condition is highlighted, leaving no missing information needed to 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?
The tool takes zero parameters, so the input schema is empty and the description has no parameter-documentation burden. The baseline for a parameterless tool is 4, and the description contains no misleading or unnecessary parameter-related information.
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 action ('Show'), a specific resource ('Windows system proxy configuration (registry)') and the exact scope ('proxy environment variables'). It also defines output categories ('system proxy', 'TUN mode', 'no proxy'), making the tool's purpose unambiguous and clearly distinct from generic network diagnostics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool does but gives no guidance on when to choose it over siblings such as net_proxy_probe, net_diag, or net_doctor. There are no explicit use conditions, exclusions, or alternative-selection hints, so the agent must infer appropriate usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.1.0- First observed
net_diag - First observed
net_doctor - First observed
net_github_status - First observed
net_hosts_check - First observed
net_proxy_probe - First observed
net_proxy_status
TDQS
Scored across 6 tools
Each tool has a distinct focus: GitHub-specific reachability, system proxy configuration, proxy port probing, generic host diagnostics, hosts file scanning, and a comprehensive preflight. While github_status and diag overlap in concept, their scopes are clearly separated (GitHub vs any host). No two tools are ambiguous.
All tools share a consistent 'net_' prefix and snake_case naming, but the second part varies between domain-action patterns (github_status, proxy_status, hosts_check) and simpler names (diag, doctor). The naming is readable and predictable, with only minor inconsistency in verbosity.
With 6 tools, the server covers a focused set of network diagnostics without bloat. Each tool serves a specific diagnostic purpose, and the count feels well-scoped for a troubleshooting utility.
The tool set covers the full diagnostic lifecycle: system proxy state, local proxy ports, general host reachability, GitHub-specific checks, hosts file conflicts, and a comprehensive doctor that aggregates findings. No obvious dead ends or missing operations for the stated purpose.
Maintenance
Related MCP Connectors
Screens public GitHub repos and PRs to generate risk maps, findings, and merge-readiness signals.
Manage repositories, users, releases, and automate GitHub workflows
Scan any website or MCP server for agent readiness: 0-100 score, a fix per failing check. Free.
Generate SBOMs, scan vulnerabilities, and analyze dependencies from local projects or Git repos.
Related MCP Servers
- AlicenseAqualityCmaintenanceNetwork diagnostics — ping, traceroute, DNS lookup, port scanning, and connectivity testing via MCP.14MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to perform real network diagnostics on the local machine, including ping, traceroute, DNS lookups, TLS checks, and more.MIT
- AlicenseNot gradedqualityAmaintenanceProvides AI assistants with local Wi-Fi diagnostics including connection history analysis, live signal sampling, and connectivity diagnosis. It returns findings and verdicts rather than raw data, and runs on Windows, Linux, and macOS without sending data off the machine.63 npm1MIT
- AlicenseNot gradedqualityCmaintenanceDiagnoses proxy misconfigurations that break AI coding tools like Cursor, VS Code, and Windsurf.1MIT