zte-f6600p
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., "@zte-f6600p show me the DHCP clients connected to my router"
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.
ZTE F6600P: HTTP client, endpoint research and MCP
An independent, open-source blueprint for talking directly to a ZTE F6600P router—without browser automation or publishing a package to npm.
One repository, two loosely coupled layers:
src/client/: a Got-based TypeScript HTTP client. Owns cookies, authentication, page contexts, request integrity, encryption, response parsing and write policy. It does not import or initialize the MCP SDK.src/mcp/: a thin stdio MCP server that consumes the client.src/data/endpoints.json: curated public protocol metadata shared by the implementation and generated documentation.
What is documented
Research on F6600P firmware V9.0.10P6N6 / hardware V9.0.12 identified:
Finding | Count |
HTTP handlers | 58 |
Page-context routes | 29 |
HTTP method/action definitions | 128 |
Handlers with observed successful reads | 48 |
Handlers exposing configuration-write controls | 26 |
UPnP SOAP actions across four services | 27 |
Sources were the served firmware UI, shared JavaScript, observed responses and UPnP service descriptions. This is not an assertion that all firmware endpoints have been found, or that all advertised operations work.
Targeted writes verified during research: updating a DHCP start address and switching a 20 MHz 2.4 GHz radio between legacy and mixed modes. Read-back showed the requested changes while preserving unrelated settings. Other writes are source-derived candidates unless explicitly marked otherwise. The b/g/n/ax option is source-derived; that specific transition has not been live-tested.
The UI disabled editing for a user-level account, but the tested endpoints accepted authenticated writes anyway. UI-disabled is not a server-side permission check. Do not infer that every router, firmware or endpoint behaves identically.
Related MCP server: Technitium DNS MCP
API reference
The router uses HTTP RPC, not conventional REST: most handlers share / and are selected by _type and _tag. The OpenAPI document describes that real dispatch path, with per-handler schemas in components.schemas and evidence in x-router-handlers. It does not invent REST paths that the firmware would reject.
For a local, read-only Swagger UI:
npm run docs:serve
# Open http://localhost:8787The viewer loads Swagger UI assets from a CDN and disables “Try it out.” It never receives router credentials. The Markdown/JSON reference works offline. Per-handler details are most readable in docs/endpoints.md; Swagger's standard UI does not turn query-dispatched handlers into separate operations.
Install and run
Requires Node.js 22 or newer. Everything runs from this checkout; no npm publishing, workspace linking, global installation or separate client package is required.
git clone https://github.com/brunofin/zte-f6600p-mcp.git
cd zte-f6600p-mcp
npm ci --ignore-scripts
npm run build
cp .env.example .env
# Edit .env locally. Never commit it.
node --env-file=.env dist/mcp/index.jsThe server uses stdio, so running it directly waits for an MCP client to send JSON-RPC. It is not a web server.
Configuration
Variable | Required/default | Meaning |
| Required | Your explicit router root URL; no discovery or hard-coded installation address |
| Required | Router account |
| Required | Router password |
| Optional | Independently verified SHA-256 leaf-certificate pin for a self-signed router |
| Optional, disabled | Explicit UPnP root URL on the same hostname; observed service port was 52869 |
|
| Enable intentional mutations/actions |
|
| Also permit disruptive operations such as restart, reset, WAN termination, scans or counter resets |
Factory credentials observed on the researched firmware were user / user. They are documented defaults, not a recommendation to retain them. The client does not silently choose credentials, attempt other accounts, or elevate privileges. ISP-customized routers can have different defaults and permissions.
Prefer HTTPS. Normal certificate verification is enabled unless you explicitly configure a certificate pin. In pinning mode, the HTTP socket is withheld until the certificate's digest matches: credentials are not sent to a mismatched certificate. There is no “accept every certificate” switch or HTTP downgrade fallback. Obtain and verify the pin through a trusted channel; blindly trusting a certificate fetched over an untrusted network defeats pinning.
MCP client configuration
Use the executable and absolute checkout path in your MCP application's settings:
{
"mcpServers": {
"zte-f6600p": {
"command": "node",
"args": ["/absolute/path/to/zte-f6600p-mcp/dist/mcp/index.js"],
"env": {
"ROUTER_BASE_URL": "https://router.example.invalid",
"ROUTER_USERNAME": "user",
"ROUTER_PASSWORD": "user",
"ROUTER_ALLOW_WRITES": "false",
"ROUTER_ALLOW_DANGEROUS_ACTIONS": "false"
}
}
}
}Replace the reserved example hostname and credentials locally. Use your application's secret management when available. For a self-signed router, also provide your own verified ROUTER_TLS_SHA256.
MCP tools
Tool | Purpose |
| Inspect the local public catalog; no network request |
| Read a catalog-approved passive handler |
| Read DHCP settings |
| Read radios, SSID status and associated clients; no active scan |
| Preserve existing settings, patch boundaries, validate subnet, read back |
| Change an existing 20 MHz 2.4 GHz radio's mixed mode; verify radios and SSID/key preservation |
| Expert wire-level action from the catalog, with explicit parameters—not an automatic generic patch |
| Read an advertised SOAP action at an explicitly configured UPnP origin |
| Explicit SOAP operation subject to write/disruption policy |
The router://catalog MCP resource exposes the sanitized catalog.
Every mutation requires writes enabled and confirm: true on the call. Confirmation is a policy signal, not a substitute for the MCP host obtaining real user approval. Disruptive operations additionally require the dangerous-action flag. Enabling writes does not schedule or perform a write.
Some GET handlers initiate radio scans. They are deliberately excluded from passive reads and require the explicit action path. Reboots/factory resets are never used for discovery or verification. Cancel means reload, not undo, and is not exposed as an executable action.
Use only the HTTP client
After building, import the client directly; importing it does not start MCP or contact a router:
import { RouterClient } from './dist/client/index.js';
const router = new RouterClient({
baseUrl: process.env.ROUTER_BASE_URL,
username: process.env.ROUTER_USERNAME,
password: process.env.ROUTER_PASSWORD,
certificateSha256: process.env.ROUTER_TLS_SHA256,
allowWrites: false,
});
try {
console.log(await router.getDhcp()); // Credential/secret fields are redacted.
} finally {
await router.close();
}The generic read()/execute() methods expose cataloged passive handlers and explicit wire actions. Authentication is handled internally; UI-language/mode/setup preferences are documented but not exposed as generic actions. Candidate fields are not complete server schemas: expert actions require correctly normalized wire fields and instance identities. Typed helpers exist only where preservation and verification logic are implemented. SOAP is optional and does not receive login cookies or credentials.
Development and evidence
npm run check # Typecheck, offline mock tests, generated-doc checks, privacy policy
npm run build
npm audit
npm run docs:generateTests use synthetic fixtures and local mock servers. They do not discover, log in to, or mutate a real router. TLS test certificates and RSA keys are generated at test time, not committed. CI runs offline protocol tests on Node 22 and 24; network access is only needed for dependency installation/auditing.
No raw firmware UI dumps, private configuration, packet captures, SSIDs, client identities, original IP/MAC addresses, device serials, personal certificate pins, session tokens or real secrets are included. Runtime MCP reads naturally return your local network's requested non-secret data to your MCP host—keep that host trusted and review its retention settings. “Secret redaction” is not full anonymization of live device lists.
Contributions should include sanitized evidence, exact model/firmware, a narrowly described operation and verification status. Do not attach raw configurations, screenshots containing credentials, or captures. See SECURITY.md.
License and credits
MIT. Independent research; not affiliated with, approved by, or supported by ZTE or any ISP. ZTE and product names belong to their respective owners. This repository contains original implementation and curated protocol facts, not redistributed firmware UI bundles.
Support
If this project is useful to you, please consider supporting my open-source work.
Available Tools
9 toolsrouter_execute_actionBDestructive
Expert wire-level operation from the allowlisted catalog, not a generic patch. Review endpoint fields/hooks first. Requires writes enabled and explicit approval; disruptive actions require a second opt-in. Never assume Cancel means undo.
Inputs: action (required), confirm (required), handler (required), page, +2 more.
router_get_dhcpARead-onlyIdempotent
Read current DHCP settings without changing them.
Inputs: no named parameters.
router_get_wifiARead-onlyIdempotent
Read radio settings, SSID status and associated clients. Does not start a radio scan.
Inputs: no named parameters.
router_list_endpointsARead-onlyIdempotent
List the public source-derived endpoint catalog and verification status; no router request.
Inputs: no named parameters.
router_readBRead-onlyIdempotent
Read a documented passive handler. Active Wi-Fi scans and all actions are excluded. Secrets are redacted.
Inputs: handler (required), page, query.
router_set_24ghz_modeADestructive
Set the existing 20 MHz 2.4 GHz radio to b/g, b/g/n or b/g/n/ax. May briefly restart that radio. Preserve other settings and verify read-back; no 5 GHz changes.
Inputs: mode (required), confirm (required).
router_set_dhcp_rangeADestructive
Patch DHCP boundaries only; preserve other settings and verify by fresh read-back. Requires writes enabled and explicit user approval.
Inputs: confirm (required), end, start.
router_soap_actionBDestructive
Explicit SOAP mutation/action. Requires UPnP configuration, writes enabled, confirmation and additional disruptive-action permission where applicable.
Inputs: action (required), confirm (required), serviceId (required), parameters.
router_soap_readBRead-onlyIdempotent
Call an advertised read-only SOAP action. Requires explicit UPnP origin configuration; some advertised getters are known to fault.
Inputs: action (required), serviceId (required), parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 9 tools
Most tools target clearly different resources or actions, but router_read, router_get_dhcp, router_get_wifi, and router_soap_read form a cluster of read operations that could be confused. Similarly, router_execute_action and router_soap_action are both generic write paths, though the descriptions mostly disambiguate by protocol and safety level.
All tools consistently use the router_ prefix and snake_case, with mostly verb-led names such as router_list_endpoints and router_set_dhcp_range. Minor deviations include router_read as a bare verb and router_soap_read/router_soap_action placing the protocol qualifier before the action.
Nine tools is well within the appropriate range for a router-control server. The set includes specific safe helpers plus generic read/action and SOAP paths without feeling bloated.
The set covers endpoint discovery, DHCP and Wi-Fi reads, targeted DHCP/radio writes, and generic/SOAP read-action paths, which is solid for this router wrapper. Some common operations such as broader Wi-Fi/SSID writes or 5 GHz changes are left to generic actions rather than dedicated tools.
Maintenance
Related MCP Connectors
An authenticated remote MCP server for user-owned devices and one-shot capability invocation.
Governed MCP gateway: one endpoint for your tools, with credential custody and audit log.
Managed MCP gateway with OAuth, per-agent permissions, shared accounts and activity logs.
MCP gateway with runtime security policy, tool-call-level control, and audit of agent actions.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables remote agents to securely read firewall and NAT rules, inspect routing tables and logs, and execute safety-gated mutation plans through a bearer-authenticated MCP endpoint.46 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables managing and observing Technitium DNS Server through MCP, including read-only or read-write tool surfaces, scoped bearer authentication, audit logging, and confirmation gates for destructive operations.MIT
- AlicenseNot gradedqualityFmaintenanceEnables a private, owner-authenticated MCP client to call approved upstream APIs through a server-owned registry, with server-held credentials, fixed origins, bounded responses, and distinct read/write tools. Writes are opt-in and durably recorded with stable operation identifiers.MIT
- AlicenseNot gradedqualityAmaintenanceEnables teams to govern which MCP tools agents can use, what they can do, and how it’s audited by onboarding remote MCP servers, setting credential modes and function-level allow lists, and exposing permitted MCP configurations through a unified endpoint with search and execute.MIT