snmp-mcp
A local MCP server for read-only SNMPv2c queries, providing snmp_get and snmp_walk tools over stdio with CIDR-based community string configuration.
README
snmp-mcp
Local stdio MCP server for SNMPv2c read-only queries. Community strings come from a CIDR config file; agents call low-level snmp_get / snmp_walk with numeric or MIB-qualified OIDs.
Product requirements: PRD.md.
Requirements (every machine)
| Need | Notes |
|---|---|
| Python 3.11+ | For install via pipx / uv / pip |
| net-snmp CLI | Optional on feature/pysnmp: only needed for --backend netsnmp |
**Default backend (`feature/pysnmp` branch): pure-Python [pysnmp](https://pypi.org/project/pysnmp/).**
No net-snmp install required for basic get/walk.
Optional fallback to CLI:
```bash
# macOS (Homebrew) — only if using --backend netsnmp
brew install net-snmp
snmp-mcp --backend pysnmp ... # default
snmp-mcp --backend netsnmp ... # requires snmpget/snmpwalk on PATH
# or: SNMP_MCP_BACKEND=netsnmp
Install (easy, another machine)
Goal: a global snmp-mcp command on your PATH.
Option A — build a wheel, scp one file, pip install (what you want)
On the build machine (this repo):
cd /path/to/snmp-mcp
python3 -m pip install build
python3 -m build
# produces:
# dist/snmp_mcp-1.0.0-py3-none-any.whl ← copy this
# dist/snmp_mcp-1.0.0.tar.gz ← source archive (optional)
Copy the wheel to the other Mac:
scp dist/snmp_mcp-1.0.0-py3-none-any.whl othermac:~/Downloads/
On the other Mac:
# prereqs: Python 3.11+, net-snmp (brew install net-snmp)
pipx install ~/Downloads/snmp_mcp-1.0.0-py3-none-any.whl
# or without pipx:
python3 -m pip install --user ~/Downloads/snmp_mcp-1.0.0-py3-none-any.whl
which snmp-mcp
snmp-mcp --help
Notes:
- The
.whlis the single installable artifact (pure Python, works on any Mac/Linux with Python 3.11+). pip/pipxstill downloads dependencies (mcp,PyYAML) from PyPI unless you vendor those wheels too.- Upgrade later: build a new wheel, scp,
pipx install --force ~/Downloads/snmp_mcp-….whl.
Option B — pipx / uv from a git clone or path
git clone <your-repo-url> snmp-mcp
cd snmp-mcp
pipx install .
# or: uv tool install .
# or: pipx install 'git+ssh://git@gitlab.com/…/snmp-mcp.git'
Option C — venv + pip from source tree
cd snmp-mcp
python3 -m venv .venv && source .venv/bin/activate
pip install .
which snmp-mcp
Verify install
snmp-mcp --help
# or: ~/.local/bin/snmp-mcp --help (common pipx location)
Config (once per machine)
mkdir -p ~/.config/snmp-mcp
cp examples/communities.yaml.example ~/.config/snmp-mcp/communities.yaml
# optional:
cp examples/hosts.yaml.example ~/.config/snmp-mcp/hosts.yaml
chmod 600 ~/.config/snmp-mcp/communities.yaml
Edit communities (example):
# ~/.config/snmp-mcp/communities.yaml
communities:
- network: 172.23.7.0/24
community: mcp
Matching: longest CIDR prefix wins; same length → first listed. No match → tool error (no default community).
Optional hosts map:
# ~/.config/snmp-mcp/hosts.yaml
hosts:
tibit: 172.23.7.1
Smoke-test without an MCP client:
# Ensure communities file is set; this starts the MCP stdio server (Ctrl+C to stop)
snmp-mcp --communities ~/.config/snmp-mcp/communities.yaml
For a direct SNMP check (outside MCP):
snmpget -v2c -c mcp -t 3 172.23.7.1 SNMPv2-MIB::sysDescr.0
Register with Claude Desktop
- Install
snmp-mcpsosnmp-mcpis on your login PATH (or use the absolute path fromwhich snmp-mcp/pipx list). - Open Claude Desktop → Settings → Developer → Edit Config
(or edit the file directly):
| OS | Config file |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
- Merge the
mcpServers.snmpblock (see alsoexamples/claude_desktop_config.snippet.json):
{
"mcpServers": {
"snmp": {
"command": "snmp-mcp",
"args": [
"--communities",
"/Users/YOU/.config/snmp-mcp/communities.yaml",
"--hosts",
"/Users/YOU/.config/snmp-mcp/hosts.yaml"
]
}
}
}
If Claude cannot find snmp-mcp (common when GUI apps don’t inherit shell PATH), use the absolute path:
which snmp-mcp
# e.g. /Users/YOU/.local/bin/snmp-mcp
{
"mcpServers": {
"snmp": {
"command": "/Users/YOU/.local/bin/snmp-mcp",
"args": [
"--communities",
"/Users/YOU/.config/snmp-mcp/communities.yaml"
]
}
}
}
- Fully quit and restart Claude Desktop.
- Confirm the
snmpserver appears under Developer / MCP tools. Try: “Use snmp_get on 172.23.7.1 for SNMPv2-MIB::sysDescr.0”.
Register with OpenCode
OpenCode reads MCP under the mcp key in:
- Global:
~/.config/opencode/opencode.json(oropencode.jsonc) - Project:
opencode.jsonin the project root
Add a local server (see also examples/opencode.mcp.snippet.json):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"snmp": {
"type": "local",
"enabled": true,
"command": [
"snmp-mcp",
"--communities",
"/Users/YOU/.config/snmp-mcp/communities.yaml",
"--hosts",
"/Users/YOU/.config/snmp-mcp/hosts.yaml"
]
}
}
}
Notes:
commandis a JSON array: binary first, then args (not a single shell string).- Prefer absolute path to
snmp-mcpif OpenCode’s environment is minimal. - Optional: pass env instead of flags:
{
"mcp": {
"snmp": {
"type": "local",
"enabled": true,
"command": ["snmp-mcp"],
"environment": {
"SNMP_MCP_COMMUNITIES": "/Users/YOU/.config/snmp-mcp/communities.yaml",
"SNMP_MCP_HOSTS": "/Users/YOU/.config/snmp-mcp/hosts.yaml"
}
}
}
}
Restart OpenCode (or start a new session). List / debug MCP with OpenCode’s MCP commands if available (opencode mcp list).
Prompt example: “Using snmp tools, what is sysDescr and uptime for tibit?”
If OpenCode shows MCP error -32000: Connection closed:
- In a terminal,
snmp-mcp --communities ~/.config/snmp-mcp/communities.yamlshould hang with no output (that means the server is healthy — Ctrl+C to stop). - Use absolute paths in
command(OpenCode often has a minimalPATH). - Set
environment.PATHto include Homebrew if net-snmp lives there (/opt/homebrew/bin). - Raise
timeout(ms) for tool discovery, e.g.15000. - Rebuild/reinstall after upgrades (
pipx install --force …whl).
CLI flags / env
| Flag | Env | Default |
|---|---|---|
--communities |
SNMP_MCP_COMMUNITIES |
required |
--hosts |
SNMP_MCP_HOSTS |
none |
--mib-dir |
SNMP_MCP_MIB_DIR |
bundled MIBs |
--timeout |
SNMP_MCP_TIMEOUT |
3 |
--retries |
SNMP_MCP_RETRIES |
1 |
--max-walk-results |
SNMP_MCP_MAX_WALK_RESULTS |
1000 |
--log-level |
SNMP_MCP_LOG_LEVEL |
WARNING |
Tools
snmp_get(hosts, oids, port?)— one host or list; one OID or listsnmp_walk(hosts, oid, port?, max_results?)— capped walk;truncated: trueif cut
Common OIDs
| Question | OID |
|---|---|
| Uptime | SNMPv2-MIB::sysUpTime.0 |
| OS / description | SNMPv2-MIB::sysDescr.0 |
| System name | SNMPv2-MIB::sysName.0 |
| Interfaces | walk IF-MIB::ifDescr |
Private / enterprise MIBs
Bundled MIBs cover standard system/IF. For private trees (e.g. Pavlov under
enterprises.29941):
# Option 1: personal dir (auto-loaded if present)
mkdir -p ~/.config/snmp-mcp/mibs
cp private-mibs/*.txt ~/.config/snmp-mcp/mibs/
# Option 2: explicit flag
snmp-mcp --communities ... --mib-dir /path/to/private-mibs
See private-mibs/README.md for module names and example OIDs
(PAVLOV-DOCKER::dockerRunning, PAVLOV-BIRD::birdRunning, …).
net-snmp expects .txt files whose names match the MIB module.
Dev install & tests
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
pytest
Troubleshooting
| Symptom | Fix |
|---|---|
net-snmp tools not found |
Install net-snmp; ensure snmpget/snmpwalk on PATH for the MCP process |
| Claude/OpenCode: server fails to start | Use absolute path to snmp-mcp; check communities file path |
no community rule matches |
Host IP not covered by any CIDR in YAML |
| SNMP timeout | Wrong IP, community, firewall, or device down; test with bare snmpget first |
| Named OIDs fail | Bundled MIBs missing from install — reinstall package; or pass --mib-dir |
Implementation notes
- Language: Python MVP; Kotlin possible later (same contracts). See PRD.
- SNMP engine (feature/pysnmp): pysnmp by default; net-snmp CLI via
--backend netsnmp. - Package: import
org.dempsay.mcp.snmp; console scriptsnmp-mcp. - Secrets: keep
communities.yamlout of git; mode600.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.