{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_xxew5ev33x4h","handle":"tazendor-opnsense-mcp","url":"https://wellknown.network/agents/tazendor-opnsense-mcp","links":{"self":"https://wellknown.network/agents/tazendor-opnsense-mcp/record.json","html":"https://wellknown.network/agents/tazendor-opnsense-mcp","markdown":"https://wellknown.network/agents/tazendor-opnsense-mcp/record.md","api":"https://wellknown.network/api/v1/agents/tazendor-opnsense-mcp","status":"https://wellknown.network/api/v1/agents/tazendor-opnsense-mcp/status","claim":"https://wellknown.network/agents/tazendor-opnsense-mcp/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/tazendor-opnsense-mcp/claim.json","badge":"https://wellknown.network/agents/tazendor-opnsense-mcp/badge.svg","openapi":"https://wellknown.network/openapi.json"},"ard":{"identifier":"urn:air::server:tazendor-opnsense-mcp","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"tazendor-opnsense-mcp","summary":"MCP server for the OPNsense REST API","description":"# OPNsense MCP Server\n\n[![CI](https://github.com/tazendor/opnsense-mcp-server/actions/workflows/ci.yml/badge.svg)](https://github.com/tazendor/opnsense-mcp-server/actions/workflows/ci.yml)\n[![PyPI](https://img.shields.io/pypi/v/tazendor-opnsense-mcp)](https://pypi.org/project/tazendor-opnsense-mcp/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n[![Built with SpecKit](https://img.shields.io/badge/built%20with-SpecKit-6f42c1)](https://github.com/github/spec-kit)\n\n**GitHub**: https://github.com/tazendor/opnsense-mcp-server\n\nA Python [Model Context Protocol](https://modelcontextprotocol.io/) server that exposes the OPNsense REST API to AI clients such as Claude Desktop and Claude Code.\n\n## What it does\n\nThe server proxies 43 OPNsense API endpoints across eight domains as MCP tools, letting AI clients query and mutate firewall state through natural language.\n\n| Domain | Tools | Capabilities |\n|--------|-------|--------------|\n| System | 3 | Status, firmware check, config backup |\n| Firewall | 17 | Rule and alias CRUD, NAT port forwards, apply |\n| Interfaces | 4 | Interface list, config, ARP/NDP tables |\n| DHCP | 3 | Lease list, settings, static mappings |\n| Routes | 5 | Static route CRUD and apply |\n| DNS | 6 | Unbound settings and host override CRUD |\n| IDS | 1 | Ruleset list |\n| Services | 4 | Start/stop/restart/status for core modules |\n\nMutating operations follow OPNsense's staged-then-apply model: changes are staged by `_add`/`_update`/`_delete` tools and committed by the corresponding `_apply` tool.\n\n## Requirements\n\n- Python 3.12+\n- [`uv`](https://docs.astral.sh/uv/)\n- OPNsense **26.1+** with API access enabled\n\n> **Compatibility**: Tested against OPNsense 26.1.10. The 26.x release series\n> made breaking REST API changes — Kea replaced ISC DHCPv4 (`kea/*` paths),\n> port-forward NAT moved to Destination NAT (`firewall/d_nat/*`), and the system\n> status endpoint changed. Older releases are not supported.\n\n## Installation\n\n```bash\np…","publisher":null,"homepage":null,"repository":null,"version":"0.2.4","license":"MIT","protocols":["mcp"],"tags":["mcp"],"pricing":null,"endpoints":[{"url":"pypi:tazendor-opnsense-mcp","type":"package_pypi","auth":null,"probeable":false}],"skills":null,"tools":null,"extra":null,"attribution":{"kind":"pypi","name":"pypi","license":"pypi","summary":"pypi","version":"pypi","description":"pypi"}},"derived":{"capabilities":[{"slug":"data.apis","name":"API Access","confidence":0.848,"provenance":"derived"}],"categories":["data"],"language":"en"},"observed":{"status":"unknown","statusReason":"Distributed as a package to run locally; no network endpoint to check.","lastOkAt":null,"lastProbedAt":null,"statusComputedAt":null,"reliability30d":null,"latestObservations":[],"tools":null,"package":{"name":"tazendor-opnsense-mcp","registry":"pypi","observedAt":"2026-09-10T13:21:53.906Z","publishedAt":"2026-06-29T21:37:38.629799Z","latestVersion":"0.2.4"}},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"pypi","key":"tazendor-opnsense-mcp","url":"https://pypi.org/project/tazendor-opnsense-mcp/","firstSeenAt":"2026-09-10T13:21:00.347Z","fetchedAt":"2026-09-10T13:21:00.347Z","normalizedAt":"2026-09-10T13:21:00.347Z"}]},"firstSeenAt":"2026-09-10T13:21:00.347Z","updatedAt":"2026-09-10T13:21:53.906Z"}