diff --git a/docs/installation-from-source.md b/docs/installation-from-source.md
new file mode 100644
index 0000000..f62cdfd
--- /dev/null
+++ b/docs/installation-from-source.md
@@ -0,0 +1,257 @@
+# Installation from Source
+
+> ⚠️ **Prerequisite**: You need either ROS installed locally on your machine OR access over the network to a robot/computer with ROS installed. This MCP server connects to ROS systems on a robot, so a running ROS environment is required.
+
+This guide covers installing the ROS MCP Server from source code. For most users, we recommend using the [pip install method](installation.md) instead.
+
+## 1. Clone the Repository
+
+```bash
+git clone https://github.com/robotmcp/ros-mcp-server.git
+```
+
+> ⚠️ **WSL Users**: Clone the repository in your WSL home directory (e.g., `/home/username/`) instead of the Windows filesystem mount (e.g., `/mnt/c/Users/username/`). Using the native Linux filesystem provides better performance and avoids potential permission issues.
+
+Note the **absolute path** to the cloned directory — you'll need this later when configuring your language model client.
+
+## 2. Install UV (Python Virtual Environment Manager)
+
+You can install [`uv`](https://github.com/astral-sh/uv) using one of the following methods:
+
+
+Option A: Shell installer
+
+```bash
+curl -LsSf https://astral.sh/uv/install.sh | sh
+```
+
+
+
+
+Option B: Using pip
+
+```bash
+pip install uv
+```
+
+
+
+## 3. Install Dependencies
+
+Navigate to the cloned repository and install dependencies:
+
+```bash
+cd ros-mcp-server
+uv sync
+```
+
+## 4. Configure Language Model Client
+
+Any LLM client that supports MCP can be used. We use **Claude Desktop** for testing and development.
+
+### 4.1. Download Claude Desktop
+
+
+Linux (Ubuntu)
+
+- Follow the installation instructions from the community-supported [claude-desktop-debian](https://github.com/aaddrick/claude-desktop-debian)
+
+
+
+
+MacOS
+
+- Download from [claude.ai](https://claude.ai/download)
+
+
+
+
+Windows (Using WSL)
+
+This will have Claude running on Windows and the MCP server running on WSL. We assume that you have cloned the repository and installed UV on your [WSL](https://apps.microsoft.com/detail/9pn20msr04dw?hl=en-US&gl=US)
+
+- Download from [claude.ai](https://claude.ai/download)
+
+
+
+### 4.2. Configure Claude Desktop to launch the MCP server
+
+
+Linux (Ubuntu)
+
+- Locate and edit the `claude_desktop_config.json` file:
+- (If the file does not exist, create it)
+```bash
+~/.config/Claude/claude_desktop_config.json
+```
+
+- Add the following to the `"mcpServers"` section of the JSON file
+- Make sure to replace `` with the **full absolute path** to your `ros-mcp-server` folder (note: `~` for home directory may not work in JSON files):
+
+```json
+{
+ "mcpServers": {
+ "ros-mcp-server": {
+ "command": "uv",
+ "args": [
+ "--directory",
+ "//ros-mcp-server",
+ "run",
+ "server.py"
+ ]
+ }
+ }
+}
+```
+
+
+
+
+MacOS
+
+- Locate and edit the `claude_desktop_config.json` file:
+- (If the file does not exist, create it)
+```bash
+~/Library/Application\ Support/Claude/claude_desktop_config.json
+```
+
+- Add the following to the `"mcpServers"` section of the JSON file
+- Make sure to replace `` with the **full absolute path** to your `ros-mcp-server` folder (note: `~` for home directory may not work in JSON files):
+
+```json
+{
+ "mcpServers": {
+ "ros-mcp-server": {
+ "command": "uv",
+ "args": [
+ "--directory",
+ "//ros-mcp-server",
+ "run",
+ "server.py"
+ ]
+ }
+ }
+}
+```
+
+
+
+
+Windows (Using WSL)
+
+- Locate and edit the `claude_desktop_config.json` file:
+- (If the file does not exist, create it)
+```bash
+~/.config/Claude/claude_desktop_config.json
+```
+
+- Add the following to the `"mcpServers"` section of the JSON file
+- Make sure to replace `` with the **full absolute path** to your `ros-mcp-server` folder (note: `~` for home directory may not work in JSON files):
+- Set the **full WSL path** to your `uv` installation (e.g., `/home/youruser/.local/bin/uv`)
+- Use the correct **WSL distribution name** (e.g., `"Ubuntu-22.04"`)
+
+```json
+{
+ "mcpServers": {
+ "ros-mcp-server": {
+ "command": "wsl",
+ "args": [
+ "-d", "Ubuntu-22.04",
+ "/home//.local/bin/uv",
+ "--directory",
+ "//ros-mcp-server",
+ "run",
+ "server.py"
+ ]
+ }
+ }
+}
+```
+
+
+
+### 4.3. Alternative Configuration - HTTP Transport
+
+The above configurations sets up the MCP server using the default STDIO transport layer, which launches the server as a plugin automatically on launching Claude.
+
+It is also possible to configure the MCP server using the http transport layer, which configures Claude to connect to the MCP server when it is launched as a standalone application.
+
+For HTTP transport, the configuration is the same across all platforms. First start the MCP server manually:
+
+**Linux/macOS/Windows(WSL):**
+```bash
+cd //ros-mcp-server
+# Using command line arguments (recommended)
+uv run server.py --transport streamable-http --host 127.0.0.1 --port 9000
+
+# Or using environment variables (legacy)
+export MCP_TRANSPORT=streamable-http
+export MCP_HOST=127.0.0.1
+export MCP_PORT=9000
+uv run server.py
+```
+
+Then configure Claude Desktop to connect to the HTTP server (same for all platforms):
+
+```json
+{
+ "mcpServers": {
+ "ros-mcp-server-http": {
+ "name": "ROS-MCP Server (http)",
+ "transport": "http",
+ "url": "http://127.0.0.1:9000/mcp"
+ }
+ }
+}
+```
+
+
+ Comparison between STDIO and HTTP Transport
+
+#### STDIO Transport (Default)
+- **Best for**: Local development, single-user setups
+- **Pros**: Simple setup, no network configuration needed
+- **Cons**: MCP server and LLM/MCP client need to be running on the local machine.
+- **Use case**: Running MCP server directly with your LLM client
+
+#### HTTP/Streamable-HTTP Transport
+- **Best for**: Remote access, multiple clients, production deployments
+- **Pros**: Network accessible, multiple clients can connect
+- **Cons**: Requires network configuration, MCP server needs to be run independently.
+- **Use case**: Remote robots, team environments, web-based clients
+
+
+
+### 4.4. Test the connection
+- Launch Claude Desktop and check connection status.
+- The ros-mcp-server should be visible in your list of tools.
+
+
+
+
+
+
+ Troubleshooting
+
+- If the `ros-mcp-server` doesn't appear even after correctly configuring `claude_desktop_config.json`, try completely shutting down Claude Desktop using the commands below and then restarting it. This could be a Claude Desktop caching issue.
+```bash
+# Completely terminate Claude Desktop processes
+pkill -f claude-desktop
+# Or alternatively
+killall claude-desktop
+
+# Restart Claude Desktop
+claude-desktop
+```
+
+
+
+## Next Steps
+
+Once you have the MCP server installed from source, continue with the remaining setup steps:
+
+- **Install and run rosbridge** (on the target robot)
+- **Test your connection**
+- **Troubleshooting** (if needed)
+
+For detailed instructions on these steps, see the [main installation guide](installation.md#3-install-and-run-rosbridge-on-the-target-robot-where-ros-will-be-running).
diff --git a/docs/installation.md b/docs/installation.md
index a456d15..762c933 100644
--- a/docs/installation.md
+++ b/docs/installation.md
@@ -3,9 +3,7 @@
> ⚠️ **Prerequisite**: You need either ROS installed locally on your machine OR access over the network to a robot/computer with ROS installed. This MCP server connects to ROS systems on a robot, so a running ROS environment is required.
Installation includes the following steps:
-- Install the MCP server
- - Clone this repository
- - Install uv (Python virtual environment manager)
+- Install the MCP server using pip
- Install and configure the Language Model Client
- Install any language model client (We demonstrate with Claude Desktop)
- Configure the client to run the MCP server and connect automatically on launch.
@@ -17,38 +15,53 @@ Below are detailed instructions for each of these steps.
---
# 1. Install the MCP server (On the host machine where the LLM will be running)
-## 1.1. Clone the Repository
+Install using pipx (recommended for isolated installation):
```bash
-git clone https://github.com/robotmcp/ros-mcp-server.git
-```
-
-> ⚠️ **WSL Users**: Clone the repository in your WSL home directory (e.g., `/home/username/`) instead of the Windows filesystem mount (e.g., `/mnt/c/Users/username/`). Using the native Linux filesystem provides better performance and avoids potential permission issues.
-
-Note the **absolute path** to the cloned directory — you'll need this later when configuring your language model client.
+# Install pipx if you don't have it
+pip install pipx
----
+# Install ros-mcp using pipx
+pipx install ros-mcp
+```
+
+Why pipx?
-## 1.2. Install UV (Python Virtual Environment Manager)
+**Benefits of pipx:**
+- Isolated installation in its own virtual environment
+- Won't conflict with other Python packages
+- Easy to uninstall: `pipx uninstall ros-mcp`
+- Automatic PATH management
-You can install [`uv`](https://github.com/astral-sh/uv) using one of the following methods:
+
-Option A: Shell installer
+Alternative Installation Options
+
+### Option A: Install using pip
+For users who prefer traditional pip installation:
```bash
-curl -LsSf https://astral.sh/uv/install.sh | sh
+pip install ros-mcp
```
-
+### Option B: Install from Source
+For developers or advanced users who need to modify the source code, see [Installation from Source](installation-from-source.md).
-
-Option B: Using pip
+### Option C: Install from Source using pipx
+For developers who want to install from source but still use pipx for isolation:
```bash
-pip install uv
+# Clone the repository
+git clone https://github.com/robotmcp/ros-mcp-server.git
+cd ros-mcp-server
+
+# Install from source using pipx
+pipx install .
```
+> **Note**: This also works with regular pip: `pip install .`
+
---
@@ -94,19 +107,16 @@ This will have Claude running on Windows and the MCP server running on WSL. We a
~/.config/Claude/claude_desktop_config.json
```
-- Add the following to the `"mcpServers"` section of the JSON file
-- Make sure to replace `` with the **full absolute path** to your `ros-mcp-server` folder (note: `~` for home directory may not work in JSON files):
+- Add the following to the `"mcpServers"` section of the JSON file:
```json
{
"mcpServers": {
"ros-mcp-server": {
- "command": "uv",
+ "command": "bash",
"args": [
- "--directory",
- "//ros-mcp-server",
- "run",
- "server.py"
+ "-lc",
+ "ros-mcp --transport=stdio"
]
}
}
@@ -125,19 +135,16 @@ This will have Claude running on Windows and the MCP server running on WSL. We a
~/Library/Application\ Support/Claude/claude_desktop_config.json
```
-- Add the following to the `"mcpServers"` section of the JSON file
-- Make sure to replace `` with the **full absolute path** to your `ros-mcp-server` folder (note: `~` for home directory may not work in JSON files):
+- Add the following to the `"mcpServers"` section of the JSON file:
```json
{
- "mcpServers": {
+ "mcpServers":{
"ros-mcp-server": {
- "command": "uv",
+ "command": "zsh",
"args": [
- "--directory",
- "//ros-mcp-server",
- "run",
- "server.py"
+ "-lc",
+ "ros-mcp --transport=stdio"
]
}
}
@@ -156,24 +163,21 @@ This will have Claude running on Windows and the MCP server running on WSL. We a
~/.config/Claude/claude_desktop_config.json
```
-- Add the following to the `"mcpServers"` section of the JSON file
-- Make sure to replace `` with the **full absolute path** to your `ros-mcp-server` folder (note: `~` for home directory may not work in JSON files):
-- Set the **full WSL path** to your `uv` installation (e.g., `/home/youruser/.local/bin/uv`)
+- Add the following to the `"mcpServers"` section of the JSON file:
- Use the correct **WSL distribution name** (e.g., `"Ubuntu-22.04"`)
```json
{
- "mcpServers": {
+ "mcpServers":{
"ros-mcp-server": {
"command": "wsl",
- "args": [
- "-d", "Ubuntu-22.04",
- "/home//.local/bin/uv",
- "--directory",
- "//ros-mcp-server",
- "run",
- "server.py"
- ]
+ "args": [
+ "-d",
+ "Ubuntu-22.04",
+ "bash",
+ "-lc",
+ "ros-mcp --transport=stdio"
+ ]
}
}
}
@@ -196,7 +200,7 @@ For HTTP transport, the configuration is the same across all platforms. First st
```bash
cd //ros-mcp-server
# Using command line arguments (recommended)
-uv run server.py --transport streamable-http --host 127.0.0.1 --port 9000
+ros-mcp --transport streamable-http --host 127.0.0.1 --port 9000
# Or using environment variables (legacy)
export MCP_TRANSPORT=streamable-http
@@ -380,24 +384,22 @@ What topics and services do you see on the robot?
---
# 5. Alternate Clients (ChatGPT, Gemini, Cursor)
-
- Examples and setup instructions for other LLMs
+Examples and setup instructions for other LLM Hosts and Clients
-#### 3.2.1. Cursor IDE
+## 5.1. Cursor IDE
For detailed Cursor setup instructions, see our [Cursor Tutorial](../examples/7_cursor/README.md).
-#### 3.2.2. ChatGPT
+## 5.2. ChatGPT
For detailed ChatGPT setup instructions, see our [ChatGPT Tutorial](../examples/6_chatgpt/README.md).
-#### 3.2.3. Google Gemini
+## 5.3. Google Gemini
For detailed Gemini setup instructions, see our [Gemini Tutorial](../examples/2_gemini/README.md).
+## 5.4. Custom MCP Client
+You can also use the MCP server directly in your Python code.
-Custom MCP Client
-
-#### 3.2.1. Using the MCP Server Programmatically
-You can also use the MCP server directly in your Python code:
+Here is a python example of how to integrate it programmatically
```python
from mcp import ClientSession, StdioServerParameters
@@ -425,7 +427,10 @@ async def main():
# 6. Troubleshooting
-## 6.1. Common Issues
+
+6.1. Common Issues
+
+Here are some frequently encountered issues and their solutions:
MCP Server Not Appearing in Client
@@ -517,39 +522,50 @@ curl http://localhost:9000
-## 6.2. Debug Commands
+
+If you're still having issues:
+1. **Check the logs**: Look for error messages in your LLM client and MCP server logs
+2. **Test with turtlesim**: Try the [turtlesim tutorial](../examples/1_turtlesim/README.md) to verify basic functionality
+3. **Open an issue**: Create an issue on the [GitHub repository](https://github.com/robotmcp/ros-mcp-server/issues) with:
+ - Your operating system
+ - ROS version
+ - LLM client being used
+ - Error messages
+ - Steps to reproduce
+
+
+
+---
+
+
+
+
+6.2. Debug Commands
+
+Test ROS connectivity
```bash
-# Test ROS connectivity
ros2 topic list # For ROS 2
rostopic list # For ROS 1
+```
-# Test rosbridge
+Test rosbridge
+```bash
curl -I http://localhost:9090
+```
-# Test MCP server manually
-cd //ros-mcp-server
-uv run server.py
+Test MCP server manually
+```bash
+ros-mcp --transport=stdio
+```
-# Check processes
+Check running processes
+```bash
ps aux | grep rosbridge
ps aux | grep ros-mcp
```
-## 6.3. Getting Help
-
-
-If you're still having issues:
+
-1. **Check the logs**: Look for error messages in your LLM client and MCP server logs
-2. **Test with turtlesim**: Try the [turtlesim tutorial](../examples/1_turtlesim/README.md) to verify basic functionality
-3. **Open an issue**: Create an issue on the [GitHub repository](https://github.com/robotmcp/ros-mcp-server/issues) with:
- - Your operating system
- - ROS version
- - LLM client being used
- - Error messages
- - Steps to reproduce
-
-
---
\ No newline at end of file