Skip to main content
Glama
rapid7

Rapid7 Bulk Export MCP Server

Official
by rapid7

Rapid7 Bulk Export MCP

AI-powered analysis for Rapid7 Command Platform data using MCP (Model Context Protocol) & AgentSkills.

This tool is a best effort support, due to the bespoke and ever-changing nature of tools and workflows which would utilize this tool we cannot provide support or guidance outside of the MCP Code & AgentSkill Content.

What is This?

This tool exports data from Rapid7 Command Platform, via the Rapid7 Bulk Export API and makes it queryable in GenAI and Agentic workflows.

  • MCP Server: Embeds tools which allow the getting, processing and querying of data

  • Agent Skill / Kiro Power: Gives additional context, schema knowledge and instructions on how to use the MCP tools

  • DuckDB Database: Local file-based database to allow structured rapid querying

Related MCP server: tenable-mcp

Features

  • AI-Powered Analysis: Use with Kiro, Claude Desktop, or any MCP-compatible AI assistant

  • On-Demand Data Loading: Automatically fetch and load data from Rapid7

  • Export Reuse: Automatically reuses exports from the same day to avoid redundant API calls

  • Natural Language Queries: Ask questions in plain English

  • SQL Query Execution: Run complex SQL queries against vulnerability, asset and other data

  • Multiple Export Types: Vulnerabilities (with vulnerability exceptions), policies, remediations, and installed asset software

  • Multi-Month Remediation: Request any date range — it is split into ≤31-day windows and loaded for you in the background as a single job

  • Schema Exploration: Discover available data fields

  • Statistics & Insights: Get instant summaries and distributions

  • Security Lockdown: User queries are sandboxed — filesystem and network access disabled at the DuckDB engine level

  • Docker Support: Run as a containerized HTTP service for remote or shared deployments

Local vs Remote

You can run the MCP server in two modes depending on your setup:

Local (stdio) — The AI client spawns the server as a child process and communicates over stdin/stdout. This is the default and simplest option. The server runs on your machine, the database lives next to it, and everything stays local. Best for individual use on a workstation or laptop.

Remote (Docker / streamable HTTP) — The server runs as a containerized HTTP service exposing a single /mcp endpoint. Clients connect over the network via URL. Best for shared environments, team use, or when you want the server running on dedicated infrastructure separate from your AI tool. It should be noted that this will make data shareable between all users of the remote mcp, you should authenticate and secure the /mcp endpoint.

Both modes use the same MCP tools and security controls. The only difference is how the client connects.

Quick Start

0. Get Your Rapid7 API Key and Region

Before you begin, you'll need credentials from your Rapid7 Insight Platform account.

Generate an API Key:

Important: The API key must be generated by a Platform Admin. The bulk export API returns all vulnerability data across the entire platform, so admin-level access is required.

  1. Log in to the Rapid7 Insight Platform as a Platform Admin

  2. Navigate to Administration → API Key Management

  3. Choose the key type:

    • Organization Key (recommended): Full admin permissions (requires Platform Admin role)

    • User Key: Inherits your account permissions — must be created by a Platform Admin to have sufficient access for bulk exports

  4. Click "Generate New Admin Key" (or "Generate New User Key" if using a Platform Admin account)

  5. Select your organization and provide a name for the key

  6. Copy the key immediately - you won't be able to view it again!

Find Your Region:

Your region determines which API endpoint to use. To find your region:

  1. Go to insight.rapid7.com and sign in

  2. Look for the "Data Storage Region" tag in the upper right corner below your account name

For more details, see:

1. Set Up Your AI Tool

Choose your AI tool below. Each guide walks through installing the MCP server, adding the Agent Skill, and verifying the connection.

Securing your API key: Avoid storing your RAPID7_API_KEY in plaintext on disk. Use a secrets manager to inject the key at runtime — for example, 1Password CLI, Bitwarden CLI, macOS Keychain, Windows Credential Manager, or PowerShell SecretManagement. With 1Password you can set "command": "op" and "args": ["run", "--", "rapid7-mcp-server"] with op:// secret references in the env block — the key is resolved from your vault and never written to config files. Adapt this pattern to whatever password manager you use.

Install the MCP Server

  1. Open Claude Desktop and navigate to Customize → Connectors

  2. Search for "Rapid7 Bulk Export" in the connectors directory

  3. Click Install and provide your RAPID7_API_KEY and RAPID7_REGION when prompted

Installing from the Connectors directory

Install the Agent Skill

  1. Go to Customize -> Skills

  2. Click the (+)

  3. Create Skill

  4. Upload Skill

  5. Upload the latest skill zipfile from the release on the right

Installing the agent skill

Verify

  1. Try: /rapid7-bulk-export-analysis-expert Load the latest vulnerability data from Rapid7

Install the MCP Server

# Using uv
uv pip install git+https://github.com/rapid7/rapid7-bulk-export-mcp.git

# Or using pip
pip install git+https://github.com/rapid7/rapid7-bulk-export-mcp.git

Configure

Create or edit .kiro/settings/mcp.json:

{
  "mcpServers": {
    "rapid7-bulk-export": {
      "command": "rapid7-mcp-server",
      "args": [],
      "env": {
        "RAPID7_API_KEY": "your-api-key-here",
        "RAPID7_REGION": "your-region"
      }
    }
  }
}

Install the Agent Skill

  1. Open the Kiro Skills panel (Command Palette → "Kiro: Open Skills")

  2. Click "Install from GitHub"

  3. Enter the repository URL: https://github.com/rapid7/rapid7-bulk-export-mcp/rapid7-bulk-export-skill

Activate the skill in chat with #rapid7-bulk-export-skill.

Verify

  1. Restart or reconnect MCP servers (Command Palette → "MCP: Reconnect All Servers")

  2. Check MCP panel for "rapid7-bulk-export" server (should show "Connected")

  3. Try: #rapid7-bulk-export-skill Load the latest vulnerability data from Rapid7

Install the MCP Server

# Using uv
uv pip install git+https://github.com/rapid7/rapid7-bulk-export-mcp.git

# Or using pip
pip install git+https://github.com/rapid7/rapid7-bulk-export-mcp.git

Configure

Use the Claude Code CLI:

claude mcp add --transport stdio \
  --env RAPID7_API_KEY=your-api-key-here \
  --env RAPID7_REGION=your-region \
  rapid7-bulk-export \
  -- rapid7-mcp-server

Or manually edit ~/.claude.json (user scope) or .mcp.json (project scope):

{
  "mcpServers": {
    "rapid7-bulk-export": {
      "command": "rapid7-mcp-server",
      "args": [],
      "env": {
        "RAPID7_API_KEY": "your-api-key-here",
        "RAPID7_REGION": "your-region"
      }
    }
  }
}

Use --scope user for cross-project access or --scope project for team sharing.

Install the Agent Skill

# User-level (available in all projects)
mkdir -p ~/.claude/skills/rapid7-bulk-export
curl -sL https://raw.githubusercontent.com/rapid7/rapid7-bulk-export-mcp/main/rapid7-bulk-export-skill/SKILL.md \
  -o ~/.claude/skills/rapid7-bulk-export/SKILL.md

# Or project-level (only in current project)
mkdir -p .claude/skills/rapid7-bulk-export
curl -sL https://raw.githubusercontent.com/rapid7/rapid7-bulk-export-mcp/main/rapid7-bulk-export-skill/SKILL.md \
  -o .claude/skills/rapid7-bulk-export/SKILL.md

Or use npx skills to install directly:

npx skills install https://github.com/rapid7/rapid7-bulk-export-mcp

Claude Code will automatically discover and use the skill when relevant.

Verify

  1. Restart Claude Code or reload the window

  2. Type /mcp in chat to check server status

  3. Verify "rapid7-bulk-export" appears in the list

  4. Try: Load the latest vulnerability data from Rapid7

Install the MCP Server

# Using uv
uv pip install git+https://github.com/rapid7/rapid7-bulk-export-mcp.git

# Or using pip
pip install git+https://github.com/rapid7/rapid7-bulk-export-mcp.git

Configure

Edit MCP settings in VS Code:

  • Use Command Palette: "MCP: Edit Configuration"

  • Or manually edit: .vscode/mcp.json (workspace) or user settings

{
  "mcpServers": {
    "rapid7-bulk-export": {
      "command": "rapid7-mcp-server",
      "args": [],
      "env": {
        "RAPID7_API_KEY": "your-api-key-here",
        "RAPID7_REGION": "your-region"
      }
    }
  }
}

Install the Agent Skill

# Project-level (recommended, stored in repository)
mkdir -p .github/skills/rapid7-bulk-export
curl -sL https://raw.githubusercontent.com/rapid7/rapid7-bulk-export-mcp/main/rapid7-bulk-export-skill/SKILL.md \
  -o .github/skills/rapid7-bulk-export/SKILL.md

# Or user-level (available across all projects)
mkdir -p ~/.copilot/skills/rapid7-bulk-export
curl -sL https://raw.githubusercontent.com/rapid7/rapid7-bulk-export-mcp/main/rapid7-bulk-export-skill/SKILL.md \
  -o ~/.copilot/skills/rapid7-bulk-export/SKILL.md

Or use npx skills to install directly:

npx skills install https://github.com/rapid7/rapid7-bulk-export-mcp

Use the skill as a slash command: /rapid7-bulk-export.

Verify

  1. Reload VS Code window

  2. Check MCP status in the status bar or output panel

  3. Try: Load the latest vulnerability data from Rapid7

Install the MCP Server

# Using uv
uv pip install git+https://github.com/rapid7/rapid7-bulk-export-mcp.git

# Or using pip
pip install git+https://github.com/rapid7/rapid7-bulk-export-mcp.git

Configure

Add the server using the Codex CLI:

codex mcp add rapid7-bulk-export \
  --env RAPID7_API_KEY=your-api-key-here \
  --env RAPID7_REGION=your-region \
  -- rapid7-mcp-server

Or manually edit ~/.codex/config.toml:

[mcp_servers.rapid7-bulk-export]
command = "rapid7-mcp-server"
args = []
enabled = true

[mcp_servers.rapid7-bulk-export.env]
RAPID7_API_KEY = "your-api-key-here"
RAPID7_REGION = "your-region"

If using environment variables from your shell instead of hardcoding them:

[mcp_servers.rapid7-bulk-export]
command = "rapid7-mcp-server"
args = []
enabled = true
env_vars = ["RAPID7_API_KEY", "RAPID7_REGION"]

Verify

  1. List configured servers: codex mcp list

  2. Check server details: codex mcp get rapid7-bulk-export

  3. Try: Load the latest vulnerability data from Rapid7

Install the MCP Server

# Using uv
uv pip install git+https://github.com/rapid7/rapid7-bulk-export-mcp.git

# Or using pip
pip install git+https://github.com/rapid7/rapid7-bulk-export-mcp.git

Configure

Edit your Antigravity MCP config file:

  • macOS/Linux: ~/.gemini/antigravity/mcp_config.json

  • Windows: C:\Users\<USERNAME>\.gemini\antigravity\mcp_config.json

You can also access this file from the Antigravity Agent panel → "..." → MCP Servers → Manage MCP Servers → View raw config.

Add the following to mcp_config.json:

{
  "mcpServers": {
    "rapid7-bulk-export": {
      "command": "rapid7-mcp-server",
      "args": [],
      "env": {
        "RAPID7_API_KEY": "your-api-key-here",
        "RAPID7_REGION": "your-region"
      }
    }
  }
}

Verify

  1. Restart Antigravity for changes to take effect

  2. Open the MCP Servers panel ("..." menu → MCP Servers)

  3. Confirm "rapid7-bulk-export" appears with available tools

  4. Try: Load the latest vulnerability data from Rapid7

Docker Image

Uses Red Hat UBI 10 Python 3.12 Minimal base image with Python 3.12.13 pre-installed. Supports read-only filesystem operation. No Red Hat subscription required.

Build and Run

Using docker compose (recommended):

RAPID7_API_KEY=your-key RAPID7_REGION=us docker compose up -d

Using docker run:

# Build
docker build -t rapid7-bulk-export-mcp .

# Run with read-only filesystem
docker run -d \
  -p 8000:8000 \
  -e RAPID7_API_KEY=your-api-key-here \
  -e RAPID7_REGION=us \
  -e DATA_DIR=/data \
  -e TMPDIR=/tmp \
  -v rapid7-data:/data \
  --tmpfs /tmp \
  --read-only \
  --security-opt no-new-privileges:true \
  --name rapid7-bulk-export-mcp \
  rapid7-bulk-export-mcp

Configure Your MCP Client

Point any MCP-compatible client at the HTTP endpoint:

{
  "mcpServers": {
    "rapid7-bulk-export": {
      "url": "http://localhost:8000/mcp"
    }
  }
}

Install the Agent Skill

Follow the skill installation for your specific AI tool above. The skill works the same regardless of whether the MCP server is local or remote.

Verify

  1. Confirm the container is running: docker ps

  2. Test the endpoint: curl http://localhost:8000/mcp

  3. Connect your AI tool and try: Load the latest vulnerability data from Rapid7

2. Start Analyzing

Note: The first export takes 1-5 minutes depending on org size. Once complete, the data is cached and subsequent loads reuse the same export. You can always ask to refresh the data to get the latest set.

Show me the top 10 critical vulnerabilities with known exploits
What's the severity distribution across my cloud assets?

Tool Reference

start_rapid7_export

Kicks off a new export job on Rapid7's servers. Returns immediately. Supports four export types: vulnerability, policy, remediation, and asset_software.

For remediation, pass a start_date and end_date (YYYY-MM-DD). Rapid7 limits each remediation export to 31 days and allows only one in flight at a time, so a longer range is split into ≤31-day windows and processed sequentially in the background as a single job. The call returns a job ID you poll with check_rapid7_export_status; all windows append into one vulnerability_remediation table.

Start a vulnerability export from Rapid7
Load remediation data from 2026-01-01 to 2026-06-30

check_rapid7_export_status

Reports status once, without blocking. Depending on what the ID names, it returns the Rapid7 platform-side export status, the local download/load progress once you have started loading, or the progress of a multi-window remediation job (which window is loading, and which windows are done). Accepts either an export ID or a remediation job ID.

Check the status of export abc-123

download_rapid7_export

Starts downloading a completed export's Parquet files and loading them into the local DuckDB database in the background, returning immediately — large exports can take longer than an AI client will wait on a single call. Poll check_rapid7_export_status with the same export ID until it reports the load is complete; that is when the data becomes queryable.

Download and load export abc-123

load_rapid7_parquet

Loads existing Parquet files directly from disk (must be within ~/.rapid7_mcp/imports/). Useful if you already have exported files and want to skip the API call.

Load parquet files from ~/.rapid7_mcp/imports/my-export/

query_rapid7

Executes SQL against the loaded data. The connection is locked down after loading — filesystem reads, writes, and network access are all blocked at the DuckDB engine level.

Available tables (depending on what you have loaded): assets, vulnerabilities, vulnerability_exceptions, policies, vulnerability_remediation, asset_software.

Run: SELECT severity, COUNT(*) FROM vulnerabilities GROUP BY severity

get_rapid7_schema

Returns column names and data types for all loaded tables. Use this to understand what fields are available before writing queries.

Show me the schema of the loaded data

get_rapid7_stats

Returns summary statistics — row counts, severity distributions, CVSS score ranges, exploit counts, and cloud provider breakdowns.

Give me an overview of the vulnerability data

list_rapid7_exports

Shows recent export history with IDs, dates, statuses, and row counts. Useful for finding a previous export to reload.

List my recent exports

purge_rapid7_data

Permanently deletes both the vulnerability database and the export tracking database from disk. Use when you're done with analysis or before handing off a machine.

Purge all local Rapid7 data

Architecture

graph TB
    subgraph "AI Layer"
        LLM[LLM/AI Assistant<br/>Copilot, Kiro, Claude Desktop, etc.]
    end

    subgraph "Rapid7 Bulk Export MCP Tool"
        MCP[MCP Server<br/>rapid7-bulk-export]
        Skill[Agent Skill / Power<br/>rapid7-bulk-export-skill]
    end

    subgraph "Data Layer"
        DB[(DuckDB<br/>rapid7_bulk_export.db)]
        Tracker[(Export Tracker<br/>rapid7_bulk_export_tracking.db)]
    end

    subgraph "Rapid7 API"
        R7[Rapid7 Bulk Export API<br/>/export/graphql ]
    end

    LLM <-->|Model Context Protocol| MCP
    LLM -.->|Enhanced Context| Skill
    MCP -->|SQL Queries| DB
    MCP -->|Track Exports| Tracker
    MCP -->|Fetch Data| R7
    R7 -->|Parquet Files| MCP
    MCP -->|Load Data| DB

    style LLM fill:#e1f5ff
    style MCP fill:#fff4e1
    style Skill fill:#f0e1ff
    style DB fill:#e8f5e9
    style Tracker fill:#e8f5e9
    style R7 fill:#ffe1e1

Development

Changes to the AgentSkill and MCP can be done locally to allow you to tailor to your environment — contributions are welcome back to this repository.

Clone and Install

git clone https://github.com/rapid7/rapid7-bulk-export-mcp.git
cd rapid7-bulk-export-mcp
uv sync

Configure for Development

Create or edit .kiro/settings/mcp.json:

{
  "mcpServers": {
    "rapid7-bulk-export": {
      "command": "/absolute/path/to/rapid7-bulk-export-mcp/.venv/bin/rapid7-mcp-server",
      "args": [],
      "env": {
        "RAPID7_API_KEY": "your-api-key-here",
        "RAPID7_REGION": "your-region",
        "DATA_DIR": "/Users/you/.rapid7-mcp"
      }
    }
  }
}

Note: Point command directly at the venv entry point rather than using uv run with a cwd. Claude Desktop does not guarantee a working directory when launching MCP servers, so uv run may resolve to a cached or system-installed version of the package instead of your local source.

Run Tests

uv run pytest

Environment Variables

Variable

Required

Default

Description

RAPID7_API_KEY

Yes

Rapid7 InsightVM API key

RAPID7_REGION

Yes

us

API region: us, us2, us3, eu, ca, au, ap

DATA_DIR

No

~/.rapid7_mcp

Directory for database files; must be writable. Manual parquet imports must be placed in $DATA_DIR/imports/

DUCKDB_MEMORY_LIMIT

No

4GB

Size of DuckDB's buffer pool, e.g. 4GB, 512MB. This bounds the buffer pool, not total process memory: peak usage runs roughly 1.8x this value with DUCKDB_THREADS=2 and up to 3.4x at the default thread count. Size it to about a third of the memory available to the container. Invalid values fall back to the default. Spill files are written to $DATA_DIR alongside the database

DUCKDB_THREADS

No

CPU count

Worker threads DuckDB may use. Each carries its own buffers, so lowering this is the most effective way to cut peak memory on a large load. 2 roughly halves peak memory for about 30% more load time. Values that are not a positive integer are ignored

MCP_TRANSPORT

No

stdio

Transport protocol: stdio or http

MCP_HOST

No

0.0.0.0

HTTP bind address (only when MCP_TRANSPORT=http)

MCP_PORT

No

8000

HTTP port (only when MCP_TRANSPORT=http)

Available Tools

9 tools
check_rapid7_export_statusCheck Rapid7 Export StatusA
Read-onlyIdempotent

Check the current status of a Rapid7 export job.

This is a fast, non-blocking call that queries the Rapid7 API once and returns the current status. Does NOT poll or wait.

ParametersJSON Schema
NameRequiredDescriptionDefault
export_idYesThe export ID returned by start_rapid7_export.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, idempotent, non-destructive. Description adds 'fast, non-blocking' and 'queries once' – complements annotations well. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two terse sentences, front-loaded with purpose and behavioral traits. No extraneous text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given single param, rich annotations, output schema present, description covers purpose, behavior, param source. Fully sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only parameter export_id with description linking it to start_rapid7_export. Schema coverage 100%, description adds source info beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it checks status of a Rapid7 export job. Verb+resource specific. No explicit differentiation from siblings but clear enough.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly notes it's fast, non-blocking, and does NOT poll/wait. Implies use for quick status checks. Could mention when to use alternatives like polling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

download_rapid7_exportDownload Rapid7 ExportA
Idempotent

Download a completed Rapid7 export and load into the database.

Call this after check_rapid7_export_status confirms the export is COMPLETE. Downloads the Parquet files and loads them into the local DuckDB database for querying.

ParametersJSON Schema
NameRequiredDescriptionDefault
export_idYesThe export ID of a completed export.
export_typeNoType of export. One of "vulnerability", "policy", or "remediation".vulnerability

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate the tool is not read-only (readOnlyHint=false), not destructive (destructiveHint=false), idempotent (idempotentHint=true), and open-world. The description adds behavioral context beyond annotations: it downloads Parquet files and loads them into the DuckDB database for querying. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, each serving a distinct purpose: stating the main action, providing a usage condition, and detailing the execution. No redundant or unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains the tool's purpose, when to use it, and what it does (downloads and loads into database). An output schema exists (not shown) so return values are covered. There is no mention of error handling or behavior for invalid export IDs, but the precondition partially addresses that. Overall, it is complete enough for a tool with rich annotations and schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with both parameters having descriptions. The description does not add any additional information about the parameters beyond what the schema already provides. It reinforces that export_id must be from a completed export, but that is already in the parameter description. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool downloads a completed Rapid7 export and loads it into the database. It specifies the verb ('download' and 'load'), the resource ('completed Rapid7 export'), and the destination ('local DuckDB database'). It also distinguishes from siblings by referencing the workflow step (after check_rapid7_export_status).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs to call this tool after check_rapid7_export_status confirms the export is COMPLETE, providing a clear precondition. It does not directly list alternative tools, but the sibling list includes related tools like start_rapid7_export and check_rapid7_export_status, and the workflow context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_rapid7_schemaGet Rapid7 SchemaA
Read-onlyIdempotent

Get the schema of all database tables.

Returns column names and data types for all existing tables: assets, vulnerabilities, policies, and vulnerability_remediation. Tables that have not been loaded yet are omitted.

Use this to understand what data is available before writing queries.

Returns: Table schemas as formatted JSON, keyed by table name

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, destructiveHint, idempotentHint. The description adds valuable behavioral details: returns column names and data types, omits unloaded tables, and returns formatted JSON keyed by table name. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise at 4 sentences with front-loaded main purpose. No wasted words; every sentence adds value. Clear structure: main action, output details, usage hint, return format.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters and an existing output schema, the description is fully complete. It explains what the tool returns (schema of all tables, specific tables, omitted tables) and when to use it. No gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist (schema coverage 100%), so baseline is 4. The description does not need to add parameter info but effectively describes the output, which is the only relevant semantic.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves the schema of all database tables, listing specific table names (assets, vulnerabilities, etc.) and noting omitted tables. This distinctly differentiates from sibling tools like query_rapid7 or export-related tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises using this tool to understand available data before writing queries, which is the primary use case. Does not specify when NOT to use it, but the context is sufficient for an agent to decide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_rapid7_statsGet Rapid7 StatisticsA
Read-onlyIdempotent

Get summary statistics for all database tables.

Returns row counts and relevant distributions for all existing tables: assets, vulnerabilities, policies, and vulnerability_remediation. Tables that have not been loaded yet are omitted.

Useful for getting an overview of the data across all loaded datasets.

Returns: Summary statistics as formatted JSON, keyed by table name

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, covering safety and side-effect behavior. The description adds that tables not loaded are omitted and returns JSON, which is useful context. No contradictions. The description does not mention performance or rate limits, but for a read-only, idempotent tool, the transparency is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is clear and well-structured with bullet points for the return value and behavior. However, it is slightly verbose for a tool with no parameters; a more concise version could combine the first two sentences. Overall, it is front-loaded but not as tight as possible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters, comprehensive annotations (read-only, idempotent, non-destructive), and the presence of an output schema (mentioned but not shown), the description covers all necessary context. It explains what tables are included, the omission of unloaded ones, and the return format. For this simple tool, the description is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so the input schema is fully covered (100%). The description adds meaning beyond the schema by specifying the tables included and the omission behavior. Since there are no params, the description perfectly compensates for any lack of parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: getting summary statistics for all database tables. It lists specific tables (assets, vulnerabilities, policies, vulnerability_remediation) and notes that unloaded tables are omitted. This distinguishes it from siblings like query_rapid7 (which likely runs arbitrary queries) and list_rapid7_exports (which lists exports).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions the tool is 'useful for getting an overview of the data across all loaded datasets,' which provides some context. However, it does not explicitly specify when not to use it or compare to alternatives like query_rapid7 or get_rapid7_schema. A stronger statement about when to choose this over siblings would improve clarity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_rapid7_exportsList Rapid7 ExportsA
Read-onlyIdempotent

List recent Rapid7 exports tracked in the system.

Shows export metadata including export ID, date, status, type, and row counts. Useful for understanding what exports are available for reuse.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of exports to return (default: 10)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds that it returns metadata fields like export ID, date, status, type, and row counts, which is useful context beyond annotations. However, it does not disclose pagination, ordering, or time window for 'recent'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Only two sentences, front-loaded with the main action. Every sentence adds value without redundancy or unnecessary detail. Highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (single optional parameter, output schema exists), the description covers purpose, scope, and returned fields. However, it could clarify 'recent' (e.g., default time window) and note whether results are sorted. Overall adequate with minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (limit parameter is well-defined). The description does not add any additional meaning or context beyond what the schema provides, resulting in a baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific verb 'list' and resource 'Rapid7 exports', with scope 'recent' and 'tracked in the system'. It differentiates from sibling tools like check_rapid7_export_status or download_rapid7_export by focusing on listing metadata for available exports.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implicitly indicates use case ('useful for understanding what exports are available for reuse'), but does not explicitly mention when not to use or provide alternatives among siblings. No usage exclusions or context for when to choose this over other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

load_rapid7_parquetLoad Rapid7 Parquet FileA
Idempotent

Load vulnerability data from existing Parquet file(s).

Use this if you already have Parquet files downloaded and want to skip the export process. This is much faster than running a full export.

ParametersJSON Schema
NameRequiredDescriptionDefault
parquet_pathYesPath to a Parquet file or directory containing Parquet files

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate idempotentHint=true and destructiveHint=false, which aligns with loading data. The description adds that it skips the export process and is faster. It does not mention error handling or file existence, but overall provides useful behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, each adding value. No fluff. Purpose is front-loaded. It is concise and structured effectively.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and an output schema, the description covers the main purpose, usage scenario, and speed benefit. It does not need to explain return values due to output schema. Complete for the given complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter 'parquet_path' has 100% schema coverage, baseline is 3. The description adds value by stating it can be a file or directory, which goes beyond the schema description. It clarifies the format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The tool's name and description clearly state it loads vulnerability data from Parquet files. The verb 'Load' is specific, and the resource is well-defined. It distinguishes itself from sibling tools like 'download_rapid7_export' and 'query_rapid7' by focusing on existing files.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use: when you already have Parquet files and want to skip the export process. It mentions speed advantage. It could be more explicit about not using it if files are missing, but the context implies alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

purge_rapid7_dataPurge Rapid7 DataA
DestructiveIdempotent

Permanently delete all local Rapid7 data and tracking databases.

This removes:

  • The main vulnerability database (rapid7_bulk_export.db)

  • The export tracking database (rapid7_bulk_export_tracking.db)

  • Any associated WAL files

Use this when you are done with your analysis session, before handing off a machine, or to free disk space. After purging, you will need to run a new export to query data again.

Returns: Confirmation of purged data.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true. Description adds specific details on what is deleted (databases, WAL files) and permanence, enriching beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two paragraphs with bullet points, front-loaded with main action. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple destructive tool with no parameters, the description covers purpose, usage, consequences, and return value. Output schema exists but return is adequately described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters, so schema coverage is 100%. Description adds value by explaining the tool's action and consequences, which is sufficient for a parameterless tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states verb 'purge' (delete) and specific resources: 'local Rapid7 data and tracking databases', listing exact databases removed. Distinguishes from sibling tools which handle exports, queries, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use: 'when you are done with your analysis session, before handing off a machine, or to free disk space'. Also notes consequence: need to re-run export.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_rapid7Query Rapid7 DataA
Read-onlyIdempotent

Execute a SQL query against the Rapid7 database.

The database contains the following tables loaded from Rapid7 InsightVM Bulk Export API Parquet files:

assets — Asset inventory data: Key fields: orgId, assetId, agentId, hostName, ip, mac, osFamily, osProduct, osVersion, osDescription, riskScore, sites, assetGroups, tags, awsInstanceId, azureResourceId, gcpObjectId

vulnerabilities — Combined asset + vulnerability data: Key fields: orgId, assetId, vulnId, checkId, port, protocol, title, description, severity, severityRank, cvssScore, cvssV3Score, cvssV3Severity, hasExploits, epssscore, epsspercentile, riskScoreV2_0, cves, firstFoundTimestamp, reintroducedTimestamp, dateAdded, dateModified, datePublished, pciCompliant, pciSeverity

vulnerability_exceptions — Vulnerability exceptions (waived/accepted risk): Key fields: orgId, assetId, vulnId, checkId, key, port, protocol, nic, proof, firstFoundTimestamp, reintroducedTimestamp, exceptionDetails

policies — Policy compliance results (agent and scan based): Key fields: orgId, assetId, benchmarkNaturalId, profileNaturalId, benchmarkVersion, ruleNaturalId, ruleTitle, finalStatus, proof, lastAssessmentTimestamp, benchmarkTitle, profileTitle, publisher, fixTexts, rationales, source ('agent' or 'scan')

vulnerability_remediation — Vulnerability remediation tracking: Key fields: orgId, assetId, cveId, vulnId, proof, firstFoundTimestamp, reintroducedTimestamp, lastDetected, lastRemoved, title, description, cvssV2Score, cvssV3Score, cvssV2Severity, cvssV3Severity, cvssV2AttackVector, cvssV3AttackVector, riskScoreV2_0, datePublished, dateAdded, dateModified, epssscore, epsspercentile

Use this tool to query any of the above tables. You can filter, aggregate, join across tables, or perform any SQL-based analysis supported by DuckDB.

Examples:

  • SELECT * FROM vulnerabilities WHERE severity = 'Critical' LIMIT 10

  • SELECT severity, COUNT(*) FROM vulnerabilities GROUP BY severity

  • SELECT * FROM policies WHERE finalStatus = 'fail' LIMIT 10

  • SELECT cveId, COUNT(*) FROM vulnerability_remediation GROUP BY cveId

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYesSQL query to execute against the database

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered without description support. The description adds meaningful behavioral context beyond annotations: the SQL dialect is DuckDB, the data originates from Rapid7 InsightVM Bulk Export Parquet files, and arbitrary SQL filtering/aggregation/joining is allowed. It does not mention query limits or performance caveats, but the annotation coverage lowers the burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but every section earns its place: the first sentence states the core capability, the table and field listings are directly needed for constructing valid SQL, and the examples illustrate expected usage. It is well-structured with clear headings and front-loaded purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a SQL-query tool, the description is complete: it names the database, enumerates every table and key field, explains that DuckDB SQL is supported, and provides concrete examples. The presence of an output schema means return-value documentation is unnecessary, and the annotations cover the tool's read-only, idempotent nature.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the schema already describes the single 'sql' parameter, the description dramatically expands its meaning by listing all valid tables, their key columns, and four concrete example queries. This tells the agent exactly what kinds of SQL statements are acceptable and what data surfaces exist, going far beyond the schema's one-line description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action and resource: 'Execute a SQL query against the Rapid7 database.' It then enumerates the exact queryable tables and their key fields, which clearly distinguishes this tool from siblings that load, export, or manage Rapid7 data. The purpose is unmistakable and fully scoped.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states when to use the tool: 'Use this tool to query any of the above tables,' and shows realistic analytic examples. However, it does not explicitly name sibling tools or state when not to use it, leaving some alternative-selection reasoning to the agent. The context is strong but not fully explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_rapid7_exportStart Rapid7 ExportA
Idempotent

Start a new Rapid7 export job (non-blocking).

This is a fast, non-blocking call that creates an export job on the Rapid7 platform and returns the export ID immediately. The export will process in the background on Rapid7's servers (typically 3-5 minutes).

Use check_rapid7_export_status(export_id) to monitor progress, then download_rapid7_export(export_id, export_type="...") once it completes.

If an export from today already exists, returns that export's ID instead of creating a duplicate.

For remediation exports, the Rapid7 API limits each request to 31 days. If the date range exceeds 31 days, this tool automatically splits it into multiple 31-day chunks and kicks off an export for each chunk.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoEnd date in YYYY-MM-DD format (only for remediation exports). Defaults to today if not specified.
start_dateNoStart date in YYYY-MM-DD format (only for remediation exports). Defaults to 30 days ago if not specified.
export_typeNoType of export to create. One of "vulnerability", "policy", or "remediation".vulnerability

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate idempotentHint=true, and description explains that existing exports are reused. It also discloses non-blocking nature, background processing time (3-5 minutes), and automatic date range splitting. No contradictions; adds context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with clear paragraphs and bullet points. Each sentence adds value, no fluff. Information is front-loaded and logically organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given output schema exists and schema coverage is 100%, the description provides complete behavioral guidance: initiation, monitoring, download, deduplication, and date handling. No gaps for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers all 3 parameters with descriptions. Description adds crucial context: export_type specifies the type, start_date/end_date are only for remediation, with default behavior (30 days ago to today) and automatic 31-day chunking. Schema coverage is 100%, but description provides additional semantic value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description explicitly states the tool starts a Rapid7 export job (non-blocking), specifies export types, and automatically splits long date ranges for remediation exports. It clearly distinguishes from sibling tools like check_rapid7_export_status and download_rapid7_export.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear when-to-use (to initiate an export) and what to do after (monitor with check_rapid7_export_status, download with download_rapid7_export). Explains duplicate detection (returns existing ID if today's export exists) and the 31-day chunking behavior for remediation exports.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: starting, checking, downloading exports; loading, querying, and cleaning up data; listing exports; and retrieving schema/stats. No two tools overlap in functionality.

Naming Consistency5/5

All tools follow a consistent verb_rapid7_noun pattern (e.g., check_rapid7_export_status, get_rapid7_schema, purge_rapid7_data). No mixing of camelCase or other conventions.

Tool Count5/5

With 9 tools, the set is well-scoped for a bulk export server. It covers the entire export lifecycle, data loading, exploration, and cleanup without redundancy.

Completeness5/5

The tool surface covers all essential operations: starting exports, checking status, downloading, loading from existing files, querying, listing exports, and purging. No obvious gaps.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Exposes Tenable security operations as MCP tools for AI-powered security workflows, enabling asset, vulnerability, scan, plugin, and tag management via natural language.
    17
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Enables read-only exploration and querying of PostgreSQL or MySQL databases via MCP, with schema discovery, safe SQL validation, natural language to SQL conversion, and CSV export.
    11
    1
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server for Tenable Vulnerability Management and the Tenable One platform, enabling LLMs to query assets, vulnerabilities, scans, exposure metrics, attack paths, and more via natural language.
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/rapid7/rapid7-bulk-export-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server