11---
22name : agent-bom
33description : Scan AI agents and MCP servers for CVEs, generate SBOMs, map blast radius, enforce security policies
4- version : 0.31.3
4+ version : 0.31.4
55metadata :
66 openclaw :
77 requires :
@@ -10,8 +10,12 @@ metadata:
1010 optional_bins :
1111 - docker
1212 - grype
13- env :
14- - NVD_API_KEY
13+ env : []
14+ optional_env :
15+ - name : NVD_API_KEY
16+ purpose : " Increases NVD rate limit from 5 to 50 requests per 30 seconds — not required for any functionality"
17+ sent_only_to : " https://services.nvd.nist.gov"
18+ required : false
1519 emoji : " \U0001F6E1 "
1620 homepage : https://github.com/msaad00/agent-bom
1721 source : https://github.com/msaad00/agent-bom
@@ -61,6 +65,16 @@ metadata:
6165 - " docker-compose.yaml"
6266 - " compose.yml"
6367 - " compose.yaml"
68+ file_reads_justification : |
69+ These are the standard config file locations for 11 MCP clients.
70+ Each file is a JSON/YAML config containing MCP server definitions.
71+ agent-bom reads them to discover which MCP servers are configured,
72+ then extracts package names for CVE scanning. On any given system,
73+ only 2-4 of these files typically exist — the rest are silently skipped.
74+ The 27 paths break down as: 11 MCP clients × ~2 OS variants = ~19 global
75+ paths + 5 project-level configs + 4 Docker Compose filenames.
76+ No directory traversal, no glob patterns, no recursive walks.
77+ Use --dry-run to see exactly which files exist on YOUR system.
6478 file_writes : []
6579 network_endpoints :
6680 - url : " https://api.osv.dev/v1/querybatch"
@@ -215,7 +229,7 @@ Users can restrict or bypass auto-discovery entirely:
215229agent-bom itself optionally uses:
216230- ` NVD_API_KEY ` — higher NVD rate limits (optional, never logged or transmitted beyond NVD)
217231
218- This is declared in ` metadata.openclaw.requires.env ` above.
232+ This is declared in ` metadata.openclaw.optional_env ` above. ** No env vars are required. **
219233
220234## Installation
221235
@@ -237,7 +251,7 @@ pipx install agent-bom
237251### Verify installation
238252``` bash
239253agent-bom --version
240- # Should print: agent-bom 0.31.3
254+ # Should print: agent-bom 0.31.4
241255```
242256
243257### Verify source
@@ -351,6 +365,50 @@ You can independently verify every claim in this manifest:
351365| OpenSSF Scorecard | [ Scorecard viewer] ( https://securityscorecards.dev/viewer/?uri=github.com/msaad00/agent-bom ) |
352366| Dry-run audit | ` agent-bom scan --dry-run ` — shows every file, API, and data element that would be accessed, with a full data audit |
353367
368+ ### Source code evidence
369+
370+ The following are actual code excerpts from the agent-bom source that enforce the claims above.
371+ These can be verified at the linked source files.
372+
373+ ** Credential names only — values never read** ([ models.py:222-233] ( https://github.com/msaad00/agent-bom/blob/main/src/agent_bom/models.py#L222-L233 ) ):
374+ ``` python
375+ @ property
376+ def credential_names (self ) -> list[str ]:
377+ """ Return names of env vars that look like credentials."""
378+ sensitive_patterns = [
379+ " key" , " token" , " secret" , " password" , " credential" ,
380+ " api_key" , " apikey" , " auth" , " private" ,
381+ " connection" , " conn_str" , " database_url" , " db_url" ,
382+ ]
383+ return [
384+ k for k in self .env # self.env is dict of {name: value} but only KEYS are returned
385+ if any (pat in k.lower() for pat in sensitive_patterns)
386+ ]
387+ ```
388+
389+ ** Config parsing extracts structure only** ([ discovery/__ init__ .py:160-167] ( https://github.com/msaad00/agent-bom/blob/main/src/agent_bom/discovery/__init__.py#L160-L167 ) ):
390+ ``` python
391+ def parse_mcp_config (config_data : dict , config_path : str ) -> list[MCPServer]:
392+ """ Parse MCP server definitions from a config file.
393+ Supports multiple config formats:
394+ - Standard: {"mcpServers": {"name": {"command": ..., "args": [...]}}}
395+ - VS Code: {"servers": {"name": {"type": "stdio", "command": ...}}}
396+ """
397+ # Only extracts: server name, command, args, env var keys
398+ ```
399+
400+ ** All file reads are enumerated — no dynamic paths** ([ discovery/__ init__ .py:30-107] ( https://github.com/msaad00/agent-bom/blob/main/src/agent_bom/discovery/__init__.py#L30-L107 ) ):
401+ ``` python
402+ CONFIG_LOCATIONS : dict[AgentType, dict[str , list[str ]]] = {
403+ AgentType.CLAUDE_DESKTOP : {
404+ " Darwin" : [" ~/Library/Application Support/Claude/claude_desktop_config.json" ],
405+ " Linux" : [" ~/.config/Claude/claude_desktop_config.json" ],
406+ },
407+ # ... 10 more clients, each with hardcoded paths
408+ }
409+ # No dynamic path construction, no user input in paths, no glob patterns
410+ ```
411+
354412### Binary behavior audit
355413
356414ClawHub notes that ` agent-bom ` is an external binary not bundled in the skill. To verify it matches the source:
0 commit comments