kr.ai.vdb/vdb
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@kr.ai.vdb/vdbCheck package 'axios' for vulnerabilities."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
vdb-mcp
mcp-name: kr.ai.vdb/vdb
MCP (Model Context Protocol) server for VDB — the AI-aware vulnerability database. Lets Claude Desktop, Claude Code, Cursor, Cline, Continue, and any MCP client check packages while generating code: known CVEs, slopsquatting (LLM-hallucinated package names an attacker may have registered), CISA KEV status, MCP-server trust profiles, and more.
Quick start
uvx vdb-mcp # or: pipx run vdb-mcpClaude Desktop (claude_desktop_config.json) / Cursor (.cursor/mcp.json):
{
"mcpServers": {
"vdb": { "command": "uvx", "args": ["vdb-mcp"] }
}
}No install at all — point any streamable-HTTP MCP client at the hosted endpoint:
{
"mcpServers": {
"vdb": { "url": "https://vdb.ai.kr/mcp" }
}
}That's it — the server talks to the hosted instance at https://vdb.ai.kr
by default. Anonymous use gets a free per-IP trial; add an API key for
unmetered access (free at https://vdb.ai.kr/signup):
{
"mcpServers": {
"vdb": {
"command": "uvx",
"args": ["vdb-mcp"],
"env": { "VDB_API_TOKEN": "vdb_..." }
}
}
}Related MCP server: GhostFree
Tools
Tool | What it does |
| Check one package (purl + optional version) for vulnerabilities, slop risk, KEV |
| Bulk slopsquatting / risk check for a list of packages |
| Fetch one advisory by ID (CVE-…, GHSA-…, VDB-SLOP-…) |
| Free-text search over the vulnerability corpus |
| Trust tier + permission scopes of a community MCP server |
| Current slopsquatting candidates per ecosystem |
Environment
Variable | Default | Meaning |
|
| VDB instance to query (set for self-hosted) |
| (empty) |
|
|
|
|
|
| SSE port |
Why
LLMs hallucinate package names; attackers register them (slopsquatting).
LLMs also happily recommend packages with known RCEs. VDB gives your agent a
guardrail: one tool call before npm install / pip install. See
https://vdb.ai.kr/connect for the one-line prompt variant that needs no MCP
at all.
License
Elastic License 2.0 — free to use, including inside commercial organizations and CI. The only restrictions: you may not offer this software to third parties as a hosted or managed service, or resell it as a product. Commercial licensing beyond that: dev@egdee.com. API usage is governed by the VDB service terms regardless of how you call it.
Available Tools
10 toolsvdb_check_mcp_serverA
BEFORE recommending a community/unofficial MCP server, check it here. Scope risk is evaluated independently of advisory risk — an unvetted publisher asking for shell or filesystem access is refused even with a clean record. Follow the returned agent_action.
| Name | Required | Description | Default |
|---|---|---|---|
| server_id | Yes | e.g. 'mcp:community/shell-runner' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and it discloses meaningful behavior: scope risk is evaluated independently of advisory risk, and an unvetted publisher requesting shell/filesystem access is refused even with a clean record. It also instructs the agent to follow the returned `agent_action`, which is a direct behavioral directive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each essential: the trigger, the risk model, and the follow-up action. The core instruction is front-loaded with 'BEFORE recommending...' and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter check tool, the description covers when to use it and how to handle the result via `agent_action`. The lack of an output schema is partially mitigated by that instruction, though exact response fields beyond `agent_action` remain unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already provides the server_id example. The description does not add parameter-level detail beyond implying that the server being checked is the MCP server under consideration.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: before recommending a community/unofficial MCP server, check it here. The scope is clearly limited to MCP servers, distinguishing it from sibling tools like vdb_check_package and vdb_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger condition ('BEFORE recommending a community/unofficial MCP server'), making the when-to-use clear. It does not name alternative tools for other asset types, but the scope restriction implies when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vdb_check_packageA
BEFORE recommending or installing any package, check it here. The response carries agent_action: REFUSE (do not add it — relay the because text to the user), CONFIRM (ask the user first), or PROCEED. A failed or rate-limited call also answers REFUSE; never proceed unchecked. Also returns the underlying advisories, slop risk, and KEV status as supporting data.
| Name | Required | Description | Default |
|---|---|---|---|
| purl | Yes | Package URL, e.g. 'pkg:npm/lodash' or 'pkg:pypi/requests' | |
| version | No | Optional version. If supplied, range matching is applied. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well by explaining the agent_action response values and how to handle failed or rate-limited calls (treat as REFUSE). It also lists supporting data returned. It could go further by describing behavior on invalid input or authentication prerequisites, but the core operational behavior is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with the critical instruction front-loaded in the first word. It packs high-value behavioral guidance without redundancy, and every phrase contributes to correct tool usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with no output schema, the description adequately explains how to interpret responses and what supporting data to expect. It could be more complete by detailing the exact response structure or error conditions, but the essential decision-making context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents purl and version, including examples and range-matching behavior. The description adds no parameter-level meaning beyond what the schema provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose: checking a package before recommending or installing it, with a specific verb and resource. However, it does not explicitly differentiate from siblings like vdb_check_packages or vdb_lookup, relying on the name to imply singular vs. plural.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit usage trigger: before recommending or installing any package. It also instructs never to proceed unchecked, which provides clear context. It does not, however, mention alternatives or when not to use it, so it stops short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vdb_check_packagesA
Bulk-check several packages in one call — always prefer this over repeated vdb_check_package. Each result carries its own agent_action (REFUSE / CONFIRM / PROCEED) plus a top-level agent_action for the batch. Follow them; relay because when refusing. Send names EXACTLY as written — do not correct a typo first, the call is the typo test.
| Name | Required | Description | Default |
|---|---|---|---|
| packages | Yes | List of PURLs or 'ecosystem/name' shorthand. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the behavioral contract: each result carries an agent_action (REFUSE/CONFIRM/PROCEED), a top-level agent_action exists, and the agent must follow them and relay 'because' on refusal. It also explains that the call acts as a typo test. However, it doesn't explicitly state whether the operation is read-only or has side effects, though 'check' implies non-destructive. Slight gap, but the disclosed behavior is rich enough to guide correct invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no waste. The purpose and preference are front-loaded, followed by essential behavioral and parameter guidance. Every sentence earns its place; the description is both concise and information-dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a bulk-check tool with no output schema, the description provides sufficient context: it describes the result structure (per-item and batch agent_action), instructs on how to handle results (follow them, relay 'because'), and explains the typo-test nature. An agent has enough information to call this tool correctly and interpret responses, despite not knowing the exact JSON field names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameter type and description are already present. The description adds critical semantic guidance: 'Send names EXACTLY as written — do not correct a typo first, the call is the typo test.' This is beyond the schema and is essential for correct usage, elevating the parameter understanding beyond a simple list.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: bulk-checking multiple packages in one call, and explicitly differentiates it from the sibling vdb_check_package by recommending this over repeated calls. The verb 'bulk-check' and resource 'packages' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit directive to prefer this tool over vdb_check_package, which is a clear usage guideline. It also instructs the agent to send names exactly as written and not to correct typos, framing the call itself as the typo test. This provides both when-to-use and how-to-behave guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vdb_hardenA
Decide whether attacker-controlled data can reach a dangerous operation through this file's transitive dependencies — with no CVE required. Use it on code that passes user input into a third-party API. The file is abstracted LOCALLY first (identifiers renamed, literals reduced to shapes, bodies dropped); only that abstraction and the lockfile are sent, never source text. Returns decided paths, a call-site fix that does not modify the dependency, and the residual risk the fix does not cover.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Python file to analyze. | |
| manifest_path | Yes | uv.lock / poetry.lock / Pipfile.lock / requirements.txt / CycloneDX. Version ranges cannot be analyzed — the answer differs per resolved version. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses important behavioral details beyond the schema: the file is abstracted locally, only the abstraction and lockfile are transmitted, source text is never sent, and the result includes a non-modifying call-site fix plus residual risk. Since annotations are absent, the description carries the full transparency burden and satisfies it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three focused sentences: what it decides, when to use it, and how it behaves safely. Every sentence contributes distinct information with no filler, and the main purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, it still summarizes the return value (decided paths, call-site fix, residual risk) and covers privacy, input constraints, and dependency resolution limitations. An agent has enough context to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds meaningful semantics beyond the schema, especially for manifest_path: it names the accepted lockfile formats and warns that version ranges cannot be analyzed because the answer depends on the resolved version. This prevents a common misuse that the schema alone would not catch.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific analytic goal: deciding whether attacker-controlled data can reach a dangerous operation through transitive dependencies. The 'no CVE required' qualifier sharply distinguishes it from CVE-oriented sibling tools like vdb_lookup and vdb_scan_lockfile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly directs use to 'code that passes user input into a third-party API,' which tells an agent when to apply it. It does not name sibling alternatives by exclusion, but the use context is clear enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vdb_harden_verifyA
After applying a fix returned by vdb_harden, re-abstract the local file and verify the originally issued path. Returns a signed evidence payload bound to the original analysis, the fixed IR fingerprint, and the dependency graph. This proves VDB's decision over the submitted abstraction, not that the abstraction matches a deployed binary.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Fixed Python file. | |
| path_id | Yes | Path id issued by vdb_harden. | |
| manifest_path | Yes | The same resolved manifest used for vdb_harden. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does substantial work: it explains the signed payload, the binding to original analysis, IR fingerprint, dependency graph, and crucially clarifies the limitation ('not that the abstraction matches a deployed binary'). It does not state whether the tool modifies the local file or any side effects, but the read/verify nature is implied and the proof semantics are well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no wasted words. The first sentence front-loads the action and prerequisite, the second describes the output, and the third clarifies the proof's scope. Every sentence adds necessary meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description explains the return payload contents and the intended interpretation. It ties to vdb_harden and the schema already covers parameter origins. The tool's purpose, workflow, output, and limitations are all addressed sufficiently for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: all three parameters (path, manifest_path, path_id) already have descriptions in the schema. The description adds workflow context (e.g., 'fixed file', 'same resolved manifest'), but does not add substantial parameter-level semantics beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('re-abstract the local file and verify the originally issued path') tied to a clear workflow step after vdb_harden. It distinguishes itself from siblings by referencing the exact fix-return flow and explicitly scoping what the verification does and does not prove.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear context of when to use the tool ('After applying a fix returned by vdb_harden'), which orients the agent to the correct point in the workflow. It does not explicitly name alternative tools or list when-not-to-use conditions, but the context is strong enough for proper selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vdb_list_slopsquattingB
List packages currently flagged as slopsquatting candidates in a given ecosystem.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| ecosystem | No | npm | PyPI | crates.io | Go | Maven |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden; 'List' and 'currently flagged' communicate a read-only snapshot of the current candidate set. It does not, however, mention authentication expectations, result ordering, or pagination behavior, so the transparency is only partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler, making it very concise. It earns its place, though it is terse and omits explanatory structure that could have aided invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with two optional parameters, the core call is minimally covered and the schema supplies ecosystem choices and a default limit. The absence of output schema, pagination details, and explicit sibling guidance leaves the context incomplete but not severely so.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%, and the description adds no parameter-level meaning beyond restating 'given ecosystem.' The limit parameter in particular receives no semantic explanation, and the allowed ecosystem values are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and the target ('packages currently flagged as slopsquatting candidates') with an ecosystem scope, which separates it from the sibling check/scan/search tools. It does not explicitly name an alternative, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus vdb_search or vdb_check_package, and no exclusions or prerequisites are mentioned. The phrase 'currently flagged' hints that this is a current-snapshot listing, but that is not enough to guide tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vdb_lookupA
Fetch a single vulnerability by ID or alias (e.g. CVE-2024-1234, GHSA-xxxx-yyyy-zzzz, VDB-SLOP-…).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It states it fetches a single vulnerability, implying a read-only operation, but discloses nothing about behavior on not-found, error handling, authentication requirements, or the response structure. It is minimal and does not go beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the action and resource, and immediately clarifies acceptable input formats. There is no wasted text; every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one parameter, no output schema), but the description does not explain what the response looks like (e.g., full record, metadata) or how errors are handled. While not complex, it leaves some ambiguity about the return value, making a 3 appropriate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only defines 'id' as a string with no description. The tool description compensates by explaining that the id can be a CVE, GHSA, or VDB-SLOP identifier, giving examples. This adds meaning beyond the raw schema, though the VDB-SLOP format is truncated with an ellipsis, leaving some ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Fetch' and names the resource 'a single vulnerability', explicitly stating it works by ID or alias with concrete examples (CVE, GHSA, VDB-SLOP). This clearly distinguishes it from siblings like vdb_search or vdb_check_package, which are for broader searches or package checks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you have a specific identifier, but it does not explicitly contrast with alternatives or state when not to use it. It lacks explicit 'use this instead of X when...' guidance, though the intent is inferable from the tool name and the examples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vdb_scan_lockfileA
BEFORE merging, scan the resolved lockfile. Checking the packages someone chose misses the transitive ones nobody did — which is usually where the risk is. Pass the file contents (package-lock.json, requirements.txt, uv.lock, go.sum, Cargo.lock, a CycloneDX SBOM, …). Returns agent_action: REFUSE means do not merge.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Local runs only (uvx vdb-mcp): read the file here instead of passing content. | |
| content | No | The file's text. | |
| filename | Yes | e.g. 'package-lock.json' — the format is detected from it |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool inspects transitive dependency risk and returns an `agent_action`, with REFUSE meaning do not merge. It stops short of describing other possible actions or side effects, but the key behavior is conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the critical timing ('BEFORE merging'). Every clause adds context: the threat model, what to pass, format examples, and the actionable result.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with no output schema, the description provides the scenario, input mode, and the key return value. It does not exhaustively list all lockfile formats or other possible agent_action values, but it is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds useful examples of supported lockfile formats and reinforces that filename drives format detection, but it does not add much per-parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('scan the resolved lockfile') and a clear resource with timing ('BEFORE merging'). It also distinguishes the tool from package-level checks by explicitly calling out transitive dependencies, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: use before merging to audit transitive dependencies, and tells the agent to pass file contents. It doesn't explicitly name sibling alternatives, but the contrast with 'checking the packages someone chose' makes the selection rationale clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vdb_searchC
Free-text search over the VDB vulnerability corpus.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It only states that the tool performs a free-text search; it does not mention result format, pagination, rate limits, or any side effects. The behavior is minimally transparent and leaves the agent guessing about what happens when the tool is invoked.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (one sentence) but under-specified. While brevity is good, the lack of structured information (e.g., parameter details, usage context, output expectations) makes it insufficiently informative. The sentence is not front-loaded with the most critical operational details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there are no annotations, no output schema, and only a bare input schema with two parameters, the description is incomplete. It does not tell an agent how to form an effective query, what the limit parameter means, or what the response will look like. The tool is simple, but the description still leaves critical gaps for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not elaborate on the parameters. It implies 'query' is the search text and 'limit' likely caps results, but this is not explicitly stated. The description adds almost no value beyond what the raw schema shows, failing to compensate for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('search') and a specific resource ('VDB vulnerability corpus'), making the tool's core function clear. It distinguishes from sibling tools like vdb_check_package and vdb_lookup by indicating a free-text search rather than a structured check or exact lookup, though it does not explicitly contrast with those.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus the many vdb_* siblings. There is no mention of typical use cases, when to prefer it over vdb_lookup or vdb_check_package, or any exclusions. An agent is left to infer context from the tool name and minimal description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vdb_vexA
Given a project directory and its lockfile, work out which of its known advisories can actually be reached by attacker-controlled data, and return an OpenVEX document plus a shareable URL. Use this when a scan produced more findings than anyone can triage. Point path at the SOURCE TREE, not one file: a not_affected determination is only as wide as the code behind it, and a single-file run withholds them all. Reachability is decided at package granularity from static summaries — good for triage order, not proof of non-exploitability.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Project source directory. | |
| manifest_path | Yes | Resolved lockfile for the same project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and excels. It discloses that reachability is decided at package granularity from static summaries, that a single-file run withholds not_affected results, and that output is for triage order, not proof of non-exploitability. No side effects or mutation are implied, and nothing contradicts structured metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph with three sentences, each earning its place: purpose, usage trigger, and a critical caveat. It is slightly longer than minimal, but every clause adds value; no redundancy or filler. The most actionable instruction (source tree vs single file) is front-loaded in the middle, which is acceptable given the flow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with two parameters and no output schema, the description covers everything an agent needs: what it returns (OpenVEX document plus URL), when to use it, how to set parameters correctly, and the limitations of the analysis. It is self-contained and leaves no critical ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are described, but the description adds critical semantics beyond the schema: path must be the SOURCE TREE, not a single file, and this choice affects the breadth of not_affected determinations. This is exactly the kind of parameter-level context an agent needs that the schema does not provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair: it 'works out' which advisories are reachable and returns an OpenVEX document plus a URL. It clearly distinguishes the tool's triage purpose from siblings by stating the trigger ('when a scan produced more findings than anyone can triage') and contrasts it with a single-file run, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use context ('Use this when a scan produced more findings than anyone can triage') and detailed how-to-use guidance: point path at the source tree, not a single file, and explains why (not_affected determinations are as wide as the code behind it). It also clarifies the tool's limitation (good for triage order, not proof), giving clear boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v0.2.0- First observed
vdb_check_mcp_server - First observed
vdb_check_package - First observed
vdb_check_packages - First observed
vdb_harden - First observed
vdb_harden_verify - First observed
vdb_list_slopsquatting - First observed
vdb_lookup - First observed
vdb_scan_lockfile - First observed
vdb_search - First observed
vdb_vex
TDQS
Scored across 10 tools
Each tool has a clearly distinct purpose: single vs bulk package checks, lockfile scanning, vulnerability lookup vs search, MCP server vetting, slopsquatting listing, harden analysis, post-fix verification, and VEX generation. Even the two checking tools are cleanly separated by input cardinality and workflow stage. No ambiguity about which tool to select for a given task.
All tool names follow the consistent `vdb_` prefix with snake_case verb_noun or verb patterns (e.g., check_package, scan_lockfile, harden_verify). The naming makes the action and target predictable across the entire set, with no style mixing or vague verbs.
Ten tools is well within the ideal range for a vulnerability database and supply-chain security server. Each tool earns its place by covering a distinct stage—package vetting, bulk checks, lockfile analysis, lookup/search, MCP server risk, and remediation—without redundant or filler tools.
The tool surface provides full lifecycle coverage: check packages, scan lockfiles for transitive risk, look up and search vulnerabilities, vet MCP servers, list slopsquatting candidates, run reachability analysis, verify fixes, and generate VEX documents. There are no obvious gaps or dead ends for the stated domain.
Maintenance
Related MCP Connectors
Scan any MCP server for tool-poisoning, security, auth & license. Trust score before install.
Security scanner for MCP servers. Detect vulnerabilities, prompt injection, and tool poisoning.
The MCP server that vets MCP servers: identity, risk grade and per-tool risk before you install.
ZEN SecDB MCP server for CVE intelligence, CVSS/EPSS scoring, advisories, SSVC, and package audits.
Related MCP Servers
- AlicenseAqualityBmaintenanceAn MCP server that gives AI assistants the ability to check open-source packages for vulnerabilities, enrich findings with real-world exploit intelligence, and statically analyse whether vulnerable code is actually reachable in your project.31Apache 2.0
- AlicenseAqualityBmaintenanceA local MCP server that scans repository dependencies for known vulnerabilities (CVEs) using OSV.dev, enriches findings with NVD and CISA KEV data, and supports triage, remediation, and accepted risk management directly from an AI coding assistant.630 npm1MIT
- AlicenseNot gradedqualityDmaintenanceMCP server that checks npm and PyPI package health, providing maintenance signals, version info, CVE counts, and alternative suggestions.MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server that verifies npm and PyPI packages before installation, checking for existence, known vulnerabilities, OpenSSF scorecard, and typosquatting, returning an ALLOW/WARN/BLOCK verdict.MIT