@getvetai/cli 0.2.0 โ†’ 0.3.0

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 CHANGED
@@ -1,8 +1,8 @@
1
1
  # @getvetai/cli
2
2
 
3
- Security audit CLI for AI skills and MCP servers. Scan, audit, and score tools before you install them.
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) โ€” 12,000+ AI tools cataloged and scored
5
+ ๐ŸŒ **Registry:** [getvet.ai](https://getvet.ai) โ€” 20,000+ AI tools cataloged and scored
6
6
 
7
7
  ## Install
8
8
 
@@ -10,58 +10,49 @@ Security audit CLI for AI skills and MCP servers. Scan, audit, and score tools b
10
10
  npm install -g @getvetai/cli
11
11
  ```
12
12
 
13
- ## What's New in v0.2.0
13
+ Or run without installing:
14
14
 
15
- - **Registry integration** โ€” instant results for known tools from the getvet.ai catalog
16
- - **Expanded MCP config discovery** โ€” Claude, Cursor, VS Code, Windsurf, Cline, Zed, Continue, OpenClaw
17
- - **`--offline` flag** โ€” skip registry lookup for air-gapped environments
18
- - **`--deep` flag** โ€” request a deep scan from the registry
19
- - **Better display** โ€” trust score bars, registry links, badge indicators
15
+ ```bash
16
+ npx @getvetai/cli scan .
17
+ ```
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
20
24
 
21
25
  ## Commands
22
26
 
23
27
  ### `vet scan <target>`
24
28
 
25
- Scan a single tool for security issues. Accepts file paths, URLs, npm packages, or GitHub repos.
26
-
27
- For npm packages, the CLI first checks the getvet.ai registry for existing scan results. If a deep scan is available, it returns instantly without local analysis.
29
+ Scan a tool for security issues. Checks the [getvet.ai](https://getvet.ai) registry first for instant results.
28
30
 
29
31
  ```bash
30
32
  # Scan an npm package (checks registry first)
31
33
  vet scan @modelcontextprotocol/server-filesystem
32
34
 
33
- # Skip registry, local analysis only
35
+ # Local analysis only (skip registry)
34
36
  vet scan @modelcontextprotocol/server-filesystem --offline
35
37
 
36
38
  # Request a deep scan from registry
37
39
  vet scan @modelcontextprotocol/server-filesystem --deep
38
40
 
39
- # Scan a local SKILL.md
40
- vet scan ./my-skill/SKILL.md
41
+ # Scan a local project
42
+ vet scan ./my-mcp-server
41
43
 
42
44
  # Scan a GitHub repo
43
45
  vet scan https://github.com/modelcontextprotocol/servers
44
46
 
45
- # Output JSON
47
+ # JSON output
46
48
  vet scan ./SKILL.md --json
47
49
  ```
48
50
 
49
- **Output includes:** trust score, badge (certified/reviewed/unverified/flagged), detected permissions, security issues, risk factors, tools list, and registry link.
50
-
51
51
  ### `vet audit [path]`
52
52
 
53
- Audit all AI tools in a project. Discovers tools from:
53
+ Audit all AI tools in a project. Auto-discovers MCP configurations from:
54
54
 
55
- - `package.json` (MCP dependencies)
56
- - Cursor (`.cursor/mcp.json`)
57
- - Claude Desktop (`claude_desktop_config.json`)
58
- - VS Code (`settings.json` โ†’ `mcp.servers`)
59
- - Windsurf (`mcp.json`)
60
- - Cline (`mcp_settings.json`)
61
- - Zed (`settings.json` โ†’ `mcp`)
62
- - Continue (`config.json` โ†’ `mcpServers`)
63
- - OpenClaw (`openclaw.json`)
64
- - `SKILL.md` files
55
+ **Claude Desktop** ยท **Cursor** ยท **VS Code** ยท **Windsurf** ยท **Cline** ยท **Zed** ยท **Continue** ยท **OpenClaw**
65
56
 
66
57
  ```bash
67
58
  # Audit current directory
@@ -70,7 +61,7 @@ vet audit
70
61
  # Audit a specific project
71
62
  vet audit ./my-project
72
63
 
73
- # Strict mode โ€” exit code 1 if any tool is unverified or flagged
64
+ # Strict mode โ€” exit 1 if any tool is unverified/flagged
74
65
  vet audit --strict
75
66
 
76
67
  # JSON output
@@ -79,12 +70,18 @@ vet audit --json
79
70
 
80
71
  ### `vet find <query>`
81
72
 
82
- Search the getvet.ai registry by description.
73
+ Search the getvet.ai registry for tools by description.
83
74
 
84
75
  ```bash
85
76
  # Search for tools
86
- vet find "file management"
87
- vet find "database query tool"
77
+ vet find "web scraping"
78
+ vet find "database access"
79
+
80
+ # Limit results
81
+ vet find "browser automation" --limit 20
82
+
83
+ # Filter by type
84
+ vet find "file management" --type mcp
88
85
 
89
86
  # JSON output
90
87
  vet find "weather" --json
@@ -92,17 +89,14 @@ vet find "weather" --json
92
89
 
93
90
  ### `vet install <package>`
94
91
 
95
- Install a package with a pre-install security audit. Shows the security report and asks for confirmation if the tool is flagged.
92
+ Install a package with a pre-install security audit.
96
93
 
97
94
  ```bash
98
- # Audit + install npm package
95
+ # Audit + install
99
96
  vet install @modelcontextprotocol/server-github
100
97
 
101
98
  # Install globally
102
99
  vet install -g some-mcp-server
103
-
104
- # Install as OpenClaw skill
105
- vet install --skill weather
106
100
  ```
107
101
 
108
102
  ## Trust Scores
@@ -110,18 +104,21 @@ vet install --skill weather
110
104
  | Score | Badge | Meaning |
111
105
  |-------|-------|---------|
112
106
  | 75+ | โœ… Certified | No critical issues, good practices |
113
- | 50-74 | ๐Ÿ” Reviewed | Some concerns, use with caution |
114
- | 25-49 | โš ๏ธ Unverified | Not yet reviewed or limited info |
115
- | 0-24 | ๐Ÿšซ Flagged | Critical security issues found |
107
+ | 50โ€“74 | ๐Ÿ” Reviewed | Some concerns, use with caution |
108
+ | 25โ€“49 | โš ๏ธ Unverified | Not yet reviewed or limited info |
109
+ | 0โ€“24 | ๐Ÿšซ Flagged | Critical security issues found |
116
110
 
117
111
  ## What It Detects
118
112
 
119
- **Permissions:** shell execution, file read/write, network access, browser control, message sending, device access (camera, screen, location), database queries, crypto operations.
113
+ - **Permissions:** shell execution, file I/O, network access, browser control, database queries, crypto operations
114
+ - **Security issues:** destructive commands, remote code execution, dynamic eval, credential patterns, elevated privileges
115
+ - **MCP-specific:** tool parameter analysis, transport detection (stdio/http/sse), runtime detection
120
116
 
121
- **Security Issues:** destructive commands (`rm -rf`), remote code execution (`curl | bash`), dynamic code eval, credential patterns, elevated privileges (`sudo`), permissive file permissions.
117
+ ## Links
122
118
 
123
- **MCP-specific:** tool parameter analysis, transport detection (stdio/http/sse), runtime detection, environment variable scanning.
119
+ - ๐ŸŒ [getvet.ai](https://getvet.ai) โ€” Browse the registry
120
+ - ๐Ÿ“ฆ [npm](https://www.npmjs.com/package/@getvetai/cli) โ€” Package page
124
121
 
125
122
  ## License
126
123
 
127
- MIT โ€” [getvet.ai](https://getvet.ai)
124
+ MIT
@@ -1,3 +1,5 @@
1
1
  export declare function findCommand(query: string, options: {
2
2
  json?: boolean;
3
+ limit?: string;
4
+ type?: string;
3
5
  }): Promise<void>;
@@ -4,7 +4,7 @@ import { displayFindResults } from '../utils/display.js';
4
4
  export async function findCommand(query, options) {
5
5
  const spinner = ora(`Searching "${query}"...`).start();
6
6
  try {
7
- const items = await searchTools(query);
7
+ const items = await searchTools(query, { limit: Number(options.limit) || 10, type: options.type });
8
8
  const results = items.map((x) => ({
9
9
  name: x.name,
10
10
  slug: x.slug,
package/dist/index.js CHANGED
@@ -30,6 +30,8 @@ program
30
30
  .command('find')
31
31
  .description('Search for tools by description')
32
32
  .argument('<query>', 'Natural language search query')
33
+ .option('--limit <n>', 'Max results to return (default: 10, max: 48)', '10')
34
+ .option('--type <type>', 'Filter by type: skill, mcp, or all (default: all)')
33
35
  .option('--json', 'Output JSON')
34
36
  .action(findCommand);
35
37
  program
@@ -1,3 +1,6 @@
1
1
  export declare function lookupTool(slug: string): Promise<any | null>;
2
- export declare function searchTools(query: string): Promise<any[]>;
2
+ export declare function searchTools(query: string, options?: {
3
+ limit?: number;
4
+ type?: string;
5
+ }): Promise<any[]>;
3
6
  export declare function requestDeepScan(slug: string): Promise<any | null>;
package/dist/utils/api.js CHANGED
@@ -2,7 +2,7 @@ const API_BASE = 'https://getvet.ai';
2
2
  export async function lookupTool(slug) {
3
3
  try {
4
4
  const resp = await fetch(`${API_BASE}/api/skills/${encodeURIComponent(slug)}`, {
5
- headers: { 'User-Agent': 'vet-cli/0.2.0' },
5
+ headers: { 'User-Agent': 'vet-cli/0.3.0' },
6
6
  signal: AbortSignal.timeout(5000),
7
7
  });
8
8
  if (resp.ok)
@@ -13,10 +13,14 @@ export async function lookupTool(slug) {
13
13
  return null;
14
14
  }
15
15
  }
16
- export async function searchTools(query) {
16
+ export async function searchTools(query, options) {
17
17
  try {
18
- const resp = await fetch(`${API_BASE}/api/skills/search?q=${encodeURIComponent(query)}`, {
19
- headers: { 'User-Agent': 'vet-cli/0.2.0' },
18
+ const limit = Math.min(Math.max(Number(options?.limit) || 10, 1), 48);
19
+ const params = new URLSearchParams({ q: query, limit: String(limit) });
20
+ if (options?.type && options.type !== 'all')
21
+ params.set('type', options.type);
22
+ const resp = await fetch(`${API_BASE}/api/skills/search?${params}`, {
23
+ headers: { 'User-Agent': 'vet-cli/0.3.0' },
20
24
  signal: AbortSignal.timeout(5000),
21
25
  });
22
26
  if (resp.ok) {
@@ -33,7 +37,7 @@ export async function requestDeepScan(slug) {
33
37
  try {
34
38
  const resp = await fetch(`${API_BASE}/api/tools/${encodeURIComponent(slug)}/deep-scan`, {
35
39
  method: 'POST',
36
- headers: { 'User-Agent': 'vet-cli/0.2.0', 'Content-Type': 'application/json' },
40
+ headers: { 'User-Agent': 'vet-cli/0.3.0', 'Content-Type': 'application/json' },
37
41
  signal: AbortSignal.timeout(10000),
38
42
  });
39
43
  if (resp.ok)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getvetai/cli",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
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,13 +12,7 @@
12
12
  "README.md",
13
13
  "LICENSE"
14
14
  ],
15
- "repository": {
16
- "type": "git",
17
- "url": "https://github.com/getvetai/vet.git",
18
- "directory": "cli"
19
- },
20
15
  "homepage": "https://getvet.ai",
21
- "bugs": "https://github.com/getvetai/vet/issues",
22
16
  "keywords": [
23
17
  "ai",
24
18
  "security",