Skip to content

Conversation

@stex2005
Copy link
Collaborator

Closes #181

Should be tested with get_action_details tool on

[ ] ROS 2 Jazzy - should respond correctly
[ ] ROS 2 Humble - should raise compatibility issue
[ ] ROS 1 - should raise compatibility issue

In general, for any version older than ROS 2 Jazzy the MCP should gracefully inform compatibility issue rather than crash.

Ready for Review

@stex2005 stex2005 requested review from lpigeon and rjohn-v October 29, 2025 14:46
@stex2005 stex2005 merged commit 737e013 into develop Oct 31, 2025
1 check passed
@stex2005 stex2005 deleted the bugfix/get-action-details branch October 31, 2025 20:27
@rjohn-v rjohn-v mentioned this pull request Nov 3, 2025
stex2005 added a commit that referenced this pull request Nov 5, 2025
* update the paths in the examples appropriately

* Fix: Removed Optional for IP and PORT in connect_to_robot. This sometimes generates truncation, no need for optional as they are intrinsically optional.

* Added ip and port information on config yaml file

* Added turtlesim.yaml

* ruff format fix

* Added configuration file for local_rosbridge.yaml

* trigger ruff check

* Revert "Added ip and port information on config yaml file"

This reverts commit 131fae4.

* Removed ip/port

* Add ROS 2 Parameters API (#135)

* Added get_parameters set_param get_param etc. Inspect parameters missing.

* Fixed inspect_all_parameters. Now tested with background color of turtlesim.

* Fixed parameter type in inspect_all_parameters + added get_parameter_details

* Added note that parameters are supported on ROS 2 only

* Added get_actions tool

* Added get_action_type tool

* Added get_action_details and inspect_all_actions tools

* Added send_action_goal, non-blocking, no feedback or result.

* Fixed send_action_goal to:
- Be blocking and waiting for action_result or timeout.
- Return action_result when action is completed.
- Return the last action_feedback, if available, when timeout.
- Return timeout/success:false if no action_feedback or action_result is detected.
- Fixed bug with timeout input tools (no Optional)

* Added cancel_action_goal. Non-blocking. No response is available. Tested with fibonacci server.

* Added note for ROS 2 support only.

* Added get_action_status tool

* Modified get_action_status to work with action_name and not action_type

* Added action_feedback through ctx.report_progress. Tested and working in Cursor, not showing in ChatGPT.

* Refactor: replace Optional with union syntax (Type | None) (#143)

- Remove Optional imports and usage
- Update server.py and websocket_manager.py

* Add ROS 2 Launch System (#138)

* Created ROS2 launch files for rosbridge and turtlesim demo, removed manual launch_ros.sh + Added docs on launch system

* Modified documentation

* Improved launch_mcp_tunnel to include default options for port and domain.

* Moved robot specifications folder to root

* updated Manifest and pyproject to point to correct locations

* Type hint fix in server.py from previous PR on ros actions

* updated config_utils to access specification files using Path

* updated tool names and descriptions for getting robot spec

* updated name of get verified robots list based on issue feedback

* Fixed inconsistent tool names of topic subscribers and publishers, solving #141

* Modify WSL installation documents (#169)

docs: add WSL path best practices to prevent common issues
- Add warnings to recommend using /home/username/ instead of /mnt/c/Users/username/
- Fix incorrect path labeling
- Add explanatory comment to config/mcp.json template
- Closes #102

* Cleared naming convention and removed optional scaffolding to state spec file directory explicitly (YAGNI principle)

* changed print statements from stdout to stderr for errors

* ruff

* Bump version to v2.1.7

* Update version to v2.1.7 in server.json and uv.lock

* Pipx install documentation for users (#178)

* Update installation documentation for pip install support

- Replace cloning/UV setup with pipx as primary installation method
- Add pip as alternative installation option
- Update MCP client configurations to use ros-mcp command
- Simplify JSON configurations for all platforms (Ubuntu, macOS, WSL)
- Create separate installation-from-source.md for developers
- Remove duplicate content and link back to main guide
- Update HTTP transport commands to use ros-mcp
- Improve documentation structure and user experience

* Move pipx benefits into advanced dropdown for cleaner main flow

* Improve installation documentation based on reviewer feedback

- Fix debug commands in 6.2 to use ros-mcp instead of uv run server.py for pipx installation consistency
- Remove collapsible sections in section 5 to improve visibility of LLM client options
- Move 'If you're still having issues' from 6.3 into 6.1 for better organization
- Split debug commands into separate, organized code blocks
- Wrap debug commands and 'Why pipx?' sections in collapsible details blocks
- Update section numbering and structure for better navigation

* Further improve installation documentation organization

- Move installation commands before 'Why pipx?' section for better flow
- Wrap section 5 (Alternate Clients) in collapsible details block
- Add descriptive text to section 6.1 Common Issues
- Convert debug command headings to plain text for cleaner appearance
- Improve overall document structure and readability

* Add Option C: Install from source using pipx

- Add new installation option for developers who want source access with pipx isolation
- Include step-by-step commands to clone repository and install with pipx install .
- Add note that regular pip install . also works for source installation
- Provide more flexibility for different developer preferences and environments

* Update installation documentation

- Additional improvements to installation guide structure and content

* Fix: make image analysis work with any topic containing image data (#144)

* Bugfix: make image analysis work with any topic containing image data

- Remove "Image" in topic name requirement
- Add content-based image detection using "data" field
- Update tool descriptions for clarity

* Add optional expects_image parameter with robust image detection
Includes is_image_like() helper that checks image-specific fields to
distinguish images from pointclouds etc.

* Track image parsing state and exclude data field

* Add was_parsed_as_image tracking to accurately report whether image
parsing occurred. Filter out large 'data' field from image responses
since image is already saved to disk for analysis.

* Create a centralized parse_input() function in websocket_manager.py
that encapsulates all parsing logic with expects_image hint handling.

* Refactor the request method in WebSocketManager to use parse_input. This will also allow service responses to handle image data if a service returns image data:

* Removed Union/Optional and using a string instead. Union/Optional are highly bugged in fastmcp.

* Added recognition for jpeg/compressed formats + restructure image analysis process.

* Added launch file for realsense example + cleaned up the README.md

* Updated pip minimum version + added pip badge (#180)

* Bugfix: adding check on missing rosapi services to avoid crashes in older versions (#182)

* Check rosapi required services for action-related tools and throw error/warning if not available (applies to ROS 1 or ROS 2 Humble)
* Improved return messages for action-related tools when required services are not compatible

* Update version to v2.2.0

---------

Co-authored-by: Jungsoo Lee <dlwjdtn7083@gmail.com>
Co-authored-by: Stefano Dalla Gasperina <stefano.dallagasperina@austin.utexas.edu>
@stex2005 stex2005 mentioned this pull request Nov 6, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bug: Some actions-related tools doesn't work in older versions of ROS 2 (e.g., Humble)

3 participants