Dxr Mcp Server — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Dxr Mcp Server (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A Model Context Protocol (MCP) server that provides Claude with access to the Data X-Ray API. This enables Claude to search, retrieve, and analyze indexed files with sensitivity classifications and redaction capabilities.
Data X-Ray is an enterprise data discovery and classification platform that indexes documents and identifies sensitive information like PII, PHI, financial data, and more. This MCP server exposes Data X-Ray's capabilities to Claude, enabling:
Enterprise organizations have vast amounts of unstructured data scattered across multiple systems. Data X-Ray indexes this data and identifies sensitive content, but making this metadata actionable requires integration with AI systems. This MCP server bridges that gap, allowing Claude to:
Install the pre-built extension bundle (.mcpb file):
.mcpb file (see Building the Extension).mcpb file to open the Claude Desktop install dialoghttps://dxr.yourcompany.com)The extension will appear in your Claude Desktop connectors panel with the Data X-Ray icon.
Add a .mcp.json file to your project directory:
{
"mcpServers": {
"dxr": {
"command": "node",
"args": ["/path/to/dxr-mcp-server/dist/index.js"],
"env": {
"DXR_API_URL": "https://dxr.yourcompany.com",
"DXR_API_TOKEN": "your-api-token-here"
}
}
}
}Note: .mcp.json is gitignored by default since it contains credentials.The MCP server provides eight tools that Claude can use:
Search and list file metadata from Data X-Ray with KQL filtering. Returns lightweight summaries with aggregate statistics to minimize context usage.
Parameters:
q (optional): KQL query string to filter resultslimit (optional): Number of files to return (default 50, max 500)offset (optional): Number of files to skip for paginationExample queries:
fileName:"*.pdf" AND size > 1000000 - PDFs larger than 1MBannotators.name:"Credit card" - Files with credit card data detecteddatasource.name:"Finance*" AND lastModifiedAt > now-30d - Recent finance filesentitlements.whoCanAccess: { accountType:"GROUP" AND name:"Everyone" } - Publicly accessible filesReturns: Aggregate statistics (count, size, file types, sensitive data counts) plus lightweight file summaries with pagination info.
Get complete metadata for a specific file by ID.
Parameters:
id (required): File identifier from list_file_metadataReturns: Full metadata including datasource info, entitlements, labels, DLP labels, annotators with matched phrases, owner/creator/modifier accounts, extracted metadata, and GPS coordinates if available.
Get the original content of a file in its native format.
Parameters:
id (required): File identifier from list_file_metadataReturns: Text files are decoded and returned as readable text. Images are returned as viewable images. PDFs have text extracted automatically. Other binary files are saved to /tmp/dxr-files/ for further processing.
Use case: Default tool for viewing file contents. Prefer this over get_file_text when you need the original file, images, or higher-fidelity parsing.
Get the plain text extracted by Data X-Ray from a file. Simpler and faster than get_file_content when you only need text.
Parameters:
id (required): File identifier from list_file_metadataReturns: Plain text content as extracted by Data X-Ray.
Note: This is a beta endpoint. Returns empty text if DXR has not extracted text for the file (e.g. discovery-only scan, unsupported format, scanned image PDF).
Get plain text content of a file with sensitive information replaced by [REDACTED].
Parameters:
id (required): File identifierredactor_id (required): Redactor ID from get_redactorsReturns: Plain text with [REDACTED] placeholders replacing sensitive information.
Use case: Use only when explicitly requested or when there is a specific privacy requirement. For normal file viewing, use get_file_content.
Get the catalog of all available classifications in Data X-Ray.
Returns: Array of annotators, labels, and extractors with IDs, names, types, subtypes, descriptions, and links to the DXR UI.
Use case: Call this first before searching for files with sensitive data — you need the exact annotator names to use in KQL queries.
Get the catalog of all available redactors.
Returns: Array of redactor objects with IDs, names, and timestamps.
Use case: Get a redactor_id to pass to get_file_redacted_text.
Render specific pages of a PDF as high-resolution images for visual analysis.
Parameters:
id (required): File identifier (must be a PDF)pages (required): Array of 1-indexed page numbers to renderscale (optional): Render scale factor (default 2)Returns: One image content block per rendered page.
Use case: When text extraction misses structure — tables, charts, scanned pages, forms, handwritten content.
Note: Requires @napi-rs/canvas. Works in Claude Code; may not be available in Claude Desktop MCPB sandbox.
Here are some example conversations you can have with Claude once the MCP server is configured:
User: "Show me all documents that contain credit card information"
Claude uses:
1. get_classifications() to get the catalog and find the exact annotator name
2. list_file_metadata(q: 'annotators.name:"Credit card"') to find matching files
3. Returns a summary of documents with credit card dataUser: "I need to review document ID abc123, but make sure any PII is redacted"
Claude uses:
1. get_redactors() to find available redactors
2. get_file_redacted_text(id: "abc123", redactor_id: 1) to get redacted content
3. Displays the document with [REDACTED] placeholdersUser: "What types of sensitive information does our DXR instance detect?"
Claude uses:
1. get_classifications() to retrieve the full catalog
2. Summarizes classification types: annotators, labels, extractors
3. Explains what each classification detectsUser: "Find all PDF files larger than 10MB"
Claude uses:
1. list_file_metadata(q: 'mimeType:"application/pdf" AND size > 10485760')
2. Returns a list of large PDF files with metadataUser: "What's in the file with ID xyz789?"
Claude uses:
1. get_file_text(id: "xyz789") for a quick text read (beta, simpler)
OR get_file_content(id: "xyz789") for the original file (handles images, PDFs)
2. Returns the document contentThe MCP server wraps these Data X-Ray API v1 endpoints:
| MCP Tool | DXR API Endpoint | Method |
|---|---|---|
| list_file_metadata | /api/v1/files | GET (JSONL stream) |
| get_file_metadata_details | /api/v1/files?q=fileId:"..." | GET (JSONL stream) |
| get_file_content | /api/v1/files/{id}/content | GET (binary) |
| get_file_text | /api/v1/files/{id}/text | GET (JSON, beta) |
| get_file_redacted_text | /api/v1/files/{id}/redacted-text | GET |
| get_classifications | /api/v1/classifications | GET |
| get_redactors | /api/v1/redactors | GET |
All API calls use Bearer token authentication. The /api/v1/files endpoint returns newline-delimited JSON (JSONL); all other endpoints return JSON or binary.
npm install
npm run buildnpm run watch # Rebuild on file changesYou can test the server using the MCP Inspector:
export DXR_API_URL="https://dxr.yourcompany.com"
export DXR_API_TOKEN="your-api-token"
npx @modelcontextprotocol/inspector node dist/index.jsTo build the .mcpb extension bundle for Claude Desktop:
npm run build
npm prune --production npx @anthropic-ai/mcpb pack . npm installThis produces a dxr-mcp-server-<version>.mcpb file that can be distributed and installed by double-clicking.
The .mcpbignore file controls which files are excluded from the bundle (similar to .gitignore).
DXR_API_URL and DXR_API_TOKEN are set correctlyWhen making changes:
manifest.json tools array with new toolsnpm run build to ensure TypeScript compiles.mcpb extension (see Building the Extension)Proprietary - Ohalo
For issues or questions:
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.