← All posts

Claude Code skill for TP-Link's Omada SDN

March 16, 2026

Cross-posted from the TPLink_Omada subreddit.

This morning I got curious about managing my self-hosted controller with Claude Code via the Omada API. After having Claude read through the manual and go through some trial and error it worked, but the experience was best described as clunky. Every API curl had to be manually approved and when I started a new session it had to go through the entire discovery process again.

I didn’t see a skill for this on skills.sh, so I had Claude make one by referencing the v6 manual and digging around the API on its own. The skill includes instructions for authenticating and then navigating the API. Rather than hard-coding any of the API info into the skill, it mostly relies on Omada’s built in Swagger (/swagger-ui/index.html) and OpenAPI (/v3/api-docs) endpoints for API discovery. It still flaps around a bit sometimes before it finds the exact endpoints and request format, but so far it is consistently figuring it out and doing what I ask.

In order to skip all of those manual curl approval calls, it also includes a short little bash script that can be approved once. I’ve been creating little helper scripts like this with several of the authenticated APIs I access frequently, and it’s a major QoL improvement. I asked Claude to generate a network topology using this skill and it generated an entire SVG diagram for me. Pretty cool.

Network topology diagram Claude Code generated from the Omada controller API. An ER707-M2 gateway connects to the internet and the Omada software controller, and feeds an SG2428P rack switch. That switch links to an EAP660 HD access point and two SG2008P switches, one of which feeds a second EAP660 HD access point. A fourth switch is shown offline.

The skill is available on my GitHub (jakeasmith/omada-controller-skill), if you want to copy/paste it. If you’re cool with the skills.sh installer, you can use this one liner to download it.

npx skills add jakeasmith/omada-controller-skill

It expects a .env file with your client credentials, which you can get from Global View > Settings > Platform Integration > Open API.

OMADA_URL=https://omada.example.com:8043
OMADA_CLIENT=your-client-id
OMADA_SECRET=your-client-secret

I’ve only used it with Claude Code, but I think it should work with Cursor, Codex, and whatever else. Open to feedback if anyone gives it a shot.

P.S. If you’re just looking for a way to interact with the API via code without involving an AI, u/spectator81 recently shared a Node.js Toolkit for the Omada API that they created. Admittedly, I haven’t used it myself, but it looks promising and you should check it out!