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

A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact intelligently with Phabricator for advanced task management and code review workflows.

## โœจ Features

### ๐Ÿ”‘ **Personal Authentication**
- **Per-User Authentication**: Configure your personal Phabricator API token in your MCP client
- **User Attribution**: Comments and reviews appear under YOUR name instead of a shared service account
- **Flexible Configuration**: Supports both personal tokens and shared environment variables
- **Standard MCP Integration**: Follows MCP ecosystem best practices for authentication

### ๐ŸŽฏ **Core Task Management**
- **Task Operations**: View task details, read comments, add comments, subscribe users to tasks
- **Rich Formatting**: Well-structured output with task metadata, status, priority, and full comment threads

### ๐Ÿ” **Advanced Code Review**
- **Differential Management**: View revisions, read comments, approve/reject code changes
- **Intelligent Review Feedback**: Analyze comments with surrounding code context for actionable insights
- **Inline Comments**: Add targeted feedback to specific lines in code reviews
- **Code Context Analysis**: Correlate review comments with actual code changes and locations

### ๐Ÿš€ **Server Architecture** 
- **HTTP/SSE Transport**: FastMCP-based server for reliable production use (default on port 8932)
- **stdio Transport**: Legacy support for direct MCP client integration
- **Comprehensive API**: 11 specialized tools for complete Phabricator workflow automation

### ๐Ÿง  **Smart Review Analysis**
- **Comment-Code Correlation**: Intelligently link review feedback to specific code locations
- **Contextual Code Display**: Show surrounding code lines for better understanding
- **Action Item Generation**: Categorize feedback into actionable to-do items
- **Priority Classification**: Organize comments by Issues โ†’ Suggestions โ†’ Nits โ†’ Other

## ๐Ÿ›  Available Tools

### **Task Management (3 tools)**
- `get-task` - Get comprehensive task details with comments
- `add-task-comment` - Add comments to tasks
- `subscribe-to-task` - Subscribe users to task notifications

### **Code Review (8 tools)**
- `get-differential` - Get basic differential revision details
- `get-differential-detailed` - Get comprehensive review with code changes
- `get-review-feedback` - : Get intelligent review analysis with code context
- `add-differential-comment` - Add general comments to reviews
- `add-inline-comment` - : Add targeted inline comments to specific code lines
- `accept-differential` - Accept/approve differential revisions
- `request-changes-differential` - Request changes with optional feedback
- `subscribe-to-differential` - Subscribe users to review notifications

## ๐Ÿ“‹ Prerequisites

- **Python 3.8+**
- **Phabricator instance** with API access
- **API token** from Phabricator (Settings โ†’ Conduit API Tokens)

## โšก Quick Start

### **Automated Setup (Recommended)**

```bash
# Clone and navigate
git clone https://github.com/YushengAuggie/phabricator-mcp-server.git
cd phabricator-mcp-server

# Configure credentials
echo "PHABRICATOR_TOKEN=your-32-character-api-token" > .env
echo "PHABRICATOR_URL=https://your-phabricator-instance.com/api/" >> .env

# Start server (handles all setup automatically)
python3 start.py --mode http
```

The server starts on `http://localhost:8932` with automatic dependency management.

### **Manual Setup**

```bash
# Create virtual environment
python3 -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# Install with dependencies
pip install -e .

# Start HTTP server
python src/servers/http_server.py

# Or start stdio server
python src/servers/stdio_server.py
```

## โš™๏ธ Configuration

### **Authentication Configuration**

The server supports **hybrid authentication** with two modes that work seamlessly together:

1. **Personal API Token (Recommended)**: Pass your personal token through MCP client configuration for user attribution
2. **Environment Variable Fallback**: Use a shared service account token via environment variables

**๐Ÿ”‘ Getting Your API Token:**
1. Go to your Phabricator instance โ†’ Settings โ†’ API Tokens
2. Create a new token with appropriate permissions
3. Copy the 32-character token for use in configuration

**๐ŸŒ Finding Your Phabricator URL:**
Your Phabricator API URL should end with `/api/` and typically looks like:
- `https://phabricator.example.com/api/`
- `https://phab.yourcompany.com/api/`
- `https://your-domain.phabricator.com/api/`

If unsure, check your Phabricator instance's main page - the URL is usually `[your-base-url]/api/`

### **๐Ÿš€ MCP Client Configuration**

#### **HTTP/SSE Transport (Recommended)**

The server automatically detects your environment configuration:

**Claude Code CLI (Easiest):**
```bash
claude mcp add --transport sse phabricator http://localhost:8932/sse \
  --env "PHABRICATOR_TOKEN=api-xxxxxxx" \
  --env "PHABRICATOR_URL=https://example.com/api/"
```

> Replace `api-xxxxxxx` with your actual API token and `https://example.com/api/` with your Phabricator instance URL

**Manual Configuration:**
```json
{
  "mcpServers": {
    "phabricator": {
      "url": "http://localhost:8932/sse",
      "env": {
        "PHABRICATOR_TOKEN": "api-xxxxxxx",
        "PHABRICATOR_URL": "https://example.com/api/"
      }
    }
  }
}
```

#### **stdio Transport**

For Claude Desktop and direct MCP integration:

```json
{
  "mcpServers": {
    "phabricator": {
      "command": "python",
      "args": ["path/to/phabricator-mcp-server/start.py"],
      "cwd": "path/to/phabricator-mcp-server",
      "env": {
        "PHABRICATOR_TOKEN": "api-xxxxxxx",
        "PHABRICATOR_URL": "https://example.com/api/"
      }
    }
  }
}
```

#### **Multiple Authentication Options**

The server supports multiple ways to authenticate:

1. **Personal Token in Tools**: Some tools accept an `api_token` parameter
2. **Environment Variables**: Set `PHABRICATOR_TOKEN` in MCP client config
3. **Fallback Token**: Create `.env` file in server directory

**Priority Order**: Personal token โ†’ MCP environment โ†’ Server `.env` file

#### **Server Environment Variables (Fallback)**

Create `.env` file in project root for fallback authentication:

```env
# Fallback: Shared service account token  
PHABRICATOR_TOKEN=your-shared-token-here

# Optional: Custom Phabricator URL (auto-detected from token by default)
# PHABRICATOR_URL=https://your-phabricator-instance.com/api/

# Optional: Custom server port (default: 8932)
# MCP_SERVER_PORT=8932
```

### **๐Ÿ”ง Advanced Configuration**

#### **User Attribution**
- **Personal tokens**: Comments appear under YOUR name
- **Shared tokens**: Comments appear under the service account name
- **Mixed usage**: Different tools can use different tokens

#### **Token Security**
- Tokens are passed securely through MCP protocol
- No tokens stored on disk (except optional `.env` fallback)
- Each client can use their own personal token

#### **Troubleshooting Authentication**

If you see authentication errors:

1. **Check token validity**: Test your token directly with Phabricator API
2. **Verify configuration**: Ensure `PHABRICATOR_TOKEN` is set correctly
3. **Check environment**: Run server with debugging to see environment variables
4. **Use personal token**: Pass `api_token` parameter directly to tools

**Debugging Commands:**
```bash
# Check if server can start with your token
PHABRICATOR_TOKEN=your-token python start.py --mode http

# Test token manually
curl -d "api.token=your-token" https://your-phabricator-instance.com/api/user.whoami
```

## ๐Ÿ’ป Usage

### **With Claude Desktop**

Add to Claude Desktop configuration (`claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "phabricator": {
      "command": "python",
      "args": ["path/to/phabricator-mcp-server/start.py", "--mode", "stdio"],
      "cwd": "path/to/phabricator-mcp-server"
    }
  }
}
```

### **With HTTP/SSE Transport**

```json
{
  "mcpServers": {
    "phabricator": {
      "url": "http://localhost:8932/sse"
    }
  }
}
```

### **Programmatic Usage**

```python
from src.core.client import PhabricatorClient

# Initialize client
client = PhabricatorClient(
    token="your-32-char-api-token",
    host="https://your-instance.com/api/"
)

# Get enhanced review feedback with code context
feedback = await client.get_review_feedback_with_code_context("12345", context_lines=7)

# Add inline comment to specific line
await client.add_inline_comment("12345", "src/file.py", 42, "Consider using a more descriptive variable name")

# Get task with full context
task = await client.get_task("6789")
comments = await client.get_task_comments("6789")
```

### **Example: AI-Powered Code Review**

```python
# Get intelligent review feedback
feedback_data = await client.get_review_feedback_with_code_context("D123", context_lines=5)

# The feedback includes:
# - Comments correlated with specific code locations
# - Surrounding code context for each comment
# - Action items categorized by priority
# - File-by-file breakdown of changes
```

## ๐Ÿงช Development & Testing

### **Install Development Dependencies**

```bash
# Install with dev dependencies
pip install -e ".[dev]"

# Or with uv (faster)
uv pip install -e ".[dev]"
```

### **Run Tests**

```bash
# Run all tests with our test runner
python run_tests.py

# Run specific test suites
python -m pytest src/tests/test_tool_completeness.py -v
python -m pytest src/tests/test_tool_integration.py -v

# Run with coverage
python -m pytest --cov=src --cov-report=html
```

### **Code Quality**

```bash
# Format code
black src/
ruff check src/ --fix

# Type checking
mypy src/

# Run all quality checks
black src/ && ruff check src/ && mypy src/ && python run_tests.py
```

### **Testing Features**
- **Tool Completeness**: Validates all 11 tools are properly configured
- **Integration Testing**: Tests all tools with realistic mock data
- **Error Handling**: Validates graceful failure modes
- **Argument Validation**: Ensures correct required/optional parameters
- **Mock Phabricator**: No API calls needed for testing

## ๐ŸŽฏ Advanced Features

### **Intelligent Review Feedback Analysis**

The `get-review-feedback` tool provides advanced analysis:

```python
# Returns structured feedback with:
{
    "revision": {...},              # Revision metadata
    "review_feedback": [            # Enhanced comment analysis
        {
            "comment": "Fix this issue",
            "author": "reviewer-phid",
            "type": "inline",
            "code_context": {
                "file": "src/example.py",
                "target_line": 42,
                "hunk_info": "@@ -40,7 +40,7 @@",
                "lines": [           # Surrounding code context
                    {"line_number": 40, "content": "def example():", "is_target": False},
                    {"line_number": 41, "content": "    # TODO: fix this", "is_target": False},
                    {"line_number": 42, "content": "    return broken_code", "is_target": True},
                    {"line_number": 43, "content": "    # end function", "is_target": False},
                ]
            },
            "primary_file": "src/example.py",
            "primary_line": 42
        }
    ],
    "summary": "Analysis summary with actionable insights",
    "total_comments": 5,
    "comments_with_context": 3
}
```

### **Smart Comment-Code Correlation**

- **Keyword Extraction**: Identifies variable names, function names in comments
- **Code Location Mapping**: Links comments to specific files and line numbers  
- **Context Enrichment**: Shows surrounding code for better understanding
- **Priority Classification**: Organizes feedback by importance

## ๐Ÿค Contributing

We welcome contributions! Here's how to get started:

```bash
# Fork and clone the repository
git clone https://github.com/your-username/phabricator-mcp-server.git
cd phabricator-mcp-server

# Create feature branch
git checkout -b feature/amazing-feature

# Make changes and test
python run_tests.py

# Commit and push
git commit -m 'feat: add amazing feature'
git push origin feature/amazing-feature

# Open a Pull Request
```

### **Development Guidelines**
- Follow existing code style (black + ruff)
- Add tests for new features
- Update documentation as needed
- Ensure all quality checks pass

## ๐Ÿ“„ License

MIT License - see [LICENSE](LICENSE) file for details.

## ๐Ÿ”— Links

- **Repository**: https://github.com/YushengAuggie/phabricator-mcp-server
- **Model Context Protocol**: https://modelcontextprotocol.io/
- **FastMCP**: https://github.com/jlowin/fastmcp
- **Phabricator API**: https://secure.phabricator.com/book/phabricator/article/conduit/

Maintenance

ActivityInactive
ResponsivenessNo issues