SkanQRCode

com.skanqrcodev1.0.0Updated Oct 7, 2026

Check whether a URL or IP is safe before an AI agent fetches or opens it.

VerifiedSTDIODesktop onlySecurity & Monitoring

Overview

AI-generated overview

Lets an assistant check whether a URL or IP address is malicious before fetching, opening or sharing it.

What it does
The server exposes a check_url tool that classifies a full URL or IP address and returns a structured verdict with an action of block, warn or allow, plus reason codes and the resolved final URL. A get_usage tool reports the monthly quota, requests used and requests left. It is read-only: allow and block lists are managed in the provider's dashboard, not through the assistant.
When to use it
Useful when an assistant handles links from untrusted sources such as QR codes, emails, chat messages, web pages or other tools' output and should verify them before fetching or passing them on. Also useful for tracking remaining monthly check quota.
Requirements
Runs locally over stdio via the npm package @skanqrcode/mcp-server, so Node.js 20 or later is needed. A SkanQRCode API key is required in the SKANQRCODE_API_KEY environment variable; a free sk_test_ key allows 1,000 checks a month. An optional SKANQRCODE_BASE_URL must use https. Network access to the API is required.
Before you install
The API key is a secret and is sent to the provider's API over HTTPS. Each check_url call consumes one unit of the monthly quota. Verdicts from an sk_test_ key are sandbox results not licensed for production. The optional userId field should be an opaque identifier, never an email or name. The server is read-only and cannot change allow or block lists.

Installation

In SourceWeft

  1. Open SkanQRCode in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

@skanqrcode/mcp-server

The official SkanQRCode MCP server. It gives an AI agent a URL safety check to run before it fetches, opens or hands a user a link from an untrusted source: a QR code, an email, a chat message, a web page or another tool's output.

It runs locally over stdio, so it works with Claude Desktop, Claude Code, Cursor, Windsurf and any other MCP client that starts a local process.

Setup

  1. Create an API key at app.skanqrcode.com. The free plan gives you an sk_test_ key with 1,000 checks a month, no card required.
  2. Add the server to your MCP client.

Claude Desktop (claude_desktop_config.json), Cursor and most other clients:

json
{  "mcpServers": {    "skanqrcode": {      "command": "npx",      "args": ["-y", "@skanqrcode/mcp-server"],      "env": { "SKANQRCODE_API_KEY": "sk_test_..." }    }  }}

Claude Code:

bash
claude mcp add skanqrcode --env SKANQRCODE_API_KEY=sk_test_... -- npx -y @skanqrcode/mcp-server

Requires Node.js 20 or later.

Tools

check_url

Classifies a URL or IP address. Input:

FieldRequiredDescription
targetyesThe full URL (with scheme) or IP address, up to 4,096 characters.
userIdnoOpaque id of the end user the check is for, for per-user caching. Never an email or a name.

Returns the API's verdict as structured content:

json
{  "verdict": "malicious",  "action": "block",  "mode": "url",  "reasons": ["ACTIVE_THREAT_FEED_MATCH", "KNOWN_MALWARE_MATCH"],  "finalUrl": null,  "cached": false,  "executionTimeMs": 38,  "environment": "production",  "licensedForProduction": true,  "requestId": "req_01j9z8qaenp0s2c4d6f8g0h1jk"}

The agent should branch on action: block means do not fetch or open it, warn means ask the user first, allow means go ahead. Each call uses one unit of your monthly quota.

get_usage

Returns the monthly quota, requests used and requests left (optional month as YYYY-MM). It does not use quota.

Errors

A failed call returns isError: true with { "error": { "code": "...", "message": "...", "requestId": "...", "retryAfterSeconds": 12 } }. For rate_limited, wait retryAfterSeconds; for quota_exceeded, stop and tell the user.

Why there are no list tools

The server is read-only. Text an agent reads can try to steer it, and an agent that could add allow-list entries could be talked into approving a phishing domain. Manage allow and block lists in the dashboard.

Environment variables

VariableRequiredDefault
SKANQRCODE_API_KEYyes—
SKANQRCODE_BASE_URLnohttps://api.skanqrcode.com (must be https://)

Your key is sent only to the API, only over HTTPS, and is never logged.

Sandbox keys

With an sk_test_ key the result says environment: "sandbox" and licensedForProduction: false: the verdicts are real, but the free plan is licensed for testing only. Use an sk_live_ key from a paid plan in production.

Development

bash
npm installnpm test          # unit tests and an MCP client/server round tripnpm run buildSKANQRCODE_API_KEY=sk_test_... npx @modelcontextprotocol/inspector node dist/index.js

API reference: docs.skanqrcode.com.

Source: mcp/server/README.md at commit bda1f2a

Tools

0
Tool metadata has not been indexed yet.

Version history

1
  1. v1.0.0LatestOct 7, 2026