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 Power (MCP + Skill)

This repository is packaged as an Agent Plugins power (plugin.json + mcp.json + skills/), so Kiro installs the MCP server declaration and the skill together:

  1. Open the Kiro Powers panel → Add Custom Power

  2. Select Import power from GitHub

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

Kiro reads the keywords in plugin.json and activates the power automatically when you mention terms like "rapid7", "vulnerability", or "remediation". The power's mcp.json declares the rapid7-mcp-server stdio server; set RAPID7_API_KEY and RAPID7_REGION in your environment (the server inherits your shell; on macOS it can also read the key from Keychain). If you prefer to configure the MCP server by hand instead of via the power, use the .kiro/settings/mcp.json snippet shown above.

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: 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/skills/rapid7-bulk-export/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/skills/rapid7-bulk-export/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/skills/rapid7-bulk-export/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/skills/rapid7-bulk-export/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.1/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. The description adds useful context beyond annotations by specifying it is a fast, non-blocking call that queries the API once and does not poll or wait, which clarifies the operational behavior.

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 two short sentences, front-loaded with the purpose and followed by the key non-polling behavior. Every word earns its place and there is no redundant content.

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?

The tool is simple: one parameter, full schema coverage, rich annotations, and an output schema present. The description adds the crucial behavioral guarantee of non-polling. Nothing material is missing for an agent to select and invoke this tool correctly.

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%, so the sole parameter export_id is already fully documented in the schema. The tool description does not add additional parameter meaning, but the baseline of 3 is appropriate when the schema carries the full load.

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 states a specific verb and resource: 'Check the current status of a Rapid7 export job.' It clearly differentiates itself from sibling tools by emphasizing this is a status check and by noting 'Does NOT poll or wait,' which distinguishes it from any waiting/polling or export-starting workflow.

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 implies when to use this tool: when you need the current status without blocking or waiting. However, it does not explicitly name alternatives or state conditions for when not to use it, such as 'if you need to wait for completion, use start_rapid7_export' or 'use download_rapid7_export when ready.'

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

A3.9/5.0
Behavior4/5

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

The description discloses that this tool downloads Parquet files and loads them into the local DuckDB database for querying, which adds side-effect context beyond the annotations. It also states the completion prerequisite. It does not detail overwrite behavior or failure handling, but idempotentHint and destructiveHint already cover safety expectations.

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 short and front-loaded with the core purpose. There is mild redundancy between the first sentence and the final sentence, both saying the export is loaded into a database, but overall every sentence carries useful information.

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 covers the key invocation context: call after status is COMPLETE, download Parquet files, and load into DuckDB for querying. With a complete input schema and an output schema present, an agent has enough information to invoke it correctly. The only notable gap is the relationship to load_rapid7_parquet.

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?

The input schema fully documents both parameters with clear descriptions, so the baseline is 3. The description adds no extra parameter-level meaning beyond restating 'completed export,' which the schema already includes.

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?

The description clearly states the verb and resource: 'Download a completed Rapid7 export' and 'load into the database.' It is distinct from siblings like start_rapid7_export or check_rapid7_export_status, but it does not explicitly differentiate itself from load_rapid7_parquet, since both involve loading Parquet into DuckDB.

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 to call this after check_rapid7_export_status confirms the export is COMPLETE, giving clear timing guidance. It does not mention when not to use it or point to alternatives such as load_rapid7_parquet, but the prerequisite is concrete and actionable.

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 the tool read-only, idempotent, and non-destructive. The description adds meaningful behavior beyond annotations: tables not yet loaded are omitted, and schemas are returned as formatted JSON keyed by table name. No contradiction exists.

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 compact, well-structured, and front-loaded with the core action. Every sentence adds useful information: scope, included tables, omission behavior, and usage intent. No filler or 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 zero-parameter, read-only schema tool with an output schema and rich annotations, the description covers everything needed: what it returns, which tables, the omission nuance, and how to use it. Nothing critical is missing.

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 tool has zero parameters, so the description does not need to document parameter behavior. The baseline of 4 applies because the schema already fully covers the empty parameter set.

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 names a specific verb and resource: 'Get the schema of all database tables,' then enumerates exactly which tables are included. This makes the tool's scope unambiguous and distinguishes it from query/stats/export 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?

It explicitly tells the agent when to use the tool: 'Use this to understand what data is available before writing queries.' It does not discuss exclusions or compare against alternatives, but given the sibling set, no other tool claims schema discovery, so the guidance is adequate.

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.6/5.0
Behavior5/5

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

Annotations already mark it readOnly, idempotent, and non-destructive. The description adds meaningful behavior beyond those hints: it returns row counts plus distributions, omits tables not yet loaded, and returns formatted JSON keyed by table name. There is no contradiction with the annotations.

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 short and front-loaded with the core purpose and return shape. A small redundancy exists between 'Returns row counts...' and the later 'Returns: Summary statistics as formatted JSON...' line, but the latter adds keying detail so the duplication is minor.

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 no-argument read-only tool with annotations and an output schema available, the description is complete: it identifies the covered tables, the omission behavior for unloaded tables, and the return format. No critical call-time information is missing.

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 input schema has no parameters, so there is nothing to document beyond the baseline for zero-parameter tools. The description's statement of what the stats cover is the only relevant semantic context and it is adequate.

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 verb and resource ('Get summary statistics for all database tables') and then enumerates the exact outputs ('row counts and relevant distributions') and the tables involved (assets, vulnerabilities, policies, vulnerability_remediation). This makes it clearly distinct from siblings like query_rapid7 or get_rapid7_schema, which are for detailed queries or schema inspection.

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 gives an explicit use context: 'Useful for getting an overview of the data across all loaded datasets.' It does not name alternatives or state when not to use it, so it stops short of a full routing rule, but the intended scenario is clear.

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

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful behavioral context: it lists only 'recent' exports, scopes them to 'tracked in the system', and specifies the metadata fields returned. This goes beyond the structured annotations without contradicting them.

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 two short sentences with no filler. The primary action is front-loaded, and the second sentence adds valuable detail about output contents and intended use. Every sentence earns its place.

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 read-only listing tool with one optional parameter, a full output schema, and safety annotations already present, the description provides sufficient context. It explains what the tool returns, what the results represent, and why an agent would call it. Nothing essential is missing.

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%, with the limit parameter already documented including its default. The description adds no additional parameter semantics, but the schema fully covers the single optional parameter. 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?

Description uses a specific verb ('List') and identifies the exact resource ('Rapid7 exports tracked in the system'). It names the metadata fields returned, which distinguishes this from sibling tools like start_rapid7_export or download_rapid7_export. The phrase 'available for reuse' clarifies its role as an inventory/reuse tool.

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 gives clear context for when to use the tool: to see what exports exist and what can be reused. It does not explicitly state when not to use it or name alternatives, but the intended use case is clear enough for a simple listing tool.

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.0
Behavior3/5

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

Annotations already establish the safety profile (idempotentHint=true, destructiveHint=false, readOnlyHint=false), and the description's 'load' claim is consistent with those. The description adds a performance trait ('much faster than running a full export') and the workflow context of skipping exports. However, it doesn't disclose what happens when data is loaded into a non-empty store (overwrite vs. append), which is the key behavioral unknown for a load tool.

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?

Three sentences with no filler: the purpose is front-loaded, the usage condition follows, and the performance rationale comes last. Each sentence earns its place, and the whole is well under any reasonable length limit.

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?

For a single-parameter tool with 100% schema coverage, an output schema, and annotations covering idempotency and destructiveness, the description is nearly complete. The only gap is conflict semantics with pre-existing data (does loading replace or merge?), which is a minor omission for an idempotent loader.

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% — parquet_path's description states it accepts a file or directory, so the schema already carries the full semantic load. The description's phrase 'Parquet file(s)' reinforces the directory case but adds no new meaning beyond the schema, so the 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?

States a specific verb and resource: 'Load vulnerability data from existing Parquet file(s).' This is unambiguous among the siblings, which are all export-management or query tools (start_rapid7_export, download_rapid7_export, query_rapid7, etc.), so there is no confusion about what this tool does.

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 gives an explicit trigger condition: use this when you already have Parquet files downloaded and want to skip the export process. It contrasts this path with running a full export, letting an agent infer that the export siblings (start_rapid7_export, download_rapid7_export) are the alternative. It stops short of naming a specific sibling tool, but the condition is clear enough to route correctly.

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.9/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, and the description reinforces and enriches this by naming the exact databases and WAL files that will be destroyed and noting that the action is 'permanent.' It clearly discloses the irreversible destructive behavior without contradicting the 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 tightly organized with a one-line summary, a bulleted list of affected files, a clear usage statement, and a return note. Every sentence adds useful information and there is no redundancy or filler.

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 zero-parameter destructive tool with annotations covering destructiveness and idempotency, the description is complete: it names exactly what is deleted, says when to use it, warns about the need to re-export afterward, and states the return value. No critical context is missing.

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 tool has zero parameters and the schema is empty, so there is nothing to document at the parameter level. The description instead clarifies that the operation acts on all local Rapid7 data, which is the only relevant 'scope' information an agent needs. Baseline 4 is appropriate for a no-parameter 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?

The description opens with a specific verb and resource: 'Permanently delete all local Rapid7 data and tracking databases.' It goes on to enumerate the exact files removed (rapid7_bulk_export.db, rapid7_bulk_export_tracking.db, WAL files), which clearly distinguishes it from the read/query/export sibling tools.

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?

The description explicitly states when to use the tool: 'when you are done with your analysis session, before handing off a machine, or to free disk space.' It also explains the consequence—'After purging, you will need to run a new export to query data again'—which tells the agent the practical impact and 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.

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

A4.6/5.0
Behavior5/5

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

The description adds substantial behavioral context beyond the annotations: non-blocking background processing, typical 3-5 minute completion, automatic reuse of a same-day export ID, and automatic splitting of >31-day remediation exports. These are exactly the kind of runtime behaviors an agent needs to know and cannot infer from the schema or annotations.

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 well-structured and front-loaded with the essential non-blocking behavior, followed by downstream tool usage and edge-case behavior. It is slightly repetitive ('non-blocking' appears twice; returning the export ID is stated more than once), but every block of information serves a distinct 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 tool with three optional parameters, an output schema, and annotations available, the description is fully complete. It explains what the tool returns, what happens in the background, how long it typically takes, how to check/download the result, and how edge cases like duplicates and long date ranges are handled.

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 input schema already covers parameter types, defaults, and enum values at 100%, so the baseline is 3. The description adds extra value by clarifying that date parameters are remediation-focused and by explaining the 31-day chunking behavior, which directly affects how start_date and end_date should be provided.

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 'Start a new Rapid7 export job (non-blocking)', giving a specific verb and resource. It clearly separates this tool from siblings like check_rapid7_export_status, download_rapid7_export, and list_rapid7_exports by focusing on job creation and immediate ID return.

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 gives a clear workflow: call this first, then check_rapid7_export_status, then download_rapid7_export. It also explains the existing-export deduplication behavior, which helps the agent decide whether a new call is needed. It does not explicitly name alternatives like list_rapid7_exports for checking existing exports, so it falls just short of a 5.

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.

  1. 9 tool updatesv0.4.1
    • First observedcheck_rapid7_export_status
    • First observeddownload_rapid7_export
    • First observedget_rapid7_schema
    • First observedget_rapid7_stats
    • First observedlist_rapid7_exports
    • First observedload_rapid7_parquet
    • First observedpurge_rapid7_data
    • First observedquery_rapid7
    • First observedstart_rapid7_export

TDQS

A4.4/5.0

Scored across 9 tools

Disambiguation5/5

Each tool maps to a distinct phase of the export/query workflow: loading local files, listing, starting, checking, downloading, querying, inspecting schema/stats, and purging. Even the somewhat similar load and download tools are clearly separated by local-file reuse versus remote export retrieval.

Naming Consistency5/5

All tools follow a consistent snake_case verb_rapid7_noun pattern, such as start_rapid7_export, check_rapid7_export_status, and get_rapid7_schema. The naming conventions are uniform and predictable across the entire set.

Tool Count5/5

Nine tools is well-scoped for a bulk export and analysis server. Each tool covers a necessary step without redundancy or bloat, staying comfortably within the ideal range.

Completeness5/5

The toolset covers the full lifecycle: starting exports, monitoring them, downloading results, loading existing Parquet files, inspecting schemas/statistics, querying data, and purging local state. No significant operational gaps are apparent for the stated purpose.

Maintenance

ActivityActive
ResponsivenessUnresponsive

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