integrations / cursor

Cursor

Attestd works with Cursor via the Model Context Protocol. Once configured, Cursor can check any npm, PyPI, or infrastructure dependency for CVE risk and supply chain compromise as part of your normal workflow. No plugin, no sidebar panel. Just a tool Cursor calls when the context calls for it.

setup

Connect Attestd to Cursor

Cursor reads MCP config from .cursor/mcp.json in your project root (project-level) or from your Cursor user settings (global, applies to all projects). The hosted server at mcp.attestd.io is the recommended option. No Node.js required.

  1. Get an API key from the portal.
  2. Add the block below to .cursor/mcp.json in your project root.
  3. Restart Cursor. All three Attestd tools appear in Cursor's tool list.
.cursor/mcp.json
{
  "mcpServers": {
    "attestd": {
      "url": "https://mcp.attestd.io/mcp",
      "headers": {
        "Authorization": "Bearer your-api-key-here"
      }
    }
  }
}
stdio (local)

Local stdio via npx

If you prefer local execution, use the stdio npm package instead. Requires Node.js 18+.

.cursor/mcp.json
{
  "mcpServers": {
    "attestd": {
      "command": "npx",
      "args": ["-y", "@attestd/mcp"],
      "env": {
        "ATTESTD_API_KEY": "your-api-key-here"
      }
    }
  }
}
system prompt

System prompt

Add this to your project .cursorrules or Cursor system prompt settings. Without it, Cursor may have the tool available but not call it unprompted when you discuss a dependency.

text
You are a security-aware deployment assistant with access to the Attestd MCP server.

Before approving any software dependency, infrastructure component, or package version:
1. When reviewing multiple packages at once, use check_batch_vulnerabilities (up to 100 per call) instead of looping check_package_vulnerability.
2. For a single package, call check_package_vulnerability with the product slug and exact version.
3. Block deployment if riskState is "critical" or "high".
4. Block immediately if activelyExploited is true, regardless of riskState.
5. Block immediately if supplyChainCompromised is true.
6. Block or warn immediately if typosquat.detected is true. Treat kind "hallucination" as an AI-invented or conflated package name; prefer the resembles / likely_intended names instead of installing the requested name.
7. If outsideCoverage is true and typosquat is null, state explicitly that the risk is UNKNOWN. Do not treat it as safe.
8. If patchAvailable is true, include fixedVersion in your recommendation.

Use list_covered_products if you are unsure whether an infrastructure slug is supported (live catalog when the MCP server has an API key).
Use get_cve_details when you need CVSS, EPSS, or KEV context for a specific CVE after a check flags it.
what happens

What Cursor does with Attestd

When you ask Cursor about a dependency, “is this package safe to install,” “can I upgrade to this version,” “check my package.json before I push,” Cursor calls check_package_vulnerability with the package name and version. Attestd returns a structured response. Cursor reads risk_state, actively_exploited, and supplyChainCompromised and gives you a direct answer rather than summarizing a CVSS score.

verify

Verify the connection

Ask Cursor to call list_covered_products. With an API key configured, it returns live catalog data from GET /v1/products. Without a key, it returns the static bundled infrastructure count. For a direct server check:

bash
curl https://mcp.attestd.io/health
# → {"status":"ok","attestd":{...}} when upstream API is reachable
see also