Skip to main content
Glama
README.md
# MCP Testing Server

A Model Context Protocol (MCP) server for testing API endpoints, web browsers, and phone UI locally.

## Features

### API Testing
- Make HTTP requests (GET, POST, PUT, DELETE, PATCH)
- Batch API testing
- Custom headers, body, and query parameters
- Response validation

### Web Browser Testing
- Navigate to URLs
- Click elements
- Type into input fields
- Take screenshots
- Extract text content
- Wait for elements
- Multiple tabs/pages support

### Phone UI Testing
- Mobile browser simulation with device presets
- Tap interactions
- Swipe gestures
- Mobile viewport screenshots
- Device-specific testing (iPhone, Samsung, etc.)

## Setup

### Prerequisites
- Python 3.8 or higher
- pip (Python package manager)

### Installation

1. Navigate to the mcp-server directory:
```bash
cd mcp-server
```

2. Create a virtual environment (recommended):
```bash
python3 -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
```

3. Install dependencies:
```bash
pip install -r requirements.txt
```

4. Install Playwright browsers:
```bash
playwright install chromium
```

## Running the Server

### Method 1: Direct Python execution
```bash
python server.py
```

### Method 2: Using the startup script
```bash
chmod +x start.sh
./start.sh
```

### Method 3: As an MCP server (for Cursor/Claude Desktop)
Add to your MCP configuration file (usually `~/.cursor/mcp.json` or similar):

```json
{
  "mcpServers": {
    "testing-server": {
      "command": "python",
      "args": ["/absolute/path/to/mcp-server/server.py"],
      "env": {}
    }
  }
}
```

## Usage Examples

### API Testing

**Test a GET request:**
```json
{
  "tool": "api_test_request",
  "arguments": {
    "url": "https://api.example.com/users",
    "method": "GET",
    "headers": {
      "Authorization": "Bearer token"
    }
  }
}
```

**Test a POST request:**
```json
{
  "tool": "api_test_request",
  "arguments": {
    "url": "https://api.example.com/users",
    "method": "POST",
    "headers": {
      "Content-Type": "application/json"
    },
    "body": {
      "name": "John Doe",
      "email": "john@example.com"
    }
  }
}
```

### Web Browser Testing

**Navigate to a URL:**
```json
{
  "tool": "browser_navigate",
  "arguments": {
    "url": "https://example.com",
    "page_id": "main"
  }
}
```

**Click an element:**
```json
{
  "tool": "browser_click",
  "arguments": {
    "selector": "button#submit",
    "page_id": "main"
  }
}
```

**Take a screenshot:**
```json
{
  "tool": "browser_screenshot",
  "arguments": {
    "page_id": "main",
    "full_page": true,
    "path": "./screenshot.png"
  }
}
```

### Phone UI Testing

**Navigate on mobile:**
```json
{
  "tool": "phone_navigate",
  "arguments": {
    "url": "https://example.com",
    "device": "iPhone 12",
    "page_id": "mobile_test"
  }
}
```

**Tap an element:**
```json
{
  "tool": "phone_tap",
  "arguments": {
    "selector": "button.login",
    "page_id": "mobile_test"
  }
}
```

**Swipe:**
```json
{
  "tool": "phone_swipe",
  "arguments": {
    "direction": "up",
    "distance": 300,
    "page_id": "mobile_test"
  }
}
```

## Available Device Presets

- iPhone 12
- iPhone 13
- iPhone 13 Pro
- iPhone 14
- Samsung Galaxy S21
- Samsung Galaxy S20
- Pixel 5
- iPad Pro
- And more (see Playwright device list)

## Troubleshooting

### Browser doesn't launch
- Make sure Playwright browsers are installed: `playwright install chromium`
- Check that you have necessary system dependencies

### Import errors
- Ensure all dependencies are installed: `pip install -r requirements.txt`
- Verify Python version is 3.8+

### Port conflicts
- The server uses stdio for communication, so no ports are needed
- If browser instances conflict, close existing browser windows

## Notes

- The server runs in non-headless mode by default (browsers are visible)
- Multiple pages/tabs are supported via `page_id` parameter
- Screenshots can be saved to disk or returned as base64
- All browser instances are managed automatically

## License

This is a testing tool for local development purposes.