Skip to main content

MCP server for the Labs64 NetLicensing license management API

Project description

NetLicensing MCP Server

CI PyPI GHCR Docker Hub MCP Registry Python 3.12+ 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

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

No API key? Leave NETLICENSING_API_KEY empty to run against NetLicensing's built-in sandbox with demo credentials — no account required.


Configuration

Environment Variables

Variable Required Default Description
NETLICENSING_API_KEY No (demo mode) NetLicensing API key. Leave empty to use sandbox demo credentials.
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. Can also be set via -v CLI flag.

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
Demo data instead of live data NETLICENSING_API_KEY not set Ensure the env var is exported in the shell that starts the client

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

netlicensing_mcp-0.1.5.tar.gz (811.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

netlicensing_mcp-0.1.5-py3-none-any.whl (37.4 kB view details)

Uploaded Python 3

File details

Details for the file netlicensing_mcp-0.1.5.tar.gz.

File metadata

  • Download URL: netlicensing_mcp-0.1.5.tar.gz
  • Upload date:
  • Size: 811.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for netlicensing_mcp-0.1.5.tar.gz
Algorithm Hash digest
SHA256 b76a193265265fe53677bc5d17ce75a5d6671a2645a61546af5d8b73286ba37d
MD5 645667289756df1099bc6f1451ccac10
BLAKE2b-256 3587ce2b54b692e41a0dbe78a9307b1d9fa7d5e1ee007fdd5302b820eb0d6dbf

See more details on using hashes here.

Provenance

The following attestation bundles were made for netlicensing_mcp-0.1.5.tar.gz:

Publisher: netlicensing-release.yml on Labs64/NetLicensing-MCP

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file netlicensing_mcp-0.1.5-py3-none-any.whl.

File metadata

File hashes

Hashes for netlicensing_mcp-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 ca9dc2df3b430f7480fc799eb0fd4270533e2aa77203de3c856bb5336d41a712
MD5 a7fd2084134658af765f02348c493d8a
BLAKE2b-256 35fa4667ca2695c52a2761ccc1251efb3dff7f9b7fc6ec7dfbe32e64a6ac9fb9

See more details on using hashes here.

Provenance

The following attestation bundles were made for netlicensing_mcp-0.1.5-py3-none-any.whl:

Publisher: netlicensing-release.yml on Labs64/NetLicensing-MCP

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page