npm package: @sigmaiq/forge-mcp-server
Description: MCP server for FORGE Develop — enterprise project management & sprint planning on Palantir Foundry. 55 tools covering full CRUD for products, tasks, sprints, epics, releases, subtasks, dependencies, comments, users, memberships, asks, notifications, activ
Author: SigmaIQ
Latest version: 2.0.1

# FORGE MCP Server

MCP (Model Context Protocol) server for **FORGE Develop** — enterprise project management & sprint planning on Palantir Foundry. 55 tools covering full CRUD for all FORGE entities.

## Quick Start

```bash
npm install -g @sigmaiq/forge-mcp-server
```

Or run directly:
```bash
npx @sigmaiq/forge-mcp-server
```

### Environment
| Variable | Required | Description |
|----------|----------|-------------|
| `FOUNDRY_TOKEN` | Yes | Bearer token for SigmaIQ Foundry (`https://sigmaiq.palantirfoundry.com`) |
| `TRANSPORT` | No | `stdio` (default) or `http` |
| `PORT` | No | HTTP port (default: 3100) |
| `MCP_API_KEY` | No | Optional Bearer auth for HTTP mode |

### Claude Code Configuration

Add to `~/.claude.json`:
```json
{
  "mcpServers": {
    "forge-mcp": {
      "command": "npx",
      "args": ["-y", "@sigmaiq/forge-mcp-server"],
      "env": {
        "FOUNDRY_TOKEN": "your-token-here"
      }
    }
  }
}
```

### HTTP Mode
```bash
TRANSPORT=http PORT=3100 FOUNDRY_TOKEN=... npx @sigmaiq/forge-mcp-server
```
- `POST /mcp` — MCP protocol endpoint
- `GET /health` — Health check

---

## Available Tools (55)

### Products
| Tool | Description |
|------|-------------|
| `forge_list_products` | List all active products |
| `forge_get_product` | Get product by UUID or name (partial match) |
| `forge_create_product` | Create product with board + columns from template |
| `forge_update_product` | Update product fields |
| `forge_delete_product` | Archive product (soft delete) |

### Tasks
| Tool | Description |
|------|-------------|
| `forge_list_tasks` | List tasks with filters (status, priority, sprint, assignee) |
| `forge_get_task` | Get task by display key (e.g. FORGE-5) or UUID |
| `forge_search_tasks` | Full-text search across title, key, description |
| `forge_create_task` | Create task (auto-generates display key) |
| `forge_update_task` | Update task fields with lifecycle timestamps |
| `forge_delete_task` | Delete task |

### Sprints
| Tool | Description |
|------|-------------|
| `forge_list_sprints` | List sprints with status filter |
| `forge_get_sprint` | Get sprint with task summary |
| `forge_create_sprint` | Create sprint (auto-calculates sprint number) |
| `forge_update_sprint` | Update sprint fields (name, goal, dates, capacity) |
| `forge_update_sprint_status` | Start/complete sprint (auto-calculates velocity) |
| `forge_delete_sprint` | Delete sprint |

### Epics
| Tool | Description |
|------|-------------|
| `forge_list_epics` | List epics with status filter |
| `forge_create_epic` | Create epic |
| `forge_update_epic` | Update epic fields |
| `forge_delete_epic` | Delete epic |

### Releases
| Tool | Description |
|------|-------------|
| `forge_list_releases` | List releases for a product |
| `forge_create_release` | Create release |
| `forge_update_release` | Update release fields |
| `forge_delete_release` | Delete release |

### Subtasks
| Tool | Description |
|------|-------------|
| `forge_list_subtasks` | List subtasks for a task |
| `forge_create_subtask` | Create subtask on a task |
| `forge_update_subtask` | Toggle completed, edit title |
| `forge_delete_subtask` | Delete subtask |

### Dependencies
| Tool | Description |
|------|-------------|
| `forge_list_dependencies` | List "blocked by" dependencies for a task |
| `forge_create_dependency` | Add blocked-by dependency between two tasks |
| `forge_delete_dependency` | Remove dependency |

### Comments
| Tool | Description |
|------|-------------|
| `forge_list_comments` | List comments on a task |
| `forge_add_comment` | Add comment to a task |
| `forge_update_comment` | Edit comment body |
| `forge_delete_comment` | Delete comment |

### Board
| Tool | Description |
|------|-------------|
| `forge_get_board_status` | Column summary with task counts and WIP status |

### Users
| Tool | Description |
|------|-------------|
| `forge_list_users` | List all active users |
| `forge_create_user` | Create SSO or local user |
| `forge_update_user` | Update user fields (role, status, profile) |

### Memberships
| Tool | Description |
|------|-------------|
| `forge_list_memberships` | List product memberships (by product or user) |
| `forge_create_membership` | Assign user to product with role |
| `forge_delete_membership` | Remove user from product |

### Asks (Feature Requests)
| Tool | Description |
|------|-------------|
| `forge_list_asks` | List asks with status filter |
| `forge_create_ask` | Create feature request |
| `forge_update_ask` | Update ask fields |
| `forge_delete_ask` | Delete ask |

### Notifications
| Tool | Description |
|------|-------------|
| `forge_list_notifications` | List notifications for a user |
| `forge_create_notification` | Send notification to a user |
| `forge_update_notification` | Mark read/unread |
| `forge_delete_notification` | Delete notification |

### Activity Log
| Tool | Description |
|------|-------------|
| `forge_list_activity_log` | List activity entries for an entity |
| `forge_create_activity_log` | Log an audit trail entry |

### Briefing Notebooks
| Tool | Description |
|------|-------------|
| `forge_list_briefing_notebooks` | List notebooks by product or owner |
| `forge_create_briefing_notebook` | Create briefing notebook |
| `forge_update_briefing_notebook` | Update notebook content |
| `forge_delete_briefing_notebook` | Delete notebook |

---

## Examples

### Create a product with a Kanban board
```
forge_create_product({
  name: "Acme Platform",
  key_prefix: "ACME",
  description: "Main product for Acme Corp",
  board_template: "kanban"
})
```

### Create and assign a task
```
forge_create_task({
  product_id: "product-uuid",
  title: "Implement user authentication",
  task_type: "Story",
  priority: "High",
  assignee_user_id: "user-uuid"
})
```

### Plan a sprint
```
forge_create_sprint({
  product_id: "product-uuid",
  name: "Sprint 5",
  goal: "Complete authentication module",
  start_date: "2026-03-30",
  end_date: "2026-04-13",
  capacity: 40
})
```

### Move a task through the workflow
```
forge_update_task({ identifier: "ACME-12", status: "InProgress" })
forge_update_task({ identifier: "ACME-12", status: "Done" })
```

### Break down work with subtasks
```
forge_create_subtask({
  task_identifier: "ACME-12",
  title: "Write unit tests for login flow"
})
```

### Block a task with a dependency
```
forge_create_dependency({
  source_task_identifier: "ACME-15",
  target_task_identifier: "ACME-12"
})
```

### Complete a sprint (auto-calculates velocity)
```
forge_update_sprint_status({ sprint_id: "sprint-uuid", new_status: "Completed" })
```

### Natural language in Claude Code
```
> List my FORGE products
> Show all InProgress tasks for Acme Platform
> Create a high-priority bug "Login button unresponsive" in ACME
> Move ACME-12 to Done
> What's the board status for Acme?
> Add a subtask "Write tests" to ACME-12
> Assign jane@acme.com to the Acme Platform product as a Member
```

---

## Architecture

- Uses Foundry v2 REST API directly (no OSDK npm packages needed)
- Communicates via stdio (default) or HTTP
- All update actions send **full payloads** to prevent OSDK data wipe
- Task identifiers accept display keys (e.g. `ACME-12`) or UUIDs
- Product creation auto-provisions board + columns from templates

### Board Templates
| Template | Columns | Description |
|----------|---------|-------------|
| `scrum` | 8 | Backlog, To Do, In Progress, In Review, QA, Done, Blocked, Cancelled |
| `kanban` | 6 | Backlog, Ready, Doing, Testing, Done, Blocked (with WIP limits) |
| `bug-triage` | 8 | New, Triaged, Investigating, Fix in Progress, Verify, Resolved, On Hold, Won't Fix |
| `simple` | 3 | To Do, In Progress, Done |