Skip to main content

Local MCP daemon with a dashboard, REST/WebSocket API, and 64 built-in tools — plus scaffold, audit, and inspect for your own Model Context Protocol servers.

Project description

MCP Anvil

A local MCP toolbox. One daemon hosts every Model Context Protocol server at a single address, a browser dashboard makes them point-and-click, 64 tools ship ready to call, and one config entry exposes the whole thing to Claude. CLI for scripts, dashboard for exploration.

PyPI version Python Site

pipx install mcp-anvil
mcp-anvil license activate "<your-key>"   # the blob from your purchase email
mcp-anvil setup                           # starts the daemon, opens the dashboard

That is the whole post-purchase path. The rest of this README explains what you just installed and how to wire it into your LLM client.


Requirements

  • Python 3.11+. 3.11 and 3.12 are the most thoroughly tested; if you have several Python versions installed, prefer one of those. pipx picks an interpreter for you and keeps the install isolated.
  • No other system dependencies. Docker, Node, etc. are requirements of the servers you manage with Anvil, not of Anvil itself.
  • Works offline. No telemetry. License verification is local (see Licensing).
  • Cross-platform. Windows, macOS, and Linux. On Windows the CLI forces UTF-8 output so Rich renders correctly on the default console.

What you get — the architecture

Five surfaces, one install. They all share one daemon and one tool catalog.

                       mcp-anvil daemon  (127.0.0.1:7820)
                       ┌───────────────────────────────────┐
                       │  - hosts every MCP server you add   │
   browser  ──────────▶│  - serves the dashboard (8 tabs)    │
   (dashboard)         │  - 64 built-in tools                │
                       │  - REST + WebSocket API             │
   your shell ────────▶│                                     │
   (mcp-anvil CLI)     └───────────────┬─────────────────────┘
                                       │
   Claude Desktop / Code ──────────────┘
   (one config entry  ──▶  mcp-anvil router  ──▶  daemon)
Surface What it is
Daemon A long-lived local process on 127.0.0.1:7820 that hosts every MCP server you register and exposes them over one HTTP/WebSocket API. Start it with mcp-anvil daemon start.
Dashboard A browser UI served by the daemon at http://127.0.0.1:7820. Eight tabs: Servers, Tools, Templates, Saved Calls, Prompts, History, Events, Help.
64 built-in tools A ready-to-call toolkit (six categories, below) the daemon serves out of the box.
CLI The mcp-anvil binary. Everything the dashboard does, scriptable from any shell.
Router mcp-anvil router — an MCP proxy that exposes every daemon-managed tool to Claude Desktop, Claude Code, or any HTTP-MCP client through a single entry.

After you purchase: up and running in five minutes

1. Install

pipx install mcp-anvil      # recommended — isolated install
# or
pip install mcp-anvil       # works fine inside a venv

2. Activate your license

After checkout you receive a base32-encoded license blob by email.

mcp-anvil license activate "AB3CD4EF..."   # paste your key
mcp-anvil license status                    # confirm it took

The license is stored at ~/.mcp-anvil/license.json and verified locally — no network call.

3. Run the setup wizard

mcp-anvil setup

The interactive wizard walks you through the whole first run:

  1. Shows your version + daemon/license status.
  2. Starts the daemon (default: yes).
  3. Activates a license key if you have not already (optional — the trial works without one).
  4. Opens the dashboard in your browser (default: yes).
  5. Prints your next steps.

4. Open the dashboard

If you skipped step 4 of the wizard, the daemon serves the dashboard at:

http://127.0.0.1:7820

Click a tool, fill the auto-generated form, and watch the response stream back in the History tab.

5. Connect Claude (or any MCP client)

See Connecting to Claude below. One config entry exposes all 64 tools (plus anything else you have registered) inside the LLM.


The 64-tool catalog

Every tool is one async function with a JSON schema. Call any of them from Claude, the dashboard, the CLI (mcp-anvil tool run <name>), or curl against the daemon API.

Category Count What it covers
Read + run, anywhere on disk 7 Read files, glob/grep a tree, run a shell command, hit an HTTP endpoint, check git status, run pytest.
Pull text + data out of any file 12 Extract text from PDFs and Excel; parse CSV / JSON / YAML / TOML / INI / Markdown; sniff a file's real type; read image dimensions.
Answer "is this URL alive?" 11 DNS lookups, TCP port checks, SSL cert inspection, HTTP latency, security-header audits, page scraping.
Inspect the machine the daemon runs on 9 CPU / memory / disk, process list, env-var read with auto-masked secrets, cross-platform shell.
Encode, hash, audit, generate 13 Base64 / URL round-trips, SHA-256 + HMAC, JWT decode, secret scanning, secure UUIDs and random strings.
Survey a codebase fast 12 Detect language, count lines per language, find TODO/FIXME, browse git log/diff/branches, validate JSON Schema, diff files.

Need something the toolkit does not cover? In the dashboard's Tools tab, + New tool scaffolds a Python function that becomes a live MCP tool immediately — no build step, no restart. Custom tools live at ~/.mcp-anvil/tools/custom/.


Connecting to Claude and other clients

The router is a thin proxy in front of the daemon. Register it once; every tool the daemon manages becomes visible to the client, and new tools show up without a restart.

Claude Desktop / Claude Code (stdio)

Add this to your Claude Desktop config (~/.config/claude/claude_desktop_config.json on Linux; %APPDATA%\Claude\claude_desktop_config.json on Windows; ~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "anvil": {
      "command": "mcp-anvil",
      "args": ["router"]
    }
  }
}

Restart Claude Desktop. It will see every tool the daemon manages.

HTTP-MCP clients (streamable HTTP)

mcp-anvil router --transport streamable-http --port 7830
# serves MCP at http://127.0.0.1:7830/mcp

Point your HTTP-MCP client at that URL.

Import the servers you already have

The dashboard's Servers tab reads your existing client configs and lists every MCP server it finds, so you can register them under Anvil with one click:

Claude Desktop  ->  claude_desktop_config.json
Claude Code     ->  ~/.claude.json + ./.claude/mcp.json
Cursor          ->  ~/.cursor/mcp.json
Project-local   ->  ./.mcp.json

(stdio servers import end-to-end; HTTP/SSE servers are detected but not yet hostable.)


Command reference

mcp-anvil                 # branded banner + daemon/license status
mcp-anvil --help          # full command tree
mcp-anvil --version       # print version and exit
Command Purpose
setup Interactive first-run wizard (start daemon, activate license, open dashboard).
quickstart Print the short command tour.
new <name> Scaffold a complete, audit-clean MCP server project. Free.
audit <path> 21-rule security + health audit of an MCP server.
inspect <path> Live single-server playground UI at http://127.0.0.1:7800.
daemon start|stop|status Control the local daemon.
server ... Add / list / start / stop / call MCP servers under the daemon.
tool list|show|run Use the built-in tool catalog from the shell.
template ... Save and replay tool-call presets.
prompt ... Manage saved prompt files.
router MCP proxy for Claude Desktop / Code / HTTP clients.
mcp-server Serve the built-in catalog over stdio with no daemon (used by Agent Forge's fallback path).
bundle / keys Sign, verify, and export portable server bundles; manage trusted signing keys.
tray System-tray indicator for the daemon.
client OAuth client management for third-party apps driving the daemon.
docs export Export the daemon's API reference (markdown / OpenAPI / TypeScript).
license activate|status Manage your license.
reset Wipe local state and return to factory defaults.

daemon status exits non-zero when the daemon is not running — that is the intended health-check behavior, not an error.


The audit, grounded in research

mcp-anvil audit runs 21 rules — 12 static checks + 9 runtime probes — each mapped to a published finding:

  • arXiv 2506.13538 — empirical study of 1,899 MCP servers (auth gaps, session-in-URL leaks).
  • arXiv 2603.05637 — MCP fault taxonomy; two-thirds of OS-dependent faults are Windows-specific.
  • AgentDojo — adversarial injection probes, ported into the opt-in fuzz phase (--enable-fuzz).
mcp-anvil audit ./my-server                    # full audit
mcp-anvil audit ./my-server --html report.html # shareable report
mcp-anvil audit ./my-server --strict           # fail CI on any warning

Licensing

MCP Anvil is a commercial product.

  • mcp-anvil new is free forever — scaffold as many servers as you like without a license.
  • A 14-day full-feature trial starts automatically the first time you run a paid command. No signup.
  • Activate your license (mcp-anvil license activate "<key>") to keep the full toolkit, daemon, dashboard, and router after the trial.

The license is an Ed25519-signed JSON blob, verified locally against an embedded public key — no phoning home on the happy path.

Tier Price What you get
Free $0 new + the 14-day trial
Personal $29 one-time Everything. 1 developer, 1 year of updates
Team $99 one-time Everything. 5 developer seats, 1 year of updates

Buy a license ->


Where your data lives

Everything Anvil writes is under ~/.mcp-anvil/:

Path Contents
config.json Daemon host/port, daemon name, preferences.
license.json Your activated license envelope.
state.json Trial start timestamp.
credentials.json OAuth client id/secret pairs (mode 0600).
servers/ Registered MCP server configs.
tools/builtin/, tools/custom/, tools/templates/ Built-in catalog, your custom tools, template bundles.
prompts/ Saved prompt files.
logs/daemon.log Daemon output.
daemon.pid Present while the daemon is running.
trusted_keys/ Ed25519 public keys for verifying signed bundles.

mcp-anvil reset clears this (with a prompt before touching your license).


Troubleshooting

  • tool list says the daemon is not running. Start it: mcp-anvil daemon start. The built-in tools are served by the daemon.
  • Port 7820 already in use. Set a different port in ~/.mcp-anvil/config.json, then mcp-anvil daemon stop && mcp-anvil daemon start.
  • daemon status returns a non-zero exit code. Expected when the daemon is stopped — it is a health check, not a crash.
  • Multiple Python versions. If pip install resolves a version that lacks wheels for a dependency, install under Python 3.11 or 3.12 (the tested versions), e.g. pipx install --python 3.12 mcp-anvil.
  • Daemon will not start — check the log. ~/.mcp-anvil/logs/daemon.log has the stack trace.

Support

Built by AI Infra Decoded. Commercial license — see LICENSE.md.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcp_anvil-0.2.0.tar.gz (341.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcp_anvil-0.2.0-py3-none-any.whl (287.6 kB view details)

Uploaded Python 3

File details

Details for the file mcp_anvil-0.2.0.tar.gz.

File metadata

  • Download URL: mcp_anvil-0.2.0.tar.gz
  • Upload date:
  • Size: 341.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for mcp_anvil-0.2.0.tar.gz
Algorithm Hash digest
SHA256 88de1d3c2e74c84a827298871f538f432c2ab94dcdcb5f404d5dbff17e08ef1f
MD5 6e84da0f2494881b1e6c36373de6c176
BLAKE2b-256 a739e1a747c859b643fd410be05108e9172545726d7224c8cd0ce92383183b2c

See more details on using hashes here.

File details

Details for the file mcp_anvil-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: mcp_anvil-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 287.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for mcp_anvil-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 86ca80f3ceed7d41fd015889e7a871278ee03491a550d2543397454e7db9d651
MD5 3844cc52f7c360be7aa55f30560c8e1f
BLAKE2b-256 d82a932e052a450d7aa3cc96a8777f253f601530cbad0d4f778169f804afc8dd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page