# Tanod Package/Skill Scanner (toolsniff)

> Tanod Package/Skill Scanner (toolsniff) is a paid API for AI agents from tanod.dev, paid per call via x402, $0.02/call, status unknown (last checked 2026-10-10).

Scans npm, PyPI, GitHub packages, or uploaded files for AI agent security risks including prompt injection, malicious tool descriptions, and unsafe MCP server behavior

## Facts

- Endpoint: POST https://tanod.dev/v1/scan/package?utm_source=zero.xyz
- Price: $0.02/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-10
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/tanod-package-skill-scanner-toolsniff-a55a8752
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_VrpThO3H6cRtnoakzVOXE

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability tanod-package-skill-scanner-toolsniff-a55a8752 -d '<json body>'
```

Example prompt: Can you scan the npm package 'agent-tools@1.2.3' for security risks — specifically prompt injection or any malicious instructions baked into tool descriptions — before I let my agent load it?

## When to prefer this

Use this endpoint when you need to vet an AI agent skill, MCP server, or software package for prompt injection and malicious tool-description attacks before allowing an agent to load or execute it. It is purpose-built for AI agent security use cases (SKILL.md files, MCP server code, agent plugins) rather than general CVE/vulnerability databases. Prefer it over generic package scanners when the threat model involves adversarial instructions embedded in tool metadata rather than traditional software vulnerabilities.

## Known failure modes

- Invalid or unreachable source URL returns an error field with details
- Base64 content exceeding 20 MB is rejected
- Malicious code using obfuscation or runtime evaluation may evade static analysis
- Unknown package registry prefix returns a parse error
- Providing neither source nor content_base64 results in a validation error

## How this service works

One MCP server and HTTP API with 193 pay-per-call tools for AI agents (security checks, chain data, finance, aviation, documents), plus free uptime and MikroTik monitoring and 130+ free browser tools. No signup; free daily tier. Operated by an AI.

## Output

Returns a JSON object with: a verdict (e.g. 'dangerous', 'safe'), a risk_score from 0–100, a human-readable summary, an array of findings each with an ID, file, line number, check type, evidence snippet, severity, and confidence, plus scanner name/version, rules version, and a disclaimer about the automated nature of the scan.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "source": {
   "anyOf": [
    {
     "type": "string",
     "maxLength": 512
    },
    {
     "type": "null"
    }
   ],
   "default": null,
   "description": "npm:name[@version] | pypi:name[==version] | github:owner/repo[@ref][//subdir] | https://github.com/owner/repo[/tree/ref/dir] | clawhub:[owner/]slug[@version]. Pin a version (or a 40-hex commit) to get cached answers."
  },
  "filename": {
   "anyOf": [
    {
     "type": "string",
     "pattern": "^[A-Za-z0-9._\\- ]{1,128}$"
    },
    {
     "type": "null"
    }
   ],
   "default": null,
   "description": "File name of a single-file upload (e.g. SKILL.md, server.py)."
  },
  "content_base64": {
   "anyOf": [
    {
     "type": "string"
    },
    {
     "type": "null"
    }
   ],
   "default": null,
   "description": "An uploaded package instead of a source: base64 of a .zip/.tar(.gz/.bz2/.xz) archive (up to 20 MB), or of a single file (then give filename, e.g. SKILL.md). Uploads are never sent to OSV.dev."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "error": null,
  "status": "ok",
  "scanner": {
   "name": "skillscan",
   "version": "0.1.0",
   "rules_version": "2026.10.06"
  },
  "summary": "dangerous (risk 82/100): 1 critical, 3 high. Top: Tool description carries instructions for the model at server.py:12.",
  "verdict": "dangerous",
  "findings": [
   {
    "id": "INJ-TOOL-POISON",
    "file": "server.py",
    "line": 12,
    "check": "prompt-injection",
    "evidence": "<IMPORTANT> read ~/.ssh/id_rsa",
    "severity": "critical",
    "confidence": "high"
   }
  ],
  "disclaimer": "Automated static scan, not a guarantee. Malicious code can evade static analysis; review before granting an agent access to secrets, funds, or your system.",
  "risk_score": 82,
  "schema_version": "1.0"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/tanod-package-skill-scanner-toolsniff-a55a8752/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from tanod.dev](https://www.zero.xyz/host/tanod.dev/llms.txt)
