Nginx Proxy Manager MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| NPM_URL | Yes | Base URL of the NPM admin API (`http://app:81` inside Docker) | |
| MCP_HOST | No | Bind address for SSE mode; Docker Compose sets `0.0.0.0` inside the container while publishing only to localhost | 127.0.0.1 |
| MCP_PORT | No | Bind port for SSE mode | 8000 |
| NPM_EMAIL | Yes | NPM admin account email | |
| NPM_PASSWORD | Yes | NPM admin account password | |
| MCP_TRANSPORT | No | MCP transport: `sse` or `stdio` | sse |
| MCP_BEARER_TOKEN | No | Optional bearer token required for SSE HTTP requests |
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
} |
| logging | {} |
| prompts | {
"listChanged": true
} |
| resources | {
"subscribe": false,
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_proxy_hostsA | List proxy hosts configured in NPM, including their current status. Use this to find host IDs before get, update, enable, disable, or delete operations. It does not change NPM or request a certificate. Returns a list of host objects with IDs, domains, forwarding settings, and status. |
| get_proxy_hostA | Fetch one proxy host by ID, including its configured fields and current status. Use this for details about one host; use list_proxy_hosts to find IDs or inspect all hosts. This is read-only and does not reload Nginx. Returns the NPM host object, including domains, forwarding settings, and status. |
| create_proxy_hostA | Create a proxy host that routes the supplied domains to an HTTP or HTTPS upstream. Use this when configuring proxying without requesting a certificate; use create_proxy_host_with_letsencrypt to request one and force HTTPS. NPM stores the host configuration and applies it through its normal config handling. Returns the created host object with its ID, domains, and forwarding settings. Set dry_run=True to preview the exact request without changing NPM. |
| create_proxy_host_with_letsencryptA | Request a Let's Encrypt certificate, then create a proxy host using that certificate with HTTPS forced. Use this for a new TLS-enabled proxy; use create_proxy_host when a certificate already exists or HTTPS forcing is not wanted. This triggers a certificate request before creating the host; failures report failed_step and any created certificate. Returns ok plus certificate and proxy_host objects on success. Set dry_run=True to preview the exact request without changing NPM. |
| update_proxy_hostA | Update writable settings on an existing proxy host by ID. Use this to change routing or options; use enable_proxy_host or disable_proxy_host for status only. NPM receives the merged writable host fields, without requesting a certificate. Returns the updated host object with its ID and current settings. Set dry_run=True to preview the exact request without changing NPM. |
| delete_proxy_hostA | Permanently delete a proxy host by ID, removing its configured domain routing from NPM. Use disable_proxy_host to stop routing while keeping the host; list_proxy_hosts helps confirm the ID. Deletion cannot be undone and NPM applies the configuration change. Returns True on success. Set dry_run=True to preview the exact request without changing NPM. |
| enable_proxy_hostA | Enable a disabled proxy host by ID so NPM serves its configured domain routing again. Use update_proxy_host to change host settings; use list_proxy_hosts to confirm status and ID. This changes NPM host state and applies its configuration. Returns the updated host object. Set dry_run=True to preview the exact request without changing NPM. |
| disable_proxy_hostA | Disable a proxy host by ID while retaining its configuration. Use delete_proxy_host to remove it; use list_proxy_hosts to check its current status. This changes NPM host state and stops that host from serving traffic. Returns the updated host object. Set dry_run=True to preview the exact request without changing NPM. |
| list_certificatesA | List SSL certificates known to NPM, including expiry information when provided by NPM. Use this to inspect available certificates; create_letsencrypt_cert requests a new certificate and renew_certificate renews an existing one. This is read-only and makes no certificate request. Returns certificate objects with IDs, domains, provider, and expiry fields. |
| create_letsencrypt_certA | Request a new Let's Encrypt certificate for the supplied domains. Use this when a certificate is needed without creating a proxy host; create_proxy_host_with_letsencrypt also creates an HTTPS-forced host. This sends a certificate request to NPM and may contact Let's Encrypt. Returns the certificate object with its ID, domains, and status. Set dry_run=True to preview the exact request without changing NPM. |
| renew_certificateA | Request renewal of an existing certificate by ID. Use this for a certificate already managed by NPM; use create_letsencrypt_cert to request a new certificate. This triggers NPM certificate renewal processing and may contact the certificate provider. Returns the certificate operation result, including available certificate fields. Set dry_run=True to preview the exact request without changing NPM. |
| list_access_listsA | List access lists configured in NPM. Use this to find IDs before fetching, updating, or deleting a list; use get_access_list for one list with its rules. This is read-only and does not expose stored passwords. Returns access-list objects with IDs and names. |
| get_access_listA | Fetch one access list by ID, including its client rules and basic-auth user metadata. Use this for detailed rules; use list_access_lists to discover IDs. NPM does not return stored item passwords, so password values cannot be read back. Returns the access-list object with name, clients, and user entries. |
| create_access_listA | Create an access list containing optional IP allow/deny rules and basic-auth users. Use this to define access controls for hosts; use update_access_list to change an existing list. NPM stores the rules and credentials, while item passwords are write-only and cannot be read back. Returns the created list object with its ID, name, and rules. Set dry_run=True to preview the exact request without changing NPM. |
| update_access_listA | Update writable fields on an existing access list by ID, including client rules and basic-auth users. Use this to edit access controls; use delete_access_list to remove a list. NPM receives the merged writable fields; item passwords are write-only and cannot be read back. Returns the updated list object with its name and rules. Set dry_run=True to preview the exact request without changing NPM. |
| delete_access_listA | Permanently delete an access list by ID from NPM. Use update_access_list to retain the list and change its rules; confirm the ID with list_access_lists first. Deletion cannot be undone and may affect hosts that reference the list. Returns True on success. Set dry_run=True to preview the exact request without changing NPM. |
| list_redirection_hostsA | List configured redirection hosts and their current status. Use this to find IDs before fetching, changing, enabling, disabling, or deleting a redirect; proxy hosts handle upstream reverse proxying. This is read-only and does not request certificates. Returns host objects with domains, destination, redirect code, and status. |
| get_redirection_hostA | Fetch one redirection host by ID with its configured destination and status. Use this for a single redirect; use list_redirection_hosts to discover IDs or inspect all redirects. This is read-only and does not change NPM. Returns the host object with domains, destination, redirect code, and status. |
| create_redirection_hostA | Create a host that redirects requests for domains to a destination using the selected HTTP status. Use this for URL redirection; use create_proxy_host to forward requests to an upstream server. NPM stores the redirect configuration; an attached certificate ID is referenced without requesting a certificate. Returns the created host object with its ID and redirect settings. Set dry_run=True to preview the exact request without changing NPM. |
| update_redirection_hostA | Update writable settings on an existing redirection host by ID. Use this to change domains, destination, or redirect behavior; use enable_redirection_host or disable_redirection_host for status only. NPM receives the merged writable fields. Returns the updated host object with its redirect settings. Set dry_run=True to preview the exact request without changing NPM. |
| delete_redirection_hostA | Permanently delete a redirection host by ID, removing its redirect configuration from NPM. Use disable_redirection_host to retain it while stopping redirects; list_redirection_hosts helps verify the ID. Deletion cannot be undone and applies the NPM configuration change. Returns True on success. Set dry_run=True to preview the exact request without changing NPM. |
| enable_redirection_hostA | Enable a disabled redirection host by ID so NPM serves its redirect again. Use update_redirection_host to edit destination or redirect code; list_redirection_hosts shows status. This changes NPM host state and applies its configuration. Returns the updated host object. Set dry_run=True to preview the exact request without changing NPM. |
| disable_redirection_hostA | Disable a redirection host by ID while keeping its configuration in NPM. Use delete_redirection_host to remove it; use list_redirection_hosts to check status. This stops the redirect from being served and applies the configuration change. Returns the updated host object. Set dry_run=True to preview the exact request without changing NPM. |
| list_streamsA | List configured TCP/UDP streams and their current status. Use this to find stream IDs before fetching, changing, enabling, disabling, or deleting a port forward. This is read-only and does not change NPM. Returns stream objects with IDs, incoming and forwarding ports, protocols, and status. |
| get_streamA | Fetch one TCP/UDP stream by ID, including its forwarding ports and protocol settings. Use this for one stream; use list_streams to find IDs or inspect all streams. This is read-only and does not change NPM. Returns the stream object with incoming port, destination, protocol flags, and status. |
| create_streamA | Create a TCP/UDP port forward from an incoming port to a destination host and port. Use this for raw TCP or UDP forwarding; use proxy-host tools for HTTP/HTTPS domain routing. NPM stores the stream configuration and applies it through normal config handling. Returns the created stream object with its ID, ports, and protocol flags. Set dry_run=True to preview the exact request without changing NPM. |
| update_streamA | Update writable port, destination, or protocol fields on an existing stream by ID. Use this to edit forwarding; use enable_stream or disable_stream to change status only. NPM receives the merged writable fields, preserving omitted values. Returns the updated stream object with its forwarding settings. Set dry_run=True to preview the exact request without changing NPM. |
| delete_streamA | Permanently delete a TCP/UDP stream by ID; NPM stops forwarding that port immediately and this cannot be undone. List streams first to confirm the ID. Returns True on success. Set dry_run=True to preview the exact request without changing NPM. |
| enable_streamA | Enable a disabled TCP/UDP stream by ID so NPM forwards its incoming port again. Use update_stream to change ports or protocol flags; list_streams shows current status. This changes the stream state in NPM. Returns the updated stream object. Set dry_run=True to preview the exact request without changing NPM. |
| disable_streamA | Disable a TCP/UDP stream by ID while retaining its forwarding configuration. Use delete_stream to remove it; list_streams shows current status. NPM stops forwarding this stream while disabled. Returns the updated stream object. Set dry_run=True to preview the exact request without changing NPM. |
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 30 tools
Each tool targets a distinct resource (proxy host, certificate, access list, redirection host, stream) and action (list, get, create, update, delete, enable, disable, renew). Overlaps are explicitly handled by descriptions, e.g. create_proxy_host vs create_proxy_host_with_letsencrypt and update vs enable/disable. An agent can reliably select the correct tool.
All tools use a predictable snake_case verb_noun pattern with resource names consistently pluralized for list operations and singular for get/update/delete. Deviations are only necessary qualifiers like with_letsencrypt, which remain readable and consistent. No mixed conventions.
At 30 tools, the surface is heavy for the NPM domain. While many operations are distinct, the count exceeds the rubric's 25+ threshold for 'too many' and includes several similar enable/disable variants that could potentially be collapsed.
The server covers full CRUD and lifecycle for proxy hosts, redirection hosts, streams, and access lists, plus certificate listing, creation, and renewal. Minor gaps include no certificate deletion or single-certificate retrieval, but core workflows are well covered.