프로토타입 · 미리 보기: 공식 레지스트리의 모든 서버를 담고 있으며 30분마다 동기화해요. 리뷰와 계정 기능은 다음 단계에서 열려요.
PopNx MCPAI를 쓰는 사람을 위한 MCP 서버 · 쉬운 말로 설명해요

podkop-mcp

제작자: mikel38487버전 0.2.2i★ –i내 컴퓨터에서 실행
레지스트리 이름io.github.mikel38487/podkop-mcp

설치

개요

제작자가 쓴 설명(영어 원문)

MCP server for managing Podkop and Forkop on OpenWrt over SSH

PopNx MCP의 세 기둥

이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.

할 수 있는 일

이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.

  • 연결 방식: 내 컴퓨터에서 실행
  • 전송 방식: stdio
  • 카테고리: 개발자 도구
  • 입력해야 할 값: PODKOP_MCP_SSH_HOST

설치

쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.

설치하기 전에

  • 기본 점검: 1개 중 1개 통과
  • 내 컴퓨터에서 내 사용자 계정의 권한(파일, 네트워크, 앱)으로 실행돼요.
  • 직접 입력할 값: PODKOP_MCP_SSH_HOST, PODKOP_MCP_SSH_USER, PODKOP_MCP_SSH_KEY_PATH, PODKOP_MCP_HOST_KEY_POLICY, PODKOP_MCP_READ_ONLY

필요한 것

  • PyPIPython의 uv 설치(uvx 명령어용)

어떤 앱을 쓰세요?

위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.

Claude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요

{
  "mcpServers": {
    "podkop": {
      "command": "uvx",
      "args": [
        "podkop-mcp"
      ],
      "env": {
        "PODKOP_MCP_SSH_HOST": "your-value",
        "PODKOP_MCP_SSH_USER": "your-value",
        "PODKOP_MCP_SSH_KEY_PATH": "your-value",
        "PODKOP_MCP_HOST_KEY_POLICY": "your-value",
        "PODKOP_MCP_READ_ONLY": "your-value"
      }
    }
  }
}

터미널에서 이 명령어를 실행하세요

claude mcp add podkop --env PODKOP_MCP_SSH_HOST=your-value --env PODKOP_MCP_SSH_USER=your-value --env PODKOP_MCP_SSH_KEY_PATH=your-value --env PODKOP_MCP_HOST_KEY_POLICY=your-value --env PODKOP_MCP_READ_ONLY=your-value -- uvx podkop-mcp

실행하기 전에 빈 값을 채워 주세요.

Cursor에서 열기

또는 설정을 직접 복사하기

프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요

{
  "mcpServers": {
    "podkop": {
      "command": "uvx",
      "args": [
        "podkop-mcp"
      ],
      "env": {
        "PODKOP_MCP_SSH_HOST": "your-value",
        "PODKOP_MCP_SSH_USER": "your-value",
        "PODKOP_MCP_SSH_KEY_PATH": "your-value",
        "PODKOP_MCP_HOST_KEY_POLICY": "your-value",
        "PODKOP_MCP_READ_ONLY": "your-value"
      }
    }
  }
}

브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.

VS Code에서 열기

또는 설정을 직접 복사하기

프로젝트의 .vscode/mcp.json에 붙여 넣으세요

{
  "servers": {
    "podkop": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "podkop-mcp"
      ],
      "env": {
        "PODKOP_MCP_SSH_HOST": "your-value",
        "PODKOP_MCP_SSH_USER": "your-value",
        "PODKOP_MCP_SSH_KEY_PATH": "your-value",
        "PODKOP_MCP_HOST_KEY_POLICY": "your-value",
        "PODKOP_MCP_READ_ONLY": "your-value"
      }
    }
  }
}

브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.

이 서버는 내 컴퓨터에서 실행되는데, ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.

선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.

직접 입력할 값

  • PODKOP_MCP_SSH_HOST 필수 env
    Router address
  • PODKOP_MCP_SSH_USER env
    SSH user (root on OpenWrt)
  • PODKOP_MCP_SSH_KEY_PATH env
    Path to the private SSH key
  • PODKOP_MCP_HOST_KEY_POLICY env
    reject (default), accept-new or ignore
  • PODKOP_MCP_READ_ONLY env
    1 blocks all writes

이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.

할 수 있는 일

내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.

기본 점검i

누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 8일 점검

  • ✓ 통과

    제작자와 저장소 일치

    레지스트리 이름이 GitHub 계정 mikel38487 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요

  • … 아직 점검 안 함

    계속 관리되고 있음

    아직 GitHub에서 이 저장소를 읽어 오지 않았어요

  • … 아직 점검 안 함

    라이선스 있음

    아직 GitHub에서 이 저장소를 읽어 오지 않았어요

  • – 해당 없음

    엔드포인트 응답

    내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요

  • – 해당 없음

    OAuth로 로그인

    내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요

  • … 아직 점검 안 함

    도구 설명에 숨겨진 지시 없음

    내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요

개발자 도구 카테고리의 다른 서버와 비교i

  • 이 카테고리의 다른 서버 5548개 중 0%보다 스타가 많아요
  • 이 카테고리의 다른 서버 5548개 중 73%보다 최근에 레지스트리에 공개됐어요
  • 기본 점검 결과가 이 카테고리의 다른 서버 5548개 중 100%와 같거나 더 좋아요

레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.

자주 묻는 질문

podkop-mcp, 안전한가요?

해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.

어떤 키나 코드가 필요한가요?

입력해야 할 값: PODKOP_MCP_SSH_HOST

내 컴퓨터에서 실행되나요, 클라우드에서 실행되나요?

내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).

아직 관리되고 있나요?

GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(0.2.2)은 7일 전 레지스트리에 올라왔어요.

어떤 앱에서 쓸 수 있나요?

Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 Python (uv)도 있어야 해요.

대신 쓸 수 있는 건 뭐가 있나요?

같은 카테고리에는: GitHub, Desktop Commander, Cloudflare MCP

대안

같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.

카드 보는 법:↓ 주간 다운로드i★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i

GitHub

Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.

제작자: github널리 사용됨★ 3.4만5일 전 업데이트

컴퓨터 또는 클라우드

Desktop Commander

MCP server for terminal commands, file operations, and process management

제작자: wonderwhy-er널리 사용됨↓ 71만/주★ 1만17일 전 업데이트

내 컴퓨터에서 실행

Cloudflare MCP

Cloudflare MCP servers

제작자: cloudflare널리 사용됨★ 4.4천14개월 전 업데이트

클라우드에서 실행✓ mcp.cloudflare.com

제작자의 README

README 열기

제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.

podkop-mcp

Languages: English · Русский

MCP server for managing [Podkop](https://github.com/itdoginfo/podkop) and [Forkop](https://github.com/ushan0v/forkop) on OpenWrt over SSH.

Stop editing UCI by hand, remembering the uci add_list trap and passing base64-wrapped scripts to PowerShell. Ask your MCP client to add domains, list sections, inspect live connections, reload the service and roll back a bad change — with dry-run, backups and redaction built in.

Status: alpha. Live read-only tested against Forkop 1.0.5 and Forkop 2.0.0

(OpenWrt 25.12.6). Write/apply paths were verified in disposable OpenWrt

Docker containers with real Forkop 2.0.0 and Podkop 0.7.24. Backend schema is

revalidated every PODKOP_MCP_PROFILE_TTL seconds (default 30).

Why

Managing Podkop/Forkop by hand is error-prone:

  • Forkop 1.x stores domains in one space-separated string (section.domain). One uci add_list turns it into an exact-match domain list and subdomains silently stop being routed.
  • Forkop 2.x uses a multi-line section.destinations text with # comments.
  • Podkop uses a real UCI list (section.user_domains).
  • Forkop reloads asynchronously; a failed reload must be detected and rolled back.
  • Subscription URLs and proxy strings are secrets and end up in logs.

Unlike MCP servers that run on the router itself, podkop-mcp runs on the administrator's machine, talks to OpenWrt over SSH and understands Podkop/Forkop semantics: dry-run, backups, rollback and secret redaction. All of that is hidden behind typed MCP tools.

Features

  • SSH transport with a key from MCP parameters: key file, inline base64/PEM, or ~/.ssh/config alias. Host key verification, keepalive, timeouts.
  • Backend detection: Forkop 1.x, Forkop 2.x, Podkop; capabilities derived from the installed CLI.
  • Full UCI access via ubus call uci get JSON and uci for writes. Any option can be read or changed; the package is restricted to forkop/podkop.
  • Domain operations that preserve the backend format: add/remove/replace, search coverage, suggest uncovered hosts from live connections, check FakeIP.
  • Sections: list, inspect, create, update, enable/disable, delete with cascade of child subscriptions/URLTest items.
  • Subscriptions and proxy groups: list, add, delete, update, test latency, select a proxy (Forkop 2.x).
  • Monitoring: service/system status, health checks, logs, live connections, traffic rates, proxy delays.
  • Safety: mutating tools are dry-run by default; apply=true creates a router-side backup, commits UCI, reloads and verifies. On failure the backup is restored automatically. PODKOP_MCP_READ_ONLY=1 blocks all writes.
  • Secrets redacted by default: subscription URLs, proxy_string, keys, tokens. Raw export requires reveal_secrets=true.
  • Bilingual docs (English / Russian) and CI.

Support matrix

CapabilityForkop 1.xForkop 2.xPodkop
UCI packageforkopforkoppodkop
Domain optiondomain (string)destinations (multiline)user_domains (list)
Community listsyesyesyes
Rule setsnoyesyes
Clash APIaction CLIHTTP CLIaction CLI
Proxy runtime select—yes—
Read-only monitoringyesyesyes

Install

Requirements:

  • Python 3.10+ (CI tests 3.10 through 3.14)
  • OpenWrt router with Forkop or Podkop installed
  • SSH key access to the router

Install from PyPI:

pip install podkop-mcp

or run without installing

uvx podkop-mcp

Install from source:

git clone https://github.com/mikel38487/podkop-mcp.git

cd podkop-mcp python -m venv .venv . .venv/bin/activate # Windows: .venv\Scripts\activate pip install -e .

Configure your MCP client (Claude Desktop, Cursor, DSH, etc.):

{

"mcpServers": { "podkop": { "command": "podkop-mcp", "env": { "PODKOP_MCP_SSH_HOST": "192.168.1.1", "PODKOP_MCP_SSH_USER": "root", "PODKOP_MCP_SSH_KEY_PATH": "C:/Users/ /.ssh/router_key", "PODKOP_MCP_KNOWN_HOSTS": "C:/Users/ /.ssh/known_hosts", "PODKOP_MCP_HOST_KEY_POLICY": "reject" } } } }

Or use an existing ~/.ssh/config alias:

"env": {

"PODKOP_MCP_SSH_CONFIG_HOST": "router-home", "PODKOP_MCP_SSH_KEY_PATH": "C:/Users/ /.ssh/router_key", "PODKOP_MCP_HOST_KEY_POLICY": "reject" }

Host key policy defaults to reject. Add the router key to known_hosts first (for example with a normal ssh login). accept-new is a one-time TOFU convenience for a new router; it does not protect against a MITM on the first connection.

Ask the model:

  • “Run podkop_doctor and show the backend version.”
  • “Add example.com and cdn.example.com to main; show me the diff first.”
  • “List sections with domain counts.”
  • “Which hosts in live connections are not covered by any section?”
  • “Show traffic for the last 2 seconds and the top clients.”
  • “Disable the youtube section and reload.”

Documentation

How write operations work

dry-run (default)

→ read config, compute normalized diff, show uci commands

apply=true → cp /etc/config/ /etc/podkop-mcp/backups/ - .uci → uci set/add_list/delete (package restricted to forkop/podkop) → uci commit → /etc/init.d/ reload → poll get_status up to ~35 s → on failure: restore backup, commit, reload → return diff, backup id, health summary

No command is executed through a shell string built from user input; values are shell-quoted with shlex and the script is sent to sh via stdin. Paths are validated; no base64 applet is required on the router.

Tool overview

GroupTools
Systempodkop_doctor, podkop_status, podkop_system_info, podkop_health, podkop_logs, podkop_cli, podkop_core_features, podkop_import_check, podkop_installer_status, podkop_installer_log
Configpodkop_config_get, podkop_config_export, podkop_option_get/set/delete, podkop_backup_create/list/restore
Sectionspodkop_sections_list, podkop_section_get/create/update/delete/enable, podkop_tunnel_create, podkop_child_create
Domainspodkop_domains_list/add/remove/replace/find/suggest, podkop_domain_check
Listspodkop_community_lists_get/update
Connectionspodkop_connections_config, podkop_subscription_add/delete/update, podkop_proxies_list, podkop_proxy_select/test
Monitoringpodkop_monitor_snapshot, podkop_connections_live, podkop_traffic
Servicepodkop_service_action, podkop_lists_update

Full reference: docs/tools.md.

Configuration reference

VariableDefaultMeaning
PODKOP_MCP_SSH_HOST—Router address
PODKOP_MCP_SSH_PORT22SSH port
PODKOP_MCP_SSH_USERrootSSH user
PODKOP_MCP_SSH_KEY_PATH—Private key path
PODKOP_MCP_SSH_KEY—Inline private key (PEM)
PODKOP_MCP_SSH_KEY_B64—Inline key, base64
PODKOP_MCP_SSH_KEY_PASSPHRASE—Key passphrase
PODKOP_MCP_SSH_PASSWORD—Password instead of a key (secret: pass it through the environment, never commit it)
PODKOP_MCP_SSH_CONFIG_HOST—Alias from ~/.ssh/config
PODKOP_MCP_KNOWN_HOSTS~/.ssh/known_hostsHost key file
PODKOP_MCP_HOST_KEY_POLICYrejectreject, accept-new, ignore
PODKOP_MCP_CONNECT_TIMEOUT8SSH connect timeout, seconds
PODKOP_MCP_COMMAND_TIMEOUT45Command timeout, seconds
PODKOP_MCP_BACKENDautoauto, forkop or podkop; the requested CLI must be installed
PODKOP_MCP_READ_ONLY0Block all writes
PODKOP_MCP_BACKUP_DIR/etc/podkop-mcp/backupsRouter-side backups
PODKOP_MCP_BACKUP_KEEP30Number of backups to keep
PODKOP_MCP_MAX_OUTPUT_BYTES200000Cap on captured command output, bytes
PODKOP_MCP_LOG_LEVELINFOServer log level on stderr (DEBUG, INFO, WARNING, ERROR, CRITICAL)
PODKOP_MCP_PROFILE_TTL30Seconds before the backend profile is revalidated against the router
PODKOP_MCP_TARGETS—JSON with multiple routers
PODKOP_MCP_CONFIG—Path to a JSON file with multiple routers; takes precedence over PODKOP_MCP_TARGETS and the single-router variables
PODKOP_MCP_TARGET_NAMErouterName of the single router defined by PODKOP_MCP_SSH_HOST / PODKOP_MCP_SSH_CONFIG_HOST; ignored when a JSON target list is used

To manage several routers, put them in a JSON file and point PODKOP_MCP_CONFIG at it:

{

"targets": { "home": {"host": "192.0.2.10"}, "office": {"host": "192.0.2.11", "port": 2222} }, "default_target": "home" }

"env": {

"PODKOP_MCP_CONFIG": "~/.config/podkop-mcp/targets.json" }

The default_target router (or the first one when it is omitted) is used when a tool call does not pass target; pass "target": "office" to use the other router. PODKOP_MCP_TARGET_NAME does not select a target from this file — it only names the single router defined by PODKOP_MCP_SSH_HOST / PODKOP_MCP_SSH_CONFIG_HOST.

Testing

python -m pytest -q                 # unit + fake router + live/docker skipped

python scripts/smoke_mcp.py # MCP stdio handshake PODKOP_MCP_LIVE=1 python -m pytest -q -m live # read-only, real router

For the real SSH/UCI/apply path there is an OpenWrt Docker container: real openwrt/rootfs userland, real ubus/rpcd/dropbear/uci, with stubs for the Forkop CLI/init (no sing-box/nft).

.\scripts\openwrt-docker.ps1

. .\.tmp\openwrt-env.ps1 .\.venv\Scripts\python.exe -m pytest -q -m docker_ssh .\scripts\openwrt-docker.ps1 -Stop

This is a contai

앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요

PopNx에게 묻기