ROS 2 Workspace Inspector MCP
Provides tools for inspecting ROS 2 workspaces, including package discovery, dependency analysis, interface parsing, launch file analysis, robot description validation, and workspace diagnosis.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ROS 2 Workspace Inspector MCPScan the configured ROS 2 workspace and summarize its packages."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ROS 2 Workspace Inspector MCP
ROS 2 Workspace Inspector MCP is a local-first, read-only static-analysis MCP server that gives Codex, Claude Code, Cursor, and other MCP clients structured information about ROS 2 workspaces. Seven static-analysis tools cover discovery, package structure, dependencies, interfaces, launch files, robot descriptions, and bounded workspace diagnosis without requiring ROS 2. It also provides two compact read-only resources and one guided review prompt.
7 analysis tools · 2 read-only resource forms · 1 guided review promptThe project inspects files only. It does not control robots, run ROS nodes, build workspaces,
execute launch or Xacro files, execute setup.py, publish topics, call services or actions, or
modify user files. All access stays inside the configured root sandbox. Only stdio is supported.
Tools
scan_workspace— Discover ROS 2 packages, workspace layout, build types, and basic manifest metadata.inspect_package— Inspect a package's manifest, build configuration, executables, launch files, interfaces, robot descriptions, and tests.analyze_dependencies— Analyze package dependencies, internal dependency edges, topological order, and dependency cycles.inspect_interfaces— Parse and inspect ROS 2 Msg, Srv, and Action interface definitions.analyze_launch_file— Statically analyze a Python, XML, or YAML ROS 2 launch file without executing it.inspect_robot_description— Inspect URDF structure and statically summarize Xacro files without expanding or executing them.diagnose_workspace— Run a consolidated, bounded diagnosis of the configured ROS 2 workspace.
Related MCP server: rosgraph-mcp
Requirements and installation
Python 3.10 or newer
Clone the repository, enter it, and create the locked environment:
git clone https://github.com/doer0312/ros2-workspace-mcp.git
cd ros2-workspace-mcp
uv sync --lockedRun against a local workspace:
uv run ros2-workspace-mcp --root /absolute/path/to/your/ros2_wsThe equivalent module entry point is:
uv run python -m ros2_workspace_mcp --root /absolute/path/to/your/ros2_wsThe process communicates via stdout using the MCP protocol. Do not redirect ordinary logs to stdout. Invalid CLI input is reported on stderr with a non-zero exit status.
Client configuration
Codex TOML:
[mcp_servers.ros2-workspace-inspector]
command = "uv"
args = ["--directory", "/absolute/path/to/ros2-workspace-mcp", "run", "ros2-workspace-mcp", "--root", "/absolute/path/to/your/ros2_ws"]Claude Desktop JSON:
{
"mcpServers": {
"ros2-workspace-inspector": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/ros2-workspace-mcp", "run", "ros2-workspace-mcp", "--root", "/absolute/path/to/your/ros2_ws"]
}
}
}Copyable versions are available under examples/client-configs/. Both examples run the checked-out
repository environment and do not assume a PyPI release.
Try the included static demo without installing ROS:
uv run ros2-workspace-mcp --root ./examples/demo_wsMinimal request:
Scan the configured ROS 2 workspace and summarize its packages.Guided review example:
Use review_ros2_workspace with depth="standard".Available tools
The server exposes exactly seven tools:
scan_workspace— discover packages and basic metadata.inspect_package— inspect one package's manifest, build files, executables, and file layout.analyze_dependencies— parse declarations and build a workspace dependency graph.inspect_interfaces— parse one package's.msg,.srv, and.actionfiles.analyze_launch_file— statically analyze one Python, XML, or YAML launch file.inspect_robot_description— validate URDF or summarize unexpanded Xacro.diagnose_workspace— run a bounded, deduplicated workspace-wide diagnosis.
Example requests:
Use scan_workspace to inspect the configured ROS 2 workspace.
Inspect the package named demo_robot.
Analyze src/demo_robot/launch/demo.launch.py without running it.
Diagnose the configured workspace.scan_workspace takes no arguments and scans only the workspace supplied with --root. A compact
result looks like this:
{
"layout": "colcon_workspace",
"package_count": 1,
"packages": [
{
"name": "demo_pkg",
"relative_path": "src/demo_pkg",
"build_type": "ament_python",
"build_type_source": "inferred",
"valid": true
}
],
"issues": []
}The full result also includes server identity, canonical root and scan paths, package metadata,
valid/invalid counts, duplicate names, and structured issues. See docs/tools.md.
Resources and prompt
ros2-workspace://summaryis a fixed compact workspace summary.ros2-workspace://package/{package_name}is a package context template with strict name validation and ambiguity errors.review_ros2_workspace(focus="", depth="standard")guides quick, standard, or deep review using the seven tools without reading the workspace while the prompt is generated.
Resources are generated on read, have application/json MIME type, and never return raw project
files. The server intentionally does not expose an arbitrary file resource, subscriptions,
notifications, or filesystem watching. Client applications may display resources and prompts in
different ways. See docs/resources.md and
docs/prompts.md.
Security boundary
The server is bound to one validated, canonical workspace directory. Every file selected for
reading is resolved and checked with path containment rather than string prefixes. Directory
symlinks are never traversed; readable file symlinks must resolve inside the root. Text reads are
UTF-8, size-limited, and centralized. Python is parsed with AST, XML with ElementTree, and YAML
with safe_load; setup, launch, Xacro, CMake, and process declarations are never executed. See
docs/security.md for the complete boundary.
Development
uv run ruff check .
uv run ruff format --check .
uv run pytestFurther documentation:
License
Licensed under the Apache License 2.0. See LICENSE.
Available Tools
7 toolsanalyze_dependenciesA
Parse package.xml dependency declarations and build a deterministic workspace graph. With no selector it analyzes the workspace; with package_name or relative_path it analyzes that package scope. It does not run rosdep, query the network, or install anything.
| Name | Required | Description | Default |
|---|---|---|---|
| package_name | No | ||
| relative_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explicitly discloses what the tool does NOT do: 'does not run rosdep, query the network, or install anything', and adds 'deterministic' to imply reproducible, side-effect-free behavior. This is valuable beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each serving a distinct purpose: the primary function, the scoping behavior, and explicit non-behaviors. There is no redundancy or filler, and it is front-loaded with the main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists and the tool has only two optional parameters, the description covers the core functionality, scoping options, and important constraints. Minor gaps remain around selector interaction and the exact nature of the graph output, but overall it is complete for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema lists two optional string parameters with no descriptions. The description assigns meaning by stating 'with package_name or relative_path it analyzes that package scope', but it does not explain value formats, precedence, or what happens if both are supplied. This is a moderate improvement over the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb 'Parse' and a resource 'package.xml dependency declarations', and states the clear output of a 'deterministic workspace graph'. This distinguishes it from sibling tools like scan_workspace or inspect_package, which focus on different aspects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly explains scoping: without a selector, it analyzes the workspace; with package_name or relative_path, it analyzes that package scope. This provides explicit usage context, though it doesn't explicitly name alternate tools or state 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.
analyze_launch_fileA
Statically analyze one workspace-relative Python, XML, or YAML ROS 2 launch file. Returns declared nodes, includes, arguments, environment changes, and processes; Python uses AST and YAML uses safe loading. It never executes launch actions or commands.
| Name | Required | Description | Default |
|---|---|---|---|
| relative_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It explicitly states 'statically analyze,' 'never executes launch actions or commands,' and reveals parsing methods (AST, safe loading), giving strong transparency about safety and internal behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and front-loaded with the action and resource. Every clause adds value (returns, parsing method, non-execution), with no wasted words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers what the tool does, its input (workspace-relative path, supported file types), what it returns, and its safety behavior. An output schema handles return details, so the description is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% coverage, so the description must compensate. It adds meaningful context by clarifying 'relative_path' is 'workspace-relative' and applies to Python, XML, or YAML launch files. It doesn't detail path formatting, but for a single string parameter it provides sufficient semantic grounding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: 'Statically analyze one workspace-relative Python, XML, or YAML ROS 2 launch file.' It also lists what it returns (nodes, includes, arguments, environment changes, processes), clearly distinguishing it from siblings that scan workspaces or inspect packages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies the tool is for analyzing a single launch file, and the qualifier 'statically' signals a safe, non-executing analysis. However, it does not explicitly name alternatives or state when not to use it, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diagnose_workspaceA
Run a bounded, read-only diagnosis of the configured workspace by reusing package, dependency, interface, launch, and robot-description analyzers. Returns compact severity summaries and deduplicated issues; it does not build, execute, or modify files.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description explicitly states the tool is read-only, bounded, does not build/execute/modify files, and provides compact severity summaries and deduplicated issues. This is excellent behavioral disclosure covering safety and output behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence packs key attributes (bounded, read-only, reuses analyzers, output type, non-mutating) without redundancy. It is well-front-loaded and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and an output schema, the description thoroughly covers what the tool does, its safety profile, and its return value. It is complete enough for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so the description isn't required to explain them. The baseline for zero-parameter tools is 4, and the description adds no parameter-specific meaning because there are none to explain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'diagnose' clearly targets the workspace, and the description distinguishes it from individual analyzer tools by noting it reuses them and returns aggregated, deduplicated results. This makes the tool's purpose specific and differentiated from its siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a combined, high-level diagnosis across multiple analyzers, but doesn't explicitly name alternative tools or state exclusions like 'for a single package, use inspect_package'. Clear context is provided, but no explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_interfacesA
Statically parse .msg, .srv, and .action files in one package selected by name or relative path, optionally filtering by interface_name. It validates local syntax and classifies type references without ROS generators, imports, builds, or file changes.
| Name | Required | Description | Default |
|---|---|---|---|
| package_name | No | ||
| relative_path | No | ||
| interface_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It successfully discloses that the tool is read-only ('without... file changes'), performs local validation, and classifies type references without requiring external tooling. This addresses key safety aspects, though it does not detail error behavior or output specifics (which might be covered by the output schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no redundant information. The main action and scope are front-loaded in the first sentence, and the second sentence efficiently adds the no-side-effects guarantee.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity and the existence of an output schema, the description covers the essential context: input selection methods, optional filtering, and the side-effect-free nature of the analysis. It lacks some details about when to prefer relative_path over package_name, and the meaning of 'classifies type references' is not elaborated, but overall it is sufficiently complete for an agent to understand the tool's role.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides only parameter names and types with 0% description coverage. The description compensates by explaining that package_name or relative_path are alternative selectors and interface_name is an optional filter, which adds meaning beyond the schema. However, it does not provide detailed semantics for each parameter, such as mutual exclusivity, path formats, or exact matching behavior, leaving some gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Statically parse') and the resource ('.msg, .srv, and .action files') within a single package, selected by name or relative path. This explicitly distinguishes it from siblings like inspect_package by focusing on interface definitions and by noting the lack of builds or imports.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly conveys when to use this tool: for static, side-effect-free parsing and validation of interface files, as it explicitly notes operating 'without ROS generators, imports, builds, or file changes'. However, it does not name sibling tools as alternatives or provide exclusionary phrasing like 'use inspect_package for broader package analysis'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_packageA
Statically inspect one package selected by package_name or workspace-relative path. Returns detailed manifest, build, executable, and file metadata without importing, building, running, or modifying package code.
| Name | Required | Description | Default |
|---|---|---|---|
| package_name | No | ||
| relative_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden of behavioral disclosure. It explicitly states the operation is static and does not import, build, run, or modify code, which is strong transparency. It goes beyond the schema by clarifying the non-destructive nature and the type of metadata returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no fluff. It front-loads the verb and resource, then efficiently packs selection method, return content, and safety constraints. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, selection, return types, and safety, which is sufficient for a read-only inspection tool. It doesn't mention error cases or what happens if both parameters are provided, but the output schema exists and the tool's scope is narrow, so completeness is high.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and parameters have no descriptions, but the description names both parameters and explains that either package_name or relative_path selects the package. This adds meaningful semantic context beyond the raw schema, though it doesn't address precedence or exclusivity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool inspects a single package, selected by either package_name or relative_path. It distinguishes itself from sibling tools by focusing on static inspection of one package rather than scanning, dependency analysis, or diagnostics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you need package metadata without executing code, but it does not explicitly name alternatives or provide when-to-use vs. when-not-to-use guidance. The context of sibling tools helps, but the description itself lacks direct exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_robot_descriptionA
Statically inspect one workspace-relative URDF or Xacro file. URDF returns links, joints, kinematic validation, and mesh references; Xacro returns an explicitly unexpanded macro/property/include summary. It never runs xacro or ROS.
| Name | Required | Description | Default |
|---|---|---|---|
| relative_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility. It clearly notes 'It never runs xacro or ROS' and explains the differing outputs for URDF and Xacro ('explicitly unexpanded'), providing critical behavioral context beyond basic function.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no fluff. The main action is front-loaded, and every clause adds value (static nature, file type, return summary, no execution).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter inspection tool with an output schema, the description adequately covers scope, behavior, and return expectations. It explains what is returned for both URDF and Xacro, and confirms no side effects, making it complete for the intended use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description adds meaning to 'relative_path' by specifying it is workspace-relative and for a single URDF/Xacro file. This helps an agent understand the path's context, though it lacks examples or further format constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Statically inspect one workspace-relative URDF or Xacro file' with a specific verb, resource, and scope. It clearly distinguishes from sibling tools (scan_workspace, inspect_package, etc.) by focusing on a single robot description file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context that this is for a single file (not workspace-wide) and is static. However, it does not explicitly name alternatives or state when not to use it, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_workspaceA
Scan the configured ROS 2 workspace for packages and basic package.xml metadata. This read-only tool does not build, run, or modify the workspace, and it does not perform full dependency, launch, interface, or robot-description analysis.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explicitly discloses the read-only nature, that it does not build/run/modify the workspace, and the limits of its analysis scope. This gives the agent a complete safety and behavior picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary action and scope, then a clear delimitation of non-goals. No filler words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 fully covers the purpose, scope, safety, and limitations. It is complete for a read-only scan tool in the context of its siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so baseline is 4. The description adds context about what the tool operates on (workspace, packages, package.xml), but there are no parameter semantics to clarify further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Scan') with a clear resource ('configured ROS 2 workspace') and scope ('packages and basic package.xml metadata'). It immediately distinguishes itself from siblings by explicitly listing what it does not do (dependency, launch, interface, robot-description analysis).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear exclusions ('does not perform full dependency, launch, interface, or robot-description analysis') which imply when to use alternative sibling tools. It also states 'read-only' as a usage context. However, it does not explicitly name the alternative tools, so slightly shy 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.
7 tool updates
v0.1.0- First observed
analyze_dependencies - First observed
analyze_launch_file - First observed
diagnose_workspace - First observed
inspect_interfaces - First observed
inspect_package - First observed
inspect_robot_description - First observed
scan_workspace
TDQS
Scored across 7 tools
Each tool targets a distinct aspect of ROS 2 workspace inspection: workspace-level scanning, package-level metadata, dependencies, interfaces, launch files, robot descriptions, and a cross-cutting diagnosis. No two tools overlap in purpose; even the diagnosis tool explicitly reuses the others but provides a different aggregated output.
All tool names follow a consistent verb_noun pattern in snake_case (scan_workspace, inspect_package, analyze_dependencies, inspect_interfaces, analyze_launch_file, inspect_robot_description, diagnose_workspace). The verbs vary semantically but the structural consistency and clear object nouns make prediction easy.
Seven tools is an appropriate scope for a static analysis inspector, covering the key artifacts without fragmentation. Each tool has a clearly separate responsibility, and none feel redundant or extraneous.
The surface covers the major static analysis needs of a ROS 2 workspace: packages, dependencies, interfaces, launch files, and robot descriptions, plus a diagnostic aggregator. For a read-only inspection tool, there are no obvious missing operations that would cause dead ends.
Maintenance
Related MCP Connectors
Generate SBOMs, scan vulnerabilities, and analyze dependencies from local projects or Git repos.
Stateless TS/JS compiler facts for agents: references, imports, impact. No repo index or OAuth.
Ask a codebase what calls what: search, blast radius, paths between symbols, and diffs.
Code intelligence platform for AI agents. 20 tools for architecture, security & impact analysis.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables deterministic static analysis of Python code, providing tools to inspect classes, functions, imports, dependencies, and more, without executing the code.1MIT
- FlicenseAqualityCmaintenanceProvides ROS2 workspace graph knowledge including package dependencies, message/service/action definitions, and topic pub/sub relationships through MCP tools.4-
- AlicenseNot gradedqualityAmaintenanceProvides read-only code analysis and safe, reversible code refactoring with proven edit plans, previews, and rollback.513 npm1MIT
- AlicenseNot gradedqualityBmaintenanceEnables coding agents to perform deterministic, model-free repository analysis and patch operations—tree-sitter repo maps, symbol/reference lookup, and SEARCH/REPLACE parsing/validation—via a CLI or MCP stdio server, without ever calling a language model.130 PyPI1MIT