@bearst/lucky-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LUCKY_DEBUG | No | Log request paths to stderr; tokens are not logged | |
| LUCKY_BASE_URL | Yes | Lucky admin base URL | |
| LUCKY_OPEN_TOKEN | Yes | OpenToken | |
| LUCKY_TIMEOUT_MS | No | Request timeout in milliseconds | 15000 |
| LUCKY_TLS_VERIFY | No | Verify Lucky's TLS certificate. Set `false` for self-signed certs | true |
| LUCKY_DEFAULT_RULE_KEY | No | Default web listener key for `lucky_expose_service` | |
| LUCKY_DEFAULT_LISTEN_PORT | No | Default web listener port for `lucky_expose_service` | |
| LUCKY_ALLOWED_DOMAIN_SUFFIX | No | Comma-separated suffixes allowed for writes |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| lucky_statusA | Probe Lucky connectivity, version, modules, and MCP settings. OpenToken is never returned. |
| lucky_list_web_rulesA | List Lucky web listeners and their reverse-proxy routes in compact form (port, TLS, domains, backends). Use this before exposing a service. |
| lucky_get_web_ruleB | Get a compact view of one Lucky web listener and its routes by rule key. |
| lucky_expose_serviceA | Idempotently attach a hostname to an existing Lucky HTTPS/HTTP listener and reverse-proxy it to a backend URL. Reuses the current TLS listener; does not create a new listen port. Domain should be a hostname without http://. Backend should be a full URL such as http://127.0.0.1:3000. If the domain already exists, only the backend (and optional name/auth) is updated. |
| lucky_unexpose_serviceA | Remove the reverse-proxy route for a hostname from its Lucky listener. The listener itself is not deleted. |
| lucky_set_route_enabledA | Enable or disable the reverse-proxy route for a hostname without deleting it. |
| lucky_web_logsB | Read recent access logs for a hostname, a route, or the whole web module. Useful for 502 debugging. |
| lucky_list_certsA | List SSL certificates in compact form (name, domains, expiry). PEM material is never returned. |
| lucky_get_certA | Get compact certificate metadata by key. Private keys are not returned. |
| lucky_bind_certA | Attach an existing Lucky certificate to a web listener and enable TLS. Select the listener with rule_key, listen_port, or a hostname already on that listener. |
| lucky_add_custom_certA | Upload a custom certificate and private key to Lucky. Prefer lucky_bind_cert for Let's Encrypt certs that already exist in Lucky. |
| lucky_sync_certA | Trigger ACME/manual sync for an existing certificate key. |
| lucky_list_port_forwardsA | List port-forward rules in compact form (listen port, target, protocol). |
| lucky_upsert_port_forwardA | Idempotently map an external listen port to an internal ip:port. Matching is by listen_port + protocol unless key is provided. Does not send Lucky's full native object. |
| lucky_delete_port_forwardB | Delete a port-forward rule by key. |
| lucky_set_port_forward_enabledD | – |
| lucky_port_forward_logsD | – |
| lucky_list_ddnsA | List DDNS tasks in compact form (provider, domains, last IP). Provider secrets are redacted. Creating a new provider task is provider-specific; use lucky_api_call only if you already have a native payload. |
| lucky_get_ddnsD | – |
| lucky_set_ddns_enabledD | – |
| lucky_sync_ddnsC | Force one DDNS task to update now. |
| lucky_ddns_logsD | – |
| lucky_list_stun_rulesA | List STUN/NAT mapping rules (name, listen port, public address when known). |
| lucky_set_stun_enabledD | – |
| lucky_stun_logsD | – |
| lucky_list_wol_devicesD | – |
| lucky_wakeB | Send a Wake-on-LAN packet. Identify the device by key, name, or MAC. |
| lucky_add_wol_deviceD | – |
| lucky_list_cron_jobsD | – |
| lucky_upsert_cron_jobA | Idempotent by name (or key). expression is a cron spec; command is the shell/http payload Lucky should run. |
| lucky_delete_cron_jobD | – |
| lucky_set_cron_enabledD | – |
| lucky_run_cron_jobD | – |
| lucky_cron_logsD | – |
| lucky_get_ftpD | – |
| lucky_update_ftpB | Merge a partial patch into the FTP configure object. Secrets in the response are redacted. |
| lucky_ftp_logsD | – |
| lucky_get_webdavD | – |
| lucky_update_webdavA | Merge a partial patch into the WebDAV configure object. Secrets in the response are redacted. |
| lucky_webdav_logsD | – |
| lucky_list_dockerA | List Docker containers, images, volumes, and compose projects visible to Lucky. Read-only. |
| lucky_list_ip_filtersD | – |
| lucky_get_ip_filterD | – |
| lucky_list_blocked_ipsD | – |
| lucky_unblock_ipD | – |
| lucky_ip_filter_logsD | – |
| lucky_list_security_groupsA | List security groups, grants, and users. Passwords are redacted. Creating users with passwords is not exposed as a dedicated tool. |
| lucky_list_auth_providersD | – |
| lucky_logs_statsD | – |
| lucky_query_logsC | Query centralized logs. Pass Lucky's native query object; common fields are search, limit, and location. |
| lucky_list_storageD | – |
| lucky_set_storage_enabledD | – |
| lucky_list_local_pathsA | List filesystem roots, or files under a path, as Lucky sees them. |
| lucky_host_statusA | Host overview, connections, processes, module overview, and network interfaces. Process kill is not available. |
| lucky_list_tunnelsB | Cloudflared tunnels plus Coraza WAF instances. |
| lucky_query_ipD | – |
| lucky_list_terminal_connectionsA | Passwords and private keys are redacted. SFTP file operations are not exposed. |
| lucky_upsert_terminal_connectionA | Idempotent by name. Stores host/user/port; password is optional and will be redacted in responses. |
| lucky_get_settingsA | Read Lucky base settings. Passwords, OpenToken, and other secrets are redacted. Updating admin account, password, or OpenToken is not available. |
| lucky_api_catalogA | List Lucky API prefixes this MCP is willing to call via lucky_api_call. |
| lucky_api_callA | Escape hatch for allowlisted Lucky APIs. Login, admin password, OpenToken, 2FA, restore, reboot, OAuth login, and process kill are blocked. Prefer dedicated tools when one exists. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 61 tools
Most tools follow a clear pattern of module plus action (e.g., list_web_rules, upsert_cron_job), making them distinguishable. A few pairs like list_storage vs list_local_paths or logs_stats vs query_logs could be confused, but overall the boundaries are mostly clear.
All tools share the lucky_ prefix and use lowercase snake_case with consistent action verbs: list, get, upsert, set, delete, run, sync, wake. Minor deviations like cron_logs instead of get_cron_logs do not break the predictable pattern.
61 tools is well beyond the 50+ threshold and imposes a huge cognitive load on agents. Even though the tools span multiple modules, the sheer number makes the set feel excessive and hard to navigate.
The surface is uneven: some modules have full CRUD (cron, port forwards), but many lack common operations such as deleting WoL devices, creating/removing DDNS tasks, deleting certificates, or managing security groups. The generic api_call escape hatch is restricted and cannot fully compensate.