mcpField
S
SaveSaveSaveSave

SaveSaveSaveSave

Local
savesavesavesave.xyzSecurity0Updated 1d ago

About SaveSaveSaveSave

SaveSaveSaveSave is a read-only scanner for agents and scripts that assesses messages, npm packages, and crypto addresses before actions are taken. It offers MCP, CLI, and Node.js library interfaces, with local checks and explicitly reported coverage limits.

Key features

  1. 01Scans messages for risky instructions
  2. 02Checks npm packages using registry and OSV data
  3. 03Assesses crypto addresses
  4. 04Compares expected and actual addresses
  5. 05Read-only tools with no dependencies
  6. 06Policy-based install guard

Use cases

  1. 01Review a message before following its instructions
  2. 02Check a package before installing it
  3. 03Assess an address before a payment or token action
  4. 04Gate npm installs in CI or an agent hook

MCP support

Provides `scan_message`, `check_package`, `scan_address`, and `compare_addresses` as tools for MCP clients. Message scans and address comparisons run locally; package and address checks may use the documented network services.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"stefantsezarov-savesavesavesave": {
"command": "npx",
"args": [
"-y",
"savesavesavesave"
]
}
}
}
Run commandnpx -y savesavesavesave

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
npmsavesavesavesave0.1.3

Tools

4

Saved tool list · updated 2w ago

ParameterTypeRequiredDescription
messagestringYesThe text to scan (up to 200,000 characters).

Details

From the project README

SaveSaveSaveSave for agents

The engine behind savesavesavesave.xyz, for AI agents and scripts: check a message, an npm package, a crypto address, or two addresses against each other before acting.

  • MCP server for Claude, Cursor, VS Code, Windsurf and any MCP client
  • CLI for scripts and CI
  • Library for Node.js

Read-only, zero dependencies, and the same code the website runs (CI fails if they drift apart).

MCP server

Claude Code: claude mcp add savesavesavesave -- npx -y savesavesavesave mcp

Other clients: add this to the MCP configuration (for example claude_desktop_config.json or .cursor/mcp.json):

{
  "mcpServers": {
    "savesavesavesave": { "command": "npx", "args": ["-y", "savesavesavesave", "mcp"] }
  }
}
ToolUse it before…Network
scan_messagefollowing instructions in a DM, email, web page, README or promptnone, local
check_packagenpm installnpm registry, OSV.dev
scan_addresspaying, approving or buying a tokenGoPlus Security, our Worker
compare_addressessending to an address copied from historynone, local

CLI

npx savesavesavesave message "Reply with your 12-word phrase to restore access"
npx savesavesavesave package crossenv
npx savesavesavesave address 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 1
npx savesavesavesave compare <expected> <actual>
npx savesavesavesave deps . --markdown      # check a project's npm dependencies

Output is JSON. Exit code: 0 PASS, 1 CAUTION or unknown, 2 FAIL, 3 usage error. The exit code makes it usable as a CI gate.

GitHub Action

Checks a project's direct npm dependencies on pull requests (exact versions from package-lock.json, and flags git, URL or other non-registry sources). Fails the job at FAIL, or also at CAUTION with fail-on: caution.

on:
  pull_request:
    paths: ['**/package.json', '**/package-lock.json']
permissions:
  contents: read
jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: stefantsezarov/[email protected]

Transitive dependencies are not checked. Only names and versions are sent, to npm and OSV.dev.

Library

const s = require('savesavesavesave');
s.scanMessage(text);                          // synchronous, local
await s.checkPackage('[email protected]');
await s.scanAddress(addr, { chain: '1', mode: 'token' });
s.compareAddresses(expected, actual);

Result contract (1.0)

Every result keeps its existing fields (verdict, label, summary, checks, not_checked and so on) and adds one contract block:

"contract": {
  "contract_version": "1.0",
  "status": "completed",
  "assessment": { "risk_level": "none_found", "coverage": "partial", "meaning": "No covered risk was found. This is not a statement that the item is safe." },
  "not_checked": ["The package code was not downloaded or analysed.", "..."],
  "provenance": { "tool_package_version": "0.1.5", "engine_version": "0.2.0", "processed_locally": false, "as_of": "2026-10-14T00:00:00.000Z" }
}
FieldValuesMeaning
statuscompleted, insufficient_evidenceWhether the check produced an assessment at all
assessment.risk_levelhigh, medium, none_found, unknownFAIL, CAUTION, PASS, INSUFFICIENT DATA. There is no safe value
assessment.coveragefull, partial, noneShare of this tool's own checks that returned usable data
not_checkedlist of stringsWhat the check could not see. Never empty
provenance.as_ofISO time or nullWhen remote data was read; null for local checks

The contract carries no allow/deny decision. Whether an action may go ahead is a policy you control, applied on your machine: see guard below.

Pre-install guard

guard checks what an install command would bring in and applies a policy you choose. The scan supplies evidence; the decision is made on your machine and cannot be changed by anything a package, a registry or a web page says.

npx [email protected] guard --mode guard -- npm install some-package
# exit 0 allow, 1 review, 2 deny, 3 usage error
ModeFAILCAUTION or not enough dataCheck failed or timed outNot from the registry (git, URL, path)PASS with partial coverage
observeallow (reports deny)allowallowallowallow
guard (default)denyreviewreviewreviewallow
strictdenydenydenydenydeny

It understands npm, pnpm, yarn and bun installs, npm ci and a bare npm install (it then checks package.json and the lockfile), npx/pnpm dlx/yarn dlx/bunx, and installs chained with &&, ; or |. The mode can also be set with SAVESAVESAVESAVE_GUARD_MODE.

Claude Code hook

Add to .claude/settings.json in your project (pin the version you reviewed):

{
  "hooks": {
    "PreToolUse": [
      { "matcher": "Bash", "hooks": [ { "type": "command", "command": "npx -y [email protected] hook claude-code --mode guard" } ] }
    ]
  }
}

For strict, also add "timeout": 120 and "onFailure": "block" to the hook entry (Claude Code 2.1.295 or later). Without onFailure, Claude Code runs the command if the hook itself times out or cannot start, for example when npx cannot download the package.

The hook only ever answers deny (FAIL) or ask (review). It never answers allow, so a clean result cannot skip your own permission prompt. Commands without an install pass through untouched.

What it does not do

The guard sees the commands it is shown. An agent that installs through a route the hook does not inspect, such as a shell script file, a package manager it does not know, or a downloaded binary, is not stopped by it. For hard enforcement, add network or filesystem controls on the host. It never downloads or runs package code.

Security model

  • Read-only. No tool writes files, runs commands, or holds keys or secrets. There is nothing here that can change the website or its repository.
  • Local first. Message scans and address comparisons never leave the machine.
  • Network allowlist, enforced in code: api.gopluslabs.io, our Worker, registry.npmjs.org, api.npmjs.org, api.osv.dev. HTTPS only, redirects refused, and a 20-second timeout for each response to start.
  • Untrusted output is labelled. Results quote the scanned text and third-party data. Every result says so, so an agent does not follow instructions hidden inside it.
  • Strict inputs. Unknown tool arguments are rejected, and input is capped at 200,000 characters.
  • Zero dependencies. A security tool should not bring its own supply chain.

Limits

Verdicts are automated risk assessments, not guarantees; PASS means no covered risk was found. Every result lists what was not checked.

Full reference for agent developers: https://savesavesavesave.xyz/agents

Licence: AGPL-3.0-only. Source: https://github.com/stefantsezarov/SaveSaveSaveSave

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.