feat: Network MCP Server v0.1.0 — SNMP backend with 5 tools

MVP with zero-dependency SNMP backend for AI-powered network management:
- get_snmp_value: query single OID
- walk_snmp_tree: walk OID subtree
- get_device_info: vendor auto-detection, uptime, location
- get_interfaces: interface status with human-readable output
- discover_devices: subnet SNMP discovery

Tech: FastMCP + pysnmp-lextudio, Python 3.10+
Works with: Cisco, Juniper, Arista, UniFi, Fortinet, and any SNMP device
23 tests passing

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-05 07:48:18 +10:00
co-authored by Claude Opus 4.6
commit 761bb8c16c
14 changed files with 1155 additions and 0 deletions
+57
View File
@@ -0,0 +1,57 @@
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "network-mcp-server"
version = "0.1.0"
description = "MCP server for network device management via SNMP — query any vendor's devices with AI"
readme = "README.md"
license = {text = "MIT"}
requires-python = ">=3.10"
authors = [{name = "Tao Deng", email = "dtzp555@gmail.com"}]
keywords = ["mcp", "snmp", "network", "cisco", "juniper", "monitoring"]
classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: System Administrators",
"Topic :: System :: Networking :: Monitoring",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
]
dependencies = [
"fastmcp>=2.0.0",
"pysnmp-lextudio>=6.1.0",
"pydantic>=2.0",
"pyyaml>=6.0",
]
[project.optional-dependencies]
dev = [
"pytest>=8.0",
"pytest-asyncio>=0.23",
"ruff>=0.4",
]
[project.urls]
Homepage = "https://github.com/dtzp555-max/network-mcp-server"
Issues = "https://github.com/dtzp555-max/network-mcp-server/issues"
[project.scripts]
network-mcp = "network_mcp.server:main"
[tool.hatch.build.targets.wheel]
packages = ["src/network_mcp"]
[tool.ruff]
line-length = 100
target-version = "py310"
[tool.ruff.lint]
select = ["E", "F", "I", "N", "W"]
[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]