Skip to main content
Glama
anilreddykota

WebsiteOps MCP Server

README.md
# WebsiteOps MCP Server

WebsiteOps MCP is a production-grade, local-first Model Context Protocol (MCP) server designed to bridge AI coding assistants (ChatGPT, Claude Desktop, Cursor, VS Code, Windsurf, Gemini CLI, etc.) with website codebases, local git repositories, and shared hosting / cPanel environments via FTP/SFTP.

With WebsiteOps, AI assistants can discover structure, analyze functions/classes/routes/schemas, monitor file changes, run git commits/pulls/pushes, perform smart diff-based deployments, create backups, and rollback deployments—all locally and offline.

---

## Key Features

1. **Website Discovery**: Analyzes codebases to identify language, framework (Laravel, CodeIgniter, Express, React, Next.js), database type, and stats (route/form/API counts).
2. **Path Security & Isolation**: Strict validation to ensure no read/write operations escape the configured site root.
3. **Encrypted Credentials**: AES-256-GCM secure storage for FTP/SFTP credentials.
4. **Offline Semantic Search**: Built-in TF-IDF and structure matching index for offline concepts search (e.g. "Find payment gateway", "Find registration flow").
5. **Smart Deployments**:
   - Detects only modified/added files.
   - Automatically downloads current remote versions to local backup folders before pushing changes.
   - Synchronizes deletes if desired.
   - Supports 1-click rollback restoring the remote server state from the backup folder.
6. **Background File Watching**: Chokidar-driven file watching automatically rebuilds the code index when files change.
7. **Git wrapper**: Runs standard git commands directly through the AI.

---

## Installation & Setup

### 1. Prerequisites
- **Node.js** (v18 or higher recommended)
- **Git** installed and available in system PATH

### 2. Setup Server
Clone or copy this project to your directory (e.g. `C:\mcp-servers\websiteops-mcp`), then run:

```bash
npm install
npm run build
```

This compiles TypeScript code from `src/` to `dist/`.

---

## Multi-Website Configuration

You can manage unlimited websites. Website configurations are stored locally in SQLite (`.websiteops/metadata.db`) with sensitive passwords and private keys encrypted.

### Registering a Site
To add a site, call the `add_site` tool. Note that **only `name` and `localPath` are required**. All FTP settings are optional:

```json
{
  "name": "project1",
  "localPath": "/Users/username/Projects/my-site"
}
```

If you also wish to configure FTP/SFTP deployment for the site:
```json
{
  "name": "project1",
  "localPath": "/Users/username/Projects/my-site",
  "remotePath": "/public_html",
  "ftpHost": "ftp.example.com",
  "ftpPort": 21,
  "ftpUser": "ftp_username",
  "ftpPassword": "secure_ftp_password",
  "ftpType": "ftp"
}
```

For SFTP with Private Key:
```json
{
  "name": "project2",
  "localPath": "C:/Projects/my-next-site",
  "remotePath": "/var/www/next",
  "ftpHost": "ssh.example.com",
  "ftpPort": 22,
  "ftpUser": "ubuntu",
  "ftpType": "sftp",
  "privateKey": "-----BEGIN OPENSSH PRIVATE KEY-----\n..."
}
```

---

## Client Configuration Examples

Add the server to your preferred MCP host configuration:

### Claude Desktop
Add this to your `claude_desktop_config.json` (located at `%APPDATA%\Claude\claude_desktop_config.json` on Windows or `~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):

```json
{
  "mcpServers": {
    "websiteops": {
      "command": "npx",
      "args": [
        "-y",
        "websiteops-mcp"
      ],
      "env": {
        "WEBSITEOPS_SECRET_KEY": "YOUR_SUPER_SECRET_KEY"
      }
    }
  }
}
```

### Cursor, VS Code, Windsurf
Add a new MCP server in the settings panel:
- **Type**: `stdio`
- **Command**: `npx -y websiteops-mcp`
- **Environment variables**: `WEBSITEOPS_SECRET_KEY=YOUR_SUPER_SECRET_KEY`

*Alternatively, you can run a locally cloned server:*
- **Command**: `node /path/to/cloned/websiteops-mcp/dist/index.js`

---

## SQLite Metadata Schema Details

WebsiteOps stores data locally inside a `.websiteops` folder created in the server's working directory:
- **sites**: Stores paths, connection details, and credentials (encrypted).
- **deployments**: Tracks deployment status, timestamps, commit hashes, errors, and local backup folder directories.
- **code_index**: Extracted classes, functions, routes, forms, payments, and authentication structures.
- **search_index**: Document terms (TF-IDF tokens) for offline text queries.

---

## MCP Tools Reference

| Tool Name | Parameters | Description |
| :--- | :--- | :--- |
| `add_site` | name, localPath, remotePath?, ftpHost?, ftpPort?, ftpUser?, ftpPassword?, ftpType?, privateKey? | Register a new website profile (FTP configuration is optional) |
| `list_sites` | | List all configured website profiles |
| `remove_site` | id | Remove a site connection profile |
| `discover_website` | siteName, siteId, localPath | Auto-detect framework, language, DB, count of routes |
| `get_project_tree` | siteName, siteId, maxDepth | Return file/folder listing of project |
| `read_file` | siteName, filePath | Read contents of a local file safely |
| `write_file` / `create_file` | siteName, filePath, content | Edit or create local files safely |
| `delete_file` | siteName, filePath | Delete a local file |
| `search_files` / `search_code` | siteName, query | Find file name patterns or search text inside files |
| `search_functions` / `search_classes` / `search_routes` | siteName, query | Find classes, functions or routes indexed in codebase |
| `git_status` / `git_diff` / `git_commit` | siteName, options/message/files | Core Git actions wrapper |
| `git_pull` / `git_push` / `git_sync` | siteName | Pull/Push/Sync commits with remote repository |
| `ftp_connect` / `ftp_compare` | siteName | Verify connection or check local vs remote file diffs |
| `ftp_sync` | siteName | Full directory synchronisation to remote |
| `deploy_project` / `deploy_changed_files` | siteName, files, commitHash | Safe deployment with auto-backup of remote files before upload |
| `rollback_deployment` | deploymentId | Restore the remote file state from a previous backup |
| `deployment_history` | siteName | View previous deployment attempts and logs |
| `semantic_search` | query, siteName | Local offline search for terms (e.g. login, Payment gateways) |