Prototype · Preview: every server in the official registry, synced every 30 minutes. Reviews and accounts come in a later step.
PopNx MCPMCP servers for people who use AI · explained in plain words

Conning

by EranYonaiversion 0.6.5i★ –iRuns on your computer
Registry nameio.github.EranYonai/conning

Install

Overview

Description from the maker (original English)

Run commands on your remote test machines over SSH without the agent ever seeing a secret.

PopNx MCP’s three pillars

These three are never merged into one score: opinions, measurements and popularity are different things.

What you can do with it

We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.

  • Connection: Runs on your computer
  • Transport: stdio
  • Category: Other

Install

Pick the AI app you use, then copy the settings.

Before you install

  • Basic checks: 1 of 1 passed
  • Runs on your computer with your user’s permissions (files, network, apps).
  • The registry lists no key to fill in.

You need

  • PyPIPython’s uv installed (for the uvx command)

Which app do you use?

Pick your app above. We remember it, so next time the button says “Install in …”.

Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json

{
  "mcpServers": {
    "conning": {
      "command": "uvx",
      "args": [
        "conning",
        "mcp"
      ]
    }
  }
}

Run this in your terminal

claude mcp add conning -- uvx conning mcp

Open in Cursor

Or copy the settings yourself

Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json

{
  "mcpServers": {
    "conning": {
      "command": "uvx",
      "args": [
        "conning",
        "mcp"
      ]
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

Open in VS Code

Or copy the settings yourself

Paste into .vscode/mcp.json in your project

{
  "servers": {
    "conning": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "conning",
        "mcp"
      ]
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.

Your choice stays on this device in a cookie; no account needed.

These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.

What it can do

Runs on your computer; the tool list appears in your AI app after you install it.

Basic checksi

We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 7, 2026

  • ✓ Pass

    Maker matches the repo

    The registry name was verified with the GitHub account EranYonai, which owns the repo

  • … Not checked yet

    Still maintained

    We have not read this repo from GitHub yet

  • … Not checked yet

    Has a licence

    We have not read this repo from GitHub yet

  • – Not applicable

    Endpoint responds

    This one runs on your computer; there is no internet endpoint

  • – Not applicable

    Sign-in with OAuth

    Runs on your computer and uses local settings instead

  • … Not checked yet

    No hidden instructions in tool descriptions

    Runs on your computer; we can only read tool lists from internet endpoints

Compared with others in Otheri

  • More stars than 0% of the other 32742 servers in this category
  • Published to the registry more recently than 77% of the other 32742 servers in this category
  • Basic checks equal to or better than 100% of the other 32742 servers in this category

Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.

Common questions

Is Conning safe?

It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.

What keys or codes does it need?

The registry does not list a required key, though some servers ask you to sign in on first use.

Does it run on my computer or in the cloud?

It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).

Is it still maintained?

The GitHub repo last changed –, and the latest version (0.6.5) reached the registry 11 days ago.

Which apps can use it?

Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Python (uv), Docker on your computer.

What can I use instead?

In the same category: Spec Driven Development, Remote Desktop Commander, Asset Notation

Alternatives

Servers in the same category from other makers, sorted by stars.

Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi

Spec Driven Development

by formulahendry

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

Runs on your computer★ 440MITUpdated 14 months ago
Install

Remote Desktop Commander

by desktop-commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

Runs in the cloud★ 211Updated 2 days ago
Install

Asset Notation

by assetnotation

Read and maintain an Asset Notation file on disk: net worth, holdings, valuations, CSV import.

Runs on your computerUpdated today
Install

README from the maker

Open the README

Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.

Conning

A light, local SSH controller for humans and agents. Conning is one small CLI and MCP server on your own machine. It runs commands, long jobs and file copies on your test machines over plain OpenSSH. You drive it from a terminal; your agent (Claude Code, Codex, Cursor...) gets the same four commands as MCP tools, with identical output. Conning holds the keys, so the agent never sees a password, and you approve anything risky.

conn targets add lab --host 10.0.0.5 --user tester   # asks for the rest, pins the host key

conn run lab uname -a # exit code first, then the output conn run -t lab apt upgrade # you, at a terminal: live, like ssh -t conn ssh lab # you: a shell there, same login and jump hosts conn targets mode lab auto # optional: let the agent run anything there

Status: early (0.6). Linux, macOS and Windows targets work, with long jobs, transfers, jump

hosts and approvals. See docs/design.md for every decision so far.

What it is

  • Light. One Python package and no daemon: the MCP server runs on stdio when your agent starts it. Four tools cost about 1k tokens a turn. Results lead with the exit code and are capped at 8 KB by default, with a handle to page the rest; fan-out to many targets collapses identical results.
  • Local. It runs next to you and your agent. Targets only need inbound SSH, and nothing gets installed on them. Secrets stay where they are (OS keychain, op://, ssh-agent): the target file holds references, and no tool ever returns a secret.
  • SSH. Plain OpenSSH underneath, never your ~/.ssh/config: a generated config per target, pinned host keys, forwarding off, jump hosts. Windows targets need OpenSSH and PowerShell 7.
  • For humans and agents. Each target has a mode, ask or auto. In ask, read-only commands and your allow rules run, and anything else waits for you; "always allow" remembers two words, so systemctl status never lets through systemctl stop. Only you grant trust: in the agent client's prompt, in conn watch or at your terminal.

Install

uv tool install conning        # or: pipx install conning

conn mcp install claude # or codex, cursor, opencode, pi: adds the server, its skill, and denies raw ssh/scp

For Tab completion that reads the target (its files, commands and shell history), run conn completion install once; it adds one line to your bash, zsh or fish rc file, and conn doctor reminds you if it's missing. Set history = false on a target to keep its shell history out (D53).

The MCP server needs no install at all:

claude mcp add conning -- uvx conning mcp
Or run the server in Docker
docker run -i --rm --network host \

-v ~/.config/conning:/conning \ -v "$SSH_AUTH_SOCK":/ssh-agent -e SSH_AUTH_SOCK=/ssh-agent \ ghcr.io/eranyonai/conning:latest

The image carries Python, the OpenSSH client and Conning, and nothing else. Targets, pinned host keys and job output live on the /conning volume, and conn runs as that folder's owner, so files it writes there stay yours on the host. On Docker Desktop for Mac, forward the agent with -v /run/host-services/ssh-auth.sock:/ssh-agent instead. Two things stay on your machine (D46):

  • Approving. conn targets add, conn approve, conn allow and turning on auto need your terminal. Install the CLI on the host and point it at the same folder: CONNING_HOME=~/.config/conning conn approve a:1. Approving in the agent client works from the container as usual.
  • Secrets. The OS keychain is not reachable from a container, so use env: or op:// references, or forward your ssh-agent as above and use a key. docker run --rm ... conning doctor checks the rest.

Targets on a lab LAN or VPN need --network host (Linux) or a route the container can use.

The agent's four tools

ToolWhat it does
targets(filter?, check?)One line per target: name, OS, shell, host, user, tags, mode. Never a secret.
`run(target, cmd \argv, wait=30, max_bytes=8192, ...)`Runs on one target, a list or tag: . Exit code first. Still running after wait seconds: returns a job id (wait=0 is async).
read(id, wait?, range?, grep?, signal?)Long-polls a job for new lines, pages a saved output, or reads a remote file.
transfer(source, dest)Copies files between local: and : , checked by sha256.

Agents without MCP can use the same commands through the conn CLI; the output is identical.

For agents: CLI reference

This block is generated by conn help --markdown, so you don't need to call --help. A test keeps it in sync with the code.

# Agent commands (same output as the MCP tools)

conn targets [--check] [filter] List targets: name, OS, shell, host, user, tags, mode. Never secrets.

conn run [--wait WAIT] [--timeout TIMEOUT] [--cwd CWD] [--shell] [-t] [--max-bytes MAX_BYTES] [--grep GREP] target [argv ...] Run a command on one target, a list, or tag: . Exit code first.

conn read [--wait WAIT] [--range RANGE] [--grep GREP] [--signal {INT,TERM,KILL}] [--max-bytes MAX_BYTES] id Page a job (new lines only), a saved output, an approval, or a remote file.

conn transfer source dest Copy files: local: to : , or back. sha256 checked.

At a terminal

conn ssh target Human only: an interactive shell on a target, with its login, key, port and jump hosts.

Targets (conn targets )

conn targets add [--host HOST] [--user USER] [--like TARGET] [--port PORT] [--jump TARGET] [--auth {ssh-agent,key,password}] [--secret SECRET] [--key KEY] [--os {linux,windows,darwin}] [--mode {ask,auto}] [--tag TAG] name Add a target. Without a terminal it is saved as pending until a human approves it.

conn targets import [--match MATCH] Import hosts from ~/.ssh/config as pending targets (unsafe options dropped).

conn targets test name Probe a target: reachability, OS, shell, pinned host key.

conn targets mode target [{ask,auto}] Show or set ask or auto; auto runs anything without asking and needs a human.

conn targets rename old new Human only: rename a target; its host keys, password and pending work follow.

conn targets rm name Remove a target and its pinned host key.

Trust

conn approve [--always] what Human only: make a target live, or allow a pending command a: .

conn allow target [words ...] Human only: let a command run without asking (no words: list the rules).

conn deny target words [words ...] Remove an allow rule, so the command asks again (no terminal needed).

This machine

conn watch [--history HISTORY] [--no-prompt] Live control room: every command on every target, job output, approval prompts.

conn doctor Check this machine's setup: config and state dirs, ssh, keychain, targets.

conn mcp [--approve-in-client | --no-approve-in-client] ... Run the MCP server on stdio, or install it into an agent client.

conn completion {bash,zsh,fish,install} Tab completion that reads the target; conn completion install turns it on in your shell.

conn help [--markdown] Show this help; --markdown prints the block cached in README.md.

<!-- conn-help:end -->

A target is one login on one machine. To use the same machine as another user, add it again: conn targets add lab-tester --like lab --user tester copies the host, port, OS and tags and asks for the new user's password. conn targets shows which user each target uses.

A target behind a bastion names it as its jump host: add the bastion as a target first, then conn targets add lab --host 10.0.0.5 --user tester --jump gw. Every hop gets its own login and its own pinned host key, and conn targets import keeps a ProxyJump to another host it imports. The bastion is a target the agent can see too; in ask mode it can only run read-only commands there without you.

A target you add with conn targets add from an agent session is saved as pending. It does nothing until the human runs conn approve , which shows the host, the pinned host-key fingerprint and where the secret comes from.

A command outside a target's allowlist returns status=pending_approval id=a: , and a desktop notification tells the human. They answer in one of three places (allow once, always allow its first two words, or deny), and the agent picks up the result with read a: :

  • In the agent client: any MCP client that supports elicitation shows the question before the command is queued, and an approved command runs in the same call. Clients without it fall back to the two below. If a client would answer such prompts by itself instead of asking you, run the server as conn mcp --no-approve-in-client.
  • In `conn watch`, which also shows every command and its output as it happens.
  • With `conn approve a: ` in any terminal. When you run conn run yourself at a terminal, it just asks you there and prints the result.

read a: long-polls only while a conn watch is open. With nobody watching, it returns at once with nobody is watching: ask the user to run conn approve a: , so the agent asks you instead of waiting out its timeout for an answer no one was asked for.

Read-only commands such as uname, hostname, df, ps, ls, ip addr, systemctl status and journalctl run without asking on every target; each is checked so its changing forms (hostname x, ip addr add) still ask, and safe = false in a target's entry turns the list off. conn allow make test lets another command run without asking from then on; conn deny takes it back. Every command, answer and rule change lands in a hash-chained audit log, and conn doctor checks your setup when something doesn't work.

Safety model

ModeWhat the agent can doDefault for
askThe built-in read-only list and allowlisted commands run; anything else waits for your approval.every new target
autoAny command runs without asking, until you set the mode back to ask. conn doctor warns about it.never by default
  • No tool returns a secret, adds a live target or changes policy.
  • Secrets travel over stdin or the SSH channel's env, never argv. Output is redacted before it is saved.
  • Remote output is marked untrusted. Shell wrappers (sh -c, python -c, sudo...) and shell syntax (;, |, $(...)) always ask.
  • conn mcp install also denies the agent raw ssh/scp and conn ssh, so it can't go around Conning (pi has no permission rules, so there it only adds the server).
  • The audit log is hash-chained. It runs as your user, so it is tamper-evident, not tamper-proof.

Development

uv sync

uv run pytest --cov=conning # CI requires 95% coverage on Linux uv run ruff check && uv run ruff format --check

The end-to-end tests drive the real conn and MCP server against a throwaway local sshd (Linux, root to start it; CI's e2e job does this on every push):

eval "$(sudo sh tests/e2e/start-sshd.sh /tmp/conning-sshd | sed 's/^/export /')"

uv run --with keyrings.alt pytest -m e2e # keyrings.alt: a file keychain for typed passwords

After changing the CLI, refresh the README block with uv run conn help --markdown.

Docs

  • docs/design.md: the design and every decision, with its status.
  • [docs/blog.html]

Only the beginning is shown; read the rest in the repo

Ask PopNx