Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
Manage Nginx Proxy Manager hosts, certificates, streams and access lists with dry-run previews.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
NPM_URL, NPM_EMAIL, NPM_PASSWORD, MCP_TRANSPORT「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"nginx-proxy-manager": {
"command": "uvx",
"args": [
"nginx-proxy-manager-mcp-server"
],
"env": {
"NPM_URL": "your-value",
"NPM_EMAIL": "your-value",
"NPM_PASSWORD": "your-value",
"MCP_TRANSPORT": "your-value"
}
}
}
}ターミナルでこれを実行します
claude mcp add nginx-proxy-manager --env NPM_URL=your-value --env NPM_EMAIL=your-value --env NPM_PASSWORD=your-value --env MCP_TRANSPORT=your-value -- uvx nginx-proxy-manager-mcp-server動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"nginx-proxy-manager": {
"command": "uvx",
"args": [
"nginx-proxy-manager-mcp-server"
],
"env": {
"NPM_URL": "your-value",
"NPM_EMAIL": "your-value",
"NPM_PASSWORD": "your-value",
"MCP_TRANSPORT": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"nginx-proxy-manager": {
"type": "stdio",
"command": "uvx",
"args": [
"nginx-proxy-manager-mcp-server"
],
"env": {
"NPM_URL": "your-value",
"NPM_EMAIL": "your-value",
"NPM_PASSWORD": "your-value",
"MCP_TRANSPORT": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
MCP_TRANSPORT envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント euisuh で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:NPM_URL, NPM_EMAIL, NPM_PASSWORD
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.5.2)がレジストリに届いたのは22 日前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにPython (uv)も必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, Dialyne
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Real phone calls in France for AI agents: dial +33 numbers, menus, hold, AI disclosure.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
An MCP server for Nginx Proxy Manager. It lets Claude and other MCP clients manage proxy hosts, redirection hosts, TCP/UDP streams, Let's Encrypt certificates, and access lists through typed tools instead of clicking through the NPM admin UI.
"Point blog.example.com at the container on port 3000 with HTTPS"
│ ▼ Claude / MCP client ──► Nginx Proxy Manager MCP ──HTTP + JWT──► NPM API
The demo calls create_proxy_host_with_letsencrypt(dry_run=True) against a mocked NPM API and prints both request previews. No real NPM instance or credentials are used. To record it again, install the development dependencies and VHS, then run vhs docs/demo.tape from the repository root; docs/demo.py uses the same respx mocking approach as the tests.
Reverse-proxy changes are repetitive homelab work: create a host, point it at a container, attach a certificate, maybe restrict it to an access list. That is exactly the kind of operational task an AI assistant can handle well when it has narrow, typed tools and a local admin boundary.
This server runs either:
dry_run on all mutating tools to preview NPM requests before applying them.create_proxy_host_with_letsencrypt requests a certificate, then creates an HTTPS-forced proxy host.GET /api/.NPM_READ_ONLY=true registers only the 12 list_/get_/find_ tools.401.| Tool | Category | Read-only | Description |
|---|---|---|---|
list_proxy_hosts | Proxy hosts | yes | List proxy hosts configured in NPM, including their current status. |
get_proxy_host | Proxy hosts | yes | Fetch one proxy host by ID, including its configured fields and current status. |
create_proxy_host | Proxy hosts | Create a proxy host that routes the supplied domains to an HTTP or HTTPS upstream. | |
create_proxy_host_with_letsencrypt | Proxy hosts | Request a Let's Encrypt certificate, then create a proxy host using that certificate with HTTPS forced. | |
update_proxy_host | Proxy hosts | Update writable settings on an existing proxy host by ID. | |
delete_proxy_host | Proxy hosts | Permanently delete a proxy host by ID, removing its configured domain routing from NPM. | |
enable_proxy_host | Proxy hosts | Enable a disabled proxy host by ID so NPM serves its configured domain routing again. | |
disable_proxy_host | Proxy hosts | Disable a proxy host by ID while retaining its configuration. | |
list_certificates | Certificates | yes | List SSL certificates known to NPM, including expiry information when provided by NPM. |
get_certificate | Certificates | yes | Fetch one certificate by ID, including provider, domain names, expiry and meta. |
create_letsencrypt_cert | Certificates | Request a new Let's Encrypt certificate for the supplied domains, over HTTP-01 by default or DNS-01 with dns_challenge=True (required for wildcards). | |
delete_certificate | Certificates | Permanently delete a certificate by ID, for example one left behind when create_proxy_host_with_letsencrypt fails at the proxy step. | |
renew_certificate | Certificates | Request renewal of an existing certificate by ID. | |
list_access_lists | Access lists | yes | List access lists configured in NPM. |
get_access_list | Access lists | yes | Fetch one access list by ID, including its client rules and basic-auth user metadata. |
create_access_list | Access lists | Create an access list containing optional IP allow/deny rules and basic-auth users. | |
update_access_list | Access lists | Update writable fields on an existing access list by ID, including client rules and basic-auth users. | |
delete_access_list | Access lists | Permanently delete an access list by ID from NPM. | |
list_redirection_hosts | Redirection hosts | yes | List configured redirection hosts and their current status. |
get_redirection_host | Redirection hosts | yes | Fetch one redirection host by ID with its configured destination and status. |
create_redirection_host | Redirection hosts | Create a host that redirects requests for domains to a destination using the selected HTTP status. | |
update_redirection_host | Redirection hosts | Update writable settings on an existing redirection host by ID. | |
delete_redirection_host | Redirection hosts | Permanently delete a redirection host by ID, removing its redirect configuration from NPM. | |
enable_redirection_host | Redirection hosts | Enable a disabled redirection host by ID so NPM serves its redirect again. | |
disable_redirection_host | Redirection hosts | Disable a redirection host by ID while keeping its configuration in NPM. | |
list_streams | Streams | yes | List configured TCP/UDP streams and their current status. |
get_stream | Streams | yes | Fetch one TCP/UDP stream by ID, including its forwarding ports and protocol settings. |
create_stream | Streams | Create a TCP/UDP port forward from an incoming port to a destination host and port. | |
update_stream | Streams | Update writable port, destination, or protocol fields on an existing stream by ID. | |
delete_stream | Streams | Permanently delete a TCP/UDP stream by ID; NPM stops forwarding that port immediately and this cannot be undone. | |
enable_stream | Streams | Enable a disabled TCP/UDP stream by ID so NPM forwards its incoming port again. | |
disable_stream | Streams | Disable a TCP/UDP stream by ID while retaining its forwarding configuration. | |
find_host_by_domain | Diagnostics | yes | Find proxy hosts, redirection hosts, and certificates serving a domain using exact or wildcard matching. |
list_expiring_certificates | Diagnostics | yes | List certificates expiring within the requested UTC time window, including certificates already expired, sorted by expiry. |
The table is generated by docs/tools_table.py from the registered tools; tests/test_readme.py fails if it drifts. Read-only tools are the ones NPM_READ_ONLY keeps.
List tools support optional server-side filtering after fetching from NPM: domain matches a case-insensitive substring in any domain name for proxy hosts, redirection hosts, and certificates; enabled filters proxy hosts, redirection hosts, and streams by status. All four accept compact=True to return only summary fields. Filters combine, and calls without arguments return the full, unchanged NPM list. For example, list_proxy_hosts(domain="example", enabled=True, compact=True) lists enabled hosts matching "example" with compact output.
All mutating tools expose dry_run=True. Previews contain method and path, plus json when the request has a body; the HTTPS workflow returns two previews in steps. The flag suppresses mutating requests, though some previews read current state. Update tools send only the fields in NPM's PUT schema (fixes #19); this is covered by mocked tests and not yet checked against a live NPM instance.
Competitor facts below come only from their linked READMEs fetched with gh api repos/ /nginx-proxy-manager-mcp/readme on 2026-10-13. “not documented” means the README does not establish the capability, not that it is absent. Auth guard means inbound MCP client authentication, distinct from NPM API login.
| Repository | Tool count documented | Dry-run support | Transport | Auth guard |
|---|---|---|---|---|
| euisuh (this server) | 34 | dry_run on all mutating tools | stdio, SSE | Optional SSE bearer token (MCP_BEARER_TOKEN); /healthz exempt |
| b3nw | 14 named tools (13 catalog rows plus list_instances) | not documented | stdio, HTTP | HTTP bearer token (NPM_MCP_AUTH_TOKEN) |
| omichelbraga | 66 | DELETE without confirm: true previews affected resources; general dry_run not documented | stdio, Streamable HTTP | Optional bearer token (NPM_MCP_BEARER_TOKEN); unset means no inbound auth |
| drmogie | 4 named tools (npm_status, npm_hosts, npm_audit_log, npm_call) | Changes show what will be sent and require confirm; dry_run not documented | not documented | not documented |
This server's implementations expose dry_run on every mutating tool, provide the one-shot create_proxy_host_with_letsencrypt workflow, and publish the Docker sidecar at 127.0.0.1:8000:8000. These are verified in tools/, server.py, and docker-compose.yml. They do not establish that other servers lack equivalent capabilities.
The bundled docker-compose.yml starts both Nginx Proxy Manager and this MCP sidecar from source. If you already run NPM, copy only the nginx-proxy-manager-mcp service into your existing compose file.
git clone https://github.com/euisuh/nginx-proxy-manager-mcp.git
cd nginx-proxy-manager-mcp cp .env.example .env
docker compose up -d
NPM_URL defaults to http://app:81, the NPM admin API on the internal Docker network. Leave it as-is when both services share a compose stack; point it at your NPM host otherwise.
To use the published GHCR image instead of building locally:
services:
nginx-proxy-manager-mcp: image: ghcr.io/euisuh/nginx-proxy-manager-mcp:latest restart: unless-stopped environment: NPM_URL: http://app:81 NPM_EMAIL: ${NPM_EMAIL} N
冒頭だけを表示しています。続きはリポジトリで読めます