Scan AI agent skills, MCP server packages and MCP configs before you install them. Static analysis.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Look up the verdict the public catalogue has published for an MCP server package on npm or PyPI. Returns found:false when the catalogue has no published verdict for that name; that is not a clean result. Nothing is downloaded or scanned. This request names the package to the server; to match without naming it, download /api/reputation-feed.json and match on your side.
The package name
The package registry
Optional: the version you plan to install; the reply says whether the published verdict is for it
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http skilltriage https://skilltriage.moorai.dev/mcp
Look up the verdict the public catalogue has published for an MCP server package on npm or PyPI. Returns found:false when the catalogue has no published verdict for that name; that is not a clean result. Nothing is downloaded or scanned. This request names the package to the server; to match without naming it, download /api/reputation-feed.json and match on your side.
| Argument | Type | Description |
|---|---|---|
| name* | string | The package name |
| version | string | Optional: the version you plan to install; the reply says whether the published verdict is for it |
| ecosystem* | string | The package registry |
{
"type": "object",
"required": [
"ecosystem",
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 214,
"description": "The package name"
},
"version": {
"type": "string",
"maxLength": 100,
"description": "Optional: the version you plan to install; the reply says whether the published verdict is for it"
},
"ecosystem": {
"enum": [
"npm",
"pypi"
],
"type": "string",
"description": "The package registry"
}
},
"additionalProperties": false
}Check a pasted MCP client config (.mcp.json, claude_desktop_config.json, mcp.json, Codex config.toml). Reports each npm or PyPI launch by its position and how its version is pinned (exact, @latest, a tag or range, none), flags releases on the known-compromised list, and runs static analysis over the text. Server names, package names, arguments, env and header values are never returned or stored; remove secrets before sending anyway. Static analysis only; nothing is run or fetched. Returns a verdict (CLEAN, CAUTION, REVIEW, DO-NOT-INSTALL or NAME-NOT-PUBLISHED), the pinning advice and a permalink.
| Argument | Type | Description |
|---|---|---|
| text* | string | The config file's text |
| filename | string | The config's filename, ending in .json or .toml (default .mcp.json) |
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"maxLength": 1000000,
"description": "The config file's text"
},
"filename": {
"type": "string",
"maxLength": 100,
"description": "The config's filename, ending in .json or .toml (default .mcp.json)"
}
},
"additionalProperties": false
}Download one published package and run static analysis on its code with MoorAI's open-source engine. npm and PyPI packages also get ten MCP pre-install checks on their registry metadata, a reputation score and a known-compromised release check. Static analysis only: the package is never installed and the server is never run. Returns a verdict (CLEAN, CAUTION, REVIEW, DO-NOT-INSTALL or NAME-NOT-PUBLISHED), content-free findings (threat ids, categories, file paths, hashes; never file contents) and a permalink. The package name and version are sent to its registry. A completed analysis is reused for 24 hours; a new one can take a minute and runs one at a time.
| Argument | Type | Description |
|---|---|---|
| ref* | string | npm:<name>[@version], pypi:<name>[==version] or github:<owner>/<repo>/<path>[@ref] (a folder, not a whole repository) |
{
"type": "object",
"required": [
"ref"
],
"properties": {
"ref": {
"type": "string",
"maxLength": 300,
"description": "npm:<name>[@version], pypi:<name>[==version] or github:<owner>/<repo>/<path>[@ref] (a folder, not a whole repository)"
}
},
"additionalProperties": false
}Scan one agent skill or instruction file (SKILL.md, AGENTS.md, a tool.json, any text file) with MoorAI's open-source engine. Static analysis only; nothing is run. The text is written to a temporary directory, scanned and deleted; only its hash, the verdict and content-free findings are kept. Returns a verdict (CLEAN, CAUTION, REVIEW, DO-NOT-INSTALL or NAME-NOT-PUBLISHED), the findings and a permalink.
| Argument | Type | Description |
|---|---|---|
| text* | string | The file's text |
| filename | string | The file's name, which sets how it is analysed (default SKILL.md) |
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"maxLength": 1000000,
"description": "The file's text"
},
"filename": {
"type": "string",
"maxLength": 100,
"description": "The file's name, which sets how it is analysed (default SKILL.md)"
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Oct 31, 2026.