Atlas / MCP servers / neon-solutions / add-mcp

add-mcpBLOCK

mcp/neon-solutions/add-mcp

The open MCP config tool - npx add-mcp

Verdict
BLOCK
Grade
D
Trust score
69 /100
Exposed tools
2 2r · 0w · 0d
Transport
streamable-http
License
Apache-2.0
Stars
313
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Add MCP servers to your favorite coding agents with a single command.

Supports Claude Code, Codex, Cursor, OpenCode, VS Code, Grok Build and 16 more.

Docs and registry: add-mcp.com

Install an MCP Server

Install an MCP server by remote URL or package name:

npx add-mcp url | package name [options]

Example installing the Context7 remote MCP server:

npx add-mcp https://mcp.context7.com/mcp

Example installing the Context7 remote MCP server via the programmatic API — great for integrating add-mcp in your own CLI tool:

import { upsertServer } from "add-mcp";

const result = upsertServer(
"cursor",
"context7",
{ type: "http", url: "https://mcp.context7.com/mcp" },
{ local: true },
);
console.log(result);

You can add env variables and arguments (stdio) and headers (remote) to the server config using the --env, --args and --header options. With ${VAR} placeholders, interactive installs prompt for each variable (omit skipped optional keys so empty strings are not written to config).

Find MCP Servers

Find and install MCP servers from the add-mcp registry:

npx add-mcp find vercel

The first find/search run automatically saves the add-mcp registry to ~/.config/add-mcp/config.json (or $XDG_CONFIG_HOME/add-mcp/config.json). You can edit that file to replace the default registry, add the official Anthropic registry, or point at any registry-compatible server.

Supported Agents

MCP servers can be installed to any of these agents:

Read from source at commit e1fcad2b2c03OBSERVED · 2026-10-12
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.

claude-code
claude mcp add add-mcp-web -- npx -y add-mcp-web
claude-desktop
{
  "mcpServers": {
    "add-mcp-web": {
      "command": "npx",
      "args": [
        "-y",
        "add-mcp-web"
      ]
    }
  }
}
03

Exposed tools (2)

2 read · 0 write · 0 destructive.

ToolRiskDescription
...readEdge case name
com.neon.mcpreadNeon MCP server
04

Trust audit

BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
none-observed
Network
declared (5 observation(s))
Shell
declared (1 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (19)

HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
src/formats/yaml.ts:13
const parsed = yaml.load(content);
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
MEDIUMAuth / authz · mcp.remote_no_auth · CWE-287, CWE-862
streamable-http
Why it matters. a network transport with no auth environment variable found
Fix. require a token
LOWInventory / provenance · inv.hidden_file · CWE-1104
.prettierignore
.prettierignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
registry/.prettierignore
.prettierignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
tests/e2e/cli.test.ts:503
const saved = yaml.load(readFileSync(gooseConfigPath, "utf-8")) as Record<
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
LOWCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
tests/e2e/cli.test.ts:853
const saved = yaml.load(readFileSync(gooseConfigPath, "utf-8")) as Record<
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
LOWCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
tests/e2e/install.test.ts:77
return yaml.load(content) as Record<string, unknown>;
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
LOWCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
tests/formats-remove.test.ts:174
const parsed = yaml.load(content) as Record<string, unknown>;
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/e2e/install.test.ts:26
import { parseSource } from "../../src/source-parser.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/e2e/install.test.ts:30
} from "../../src/installer.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/e2e/install.test.ts:31
import { agents } from "../../src/agents.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/e2e/install.test.ts:32
import { writeConfig, buildConfigWithKey } from "../../src/formats/index.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/e2e/install.test.ts:33
import type { AgentType } from "../../src/types.js";
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/opencode-config.test.ts:518
redirectUri: "http://127.0.0.1:19876/callback",
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/opencode-config.test.ts:601
redirect_uri: "http://127.0.0.1:19876/callback",
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/opencode-config.test.ts:623
redirect_uri: "http://127.0.0.1:19876/callback",
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@clack/prompts, @iarna/toml, chalk, commander, js-yaml, jsonc-parser, @types/js-yaml, @types/node
Why it matters. 14 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
web/package.json
blume
Why it matters. 1 dependency range(s) float
Fix. pin exact versions or ship a lockfile
INFOInventory / provenance · inv.oversize · CWE-1104
registry.json
registry.json
Why it matters. 1142795 bytes not read

Gates applied: no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha e1fcad2b2c03full audit observations/trust-audit/mcp-server/neon-solutions__add-mcp.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-12e1fcad2b2c03BLOCKD69first audit
06

Questions

What is the add-mcp MCP server?

The open MCP config tool - npx add-mcp

What tools does add-mcp expose?

2 in total: 2 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is add-mcp safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (69/100) and found 1 critical or high issue in the source. Each one is listed on this page with the file and line it is on.

What credentials does add-mcp need?

No credential environment variables were found in its source, so it appears to need none.

How does add-mcp run?

It speaks streamable-http, so it runs as a service you connect to over the network. It is published on npm as add-mcp-web.

How current is this page?

The grade is for one exact copy of the source (e1fcad2b2c03), read on 2026-10-12. The repository is watched and re-audited when it changes.

Advertisement