Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

podkop-mcp

PYPI · PODKOP-MCP

MCP server for managing Podkop and Forkop on OpenWrt over SSH

Available components

75 Trust /100

Last scanned (3 hours ago)

Scores higher than 71% of PyPI servers

Category Cloud Infrastructure

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
  • 1 of 35 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to mikel38487/podkop-mcp). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 3 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability58
  • AI-judged instruction clarity (fair).Partial
  • Tool/resource definitions use about 3828 tokens (~81/item across 47 items; 47 tools + 0 resources), lean.Pass
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
  • Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage71
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 0% of tool parameters carry a description.Fail
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 4 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "podkop_option_delete" implies "delete" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 48 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass

Unverified: 1 category

A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 5 Nov 26 +15
    • Malware scan: unverified → pass ▲ security
  • 4 Nov 26 −15
    • Malware scan: pass → unverified ▼ security
  • 3 Nov 26 +15
    • Malware scan: unverified → pass ▲ security
  • 1 Nov 26 60

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Analysed pypi/podkop-mcp@0.2.2

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem pypi
Reason Verified
Discovered via Registry attestation endpoint
Source repo mikel38487/podkop-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/mikel38487/podkop-mcp/.github/workflows/release.yml@refs/tags/v0.2.2
Rekor log index 3627760727
Predicate type PyPI publish attestation https://docs.pypi.org/attestations/publish/v1
Subject digest sha256:65fef3611dbbd3edc643af467f4ac1c259e841715e594c949229ce7dac574a60

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 35 packages
Packages resolved 35
No linked repository 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 47 exposed · ~3,652 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
podkop_backup_create ~42

Create a config backup on the router (dry-run by default).

NameTypeReqDescription
applyboolean––
reasonstring––
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_backup_list ~30

List config backups stored on the router.

NameTypeReqDescription
limitinteger––
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_backup_restore ~50

Restore a config backup by id. Dry-run shows the action; apply=true restores and reloads.

NameTypeReqDescription
applyboolean––
backup_idstringyes–
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_child_create ~111

Create a generic Forkop 2.x child (urltest/fallback_group/link/interface/json/tunnel_peer). This is a low-level escape hatch for new 2.0 entities; domain tools and podkop_subscription_add remain the safe high-level paths. Dry-run by default.

NameTypeReqDescription
applyboolean––
child_typestringyes–
label–––
namestringyes–
options–––
sectionstringyes–
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_cli ~110

Run a read-only Forkop/Podkop CLI command from the allowlist. Mutating commands (start, stop, reload, list_update, subscription_update, component actions) are rejected: use dedicated tools so that backups and rollback are applied. Output is redacted unless reveal_secrets=true.

NameTypeReqDescription
args–––
commandstringyes–
parse_jsonboolean––
reveal_secretsboolean––
target–––
timeoutnumber––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_community_lists_get ~84

Return selected and available community lists of sections. With section: the selected lists of that section plus the built-in catalogue of known names. Without section: a map for every top-level section. Names outside the catalogue are reported in unknown (custom rule-sets are allowed and never removed automatically).

NameTypeReqDescription
section–––
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_community_lists_update ~139

Add or remove community lists of one section as a UCI list. Names must match ^[a-z0-9_]+$; duplicates are dropped and the order of existing lists is preserved. The whole list is written at once, so no per-item add_list/del_list calls are issued. Names outside the built-in catalogue are reported in unknown but accepted. Dry-run by default; apply=true writes the config, creates a backup and reloads the service.

NameTypeReqDescription
add–––
applyboolean––
remove–––
sectionstringyes–
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_config_export ~70

Export the UCI config as text (backup-style). ``raw`` requires reveal_secrets=true because it contains proxy URLs and keys. By default the masked export from Forkop is returned.

NameTypeReqDescription
modestring––
reveal_secretsboolean––
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_config_get ~95

Return the full UCI configuration as structured JSON. Secrets (subscription URLs, proxy strings, keys) are masked unless reveal_secrets=true. The structure is identical for Forkop 1.x/2.x and Podkop; use podkop_sections_list for a compact view.

NameTypeReqDescription
include_rawboolean––
package–––
reveal_secretsboolean––
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_connections_config ~80

List routing sections with subscriptions, urltest groups, links and tunnels. Subscription URLs and proxy strings are masked unless reveal_secrets=true. This is a read-only map of how connections are configured; use podkop_subscription_* to modify them.

NameTypeReqDescription
reveal_secretsboolean––
section–––
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_connections_live ~96

List live connections with optional filters (host, source_ip, chain). ``host`` and ``chain`` are case-insensitive substrings; ``source_ip`` matches exactly or as a network prefix ("192.0.2." matches all clients in that subnet). Read-only.

NameTypeReqDescription
chain–––
host–––
limitinteger––
source_ip–––
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_core_features ~30

Return sing-box features compiled into the installed Forkop core (read-only).

NameTypeReqDescription
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_doctor ~60

Check MCP configuration, SSH connectivity, backend and capabilities. Use this first when something does not work: it explains missing environment variables, SSH key problems and the detected Podkop/Forkop version without changing the router.

NameTypeReqDescription
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_domain_check ~127

Check one domain: DNS resolution, FakeIP, section coverage, HTTPS probe. Resolves the domain through the router DNS (127.0.0.1) without touching the configuration. fakeip=true means the domain maps to 198.18.x.x or fc00::/18 (sing-box FakeIP ranges) and therefore goes through the proxy. probe_http runs a curl HEAD request on the router; curl failures are reported in http_error instead of raising.

NameTypeReqDescription
domainstringyes–
probe_httpboolean––
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_domains_add ~180

Add domains to a section preserving the backend storage type. Forkop 1.x keeps section.domain as a single string: the tool never turns it into a UCI list (that would break domain_suffix matching). Forkop 2.x writes multiline destinations, Podkop uses the user_domains list. Duplicates are reported and not written again; invalid entries raise an error. Dry-run by default: the diff and UCI preview are returned and the router is untouched. With apply=true the config is written, the service is reloaded and, if verify=true, the first added domain is resolved via the router DNS to confirm it maps to a FakeIP address.

NameTypeReqDescription
applyboolean––
domainsarrayyes–
sectionstringyes–
target–––
verifyboolean––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_domains_find ~91

Find where a domain is covered by section entries. Checks every top-level section and returns exact matches with the entry kind (domain, zone, full, keyword, regex, ip). possible_lists shows community lists selected in sections: their content lives on the router as rule-sets, so the server cannot match a domain against them.

NameTypeReqDescription
domainstringyes–
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_domains_list ~99

List domains of one section, normalized plus the raw stored value. Works for all backends: Forkop 1.x keeps domain as one space-separated string, Forkop 2.x keeps one entry per line in destinations, Podkop uses the user_domains UCI list. Use the returned storage/option values to understand why entries are written the way they are.

NameTypeReqDescription
sectionstring––
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_domains_remove ~72

Remove domains from a section, keeping the storage type intact. Domains that are not present are reported in not_found and do not make the call fail. Dry-run by default.

NameTypeReqDescription
applyboolean––
domainsarrayyes–
sectionstringyes–
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_domains_replace ~90

Replace the whole domain set of a section. Every entry is validated first; on Forkop 2.x comments and blank lines of the existing destinations block are preserved. Use podkop_domains_add or podkop_domains_remove for incremental changes. Dry-run by default.

NameTypeReqDescription
applyboolean––
domainsarrayyes–
sectionstringyes–
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_domains_suggest ~115

Suggest hosts seen in live connections but not covered by any section. Groups hosts from the Clash API by traffic, skips IP addresses, localhost and already covered hosts. With only_direct=true (default) only hosts whose chain is direct are suggested, i.e. traffic that currently bypasses the proxy and may need a rule. Feed the result to podkop_domains_add (suggested_section is usually main).

NameTypeReqDescription
limitinteger––
only_directboolean––
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_health ~70

Run read-only health checks: sing-box, nftables, FakeIP and DNS. ``full=true`` additionally runs the global network check, which can take up to a minute because it tests real connectivity.

NameTypeReqDescription
fullboolean––
target–––
timeoutnumber––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_import_check ~38

Validate a Forkop config file on the router without applying it (read-only).

NameTypeReqDescription
pathstringyes–
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_installer_log ~30

Return the last Forkop installer log, redacted (read-only).

NameTypeReqDescription
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_installer_status ~37

Return the status of the last Forkop installer run (read-only).

NameTypeReqDescription
offsetinteger––
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_lists_update ~77

Update built-in lists and/or subscriptions. This changes the router's downloaded rule sets and subscription cache, so apply=true is required. Long operations are bounded by ``timeout``.

NameTypeReqDescription
applyboolean––
kindstring––
target–––
timeoutnumber––
waitboolean––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_logs ~72

Return recent router logs, filtered and redacted. ``source`` selects Forkop/Podkop journal, sing-box journal or the whole system log. Secrets in URLs are masked before returning.

NameTypeReqDescription
filter–––
linesinteger––
sourcestring––
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_monitor_snapshot ~79

Return a monitoring snapshot: service, system, proxies, connections, traffic. Collects everything available in one call; each part fails independently (errors are reported in check_errors instead of raising). Read-only and safe to call repeatedly.

NameTypeReqDescription
include_connectionsboolean––
target–––
topinteger––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_option_delete ~53

Delete a UCI option. Dry-run by default; apply=true writes with backup.

NameTypeReqDescription
applyboolean––
pathstringyes–
reasonstring––
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_option_get ~50

Read a single UCI option or section by path, e.g. forkop.main.domain.

NameTypeReqDescription
pathstringyes–
reveal_secretsboolean––
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_option_set ~110

Set a UCI option or list. Dry-run by default; apply=true writes, backs up and reloads. ``value_type=auto`` sets a list when ``value`` is a list, otherwise an option. The tool preserves the backend package and never touches other OpenWrt packages.

NameTypeReqDescription
applyboolean––
pathstringyes–
reasonstring––
target–––
value–yes–
value_typestring––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_proxies_list ~53

List Clash proxy groups and nodes with delays. With ``group``, returns that group's members (all) and its current selection (now). Read-only.

NameTypeReqDescription
group–––
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_proxy_select ~88

Select a proxy inside a Clash group (runtime change, not config). Dry-run shows what would be selected. apply=true performs the switch; on Forkop 1.x this raises BackendError because runtime selection is not supported there — that is expected behaviour.

NameTypeReqDescription
applyboolean––
groupstringyes–
proxystringyes–
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_proxy_test ~50

Run read-only proxy check and report selected-group delays. Calls check_proxy via CLI when available; falls back to reporting delays of currently selected proxies from Clash API history.

NameTypeReqDescription
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_section_create ~112

Create a new routing section. Dry-run by default. Minimal defaults are backend-specific: Forkop gets enabled=1 and the requested action; Podkop gets connection_type=proxy. For zapret2 on Forkop 1.x you must pass nfqws2_opt in options, otherwise the generated config will be rejected by the core.

NameTypeReqDescription
actionstring––
applyboolean––
namestringyes–
options–––
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_section_delete ~80

Delete a section. Child items are deleted when cascade=true. Deleting the main section is refused unless allow_main=true; it is usually a configuration error. Dry-run by default.

NameTypeReqDescription
allow_mainboolean––
applyboolean––
cascadeboolean––
sectionstringyes–
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_section_enable ~45

Enable or disable a section without deleting it.

NameTypeReqDescription
applyboolean––
enabledbooleanyes–
sectionstringyes–
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_section_get ~50

Return all options of one section plus its child items.

NameTypeReqDescription
include_childrenboolean––
reveal_secretsboolean––
sectionstringyes–
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_section_update ~74

Update selected options of a section (partial update). Dry-run by default. Use podkop_domains_add/remove for domain lists: this tool writes raw values but does not normalize domain syntax.

NameTypeReqDescription
applyboolean––
optionsobjectyes–
sectionstringyes–
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_sections_list ~88

List routing sections with action, enabled flag, domain counts and lists. This is the fastest overview of what Forkop/Podkop is doing. Child UCI sections (subscriptions, URLTest groups, links) are counted; set include_children=true to return them too.

NameTypeReqDescription
include_childrenboolean––
reveal_secretsboolean––
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_service_action ~97

Start, stop, restart, reload or toggle autostart of Podkop/Forkop. Dry-run by default. ``stop`` is refused in read-only mode. Use podkop_apply-style tools for config changes; this tool only controls the service lifecycle.

NameTypeReqDescription
actionstringyes–
applyboolean––
target–––
timeoutnumber––
waitboolean––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_status ~28

Return service, sing-box, DNS and version status of the router.

NameTypeReqDescription
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_subscription_add ~100

Add a subscription to a section. Dry-run by default; apply=true writes. Accepts http(s):// URLs or local absolute paths (max 4096 chars). Forkop creates a child section {section}_sub_N with sensible defaults; Podkop writes subscription_url inline into the section.

NameTypeReqDescription
applyboolean––
options–––
sectionstringyes–
target–––
urlstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

podkop_subscription_delete ~79

Delete a subscription by name, 1-based index, tag or raw URL. When ``section`` is given, only its children are considered. Podkop removes the subscription_url option instead. Dry-run by default.

NameTypeReqDescription
applyboolean––
identifierstringyes–
section–––
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_subscription_update ~82

Refresh subscription cache on the router (apply must be true). Uses async update with status polling when the backend supports it, otherwise runs the blocking subscription_update command. Bounded by ``timeout`` seconds.

NameTypeReqDescription
applyboolean––
section–––
target–––
timeoutnumber––
waitboolean––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_system_info ~34

Return model, OpenWrt version, kernel, load, memory, disk and WAN info.

NameTypeReqDescription
target–––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_traffic ~85

Measure traffic rate by sampling Clash connections twice. Returns download/upload bps, per-connection deltas and the top consumers. ``sample_seconds`` is clamped to 0.5..10 s. Read-only; the call blocks for the sampling interval.

NameTypeReqDescription
sample_secondsnumber––
target–––
topinteger––

Structured output declared, but exposes no named fields.

No examples provided.

podkop_tunnel_create ~120

Create a Forkop 2.x tunnel child (WARP/WireGuard/OpenVPN/...). Dry-run by default. ``kind`` is one of warp, wireguard, amneziawg, tailscale, openvpn-client, openconnect, json. Extra backend options are passed through; secrets in preview are masked.

NameTypeReqDescription
applyboolean––
kindstringyes–
label–––
namestringyes–
options–––
sectionstringyes–
target–––

Structured output declared, but exposes no named fields.

No examples provided.

Install

How do I install the podkop-mcp server?

podkop-mcp runs locally as a PyPI package, launched with uvx podkop-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · podkop-mcp

# add to Claude Code
claude mcp add mikel38487-podkop-mcp -- uvx podkop-mcp
Common questions

What is the podkop-mcp server?

podkop-mcp is listed in the public MCP registry as io.github.mikel38487/podkop-mcp. MCP server for managing Podkop and Forkop on OpenWrt over SSH. This page covers its PyPI package (podkop-mcp).

Is the podkop-mcp server safe to use?

podkop-mcp scores 75 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the podkop-mcp server expose?

podkop-mcp exposes 47 tools: podkop_doctor, podkop_status, podkop_core_features, podkop_import_check, podkop_installer_status, and 42 more. Their descriptions and schemas cost roughly 3,652 tokens of context every time the server is loaded.

Is the podkop-mcp server still maintained?

podkop-mcp is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the podkop-mcp server under?

podkop-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.