@xferops/forge-mcp 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/release.yml +50 -0
- package/README.md +225 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +739 -0
- package/package.json +40 -0
- package/skill/SKILL.md +13 -0
- package/skill/forge-board-admin/SKILL.md +99 -0
- package/skill/forge-dev-workflow/SKILL.md +120 -0
- package/skill/forge-setup/SKILL.md +55 -0
- package/src/index.ts +1006 -0
- package/tsconfig.json +14 -0
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@xferops/forge-mcp",
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "MCP server for Forge (XferOps project management) - works with Claude Code, Codex, OpenClaw, and any MCP consumer",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"forge-mcp": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"dev": "tsx src/index.ts",
|
|
13
|
+
"start": "node dist/index.js"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"mcp",
|
|
17
|
+
"forge",
|
|
18
|
+
"kanban",
|
|
19
|
+
"project-management",
|
|
20
|
+
"claude",
|
|
21
|
+
"codex",
|
|
22
|
+
"openclaw",
|
|
23
|
+
"xferops"
|
|
24
|
+
],
|
|
25
|
+
"author": "XferOps <support@xferops.com>",
|
|
26
|
+
"license": "MIT",
|
|
27
|
+
"repository": {
|
|
28
|
+
"type": "git",
|
|
29
|
+
"url": "https://github.com/XferOps/forge-mcp.git"
|
|
30
|
+
},
|
|
31
|
+
"homepage": "https://forge.xferops.dev/docs",
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@modelcontextprotocol/sdk": "^1.0.0"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@types/node": "^22.0.0",
|
|
37
|
+
"tsx": "^4.0.0",
|
|
38
|
+
"typescript": "^5.0.0"
|
|
39
|
+
}
|
|
40
|
+
}
|
package/skill/SKILL.md
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Forge Skills
|
|
2
|
+
|
|
3
|
+
The Forge MCP skill has been split into three focused skills. Use the one that matches your intent:
|
|
4
|
+
|
|
5
|
+
| Skill | When to use |
|
|
6
|
+
|-------|-------------|
|
|
7
|
+
| [`forge-dev-workflow`](./forge-dev-workflow/SKILL.md) | Picking up tickets, moving them through columns, linking PRs, commenting — the daily dev loop |
|
|
8
|
+
| [`forge-board-admin`](./forge-board-admin/SKILL.md) | Managing projects, columns, and team membership |
|
|
9
|
+
| [`forge-setup`](./forge-setup/SKILL.md) | First-time install and configuration, or when health check fails |
|
|
10
|
+
|
|
11
|
+
## Why three skills?
|
|
12
|
+
|
|
13
|
+
Loading 26 tools + docs for every ticket comment is wasteful. Each skill now covers only the tools and workflow guidance relevant to a specific intent, keeping context lean and guidance actionable.
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: forge-board-admin
|
|
3
|
+
description: Manage Forge projects, columns, and team membership. Use when creating or updating boards, reordering or adding columns, or managing team members. NOT for day-to-day ticket work (use forge-dev-workflow for that).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Forge — Board Administration
|
|
7
|
+
|
|
8
|
+
For setting up and maintaining boards, columns, and team membership. This is Parker/Adam territory — dev agents rarely need this.
|
|
9
|
+
|
|
10
|
+
## Prerequisite
|
|
11
|
+
|
|
12
|
+
Forge MCP must be configured. If `forge_health_check` fails, run the `forge-setup` skill first.
|
|
13
|
+
|
|
14
|
+
## Projects
|
|
15
|
+
|
|
16
|
+
### Create a project
|
|
17
|
+
```
|
|
18
|
+
forge_create_project teamId=<id> name="Project Name" prefix="PRJ"
|
|
19
|
+
```
|
|
20
|
+
`prefix` sets the ticket ID prefix (e.g. `PRJ-1`, `PRJ-2`). Choose something short and unique.
|
|
21
|
+
|
|
22
|
+
### Update a project
|
|
23
|
+
```
|
|
24
|
+
forge_update_project projectId=<id> name="New Name"
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Delete a project
|
|
28
|
+
```
|
|
29
|
+
forge_delete_project projectId=<id>
|
|
30
|
+
```
|
|
31
|
+
⚠️ Irreversible. All tasks and history are gone.
|
|
32
|
+
|
|
33
|
+
### List all projects in a team
|
|
34
|
+
```
|
|
35
|
+
forge_list_projects teamId=<id>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Get a project (with columns + tasks)
|
|
39
|
+
```
|
|
40
|
+
forge_get_project projectId=<id>
|
|
41
|
+
```
|
|
42
|
+
Use this to retrieve column IDs before creating tasks or building automations.
|
|
43
|
+
|
|
44
|
+
## Columns
|
|
45
|
+
|
|
46
|
+
Standard XferOps column order:
|
|
47
|
+
**Backlog → Blocked → To Do → In Progress → Code Review → Staging → Ready for Prod → Done**
|
|
48
|
+
|
|
49
|
+
### Create a column
|
|
50
|
+
```
|
|
51
|
+
forge_create_column projectId=<id> name="Column Name"
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Rename a column
|
|
55
|
+
```
|
|
56
|
+
forge_update_column columnId=<id> name="New Name"
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Reorder columns
|
|
60
|
+
```
|
|
61
|
+
forge_reorder_columns projectId=<id> columnIds=["<id1>","<id2>","<id3>"]
|
|
62
|
+
```
|
|
63
|
+
Pass the full ordered list of column IDs.
|
|
64
|
+
|
|
65
|
+
### Delete a column
|
|
66
|
+
```
|
|
67
|
+
forge_delete_column columnId=<id>
|
|
68
|
+
```
|
|
69
|
+
⚠️ Move all tasks out first — tasks in a deleted column may be lost.
|
|
70
|
+
|
|
71
|
+
## Team Members
|
|
72
|
+
|
|
73
|
+
### List team members
|
|
74
|
+
```
|
|
75
|
+
forge_list_team_members teamId=<id>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Add a member
|
|
79
|
+
```
|
|
80
|
+
forge_add_team_member teamId=<id> email="user@example.com"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Tools used by this skill
|
|
84
|
+
|
|
85
|
+
| Tool | When |
|
|
86
|
+
|------|------|
|
|
87
|
+
| `forge_list_teams` | List all teams in the org |
|
|
88
|
+
| `forge_list_projects` | List projects in a team |
|
|
89
|
+
| `forge_get_project` | Get project details, column IDs, task list |
|
|
90
|
+
| `forge_create_project` | Create a new board |
|
|
91
|
+
| `forge_update_project` | Rename a project |
|
|
92
|
+
| `forge_delete_project` | Delete a project (irreversible) |
|
|
93
|
+
| `forge_create_column` | Add a column to a board |
|
|
94
|
+
| `forge_update_column` | Rename a column |
|
|
95
|
+
| `forge_delete_column` | Remove a column (move tasks first) |
|
|
96
|
+
| `forge_reorder_columns` | Change column order |
|
|
97
|
+
| `forge_list_team_members` | See who's on the team |
|
|
98
|
+
| `forge_add_team_member` | Add a user by email |
|
|
99
|
+
| `forge_health_check` | Verify API connectivity |
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: forge-dev-workflow
|
|
3
|
+
description: Pick up, work, move, and comment on Forge tasks during the dev loop. Use when claiming a ticket, moving it through columns, linking a PR, or adding status comments. NOT for managing projects, columns, or team membership (use forge-board-admin for that).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Forge — Dev Workflow
|
|
7
|
+
|
|
8
|
+
The standard loop for development work: find a ticket → claim it → ship code → move it through review → done.
|
|
9
|
+
|
|
10
|
+
## Prerequisite
|
|
11
|
+
|
|
12
|
+
Forge MCP must be configured. If `forge_health_check` fails, run the `forge-setup` skill first.
|
|
13
|
+
|
|
14
|
+
## The Dev Loop
|
|
15
|
+
|
|
16
|
+
### 1. Find your next ticket
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
forge_search_tasks query="ADM-12" # look up a specific ticket
|
|
20
|
+
forge_list_tasks projectId=<id> # browse a board
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Use `forge_get_task` to read full details, description, and existing comments before starting.
|
|
24
|
+
|
|
25
|
+
### 2. Claim it — move to In Progress
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
forge_move_task taskId=<id> columnId=<in-progress-col-id>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Always comment when you start:
|
|
32
|
+
```
|
|
33
|
+
forge_create_comment taskId=<id> content="Picking this up now."
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 3. During work — comment on blockers or context
|
|
37
|
+
|
|
38
|
+
If you hit a blocker, comment immediately and move to Blocked:
|
|
39
|
+
```
|
|
40
|
+
forge_create_comment taskId=<id> content="Blocked: <reason>. Needs input from <person>."
|
|
41
|
+
forge_move_task taskId=<id> columnId=<blocked-col-id>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### 4. PR ready — move to Code Review
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
forge_move_task taskId=<id> columnId=<code-review-col-id>
|
|
48
|
+
forge_create_comment taskId=<id> content="PR open: <url>. Ready for review."
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### 5. Feedback addressed — re-request review
|
|
52
|
+
|
|
53
|
+
Push fixes, then comment:
|
|
54
|
+
```
|
|
55
|
+
forge_create_comment taskId=<id> content="Addressed review feedback (see PR). Re-requesting review."
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 6. Merged → Staging
|
|
59
|
+
|
|
60
|
+
After merge and successful staging deploy:
|
|
61
|
+
```
|
|
62
|
+
forge_move_task taskId=<id> columnId=<staging-col-id>
|
|
63
|
+
forge_create_comment taskId=<id> content="Merged and deployed to staging. Test at <url>."
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### 7. Staging verified → Ready for Prod
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
forge_move_task taskId=<id> columnId=<ready-for-prod-col-id>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 8. Released → Done
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
forge_move_task taskId=<id> columnId=<done-col-id>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Column IDs
|
|
79
|
+
|
|
80
|
+
Column IDs vary by project. Get them with:
|
|
81
|
+
```
|
|
82
|
+
forge_get_project projectId=<id> # returns columns[] with id + name
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Common column names (in order): **Backlog → Blocked → To Do → In Progress → Code Review → Staging → Ready for Prod → Done**
|
|
86
|
+
|
|
87
|
+
## Assigning tasks
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
forge_update_task taskId=<id> assigneeId=<userId>
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
- Assign to yourself when starting
|
|
94
|
+
- Assign to `quinn-xferops-ai` when moving to Staging (QA ownership)
|
|
95
|
+
- Assign to `adam-xferops-ai` when you need a senior unblock
|
|
96
|
+
- Leave unassigned when parking in Backlog
|
|
97
|
+
|
|
98
|
+
## Task types
|
|
99
|
+
|
|
100
|
+
- `TASK` — discrete work item
|
|
101
|
+
- `BUG` — something broken
|
|
102
|
+
- `STORY` — larger initiative
|
|
103
|
+
|
|
104
|
+
## Priority order
|
|
105
|
+
|
|
106
|
+
Always work: **Critical → High → Medium → Low**
|
|
107
|
+
|
|
108
|
+
## Tools used by this skill
|
|
109
|
+
|
|
110
|
+
| Tool | When |
|
|
111
|
+
|------|------|
|
|
112
|
+
| `forge_search_tasks` | Find tickets by title, description, or ID (e.g. "ADM-5") |
|
|
113
|
+
| `forge_list_tasks` | Browse all tasks in a project |
|
|
114
|
+
| `forge_get_task` | Read full task details before starting |
|
|
115
|
+
| `forge_create_task` | Create a ticket for work that doesn't have one |
|
|
116
|
+
| `forge_update_task` | Update fields, assignee, priority, type |
|
|
117
|
+
| `forge_move_task` | Move between columns |
|
|
118
|
+
| `forge_create_comment` | Leave status updates, PR links, blocker notes |
|
|
119
|
+
| `forge_list_comments` | Read existing comments for context |
|
|
120
|
+
| `forge_health_check` | Verify API connectivity |
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: forge-setup
|
|
3
|
+
description: Install and configure the Forge MCP server for the first time, or verify an existing setup. Use when forge_health_check fails or when setting up a new agent environment.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Forge — Setup
|
|
7
|
+
|
|
8
|
+
One-time installation and configuration of the Forge MCP server.
|
|
9
|
+
|
|
10
|
+
## Install
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
npx -y @xferops/forge-mcp
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Configure
|
|
17
|
+
|
|
18
|
+
Add to your MCP client config (e.g. `~/.mcporter/mcporter.json`):
|
|
19
|
+
|
|
20
|
+
```json
|
|
21
|
+
{
|
|
22
|
+
"mcpServers": {
|
|
23
|
+
"forge": {
|
|
24
|
+
"command": "npx",
|
|
25
|
+
"args": ["-y", "@xferops/forge-mcp"],
|
|
26
|
+
"env": {
|
|
27
|
+
"FORGE_URL": "https://forge.xferops.dev",
|
|
28
|
+
"FORGE_TOKEN": "your-api-token"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Get your API token: **Forge → Settings → API Tokens**
|
|
36
|
+
|
|
37
|
+
## Verify
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
forge_health_check
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
A `200 OK` response means you're connected and authenticated. Any other result:
|
|
44
|
+
- **401** — token is wrong or expired; generate a new one in Forge settings
|
|
45
|
+
- **Connection refused / timeout** — `FORGE_URL` is wrong, or the service is down
|
|
46
|
+
|
|
47
|
+
## Legacy env vars
|
|
48
|
+
|
|
49
|
+
If migrating from the old Flower app, `FLOWER_URL` and `FLOWER_TOKEN` are accepted as fallbacks but deprecated. Update to `FORGE_URL` / `FORGE_TOKEN`.
|
|
50
|
+
|
|
51
|
+
## Tools used by this skill
|
|
52
|
+
|
|
53
|
+
| Tool | When |
|
|
54
|
+
|------|------|
|
|
55
|
+
| `forge_health_check` | Verify the MCP server can reach the Forge API |
|