Skip to main content
Glama

pnlcs-mcp

A Model Context Protocol server for PNLCS, the open-source billing panel. Connect Claude Code, Claude Desktop, Cursor, VS Code or any other MCP client to your PNLCS install and work with it in plain English:

"Which invoices are overdue?""Show me this client's services and domains.""Any orders held as fraud today?""Open a ticket for ada@example.com about her domain renewal."

Zero dependencies. The server is one small Node process that talks to the PNLCS admin API you already have. Nothing is installed on the PNLCS side.

  • npm: pnlcs-mcp

  • Requires: Node 18+ on the machine your AI client runs on

  • Transport: stdio (spawned by your client — no port, nothing to host)


1. Create an API credential in PNLCS

  1. Log in to the admin area of your PNLCS install.

  2. Go to Configuration → API Credentials.

  3. Click Create, give it a name like mcp, and copy the two values it shows you:

    • Identifier — the credential's username

    • Secret — shown once; store it somewhere safe

That pair is all the server needs, passed through three environment variables:

Variable

Value

PNLCS_URL

Your install's address, e.g. https://billing.example.com

PNLCS_IDENTIFIER

The credential's identifier

PNLCS_SECRET

The credential's secret

PNLCS_ALLOW_WRITES

Optional. Set to 1 to also enable the write tools (see below)


Related MCP server: WHMCS MCP Server

2. Connect your client

Claude Code (CLI)

One command:

claude mcp add pnlcs \
  --env PNLCS_URL=https://billing.example.com \
  --env PNLCS_IDENTIFIER=your_identifier \
  --env PNLCS_SECRET=your_secret \
  -- npx -y pnlcs-mcp

Add --env PNLCS_ALLOW_WRITES=1 if you also want the write tools. Use --scope project to share the entry with your team via .mcp.json (put the secret in your shell environment, not in the committed file). Check it with claude mcp list; remove it with claude mcp remove pnlcs.

Claude Desktop

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

{
  "mcpServers": {
    "pnlcs": {
      "command": "npx",
      "args": ["-y", "pnlcs-mcp"],
      "env": {
        "PNLCS_URL": "https://billing.example.com",
        "PNLCS_IDENTIFIER": "your_identifier",
        "PNLCS_SECRET": "your_secret"
      }
    }
  }
}

Restart Claude Desktop; the tools appear under the hammer icon.

Cursor

Settings → MCP → Add new global MCP server, or create .cursor/mcp.json in your project (same JSON shape as Claude Desktop above).

VS Code (Copilot agent mode)

Create .vscode/mcp.json:

{
  "servers": {
    "pnlcs": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "pnlcs-mcp"],
      "env": {
        "PNLCS_URL": "https://billing.example.com",
        "PNLCS_IDENTIFIER": "your_identifier",
        "PNLCS_SECRET": "your_secret"
      }
    }
  }
}

Anything else (Windsurf, Cline, Zed, ...)

Every MCP client that can spawn a stdio server uses the same three pieces: command npx, args ["-y", "pnlcs-mcp"], and the environment variables above. From a git checkout, node mcp/server.js works identically.


3. Tools

Read tools — always available

Tool

What it answers

get_stats

Client, order, invoice and revenue totals

get_health

Health of the install itself

list_clients

Clients, searchable by name/email/company, pageable

get_client

One client with contacts, by clientid or email

list_client_services

Hosting services of one client

list_client_domains

Domains of one client

list_invoices

Invoices; filter by status (draft, unpaid, paid, overdue, cancelled) or client

get_invoice

One invoice with its line items

list_orders

Orders; filter by status (pending, active, fraud, cancelled)

list_tickets

Support tickets; filter by status

get_ticket

One ticket with replies and notes

get_ticket_counts

Ticket totals per status

list_transactions

Payments, newest first

list_products

The product catalogue

get_activity_log

Recent admin and system activity

Write tools — only with PNLCS_ALLOW_WRITES=1

Tool

What it does

add_client

Create a client; with password2 it also opens a portal login

create_invoice

Invoice a client with one or more line items

add_invoice_payment

Record a payment; marks the invoice paid when covered

open_ticket

Open a support ticket

add_ticket_reply

Reply to a ticket

suspend_service

Suspend a hosting service on its server

unsuspend_service

Lift a suspension

Without the flag the write tools are not merely hidden — calling one is refused before any HTTP happens. An assistant wired up for reporting cannot even see a suspend button. Give a reporting setup a read-only life by simply not setting the flag.


4. Security notes

  • The secret only ever travels between the machine running your AI client and your PNLCS install, over the same HTTPS API your admin screens use. It is never sent to the model provider; the model sees tool results.

  • Prefer a dedicated API credential for MCP so you can revoke it alone.

  • PNLCS rate-limits API credentials (300 requests/minute per credential), so a runaway agent cannot hammer your install.

  • Keep PNLCS_ALLOW_WRITES off unless you actually want the assistant acting on your books, and read what it proposes before approving tool calls that create or change things.

5. Troubleshooting

Symptom

Cause

Every tool answers Set PNLCS_URL, PNLCS_IDENTIFIER and PNLCS_SECRET.

One of the three variables is missing from the client config

Every tool answers Invalid API secret

Identifier/secret pair is wrong, or the credential was deactivated

PNLCS did not answer within 30 seconds

The install is unreachable from this machine — check the URL and any firewall

Tools missing in the client

Restart the client after editing its config; check its MCP log for the stderr line above

Write tools missing

That is the default — set PNLCS_ALLOW_WRITES=1

6. Tests

npm test runs the offline suite: it spawns the real server process, speaks the real protocol to it, and checks every tool's HTTP shape against a local stub — plus the write-gate in both directions, batch requests from older protocol revisions, version negotiation, timeouts and shutdown draining.

node test/live.mjs runs every tool against a real install — point it at a demo, never at production books; it creates clearly-named disposable data for the write tools and prints one PASS/FAIL line per tool.

Development

This package is developed inside the PNLCS monorepo under mcp/; this repository is its standalone distribution mirror and always matches the version published on npm.

F
license - not found
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to manage WHM hosting accounts and server administration tasks including account management, server stats, updates, SSL, backups, and email through a secure API.
    10
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to administrate WHMCS installations through the External API, providing ~50 tools for clients, billing, orders, services, domains, support, and aggregators with safety features and governance.
    39
    2
    ISC
  • A
    license
    B
    quality
    B
    maintenance
    Enables AI assistants to manage invoices, clients, companies, and ANAF e-Factura through the Storno.ro e-invoicing API.
    100
    8
    Elastic 2.0
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to manage cPanel hosting accounts including DNS, email, databases, SSL, files, security, and more through natural language using cPanel's UAPI and API2.

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Panelica/pnlcs-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server