An MCP (Model Context Protocol) server that wraps Phabricator's Conduit API, enabling any MCP client to interact with Phabricator tasks, code reviews, repositories, and more.
claude mcp add --scope user phabricator -- npx @freelancercom/phabricator-mcp@latestOr with environment variables (if not using ~/.arcrc):
claude mcp add --scope user phabricator \
-e PHABRICATOR_URL=https://phabricator.example.com \
-e PHABRICATOR_API_TOKEN=api-xxxxx \
-- npx @freelancercom/phabricator-mcp@latestThe --scope user flag installs the server globally, making it available in all projects.
Add to your Codex config (~/.codex/config.json):
{
"mcpServers": {
"phabricator": {
"command": "npx",
"args": ["@freelancercom/phabricator-mcp@latest"],
"env": {
"PHABRICATOR_URL": "https://phabricator.example.com",
"PHABRICATOR_API_TOKEN": "api-xxxxxxxxxxxxx"
}
}
}
}Add to your opencode config (~/.config/opencode/config.json):
{
"mcp": {
"servers": {
"phabricator": {
"command": "npx",
"args": ["@freelancercom/phabricator-mcp@latest"],
"env": {
"PHABRICATOR_URL": "https://phabricator.example.com",
"PHABRICATOR_API_TOKEN": "api-xxxxxxxxxxxxx"
}
}
}
}
}Add to your VS Code settings.json:
{
"claude.mcpServers": {
"phabricator": {
"command": "npx",
"args": ["@freelancercom/phabricator-mcp@latest"],
"env": {
"PHABRICATOR_URL": "https://phabricator.example.com",
"PHABRICATOR_API_TOKEN": "api-xxxxxxxxxxxxx"
}
}
}
}Add to your Cursor MCP config (~/.cursor/mcp.json):
{
"mcpServers": {
"phabricator": {
"command": "npx",
"args": ["@freelancercom/phabricator-mcp@latest"],
"env": {
"PHABRICATOR_URL": "https://phabricator.example.com",
"PHABRICATOR_API_TOKEN": "api-xxxxxxxxxxxxx"
}
}
}
}Add to your VS Code settings.json:
{
"github.copilot.chat.mcp.servers": {
"phabricator": {
"command": "npx",
"args": ["@freelancercom/phabricator-mcp@latest"],
"env": {
"PHABRICATOR_URL": "https://phabricator.example.com",
"PHABRICATOR_API_TOKEN": "api-xxxxxxxxxxxxx"
}
}
}
}The default install uses @freelancercom/phabricator-mcp@latest, which tells npx to check for updates on each run. No action needed.
If you pinned a specific version (e.g. @freelancercom/phabricator-mcp@1.0.0) or omitted the version suffix, npx caches the package and won't pick up new versions. To upgrade:
npx clear-npx-cacheThen restart your MCP client.
If you previously installed using the GitHub URL, update your config to use the npm package instead:
# Remove old server
claude mcp remove phabricator -s user
# Add new one
claude mcp add --scope user phabricator -- npx @freelancercom/phabricator-mcp@latestFor JSON configs, replace ["github:freelancer/phabricator-mcp"] with ["@freelancercom/phabricator-mcp@latest"] in your args.
The server automatically reads configuration from ~/.arcrc (created by Arcanist). No additional configuration is needed if you've already set up arc.
Alternatively, set environment variables (which take precedence over .arcrc):
PHABRICATOR_URL- Phabricator instance URLPHABRICATOR_API_TOKEN- Conduit API token
You can get an API token from your Phabricator instance at: Settings > Conduit API Tokens
By default, Claude Code will prompt you for permission each time a Phabricator tool is called. It's recommended to allowlist the read-only tools so they run without prompts, while keeping write operations (create, edit, comment) behind a confirmation step.
Add to your ~/.claude/settings.json:
{
"permissions": {
"allow": [
"mcp__phabricator__phabricator_task_search",
"mcp__phabricator__phabricator_revision_search",
"mcp__phabricator__phabricator_diff_search",
"mcp__phabricator__phabricator_get_raw_diff",
"mcp__phabricator__phabricator_repository_search",
"mcp__phabricator__phabricator_commit_search",
"mcp__phabricator__phabricator_user_whoami",
"mcp__phabricator__phabricator_user_search",
"mcp__phabricator__phabricator_project_search",
"mcp__phabricator__phabricator_column_search",
"mcp__phabricator__phabricator_paste_search",
"mcp__phabricator__phabricator_document_search",
"mcp__phabricator__phabricator_blog_search",
"mcp__phabricator__phabricator_blog_post_search",
"mcp__phabricator__phabricator_phid_lookup",
"mcp__phabricator__phabricator_phid_query",
"mcp__phabricator__phabricator_transaction_search",
"mcp__phabricator__phabricator_version"
]
}
}To allowlist all tools including write operations, use "mcp__phabricator__*" instead.
| Tool | Description |
|---|---|
phabricator_task_search |
Search tasks with filters (status, assignee, project, etc.) |
phabricator_task_create |
Create a new task |
phabricator_task_edit |
Edit an existing task |
phabricator_task_add_comment |
Add a comment to a task |
| Tool | Description |
|---|---|
phabricator_revision_search |
Search code review revisions |
phabricator_revision_edit |
Edit a revision (add reviewers, comment, etc.) |
phabricator_get_raw_diff |
Get the raw diff/patch content for a diff by ID |
phabricator_diff_search |
Search diffs |
| Tool | Description |
|---|---|
phabricator_repository_search |
Search repositories |
phabricator_commit_search |
Search commits |
| Tool | Description |
|---|---|
phabricator_user_whoami |
Get current authenticated user |
phabricator_user_search |
Search users |
| Tool | Description |
|---|---|
phabricator_project_search |
Search projects |
phabricator_project_edit |
Edit a project |
phabricator_column_search |
Search workboard columns |
| Tool | Description |
|---|---|
phabricator_paste_search |
Search pastes |
phabricator_paste_create |
Create a paste |
| Tool | Description |
|---|---|
phabricator_document_search |
Search wiki documents |
phabricator_document_edit |
Edit a wiki document |
| Tool | Description |
|---|---|
phabricator_blog_search |
Search Phame blogs |
phabricator_blog_post_search |
Search blog posts |
phabricator_blog_post_create |
Create a new blog post |
phabricator_blog_post_edit |
Edit an existing blog post |
phabricator_blog_post_add_comment |
Add a comment to a blog post |
| Tool | Description |
|---|---|
phabricator_transaction_search |
Search transactions (comments, status changes, etc.) on any object |
| Tool | Description |
|---|---|
phabricator_phid_lookup |
Look up PHIDs by name (e.g., "T123", "@username") |
phabricator_phid_query |
Get details about PHIDs |
| Tool | Description |
|---|---|
phabricator_version |
Get the version of the running phabricator-mcp server |
Once connected, just ask your AI assistant to perform Phabricator tasks in natural language:
Tasks
- "Show my assigned tasks"
- "Create a task titled 'Fix login bug' in project Backend"
- "Add a comment to T12345 saying the fix is ready for review"
- "Close task T12345"
Code Reviews
- "Show my open diffs"
- "What's the status of D6789?"
- "Review the code changes in D6789"
- "Add @alice as a reviewer to D6789"
Search & Lookup
- "Find user john.doe"
- "Search for projects with 'backend' in the name"
- "Search commits by author alice"
- "Look up T123 and D456"
- "Show me the comments on D6789"
Wiki & Pastes
- "Find wiki pages about deployment"
- "Create a paste with this error log"
Blogs
- "Search for blog posts about release notes"
- "Create a new draft blog post titled 'Q1 Update' on the engineering blog"
- "Publish blog post J42"
- "Add a comment to blog post J15"
The appropriate tools are called automatically based on your request.
git clone https://github.com/freelancer/phabricator-mcp.git
cd phabricator-mcp
npm install
npm run build
npm run dev # watch modesrc/index.ts- Entry point, MCP server with stdio transportsrc/config.ts- Config loader (reads~/.arcrcor env vars)src/client/conduit.ts- Phabricator Conduit API clientsrc/tools/*.ts- Tool implementations per Phabricator application
MIT