Added
- 30 new tools — domain management (
register_domain,transfer_domain,renew_domain,get_domain_whois,get_domain_nameservers,update_domain_nameservers,get_domain_lock_status,update_domain_lock_status,get_tld_pricing), admin (get_admin_users,get_staff_online,get_whmcs_details,log_activity), affiliates (get_affiliates,activate_affiliate), promotions (get_promotions), servers (get_servers,module_change_password), system info, support, orders, and invoices. Total tool count is now 86. - 24 MCP resources for real-time, read-only access to system data via
whmcs://URIs with a 60-second TTL cache. - 18 MCP workflow prompts for guided AI interactions — client onboarding, fraud investigation, revenue reports, churn risk, domain audits, and more.
overideautosuspendflag onupdate_serviceto exempt a service from automatic suspension.
Changed
- Unified auth stack —
MCP_AUTH_MODEremoved. Thesimple/oauthmode split is gone. The server now always runs the full OAuth 2.0 stack. Bearer tokens work in all configurations./authorizeis available only whenMCP_OAUTH_ADMIN_PASSWORDis set. MCP_REQUIRE_AUTHremoved. Authentication is always enforced in HTTP mode./healthresponse updated.auth.modeandauth.requiredreplaced byauth.oauthEnabled.
Migration
| Before | After |
|---|---|
MCP_AUTH_MODE=simple | Remove — bearer tokens work without it |
MCP_AUTH_MODE=oauth | Remove — keep MCP_OAUTH_ADMIN_PASSWORD |
MCP_REQUIRE_AUTH=true | Remove — auth is always on |
Existing tokens.json files are untouched — all previously issued bearer tokens continue to work.
Fixed
- dryRun response prefix normalized to
[dryRun]across all mutating tools. - XSS sanitization applied to user input echoed in dryRun responses.
get_product_groupsreimplemented to derive groups from GetProducts.- Startup warnings emitted when deprecated
MCP_AUTH_MODEorMCP_REQUIRE_AUTHenv vars are detected.
Fixed
create_invoicesent wrong client field — WHMCS CreateInvoice requiresuserid; the client was forwardingclientid.get_cancelled_packagesclient filter —clientIdargument was forwarded but the WHMCS API does not support it for this action. Tool description updated.
Fixed
list_invoices/get_overdue_invoicesclient filter ignored — WHMCS GetInvoices acceptsuserid, notclientid. Both tools now send the correct field.
Fixed
- OAuth
stateparameter missing from callback redirect — fixed two-part bug:statewas coerced to""in the consent URL, then dropped by theif (state)guard on POST. Both paths are now fixed;stateis echoed verbatim per the OAuth 2.0 spec. Required for Claude.ai Custom Connector OAuth.
Fixed
- OAuth
/tokenreturned HTTP 500 for normal grant failures —OAuthProvidernow throws properInvalidGrantErrorfor invalid/expired codes and tokens; clients receive 400 withinvalid_grant.
Fixed
- OAuth consent session cookie for cross-site POST (Claude.ai) —
connect.sidnow usesSameSite=None; Secureon HTTPS so the browser sends it on cross-site POST to/oauth/consent.
Fixed
- CSRF tokens now persisted via
express-session— previous in-memory Map was wiped on container restart. Sessions now backed bysession-file-storeon disk.
New optional env vars: MCP_OAUTH_SESSION_SECRET, MCP_OAUTH_SESSIONS_DIR.
Major production release + OAuth stabilisation
- Bearer token auth with scope-based access control (
mcp:read,mcp:write,mcp:admin) - Prometheus metrics, structured JSON logging, audit trail, Grafana dashboard
- Per-IP and per-token rate limiting
- Docker, Kubernetes, and standalone binary deployment
auth-clifor token management- OAuth discovery document and CIMD support for Claude.ai and ChatGPT
- Multiple OAuth routing and PKCE fixes (v2.0.1–v2.0.4)
Initial MCP server with core WHMCS tools, stdio and HTTP transport, dryRun mode, and basic Docker support.