Nullprint

MCP: control Nullprint from AI agents

Nullprint ships an open-source MCP server, nullprint-mcp. Point Claude Code, Claude Desktop, OpenAI Codex, Kimi or any other MCP-capable agent at it and the agent can create profiles, launch them, run check-ups and drive the pages inside a running profile, in plain language. Think of it as a remote control for Nullprint that any AI can hold.

What it is

The MCP server is a thin, open-source layer (github.com/nullprintai/nullprint-mcp, MIT) over the Local API that the Nullprint app runs on your computer. Every tool maps to one API endpoint; the app, the browser kernels and the fingerprint engine stay closed and are not part of the package. Nothing is sent to our servers by the MCP layer: the agent talks to the daemon on 127.0.0.1.

Typical things to ask an agent once it is connected:

  • "Create 20 profiles from this CSV of proxies, run a check-up on each and tell me which ones are not Consistent."
  • "Open profile shop-07, go to the orders page and read me the unfulfilled orders."
  • "Test these 5 proxies and tell me the exit country and latency of each."
  • "Which profiles are running right now? Stop the ones that have been idle for an hour."

Install

Requirements: the Nullprint app installed, signed in and running on the same computer (Windows or macOS); Python 3.11+; and uv, which fetches the package on first run (curl -LsSf https://astral.sh/uv/install.sh | sh on macOS, winget install astral-sh.uv on Windows).

Claude Code

claude mcp add nullprint -- uvx nullprint-mcp

OpenAI Codex

codex mcp add nullprint -- uvx nullprint-mcp

Claude Desktop

Download nullprint-mcp-0.1.1.mcpb and double-click it; Claude Desktop installs the extension and manages Python and dependencies itself (it uses uv under the hood). The same file is listed on Smithery. If you prefer the config file, the mcpServers entry below works too.

Kimi, Qwen and other clients with an mcpServers config file

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

Without uv: pip install nullprint-mcp, then use nullprint-mcp as the command with no arguments.

No Python? Use the Node build

The same server is also published on npm as a single file with no dependencies, so any client that has Node.js 18+ (Cursor, Windsurf, Cline, and Claude Desktop, which bundles Node) can run it without Python or uv. Same 17 tools, same names and arguments.

claude mcp add nullprint -- npx -y nullprint-mcp
{
  "mcpServers": {
    "nullprint": {
      "command": "npx",
      "args": ["-y", "nullprint-mcp"]
    }
  }
}
No port or key to configure. The server reads the running daemon's port and API key from ~/.nullprint/daemon.json, which the app writes on start-up. If the app is not running, the tools say so instead of failing with a connection error.

Try it

Restart your AI client after adding the server, then ask it something that needs Nullprint. Claude Code lists the server under /mcp; a first prompt that works everywhere:

List my Nullprint profiles and tell me which ones are running.

The agent calls profiles_list and answers from the result. From there it can chain tools: create, check up, start, navigate, read the page, stop.

Tools

ToolWhat it does
profiles_listList every profile with status (running / idle), exit and ledger metadata
profile_createCreate a profile (fingerprint generated and frozen), optionally with proxy, ledger and start pages
profile_checkupConsistency check-up: returns a summary and the individual checks
proxy_checkTest a proxy: exit IP, country, latency (an unreachable proxy is a result, not an error)
profile_startOpen a browser session for a profile; Chrome kernels also return a DevTools endpoint
profile_stopStop the profile's browser, whether the agent or you launched it
profile_deleteMove a profile to the recycle bin (recoverable); refused while it is running
trash_listList recoverable profiles in the recycle bin
profile_restoreRestore from the recycle bin with fingerprint, proxy and logins intact
session_gotoNavigate the current page of a started profile
session_snapshotRead the page's accessibility tree, to find selectors and understand page state
session_click_selectorClick an element by CSS selector
session_fill_selectorFill an input by CSS selector
session_pressPress a key, e.g. Enter
session_evalRun JavaScript on the page and get the value back
session_tabsList the profile's tabs and which one is active
session_switch_tabBring a tab to the front

The session_* tools work on a session opened by profile_start; on a profile without one they return 409 and the agent is told to start it first. Selectors are CSS; agents call session_snapshot when they do not know one.

Safety boundaries

  • Permanent deletion is not a tool. Emptying the recycle bin destroys logins and cannot be undone, so it is only possible by hand in the app. profile_delete tells the agent to say so rather than work around it.
  • No file-writing tools. Screenshots to disk and similar are left out on purpose.
  • Attaching from outside bypasses the consistency guards. profile_start returns a DevTools endpoint for Chrome kernels so tools like Playwright can attach. A session driven that way can set a viewport, language or time zone that contradicts the profile's frozen fingerprint and make it detectable. Prefer the session_* tools; if you attach, do not change anything the profile has not declared.
  • The agent runs as you. Everything it does goes through the Local API on your computer with your API key. Review what an agent plans to do with your stores the same way you would review a script.

Nullprint on another machine

Pass the daemon address and key explicitly. Resolution order, most explicit first: --daemon-url / --port, then NULLPRINT_DAEMON_URL, then NULLPRINT_PORT, then ~/.nullprint/daemon.json (NULLPRINT_HOME changes the directory). The key comes from NULLPRINT_API_KEY when the file is not readable locally.

claude mcp add nullprint -e NULLPRINT_API_KEY=np_… -- uvx nullprint-mcp --daemon-url http://192.168.1.20:7801

The daemon listens on localhost only; expose it over an SSH tunnel or a private network, never on the public internet.

FAQ

Does it cost extra? No. MCP and the Local API are included in every plan, including the free trial.

Which AI works best? Any client that speaks MCP. We test with Claude Code, Claude Desktop and OpenAI Codex; Cursor, Windsurf, Cline, Kimi and Qwen use the same mcpServers format. Pick the Python build (uvx) or the Node build (npx) by whichever runtime your client already has.

My AI has no MCP support. Use the Local API directly from a script; it is the same surface the MCP server wraps.

Where is the source? github.com/nullprintai/nullprint-mcp (MIT) , pypi.org/project/nullprint-mcp and npmjs.com/package/nullprint-mcp; it is also listed in the official MCP Registry (io.github.nullprintai/nullprint-mcp), on mcp.so and Smithery. Issues and pull requests are welcome on GitHub.