---
title: "Check an MCP server or package for registry risk"
method: POST
path: "/v1/metered/mcp-registry-risk"
tags: ["Agent and MCP security"]
---

# Check an MCP server or package for registry risk

`POST /v1/metered/mcp-registry-risk`

## Request

- Base URL: `https://api.relayshield.net`
- URL: `https://api.relayshield.net/v1/metered/mcp-registry-risk`
- Auth: one of:
  - API key in header `X-RS-API-KEY`
  - API key in header `X-API-Key`

Reputation for the MCP ecosystem, where dedicated security tooling is still minimal industry-wide. Checks an MCP server URL or package name against RelayShield's criminal IOC corpus, runs typosquat and near-miss detection against well-known MCP domains (edit distance 2 or less), and checks domain registration age via RDAP.

**A LOW verdict means no red flags, not verified safe.** Each check can only find what it looks for, and a brand-new malicious server that has not yet been reported will return LOW. When `findings` is empty the response carries a `note` saying exactly this.

**Billing.** $0.35 per successful call, metered to your card. Failed calls are never billed. Threat Intelligence subscribers and AWS Marketplace bundle customers call this at no extra charge. Unlike the other metered endpoints this one does not check a prepaid credit balance before running, so it never returns `402`.

**Note.** Each of the three checks is independently fault-tolerant: an unreachable RDAP or IOC lookup is skipped rather than failing the call, so it lowers the verdict instead of raising an error. Combined with the point above, treat `LOW` as 'nothing found by the checks that ran'. Also billed as an AWS Marketplace Bundle D dimension for bundle customers.

## Request body

- object: At least one of: `server_url`, `package_name`.
  - `server_url` string, uri: Full MCP server URL. The hostname is extracted and a leading `www.` stripped. Supplying this enables all three checks.
  - `package_name` string: Package name, used when there is no server URL. Package-name-only checks are limited to the IOC corpus, which has no dedicated MCP package coverage yet, so a name-only call always returns at least a `package_name_only` finding recording that reduced coverage.

## Response `200`

Success. `ok` is true and `data` holds the result.

- object
  - `ok` true, required
  - `data` object, required
    - `queried` string: The `server_url` you supplied, or `package_name` when no URL was given.
    - `domain` string: Hostname extracted from `server_url`. Empty on a package-name-only call.
    - `verdict` 'CRITICAL' | 'HIGH' | 'MEDIUM' | 'LOW': Highest finding severity, or `LOW` when there are none. `LOW` means nothing was found, not that the server is safe.
    - `findings` object[]: Every check that fired. Empty when nothing was found.
      - `type` 'known_malicious_ioc' | 'typosquat_suspected' | 'newly_registered_domain' | 'package_name_only': `known_malicious_ioc` (CRITICAL) the domain is in RelayShield's criminal IOC corpus. `typosquat_suspected` (HIGH) within edit distance 2 of a well-known MCP domain. `newly_registered_domain` (MEDIUM) registered under 30 days ago. `package_name_only` (LOW) not a risk signal, a coverage warning that no URL was supplied.
      - `severity` 'CRITICAL' | 'HIGH' | 'MEDIUM' | 'LOW': Severity of this finding.
      - `detail` string: Plain-English explanation, including the matched domain or edit distance.
    - `note` string, nullable: Present and non-null only when `findings` is empty, stating that absence of findings means unknown rather than verified safe. null when there are findings.

## Other responses

- `400`: Neither `server_url` nor `package_name` supplied.
- `401`: Missing or invalid API key.
- `405`: Wrong HTTP method. Every endpoint is POST.
- `429`: A shared demo key's daily quota is exhausted. Does not apply to your own key.

---

[API](https://skmtc.dev/relayshield/apis/relayshield-api.md) · [All operations](https://skmtc.dev/relayshield/apis/relayshield-api/llms.txt) · [OpenAPI document](https://skmtc.dev/relayshield/apis/relayshield-api/revisions/4d4721b936dd?raw)
