GitHub
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
作者による説明(英語の原文)
MCP server for managing Podkop and Forkop on OpenWrt over SSH
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
PODKOP_MCP_SSH_HOST, PODKOP_MCP_SSH_USER, PODKOP_MCP_SSH_KEY_PATH, PODKOP_MCP_HOST_KEY_POLICY, PODKOP_MCP_READ_ONLY必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
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/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"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .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がつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
PODKOP_MCP_SSH_USER envPODKOP_MCP_SSH_KEY_PATH envPODKOP_MCP_HOST_KEY_POLICY envPODKOP_MCP_READ_ONLY envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月9日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント mikel38487 で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:PODKOP_MCP_SSH_HOST
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.2.2)がレジストリに届いたのは8 日前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにPython (uv)も必要です。
同じカテゴリには:GitHub, Desktop Commander, Cloudflare MCP
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:↓ 週あたりのダウンロードi★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
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_TTLseconds (default 30).
Managing Podkop/Forkop by hand is error-prone:
section.domain). One uci add_list turns it into an exact-match domain list and subdomains silently stop being routed.section.destinations text with # comments.section.user_domains).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.
~/.ssh/config alias. Host key verification, keepalive, timeouts.ubus call uci get JSON and uci for writes. Any option can be read or changed; the package is restricted to forkop/podkop.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.proxy_string, keys, tokens. Raw export requires reveal_secrets=true.| Capability | Forkop 1.x | Forkop 2.x | Podkop |
|---|---|---|---|
| UCI package | forkop | forkop | podkop |
| Domain option | domain (string) | destinations (multiline) | user_domains (list) |
| Community lists | yes | yes | yes |
| Rule sets | no | yes | yes |
| Clash API | action CLI | HTTP CLI | action CLI |
| Proxy runtime select | — | yes | — |
| Read-only monitoring | yes | yes | yes |
Requirements:
Install from PyPI:
pip install podkop-mcp
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:
podkop_doctor and show the backend version.”example.com and cdn.example.com to main; show me the diff first.”youtube section and reload.”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.
| Group | Tools |
|---|---|
| System | podkop_doctor, podkop_status, podkop_system_info, podkop_health, podkop_logs, podkop_cli, podkop_core_features, podkop_import_check, podkop_installer_status, podkop_installer_log |
| Config | podkop_config_get, podkop_config_export, podkop_option_get/set/delete, podkop_backup_create/list/restore |
| Sections | podkop_sections_list, podkop_section_get/create/update/delete/enable, podkop_tunnel_create, podkop_child_create |
| Domains | podkop_domains_list/add/remove/replace/find/suggest, podkop_domain_check |
| Lists | podkop_community_lists_get/update |
| Connections | podkop_connections_config, podkop_subscription_add/delete/update, podkop_proxies_list, podkop_proxy_select/test |
| Monitoring | podkop_monitor_snapshot, podkop_connections_live, podkop_traffic |
| Service | podkop_service_action, podkop_lists_update |
Full reference: docs/tools.md.
| Variable | Default | Meaning |
|---|---|---|
PODKOP_MCP_SSH_HOST | — | Router address |
PODKOP_MCP_SSH_PORT | 22 | SSH port |
PODKOP_MCP_SSH_USER | root | SSH 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_hosts | Host key file |
PODKOP_MCP_HOST_KEY_POLICY | reject | reject, accept-new, ignore |
PODKOP_MCP_CONNECT_TIMEOUT | 8 | SSH connect timeout, seconds |
PODKOP_MCP_COMMAND_TIMEOUT | 45 | Command timeout, seconds |
PODKOP_MCP_BACKEND | auto | auto, forkop or podkop; the requested CLI must be installed |
PODKOP_MCP_READ_ONLY | 0 | Block all writes |
PODKOP_MCP_BACKUP_DIR | /etc/podkop-mcp/backups | Router-side backups |
PODKOP_MCP_BACKUP_KEEP | 30 | Number of backups to keep |
PODKOP_MCP_MAX_OUTPUT_BYTES | 200000 | Cap on captured command output, bytes |
PODKOP_MCP_LOG_LEVEL | INFO | Server log level on stderr (DEBUG, INFO, WARNING, ERROR, CRITICAL) |
PODKOP_MCP_PROFILE_TTL | 30 | Seconds 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_NAME | router | Name 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.
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
冒頭だけを表示しています。続きはリポジトリで読めます