mirror of
https://github.com/b3nw/nginx-proxy-manager-mcp.git
synced 2026-06-15 00:59:40 -05:00
feat: Add proxy host creation and access list tools (#1)
Add MCP tools for creating proxy hosts and listing access lists, with configurable defaults via environment variable. New tools: - create_proxy_host: Create new proxy hosts with SSL, access control, and websocket support - list_access_lists: List available access lists for use in proxy host creation New features: - NPM_PROXY_DEFAULTS env var for configurable default values (certificate_id, access_list_id, ssl settings, etc.)
This commit is contained in:
@@ -1,7 +1,26 @@
|
||||
"""Configuration management using pydantic-settings."""
|
||||
|
||||
from typing import Any
|
||||
|
||||
from pydantic import field_validator
|
||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
|
||||
# Default values for proxy host creation
|
||||
DEFAULT_PROXY_SETTINGS: dict[str, Any] = {
|
||||
"forward_scheme": "http",
|
||||
"certificate_id": 0,
|
||||
"ssl_forced": True,
|
||||
"hsts_enabled": True,
|
||||
"hsts_subdomains": False,
|
||||
"http2_support": True,
|
||||
"caching_enabled": False,
|
||||
"block_exploits": True,
|
||||
"allow_websocket_upgrade": True,
|
||||
"access_list_id": 0,
|
||||
"advanced_config": "",
|
||||
"meta": {},
|
||||
}
|
||||
|
||||
|
||||
class Settings(BaseSettings):
|
||||
"""Application settings loaded from environment variables."""
|
||||
@@ -23,5 +42,30 @@ class Settings(BaseSettings):
|
||||
mcp_port: int = 8000
|
||||
mcp_transport: str = "stdio" # "stdio" or "http"
|
||||
|
||||
# Proxy host creation defaults (JSON string)
|
||||
# Example: '{"certificate_id": 24, "ssl_forced": true}'
|
||||
proxy_defaults: dict[str, Any] = {}
|
||||
|
||||
@field_validator("proxy_defaults", mode="before")
|
||||
@classmethod
|
||||
def parse_proxy_defaults(cls, v: Any) -> dict[str, Any]:
|
||||
"""Parse JSON string to dict, or pass through if already dict."""
|
||||
if isinstance(v, dict):
|
||||
return v
|
||||
if isinstance(v, str) and v.strip():
|
||||
import json
|
||||
|
||||
try:
|
||||
return json.loads(v)
|
||||
except json.JSONDecodeError as e:
|
||||
raise ValueError(f"Invalid JSON in NPM_PROXY_DEFAULTS: {e}") from e
|
||||
return {}
|
||||
|
||||
def get_proxy_defaults(self) -> dict[str, Any]:
|
||||
"""Get merged proxy defaults (base defaults + user overrides)."""
|
||||
merged = DEFAULT_PROXY_SETTINGS.copy()
|
||||
merged.update(self.proxy_defaults)
|
||||
return merged
|
||||
|
||||
|
||||
settings = Settings()
|
||||
|
||||
Reference in New Issue
Block a user