MCP server to manage NAT / port forwarding on ZTE ZXHN F680 routers
Project description
zte-f680-mcp
MCP Server (Model Context Protocol) to manage NAT / port forwarding on a ZTE ZXHN F680 GPON router from any MCP-compatible client (Claude Desktop, Claude Code, Cursor, Windsurf, OpenAI Agents SDK, Cline, Continue, etc.).
Control your router port forwarding rules conversationally, without opening the web UI.
Features
| Tool | Description |
|---|---|
zte_get_port_forwards |
List all NAT rules |
zte_add_port_forward |
Add a new port forwarding rule |
zte_modify_port_forward |
Modify an existing rule by index |
zte_delete_port_forward |
Delete a rule by index |
zte_run_page |
Fetch and parse any page from the router (generic) |
Requirements
- Python 3.10+
- A ZTE ZXHN F680 router reachable on the local network
- The admin credentials of the router's web panel
Install & configure
The easiest way is with uv (or pipx). No cloning, no venv.
Claude Desktop
Edit claude_desktop_config.json:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"zte": {
"command": "uvx",
"args": ["zte-f680-mcp"],
"env": {
"ZTE_HOST": "192.168.1.1",
"ZTE_USER": "1234",
"ZTE_PASSWORD": "your_password_here"
}
}
}
}
Claude Code (CLI)
claude mcp add zte \
--env ZTE_HOST=192.168.1.1 \
--env ZTE_USER=1234 \
--env ZTE_PASSWORD=your_password_here \
-- uvx zte-f680-mcp
Cursor / Windsurf / Cline / Continue
Add the same block as Claude Desktop in the corresponding MCP settings file of each client.
OpenAI Agents SDK (Python)
from agents.mcp import MCPServerStdio
zte = MCPServerStdio(
params={
"command": "uvx",
"args": ["zte-f680-mcp"],
"env": {
"ZTE_HOST": "192.168.1.1",
"ZTE_USER": "1234",
"ZTE_PASSWORD": "your_password_here",
},
}
)
Alternative: classic pip install
pip install zte-f680-mcp
Then point your MCP client at the installed script:
{
"mcpServers": {
"zte": {
"command": "zte-f680-mcp",
"env": {
"ZTE_HOST": "192.168.1.1",
"ZTE_USER": "1234",
"ZTE_PASSWORD": "your_password_here"
}
}
}
}
Configuration
The server reads three environment variables (or a local .env file):
| Variable | Default | Description |
|---|---|---|
ZTE_HOST |
192.168.1.1 |
Router IP |
ZTE_USER |
1234 |
Admin username |
ZTE_PASSWORD |
(none) | Admin password (required) |
Example prompts
Once the MCP is registered you can ask your assistant things like:
List the NAT rules on my ZTE router
Open TCP port 8080 forwarded to 192.168.1.100
Delete port forwarding rule number 2
Show the DHCP leases from my router
How it works
- Auth:
SHA256(password + random)with dynamic tokens (Frm_Logintoken,Frm_Loginchecktoken) extracted from the login page. - Session: Expires ~60 s idle. The server re-authenticates automatically every 45 s.
- Anti-CSRF: Each write operation requires a fresh
_SESSION_TOKENfetched from the page. - Protocol codes:
0= TCP+UDP,1= UDP,2= TCP. - Transport: MCP over
stdio.
Stack
- FastMCP (
mcp[cli]) - httpx (async HTTP client)
- python-dotenv
- pydantic
Development
git clone https://github.com/Picaresco/MCP-ZTE-F680.git
cd MCP-ZTE-F680
python -m venv venv && . venv/Scripts/activate # Windows
# source venv/bin/activate # Linux / macOS
pip install -e .
cp .env.example .env # fill in your credentials
python -m zte_f680_mcp.server
License
MIT © Alberto Diaz
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file zte_f680_mcp-0.1.0.tar.gz.
File metadata
- Download URL: zte_f680_mcp-0.1.0.tar.gz
- Upload date:
- Size: 8.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
702e98043eb91b31c1b11ae3b2efd35d7328b48187ee5d43d030f7a5e37644f4
|
|
| MD5 |
96950fb7ba6e48a046e24e73fe3199f0
|
|
| BLAKE2b-256 |
533706a5a85ec2e23b5c1434ddb9613b4a687c60e268b6ae96700f9b4dbf2053
|
File details
Details for the file zte_f680_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: zte_f680_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 9.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
abdf05810fa9c1632716e936dfa823741d8759d7c0420afa5006c778ab082596
|
|
| MD5 |
4701fb85b9c8c87265870c7ebcdfc9ae
|
|
| BLAKE2b-256 |
b8f91cde1ebdffe34ef4b6816203f5829a73dfc8d156fe7543dce167bbd06062
|