jetbrains/intellij-community · Archived

plugin-model-analyzer

Query IntelliJ Product DSL modules, products, and plugin graphs.

First seen Jul 30, 2026

Installation

$ npx skills add jetbrains/intellij-community --skill plugin-model-analyzer

Stronger alternatives

This repository is archived — consider an actively maintained alternative.

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from jetbrains/intellij-community · top by installs.

npx skills add jetbrains/intellij-community

Browse all from jetbrains/intellij-community

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

Stars 20.5K
License license
Default branch master
Status Archived

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 9,579 B
  • docs SUMMARY.md 93 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 1 installs

SKILL.md

<!-- Generated by community/.ai/render-guides.mjs; edit community/.agents/skills/plugin-model-analyzer/SKILL.md -->

Plugin Model Analyzer

Use the Product DSL analyzer directly through Bazel. Do not call the retired PluginModelAnalyzer MCP server.

Command Shape

Run from the repository root:

bazel run --ui_event_filters=-info --noshow_progress //platform/buildScripts:plugin-model-tool -- --json='<request-json>'

The output is JSON with a timestamp plus one result property named after the requested filter.

Prefer small, typed JSON requests. Avoid unfiltered --json: it emits the full model and is usually too large for agent context. Use JSON fields, not extra CLI flags, to describe the query. Treat the single top-level result property as the answer.

Transport options:

  • Short request: --json='{"filter":"summary","limit":5}'
  • Stdin request: --json=-
  • File request: --json=@/private/tmp/plugin-model-query.json

Common Requests

Module overview:

{"filter":"moduleInfo","module":"intellij.platform.vcs.impl","limit":20}

Module dependencies:

{"filter":"moduleDependencies","module":"intellij.platform.vcs.impl","includeTransitive":false,"includeTestDependencies":false}

Dependency path:

{"filter":"dependencyPath","fromModule":"intellij.platform.vcs.impl","toModule":"intellij.platform.projectModel.impl","includeTestDependencies":true,"includeScopes":true}

Module owners:

{"filter":"moduleOwners","module":"intellij.platform.vcs.impl","includeTestSources":true}

Module-set details or search:

{"filter":"moduleSetQuery","moduleSet":"ide.common","details":false,"limit":50}
{"filter":"moduleSetQuery","name":"vcs","location":"COMMUNITY","minModuleCount":3,"limit":20}

Product details or search:

{"filter":"productQuery","product":"idea","details":false,"limit":50}
{"filter":"productQuery","usesModuleSet":"ide.common","limit":30}

Product comparison and trace path:

{"filter":"productCompare","product":"idea","product2":"Idea","limit":50}
{"filter":"productTracePath","product":"idea","moduleSet":"ide.common","limit":20}

Embedded dependency closure:

{"filter":"embeddedDependencyClosure","value":"idea","moduleSet":"ide.common","pluginSourceOnly":true}

Merge or inline impact:

{"filter":"mergeImpact","source":"some.module.set","target":"target.module.set","operation":"merge"}
{"filter":"mergeImpact","source":"some.module.set","operation":"inline"}

Validation and loading-rule checks:

{"filter":"validation","check":"community_products"}
{"filter":"validation","check":"module_set_locations"}
{"filter":"validation","check":"loading_inconsistencies"}
{"filter":"validation","check":"embedded_dependency_closure","product":"idea","pluginSourceOnly":true}
{"filter":"moduleLoading","loading":"EMBEDDED","limit":100}

Refactoring candidates:

{"filter":"moduleSetOverlap","minOverlapPercent":70,"limit":20}
{"filter":"productSimilarity","threshold":0.8,"limit":20}
{"filter":"unificationSuggestions","strategy":"merge","limit":10}
{"filter":"redundantModuleSetRefs","product":"idea","limit":50}
{"filter":"suggestModuleSetsForModules","modules":["intellij.platform.vcs.impl","intellij.platform.vcs.log.impl"],"limit":20}

Deprecated xi:include usage:

{"filter":"deprecatedIncludes","product":"idea","limit":100}

Old MCP Operation Map

Use this map when a prompt or older instruction mentions the retired PluginModelAnalyzer MCP operation names.

Old operation JSON request
analyzemodulestructure {"filter":"summary"}
module info {"filter":"moduleInfo","module":"<module>"}
module dependencies {"filter":"moduleDependencies","module":"<module>"}
module paths {"filter":"modulePaths","module":"<module>"}
module reachability {"filter":"moduleReachability","module":"<module>","moduleSet":"<set>"}
module findbyloading {"filter":"moduleLoading","loading":"EMBEDDED","details":true}
module dependency_path {"filter":"dependencyPath","fromModule":"<from>","toModule":"<to>","includeScopes":true}
module-set info {"filter":"moduleSetQuery","moduleSet":"<set>"}
module-set search {"filter":"moduleSetQuery","name":"<name>","location":"COMMUNITY","limit":20}
module-set hierarchy {"filter":"moduleSetQuery","moduleSet":"<set>","details":true}
module-set overlap {"filter":"moduleSetOverlap","minOverlapPercent":70,"limit":20}
module-set graph No ASCII graph output; use moduleSetQuery plus productTracePath or productUsage for structured edges.
module-set suggestformodules {"filter":"suggestModuleSetsForModules","modules":["<module>"]}
product info {"filter":"productQuery","product":"<product>"}
product search {"filter":"productQuery","name":"<name>","limit":20}
product compare {"filter":"productCompare","product":"<product1>","product2":"<product2>"}
product similar {"filter":"productSimilarity","threshold":0.8,"limit":20}
product composition {"filter":"composition"} for all products; use productQuery for one product.
product trace_path {"filter":"productTracePath","product":"<product>","moduleSet":"<set>"}
product deprecated_includes {"filter":"deprecatedIncludes","product":"<product>"}
product full_analysis Avoid unless explicitly needed; omit the filter only when the full raw model is required.
validation community_products {"filter":"validation","check":"community_products"}
validation modulesetlocations {"filter":"validation","check":"modulesetlocations"}
validation loading_inconsistencies {"filter":"validation","check":"loading_inconsistencies"}

Fast Recipes

Where is a module included?

{"filter":"moduleInfo","module":"<module>","limit":50}
{"filter":"modulePaths","module":"<module>"}

What depends on what, and why?

{"filter":"moduleDependencies","module":"<module>","includeTransitive":false,"includeTestDependencies":false}
{"filter":"dependencyPath","fromModule":"<from>","toModule":"<to>","includeTestDependencies":true,"includeScopes":true}

Who owns a module?

{"filter":"moduleOwners","module":"<module>","includeTestSources":true}

Which products or module sets use something?

{"filter":"moduleInfo","module":"<module>","limit":50}
{"filter":"productQuery","usesModuleSet":"<module-set>","limit":50}
{"filter":"productUsage","moduleSet":"<module-set>"}

Can a module stop being embedded?

{"filter":"moduleInfo","module":"<module>","limit":50}
{"filter":"moduleLoading","loading":"EMBEDDED","details":true,"limit":200}
{"filter":"validation","check":"embedded_dependency_closure","module":"<module>","pluginSourceOnly":true}

For the loading query, inspect moduleLoading.result.entries.items for the target module; moduleLoading filters by loading rule, not by module name. The embedded closure check answers whether an embedded source module has dependencies that are not also supplied by embedded sources in affected products.

Did a Product DSL edit introduce placement or loading problems?

{"filter":"validation","check":"community_products"}
{"filter":"validation","check":"module_set_locations"}
{"filter":"validation","check":"loading_inconsistencies"}
{"filter":"validation","check":"embedded_dependency_closure","pluginSourceOnly":true}

Which module set should contain these modules?

{"filter":"suggestModuleSetsForModules","modules":["<module1>","<module2>"],"limit":20}

Reading Output

  • Compact list fields use count, items, and truncated; increase limit or set details:true only when needed.
  • Some focused filters return an error field in JSON for missing selectors or unknown names; a successful process exit does not always mean the query matched.
  • For direct embeddedDependencyClosure, use value for the product selector. The validation wrapper accepts product or value.
  • location values are COMMUNITY or ULTIMATE. loading values are EMBEDDED, REQUIRED, OPTIONAL, ON_DEMAND, or UNSPECIFIED.

Request Fields

Use only fields relevant to the filter. Omit false, null, and default values unless they are semantically important.

Core selectors: filter, value, module, moduleSet, product, product2, name, location, usesModuleSet, modules, fromModule, toModule, source, target.

Options: operation, graph, check, loading, strategy, limit, minModuleCount, details, threshold, minOverlapPercent, includeTransitive, includeTestDependencies, includeTestSources, includeScopes, pluginSourceOnly.

Practical Rules

  • Start with summary, moduleInfo, moduleSetQuery, or productQuery when exploring.
  • Use details:false and a small limit until you know the exact module set or product.
  • Use the legacy precise filters (moduleDependencies, dependencyPath, moduleOwners, moduleReachability, productUsage, embeddedDependencyClosure, mergeImpact) when you need the full typed analysis for one target.
  • Use --json=- or --json=@file for complex requests instead of adding more CLI flags.
  • If the command fails before producing JSON, treat stderr as the source of truth; invalid JSON requests exit nonzero.