Skip to main content

API Reference

Complete documentation for the MCP JetBrains Code Inspections server, including tools, prompts, and resources.

MCP Features Overview​

The server provides three types of MCP features:

🔧 Tools​

  • get_jetbrains_code_inspections: Run code inspections on files/directories

💬 Prompts​

  • analyze-project: Analyze a project for code quality issues
  • check-file: Check a specific file for issues
  • fix-issues: Get suggestions to fix detected issues

📚 Resources​

  • inspection://profiles: List of available inspection profiles
  • inspection://config: Current MCP server configuration
  • inspection://ides: List of detected JetBrains IDEs

Tools API​

Tool Name​

get_jetbrains_code_inspections

Description​

Analyze code quality using JetBrains IDE inspections with automatic IDE selection and profile detection.

Tool Type​

MCP (Model Context Protocol) Tool

Parameters​

Required Parameters​

path​

  • Type: string
  • Required: true
  • Description: The file or directory path to analyze
  • Format: Absolute or relative path
  • Examples:
    • "src/components/Button.tsx" - Single file
    • "src/utils/" - Directory
    • "." - Current directory
    • "/absolute/path/to/file.ts" - Absolute path

Configuration​

Environment Variables​

Configure the tool behavior via environment variables in your MCP configuration:

Path Configuration​

FORCE_INSPECT_PATH​
  • Type: string
  • Default: Auto-detected
  • Description: Force specific IDE inspect tool path (disables auto-detection)
  • Example: "/Applications/WebStorm.app/Contents/bin/inspect.sh"
FORCE_PROJECT_ROOT​
  • Type: string
  • Default: Auto-detected
  • Description: Force project root directory (disables auto-detection)
  • Example: "/path/to/project"
FORCE_PROFILE_PATH​
  • Type: string
  • Default: Auto-detected
  • Description: Force inspection profile path (disables default profile detection)
  • Example: "/path/to/custom-profile.xml"

Execution Configuration​

INSPECTION_TIMEOUT​
  • Type: number (milliseconds)
  • Default: 120000 (2 minutes)
  • Description: Timeout for inspection execution
  • Range: 1000 to 600000 (1 second to 10 minutes)
  • Example: "300000" (5 minutes)

Filter Configuration​

EXCLUDE_INSPECTIONS​
  • Type: string (comma-separated)
  • Default: None
  • Description: Inspection codes to exclude from analysis
  • Example: "SpellCheckingInspection,TodoComment,UnusedDeclaration"
ONLY_INSPECTIONS​
  • Type: string (comma-separated)
  • Default: None
  • Description: Only run these inspection codes (overrides exclude)
  • Example: "NullPointerException,ArrayIndexOutOfBounds"

Output Configuration​

RESPONSE_FORMAT​
  • Type: string
  • Default: "markdown"
  • Values: "markdown" | "json"
  • Description: Output format for inspection results
DEBUG​
  • Type: boolean
  • Default: false
  • Description: Enable debug logging
  • Example: "true"

Response Formats​

Markdown Format (Default)​

Human-readable formatted output:

## Code Inspection Results for: src/components/Button.tsx

### Summary

- **Total Issues**: 3
- **Errors**: 1
- **Warnings**: 2
- **Files Analyzed**: 1

### Issues Found

**ERROR** at line 15, column 7:

- **Issue**: Variable 'config' is used before being declared
- **Inspection**: UseBeforeDeclaration

**WARNING** at line 23, column 12:

- **Issue**: Function 'handleClick' is never used
- **Inspection**: UnusedDeclaration

**WEAK WARNING** at line 8, column 1:

- **Issue**: TODO: Add proper error handling
- **Inspection**: TodoComment

JSON Format​

Structured data format for programmatic processing:

{
"totalProblems": 3,
"diagnostics": [
{
"file": "src/components/Button.tsx",
"line": 15,
"column": 7,
"severity": "error",
"code": "UseBeforeDeclaration",
"message": "UseBeforeDeclaration: Variable 'config' is used before being declared"
},
{
"file": "src/components/Button.tsx",
"line": 23,
"column": 12,
"length": 11,
"severity": "warning",
"code": "JSUnusedLocalSymbols",
"message": "JSUnusedLocalSymbols: Unused function handleClick",
"highlightedElement": "handleClick"
},
{
"file": "src/components/Button.tsx",
"line": 45,
"column": 3,
"severity": "info",
"code": "SpellCheckingInspection",
"message": "SpellCheckingInspection: Typo: In word 'recieve'",
"highlightedElement": "recieve"
}
]
}

Response Schema​

JSON Response Interface​

interface InspectionResult {
totalProblems: number;
diagnostics: Diagnostic[];
error?: string;
warning?: string;
timeout?: boolean;
metadata?: InspectionMetadata;
}

interface Diagnostic {
file: string;
line: number;
column: number;
length?: number;
severity: SeverityLevel;
code?: string;
message: string;
highlightedElement?: string;
category?: string;
hints?: string[];
}

interface InspectionMetadata {
targetPath: string;
projectRoot: string;
ideUsed: string;
ideVersion?: string;
executionTime: number;
timestamp: Date;
}

type SeverityLevel = 'error' | 'warning' | 'info';

Field Descriptions​

InspectionResult Fields​

  • totalProblems: Total number of issues found
  • diagnostics: Array of individual diagnostic issues
  • error: Error message if inspection failed (optional)
  • warning: Warning message for non-fatal issues (optional)
  • timeout: Boolean indicating if inspection timed out (optional)
  • metadata: Additional execution metadata (optional, rarely included)

Diagnostic Fields​

Required fields:

  • file: Path to the file containing the issue (relative or absolute)
  • line: Line number (1-indexed)
  • column: Column number (1-indexed)
  • severity: Issue severity level ("error", "warning", or "info")
  • message: Full message including inspection code and description

Optional fields:

  • length: Length of the highlighted region in characters
  • code: JetBrains inspection code (e.g., "JSUnusedLocalSymbols")
  • highlightedElement: The specific code element with the issue
  • category: JetBrains inspection category (rarely present)
  • hints: Array of fix suggestions (rarely present)

Severity Levels​

  • error: Critical issues (syntax errors, compilation errors)
  • warning: Issues that should be addressed (unused code, potential bugs)
  • info: Informational messages, suggestions, and minor issues

Prompts API​

Available Prompts​

analyze-project​

Analyze an entire project for code quality issues.

Arguments:

  • projectPath (required): Path to the project to analyze
  • profile (optional): Inspection profile to use

Example:

// Get prompt
const prompt = await getPrompt({
name: 'analyze-project',
arguments: {
projectPath: '/path/to/project',
profile: 'Default',
},
});

check-file​

Check a specific file for code quality issues.

Arguments:

  • filePath (required): Path to the file to check

Example:

const prompt = await getPrompt({
name: 'check-file',
arguments: {
filePath: 'src/components/Button.tsx',
},
});

fix-issues​

Get suggestions to fix detected issues in a project.

Arguments:

  • projectPath (required): Path to the project
  • severity (optional): Minimum severity level (ERROR, WARNING, INFO)

Example:

const prompt = await getPrompt({
name: 'fix-issues',
arguments: {
projectPath: '/path/to/project',
severity: 'ERROR',
},
});

Resources API​

Available Resources​

inspection://profiles​

Returns the list of available inspection profiles.

Response:

{
"profiles": ["Default", "Project Default", "Strict", "Essential"],
"description": "Available inspection profiles for code analysis"
}

inspection://config​

Returns the current MCP server configuration.

Response:

{
"name": "mcp-jetbrains-code-inspections",
"version": "1.0.0",
"defaultTimeout": 120000,
"responseFormat": "markdown",
"excludedInspections": ["SpellCheckingInspection"],
"debug": false
}

inspection://ides​

Returns the list of detected JetBrains IDEs on the system.

Response:

{
"detected": [
{
"name": "WebStorm",
"type": "webstorm",
"version": "2024.1",
"inspectPath": "/Applications/WebStorm.app/Contents/bin/inspect.sh"
},
{
"name": "IntelliJ IDEA",
"type": "idea",
"version": "2024.1",
"inspectPath": "/Applications/IntelliJ IDEA.app/Contents/bin/inspect.sh"
}
],
"count": 2
}

Using Resources​

// List all available resources
const resources = await listResources();

// Read a specific resource
const profilesData = await readResource({
uri: 'inspection://profiles',
});

const profiles = JSON.parse(profilesData.contents[0].text);
console.log('Available profiles:', profiles.profiles);

Usage Examples​

Basic Tool Usage​

// Analyze a single file
const result = await get_jetbrains_code_inspections({
path: 'src/utils/validation.ts',
});

With Environment Configuration​

// Configure via MCP server setup
{
"env"
:
{
"RESPONSE_FORMAT"
:
"json",
"EXCLUDE_INSPECTIONS"
:
"SpellCheckingInspection,TodoComment",
"INSPECTION_TIMEOUT"
:
"300000"
}
}

// Then use the tool
const result = await get_jetbrains_code_inspections({
path: "src/"
});

// Parse JSON response
const diagnostics = JSON.parse(result);
console.log(`Found ${diagnostics.totalProblems} issues`);

Error Handling​

Common Error Types​

Path Errors​

{
"error": "Path does not exist: src/nonexistent.ts",
"totalProblems": 0,
"diagnostics": []
}

Timeout Errors​

{
"timeout": true,
"warning": "Inspection timed out after 120000ms",
"totalProblems": 0,
"diagnostics": []
}

IDE Errors​

{
"error": "No suitable JetBrains IDE found. Please install a JetBrains IDE or set FORCE_INSPECT_PATH.",
"totalProblems": 0,
"diagnostics": []
}

Error Response Structure​

Errors are returned as valid responses with error information:

interface ErrorResponse {
error: string; // Error message
totalProblems: 0; // Always 0 for errors
diagnostics: []; // Always empty for errors
timeout?: boolean; // True for timeout errors
}

Supported File Types​

The tool supports all file types that JetBrains IDEs can analyze:

Programming Languages​

  • JavaScript: .js, .jsx, .mjs
  • TypeScript: .ts, .tsx, .d.ts
  • Java: .java
  • Kotlin: .kt, .kts
  • Python: .py, .pyw
  • PHP: .php, .phtml
  • Go: .go
  • Ruby: .rb, .rake
  • C/C++: .c, .cpp, .h, .hpp
  • C#: .cs
  • Scala: .scala
  • Groovy: .groovy

Web Technologies​

  • HTML: .html, .htm, .xhtml
  • CSS: .css, .scss, .sass, .less
  • Vue: .vue
  • Angular: Templates and components

Configuration Files​

  • JSON: .json, .jsonc
  • YAML: .yml, .yaml
  • XML: .xml, .xsd, .wsdl
  • Properties: .properties
  • INI: .ini
  • TOML: .toml

Build and Package Files​

  • package.json, composer.json, pom.xml
  • build.gradle, Cargo.toml
  • tsconfig.json, webpack.config.js
  • Dockerfile, **docker-compose.yml`

IDE Detection Priority​

The tool automatically detects and selects IDEs in this priority order:

  1. IntelliJ IDEA - Universal support for all languages
  2. WebStorm - Optimized for web development
  3. PyCharm - Python development
  4. PhpStorm - PHP development
  5. GoLand - Go development
  6. RubyMine - Ruby development
  7. CLion - C/C++ development
  8. Rider - .NET development
  9. Other JetBrains IDEs

Override automatic detection with FORCE_INSPECT_PATH environment variable.

Rate Limits and Performance​

  • Single files: No restrictions
  • Small directories (<100 files): Standard timeout sufficient
  • Large directories (>100 files): Increase timeout to 300-600 seconds
  • Entire projects: Consider selective analysis or batch processing

Performance Considerations​

  • File size: Large files may require increased timeout
  • IDE performance: Different IDEs have different performance characteristics
  • System resources: Analysis is CPU and memory intensive
  • Network locations: Avoid analyzing files on network drives

Integration Examples​

CI/CD Integration​

async function qualityGate(files) {
const results = [];

for (const file of files) {
const result = await get_jetbrains_code_inspections({ path: file });
const diagnostics = JSON.parse(result);

if (diagnostics.error) {
throw new Error(`Analysis failed: ${diagnostics.error}`);
}

results.push(diagnostics);
}

const totalErrors = results.reduce((sum, r) => sum + r.diagnostics.filter((d) => d.severity === 'ERROR').length, 0);

if (totalErrors > 0) {
throw new Error(`Quality gate failed: ${totalErrors} errors found`);
}

return results;
}

Batch Processing​

async function analyzeProject(rootPath, batchSize = 5) {
// Get all source files (implementation specific)
const files = await getSourceFiles(rootPath);

const results = [];
for (let i = 0; i < files.length; i += batchSize) {
const batch = files.slice(i, i + batchSize);

const batchPromises = batch.map((file) => get_jetbrains_code_inspections({ path: file }));

const batchResults = await Promise.all(batchPromises);
results.push(...batchResults.map((r) => JSON.parse(r)));

// Optional delay to manage system resources
await new Promise((resolve) => setTimeout(resolve, 1000));
}

return results;
}