Featured

Deploy OpenClaw in 60 seconds β€” 20% off logoDeploy OpenClaw in 60 seconds β€” 20% off

Launch OpenClaw on Hostinger in about 60 seconds and keep your agent live 24/7. Our referral link gives you 20% off, no coupon code needed.

Launch on Hostinger β†’
Run your Hermes agent on Hostinger, fully managed logoRun your Hermes agent on Hostinger, fully managed

Launch Hermes on Hostinger in one click, fully managed, no VPS knowledge needed. Use code ZACAARON10 for 10% off.

Launch on Hostinger β†’
Crawl and scrape any site into clean data, 10% off logoCrawl and scrape any site into clean data, 10% off

Firecrawl crawls and scrapes any site into clean markdown for your agent. Get 1,000 free credits, and new users get 10% off their first purchase.

Try Firecrawl free β†’
6,000+ web scrapers for your AI agent, start free logo6,000+ web scrapers for your AI agent, start free

Apify gives your agent live web data: 6,000+ prebuilt scrapers and actors, MCP-ready. Sign up free with $5 in usage credits.

Try Apify free β†’
One API to scrape, enrich, and extract the internet. logoOne API to scrape, enrich, and extract the internet.

Context.dev gives your agents a single API to scrape, enrich, and extract live web data β€” no proxies, no parsers, no maintenance.

Start building free β†’
SetupClaw: done-for-you OpenClaw for founders & exec teams logoSetupClaw: done-for-you OpenClaw for founders & exec teams

White-glove OpenClaw for founders and exec teams (4–50+ employees): we install, harden, integrate your tools, and maintain it β€” secured from day one.

Get it set up for you β†’
SEO data APIs for your agent, $1 free credit logoSEO data APIs for your agent, $1 free credit

DataForSEO gives your agent live access to SERP results, keyword data, backlinks, and on-page SEO data through one API. New accounts get a $1 credit, good for up to 20,000 keyword or backlink lookups.

Try DataForSEO free β†’
Reach 48,000+ AI builders

A flat monthly placement in front of developers actively installing AI tools. No lock-in, cancel anytime.

Advertise here β†’

Works with

Claude CodeClaude DesktopCursorVS CodeClineCodex CLIOpenClaw+ any MCP client

Install to Claude Code

This server doesn't publish a one-line install command. Follow the setup in the source repository.

Summary

Labs64/NetLicensing-MCP](https://glama.ai/mcp/servers/Labs64/NetLicensing-MCP/badges/score.svg)](https://glama.ai/mcp/servers/Labs64/NetLicensing-MCP) πŸŽ–οΈ 🐍 ☁️ - The official NetLicensing MCP Server is a natural language interface that enables agentic...

README.md

<p align="center"><img src="https://raw.githubusercontent.com/Labs64/NetLicensing-MCP/refs/heads/master/assets/banner.jpg"></p>

NetLicensing MCP Server

<!-- mcp-name: io.github.Labs64/netlicensing-mcp -->

![CI](https://github.com/Labs64/NetLicensing-MCP/actions/workflows/netlicensing-ci.yml) ![PyPI](https://pypi.org/project/netlicensing-mcp/) ![GHCR](https://github.com/Labs64/NetLicensing-MCP/pkgs/container/netlicensing-mcp) ![Docker Hub](https://hub.docker.com/r/labs64/netlicensing-mcp) ![MCP Registry](https://registry.modelcontextprotocol.io/?q=netlicensing-mcp) ![Python 3.12+](https://www.python.org/) ![License](LICENSE)

The official Labs64 NetLicensing MCP Server β€” a natural language interface that lets AI agents manage software licenses, customers, and entitlements through conversational commands.

Works with Claude Desktop, GitHub Copilot (Agent mode), VS Code, JetBrains / IntelliJ IDEA, and any other MCP-compatible client.

---

Why use this?

  • Natural Language Licensing β€” Ask your AI assistant to create products, issue licenses, validate entitlements, and generate shop URLs without touching the NetLicensing UI or writing API calls.
  • Full API coverage β€” Various tools spanning the entire NetLicensing REST API: products, modules, templates, licensees, licenses, bundles, tokens, transactions, and payment methods.
  • Built-in audit prompts β€” Five ready-to-run prompt templates for account audits, expiry sweeps, anomaly detection, and cleanup workflows.
  • Safe by default β€” All delete operations expose a force_cascade option; nothing is silently cascaded.
  • Zero-dependency quick start β€” Run with uvx or Docker without a local Python install.

---

What can you ask?

Once connected, you can talk to NetLicensing in plain language:

  • "List all products in my NetLicensing account."
  • "Create a new licensee for customer@example.com under product PTEST."
  • "Validate the license for licensee L001 β€” does it pass?"
  • "Generate a shop URL for licensee L001 so they can self-serve their renewal."
  • "Which licenses are expiring in the next 30 days?"
  • "Find any licensees with no active licenses β€” flag them for cleanup."
  • "Transfer all licenses from licensee L001 to L002."
  • "Create an API key token scoped to read-only access."
  • "Show me all transactions from the last month."

---

Features

| Area | Tools | |---|---| | Products | list, get, create, update, delete | | Product Modules | list, get, create, update, delete | | License Templates | list, get, create, update, delete | | Licensees | list, get, create, update, delete, validate, transfer | | Licenses | list, get, create, update (activate/deactivate), delete | | Bundles | list, get, create, update, delete, obtain | | Tokens | list, get, create shop URL, create API token, revoke | | Transactions | list, get, create, update | | Payment Methods | list, get, update | | Utilities | list licensing models, list license types | | Audit Prompts | full account, single customer, expiry sweep, cleanup, anomaly detection | | Delete Safety | force_cascade option on all delete tools | | Redaction | secrets (apiKey, licenseeSecret, nodeSecret, …) masked in all responses and logs |

---

Security defaults

The server is designed to be safe by default:

  • No silent credential fallback β€” if NETLICENSING_API_KEY is not set and NETLICENSING_ALLOW_DEMO is not explicitly enabled, the server refuses to start (stdio) or returns 503 (HTTP) rather than silently using demo credentials.
  • Redaction layer β€” every tool response passes through a redaction filter. Sensitive fields (apiKey, licenseeSecret, nodeSecret, password, secret) are masked to a partial form (e.g. s3c****ecret). The set is extendable via MCP_REDACT_FIELDS.
  • One-time credentials β€” create_api_token and create_shop_token tag their response with "shown_once": true so clients know the credential will not be visible in full again. Subsequent get_token / list_tokens calls return masked values.
  • Delete confirmation β€” all destructive operations require a two-step confirmation token flow; nothing is silently cascaded.

---

Quick Start

Option A β€” uvx (no install required)

NETLICENSING_API_KEY=your_key uvx netlicensing-mcp

Option B β€” pip

pip install netlicensing-mcp
NETLICENSING_API_KEY=your_key netlicensing-mcp

Option C β€” Docker

stdio (default) β€” for Claude Desktop / VS Code

docker run -i --rm \
  -e NETLICENSING_API_KEY=your_key \
  ghcr.io/labs64/netlicensing-mcp:latest

HTTP mode β€” for remote/shared deployments

docker run -d -p 8000:8000 \
  -e NETLICENSING_API_KEY=your_key \
  ghcr.io/labs64/netlicensing-mcp:latest http

Verbose logging (any mode)

# CLI flag
docker run -i --rm \
  -e NETLICENSING_API_KEY=your_key \
  ghcr.io/labs64/netlicensing-mcp:latest -v

# Or via env var
docker run -i --rm \
  -e NETLICENSING_API_KEY=your_key \
  -e MCP_VERBOSE=true \
  ghcr.io/labs64/netlicensing-mcp:latest

Demo / sandbox mode (no API key)

docker run -i --rm \
  -e NETLICENSING_ALLOW_DEMO=true \
  ghcr.io/labs64/netlicensing-mcp:latest

No API key? Set NETLICENSING_ALLOW_DEMO=true to run against NetLicensing's built-in sandbox with demo credentials β€” no account required. The server will tag every response with "demo_mode": true and emit a periodic warning so it is always clear you are not using a real account.

---

Configuration

Environment Variables

| Variable | Required | Default | Description | |---|---|---|---| | NETLICENSING_API_KEY | Yes* | β€” | NetLicensing API key. Required unless NETLICENSING_ALLOW_DEMO=true is set. | | NETLICENSING_ALLOW_DEMO | No | false | Set to true to explicitly opt in to sandbox demo mode when no API key is configured. Every tool response is tagged with "demo_mode": true and a warning is logged every 60 seconds. Never set this in production. | | NETLICENSING_BASE_URL | No | https://go.netlicensing.io/core/v2/rest | Override the NetLicensing REST API base URL (e.g. for on-prem deployments). | | MCP_TRANSPORT | No | stdio | Transport mode: stdio (default) or http. Can also be passed as a CLI argument. | | MCP_HOST | No | 127.0.0.1 | Host address to bind the HTTP server (HTTP mode only). | | MCP_PORT | No | 8000 | Port to bind the HTTP server (HTTP mode only). | | MCP_VERBOSE | No | false | Enable verbose debug logging (true, 1, or yes). Logs raw API requests/responses with sensitive fields automatically redacted. Can also be set via -v CLI flag. | | MCP_REDACT_FIELDS | No | β€” | Comma-separated list of additional field names to redact from all tool responses and log output (e.g. MCP_REDACT_FIELDS=ssn,phone). Extends the built-in default set: apiKey, licenseeSecret, nodeSecret, password, secret. |

*\ NETLICENSING_API_KEY and demo mode: If neither NETLICENSING_API_KEY nor NETLICENSING_ALLOW_DEMO=true is set, the server will refuse to start** (stdio mode) or return 503 Service Unavailable for all tool calls (HTTP mode). This prevents accidental use of demo credentials in production.

Note on HTTP deployments (e.g. AWS): When running in HTTP mode over a network, you can skip setting NETLICENSING_API_KEY on the server. The MCP server will automatically extract the key per-request if the connecting client provides it via the X-NetLicensing-API-Key HTTP header, Authorization: Bearer <key> header, or ?apikey=<key> query parameter.

---

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "netlicensing": {
      "command": "uvx",
      "args": ["netlicensing-mcp"],
      "env": {
        "NETLICENSING_API_KEY": "your_key_here"
      }
    }
  }
}

Or use the official Docker image:

stdio (default) β€” for Claude Desktop / VS Code

{
  "mcpServers": {
    "netlicensing": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "NETLICENSING_API_KEY=your_key_here",
        "ghcr.io/labs64/netlicensing-mcp:latest"
      ]
    }
  }
}

HTTP mode β€” for remote/shared deployments

{
  "mcpServers": {
    "netlicensing": {
      "command": "docker",
      "args": [
        "run", "-d",
        "-p", "8000:8000",
        "-e", "NETLICENSING_API_KEY=your_key_here",
        "ghcr.io/labs64/netlicensing-mcp:latest",
        "http"
      ]
    }
  }
}

VS Code / GitHub Copilot

The repo ships a .vscode/mcp.json that auto-configures Copilot Agent mode. Set NETLICENSING_API_KEY in your shell environment or a .env file, then click Start in the editor banner that appears above mcp.json.

JetBrains / IntelliJ IDEA

In Copilot Chat β†’ Agent mode β†’ Tools icon β†’ Add More Tools… β€” paste the same JSON block shown in the Claude Desktop section above.

---

Audit Prompt Templates

Five built-in prompts accessible in Copilot Agent and Claude Desktop:

| Prompt | Purpose | |---|---| | audit_full | End-to-end account audit for a product | | audit_customer | Deep-dive on a single licensee | | audit_expiry | Find licenses expiring within N days and generate renewal URLs | | audit_cleanup | Identify inactive / orphaned licenses for cleanup | | audit_anomaly | Detect unusual usage patterns across all customers |

---

Troubleshooting

Check MCP server logs

# macOS / Claude Desktop
tail -f ~/Library/Logs/Claude/mcp-server-netlicensing.log
 
# Windows
Get-Content "$env:APPDATA\Claude\Logs\mcp-server-netlicensing.log" -Wait

Run the MCP Inspector (browser UI at http://localhost:5173)

mcp dev src/netlicensing_mcp/server.py

Common issues

| Symptom | Likely cause | Fix | |---|---|---| | 401 Unauthorized responses | Invalid or expired API key | Regenerate your key at ui.netlicensing.io | | Server not listed in Claude | Config file JSON syntax error | Validate with python -m json.tool claude_desktop_config.json | | uvx: command not found | uv not installed | pip install uv or see docs.astral.sh/uv | | Server exits immediately / 503 on all calls | NETLICENSING_API_KEY not set and demo mode not enabled | Set NETLICENSING_API_KEY, or set NETLICENSING_ALLOW_DEMO=true for sandbox testing | | Demo data instead of live data | NETLICENSING_API_KEY not set; NETLICENSING_ALLOW_DEMO=true active | Ensure NETLICENSING_API_KEY is exported in the shell that starts the client and unset NETLICENSING_ALLOW_DEMO |

---

Development

git clone https://github.com/Labs64/NetLicensing-MCP
cd NetLicensing-MCP

# Create a virtual environment
python -m venv .venv
source .venv/bin/activate       # Windows: .venv\Scripts\activate

# ... and install dependencies
pip install -e ".[dev]"
pip install hatch hatch-vcs

# Add your API key to a .env file (or export it in your shell)
cp .env.example .env
 
# Run the MCP Inspector
mcp dev src/netlicensing_mcp/server.py
 
# Run tests
pytest tests/ -v

# Clean previous builds
rm -rf dist/

# Build a wheel for local testing
hatch build --target wheel

# Build the Docker image locally
docker build -t ghcr.io/labs64/netlicensing-mcp:latest .

HTTP mode (for remote / shared deployments)

python -m netlicensing_mcp.server http
# Server listens on MCP_HOST:MCP_PORT (default: 127.0.0.1:8000)

Use ngrok or a reverse proxy to expose the HTTP endpoint to remote MCP clients:

ngrok http 8000
# Then point your client at the generated HTTPS URL

Cloud Deployment (AWS)

Deploy the MCP server to AWS for a public HTTPS endpoint that remote AI agents can connect to:

| Option | Best for | Scale-to-zero | Setup | |---|---|---|---| | ECS Fargate | Production, consistent traffic | No | ALB + Fargate | | App Runner | Low-traffic, development | βœ… Yes | Auto-provisioned HTTPS |

Quick deploy with the helper script

cd deploy/aws

# Option A β€” ECS Fargate
# Deploy (with optional HTTPS via ACM certificate)
./deploy.sh fargate \
    --certificate-arn arn:aws:acm:us-east-1:123456789:certificate/your-cert-id

# Option B β€” App Runner (mirror image to ECR first)
./deploy.sh mirror --ecr-repo 123456789.dkr.ecr.us-east-1.amazonaws.com/netlicensing-mcp
./deploy.sh apprunner \
    --ecr-image 123456789.dkr.ecr.us-east-1.amazonaws.com/netlicensing-mcp:latest

Connect MCP clients to the public URL

To use a shared, remote deployment, do not bake the NETLICENSING_API_KEY into the remote server settings. Instead, pass the API key from the client side using query parameters or HTTP headers.

For example, using the URL configuration in your MCP client with a query parameter:

{
  "mcpServers": {
    "netlicensing": {
      "url": "https://your-endpoint.us-east-1.elb.amazonaws.com/mcp?apikey=YOUR_API_KEY"
    }
  }
}

If you use a client or tool that supports passing HTTP headers directly, you can alternatively provide the key via X-NetLicensing-API-Key: YOUR_API_KEY or Authorization: Bearer YOUR_API_KEY.

πŸ“– Full instructions, architecture diagrams, and cost estimates: deploy/aws/README.md

---

Contributing

Contributions are welcome! Please open an issue or pull request on GitHub.

For significant changes, open an issue first to discuss the approach.

---

License

Apache 2.0 β€” see LICENSE

---

![NetLicensing-MCP MCP server](https://glama.ai/mcp/servers/Labs64/NetLicensing-MCP)

See related servers & alternatives β†’

Related MCP servers

Browse all β†’

Related guides

Hand-picked reading to help you choose and use Other servers.