@getvetai/cli 0.3.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -13
- package/dist/index.js +0 -0
- package/package.json +6 -1
- package/dist/utils/fetch.d.ts +0 -6
- package/dist/utils/fetch.js +0 -38
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Security audit CLI for AI skills and MCP servers. Scan, audit, and discover tools before you install them.
|
|
4
4
|
|
|
5
|
-
🌐 **Registry:** [getvet.ai](https://getvet.ai) —
|
|
5
|
+
🌐 **Registry:** [getvet.ai](https://getvet.ai) — 23,000+ AI tools verified and scored
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
@@ -16,12 +16,6 @@ Or run without installing:
|
|
|
16
16
|
npx @getvetai/cli scan .
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
## What's New in v0.3.0
|
|
20
|
-
|
|
21
|
-
- **`vet find --limit <n>`** — control how many results to return (default: 10, max: 48)
|
|
22
|
-
- **`vet find --type <type>`** — filter by `skill`, `mcp`, or `all`
|
|
23
|
-
- **20,000+ tools** in the registry (up from 12K) — now indexing 10 sources including Smithery, mcp.so, MCP Registry, PyPI, npm, GitHub, and more
|
|
24
|
-
|
|
25
19
|
## Commands
|
|
26
20
|
|
|
27
21
|
### `vet scan <target>`
|
|
@@ -99,20 +93,41 @@ vet install @modelcontextprotocol/server-github
|
|
|
99
93
|
vet install -g some-mcp-server
|
|
100
94
|
```
|
|
101
95
|
|
|
102
|
-
##
|
|
96
|
+
## Verification Levels
|
|
103
97
|
|
|
104
|
-
|
|
|
98
|
+
| Level | Badge | Meaning |
|
|
105
99
|
|-------|-------|---------|
|
|
106
|
-
|
|
|
107
|
-
|
|
|
108
|
-
|
|
|
109
|
-
| 0–24 | 🚫 Flagged | Critical security issues found |
|
|
100
|
+
| L2 | ✅ Verified | Installs, boots, tools discovered and tested |
|
|
101
|
+
| L1 | 🔍 Boots | Installs and boots successfully |
|
|
102
|
+
| L0 | ⚠️ Indexed | Cataloged, not yet verified |
|
|
110
103
|
|
|
111
104
|
## What It Detects
|
|
112
105
|
|
|
113
106
|
- **Permissions:** shell execution, file I/O, network access, browser control, database queries, crypto operations
|
|
114
107
|
- **Security issues:** destructive commands, remote code execution, dynamic eval, credential patterns, elevated privileges
|
|
115
108
|
- **MCP-specific:** tool parameter analysis, transport detection (stdio/http/sse), runtime detection
|
|
109
|
+
- **Requirements:** environment variables, API keys, Docker dependencies
|
|
110
|
+
|
|
111
|
+
## API Access
|
|
112
|
+
|
|
113
|
+
Access verified tool schemas programmatically. Create a free API key at [getvet.ai/dashboard](https://getvet.ai/dashboard) → API Keys.
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# Fetch tool schemas
|
|
117
|
+
curl -H "x-api-key: vet_sk_YOUR_KEY" https://getvet.ai/api/v1/tools/TOOL_SLUG/schemas
|
|
118
|
+
|
|
119
|
+
# Or use Bearer token
|
|
120
|
+
curl -H "Authorization: Bearer vet_sk_YOUR_KEY" https://getvet.ai/api/v1/tools/TOOL_SLUG/schemas
|
|
121
|
+
|
|
122
|
+
# Bulk fetch (multiple tools at once)
|
|
123
|
+
curl -X POST \
|
|
124
|
+
-H "x-api-key: vet_sk_YOUR_KEY" \
|
|
125
|
+
-H "Content-Type: application/json" \
|
|
126
|
+
-d '{"slugs":["tool-1","tool-2"]}' \
|
|
127
|
+
https://getvet.ai/api/v1/tools/schemas/bulk
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
See [getvet.ai/get-started](https://getvet.ai/get-started) for full documentation.
|
|
116
131
|
|
|
117
132
|
## Links
|
|
118
133
|
|
package/dist/index.js
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getvetai/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "Security audit CLI for AI skills and MCP servers — scan, audit, and score tools before you install them",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -12,6 +12,11 @@
|
|
|
12
12
|
"README.md",
|
|
13
13
|
"LICENSE"
|
|
14
14
|
],
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "https://github.com/getvetai/cli.git"
|
|
18
|
+
},
|
|
19
|
+
"bugs": "https://github.com/getvetai/cli/issues",
|
|
15
20
|
"homepage": "https://getvet.ai",
|
|
16
21
|
"keywords": [
|
|
17
22
|
"ai",
|
package/dist/utils/fetch.d.ts
DELETED
package/dist/utils/fetch.js
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { readFileSync, existsSync } from 'fs';
|
|
2
|
-
function detect(content, source) {
|
|
3
|
-
if (/SKILL\.md/i.test(source) || /^#\s+.*skill/im.test(content))
|
|
4
|
-
return 'skill';
|
|
5
|
-
if (/mcp|model.context.protocol/i.test(content))
|
|
6
|
-
return 'mcp';
|
|
7
|
-
if (/^#\s+/m.test(content))
|
|
8
|
-
return 'skill';
|
|
9
|
-
return 'unknown';
|
|
10
|
-
}
|
|
11
|
-
export async function fetchTarget(target) {
|
|
12
|
-
if (existsSync(target)) {
|
|
13
|
-
const c = readFileSync(target, 'utf-8');
|
|
14
|
-
return { content: c, type: detect(c, target), name: target.split('/').pop() || target };
|
|
15
|
-
}
|
|
16
|
-
if (/^https?:\/\//i.test(target)) {
|
|
17
|
-
const r = await fetch(target);
|
|
18
|
-
if (!r.ok)
|
|
19
|
-
throw new Error('HTTP ' + r.status);
|
|
20
|
-
const c = await r.text();
|
|
21
|
-
return { content: c, type: detect(c, target), name: target.split('/').pop()?.replace(/\?.*$/, '') || target };
|
|
22
|
-
}
|
|
23
|
-
if (/^[\w-]+\/[\w.-]+$/.test(target) && !target.startsWith('@')) {
|
|
24
|
-
const r = await fetch('https://raw.githubusercontent.com/' + target + '/main/README.md');
|
|
25
|
-
if (r.ok)
|
|
26
|
-
return { content: await r.text(), type: 'mcp', name: target.split('/')[1] };
|
|
27
|
-
throw new Error('GitHub fetch failed: ' + target);
|
|
28
|
-
}
|
|
29
|
-
if (/^@?[\w-]/.test(target)) {
|
|
30
|
-
const r = await fetch('https://registry.npmjs.org/' + encodeURIComponent(target));
|
|
31
|
-
if (r.ok) {
|
|
32
|
-
const d = await r.json();
|
|
33
|
-
return { content: d.readme || '', type: 'mcp', name: d.name || target };
|
|
34
|
-
}
|
|
35
|
-
throw new Error('npm not found: ' + target);
|
|
36
|
-
}
|
|
37
|
-
throw new Error('Unknown target: ' + target);
|
|
38
|
-
}
|