@arii/boomtick-mcp 0.6.2 → 0.7.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/.mcp/schemas/boomtick.health.json +22 -3
- package/.mcp/schemas/boomtick_health.json +22 -3
- package/.mcp/schemas/github.checkout_branch.json +16 -3
- package/.mcp/schemas/github.comment_triage_summary.json +16 -3
- package/.mcp/schemas/github.create_pull_request.json +16 -3
- package/.mcp/schemas/github.get_pr.json +12 -3
- package/.mcp/schemas/github.get_pr_commits.json +12 -3
- package/.mcp/schemas/github.get_pr_reviews.json +24 -3
- package/.mcp/schemas/github.issue_comment.json +19 -3
- package/.mcp/schemas/github.issue_view.json +17 -3
- package/.mcp/schemas/github.open_replacement_pr.json +16 -3
- package/.mcp/schemas/github_checkout_branch.json +16 -3
- package/.mcp/schemas/github_comment_triage_summary.json +16 -3
- package/.mcp/schemas/github_create_pull_request.json +16 -3
- package/.mcp/schemas/github_get_pr.json +12 -3
- package/.mcp/schemas/github_get_pr_commits.json +12 -3
- package/.mcp/schemas/github_get_pr_reviews.json +24 -3
- package/.mcp/schemas/github_issue_comment.json +19 -3
- package/.mcp/schemas/github_issue_view.json +17 -3
- package/.mcp/schemas/github_open_replacement_pr.json +16 -3
- package/.mcp/schemas/jules.cancel_session.json +38 -3
- package/.mcp/schemas/jules.create_session.json +52 -3
- package/.mcp/schemas/jules.get_messages.json +19 -3
- package/.mcp/schemas/jules.get_pr.json +23 -3
- package/.mcp/schemas/jules.get_session.json +38 -3
- package/.mcp/schemas/jules.list_sessions.json +53 -3
- package/.mcp/schemas/jules.send_message.json +31 -3
- package/.mcp/schemas/jules.trigger_feedback.json +28 -3
- package/.mcp/schemas/jules_cancel_session.json +38 -3
- package/.mcp/schemas/jules_create_session.json +52 -3
- package/.mcp/schemas/jules_get_messages.json +19 -3
- package/.mcp/schemas/jules_get_pr.json +23 -3
- package/.mcp/schemas/jules_get_session.json +38 -3
- package/.mcp/schemas/jules_list_sessions.json +53 -3
- package/.mcp/schemas/jules_send_message.json +31 -3
- package/.mcp/schemas/jules_trigger_feedback.json +28 -3
- package/.mcp/schemas/repo.check_jules_status.json +93 -3
- package/.mcp/schemas/repo.commit_patch.json +23 -3
- package/.mcp/schemas/repo.create_branch.json +28 -3
- package/.mcp/schemas/repo.create_repair_branch.json +31 -3
- package/.mcp/schemas/repo.get_changed_files.json +11 -3
- package/.mcp/schemas/repo.get_command_schema.json +29 -3
- package/.mcp/schemas/repo.get_package_scripts.json +11 -3
- package/.mcp/schemas/repo.get_workflow_runs.json +12 -3
- package/.mcp/schemas/repo.logs.json +14 -3
- package/.mcp/schemas/repo.multi_exec.json +89 -0
- package/.mcp/schemas/repo.read_agent_context.json +117 -5
- package/.mcp/schemas/repo.read_ci_logs.json +46 -3
- package/.mcp/schemas/repo_check_jules_status.json +93 -3
- package/.mcp/schemas/repo_commit_patch.json +23 -3
- package/.mcp/schemas/repo_create_branch.json +28 -3
- package/.mcp/schemas/repo_create_repair_branch.json +31 -3
- package/.mcp/schemas/repo_get_changed_files.json +11 -3
- package/.mcp/schemas/repo_get_command_schema.json +29 -3
- package/.mcp/schemas/repo_get_package_scripts.json +11 -3
- package/.mcp/schemas/repo_get_workflow_runs.json +12 -3
- package/.mcp/schemas/repo_logs.json +14 -3
- package/.mcp/schemas/repo_multi_exec.json +89 -0
- package/.mcp/schemas/repo_read_agent_context.json +117 -5
- package/.mcp/schemas/repo_read_ci_logs.json +46 -3
- package/CHANGELOG.md +14 -0
- package/README.md +7 -5
- package/dist/config/dynamic.js +3 -2
- package/dist/config/repo.js +5 -5
- package/dist/config.test.js +10 -3
- package/dist/mcp/definitions.js +49 -36
- package/dist/mcp/http.js +15 -0
- package/dist/mcp/http.test.js +8 -0
- package/dist/mcp/server.js +34 -0
- package/dist/mcp/server.test.js +31 -0
- package/dist/tools/contract.js +960 -3
- package/dist/tools/jules/create-session.js +12 -2
- package/dist/tools/jules/create-session.test.js +7 -0
- package/dist/tools/repo.multi_exec.js +21 -0
- package/dist/tools/repo.multi_exec.test.js +13 -0
- package/dist/tools/repo.read_agent_context.js +65 -3
- package/dist/tools/repo.read_agent_context.test.js +30 -1
- package/package.json +1 -1
- package/src/config/dynamic.ts +3 -2
- package/src/config/repo.ts +6 -6
- package/src/config.test.ts +11 -3
- package/src/mcp/definitions.ts +77 -36
- package/src/mcp/http.test.ts +10 -0
- package/src/mcp/http.ts +20 -0
- package/src/mcp/server.test.ts +38 -0
- package/src/mcp/server.ts +36 -0
- package/src/tools/contract.ts +1089 -16
- package/src/tools/jules/create-session.test.ts +9 -0
- package/src/tools/jules/create-session.ts +13 -2
- package/src/tools/repo.multi_exec.test.ts +15 -0
- package/src/tools/repo.multi_exec.ts +23 -0
- package/src/tools/repo.read_agent_context.test.ts +35 -1
- package/src/tools/repo.read_agent_context.ts +68 -3
|
@@ -35,8 +35,36 @@
|
|
|
35
35
|
"type": "object"
|
|
36
36
|
},
|
|
37
37
|
"outputSchema": {
|
|
38
|
-
"
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
"properties": {
|
|
39
|
+
"prNumber": {
|
|
40
|
+
"title": "Prnumber",
|
|
41
|
+
"type": "integer"
|
|
42
|
+
},
|
|
43
|
+
"originalBranch": {
|
|
44
|
+
"title": "Originalbranch",
|
|
45
|
+
"type": "string"
|
|
46
|
+
},
|
|
47
|
+
"repairBranch": {
|
|
48
|
+
"title": "Repairbranch",
|
|
49
|
+
"type": "string"
|
|
50
|
+
},
|
|
51
|
+
"baseBranch": {
|
|
52
|
+
"title": "Basebranch",
|
|
53
|
+
"type": "string"
|
|
54
|
+
},
|
|
55
|
+
"worktreePath": {
|
|
56
|
+
"title": "Worktreepath",
|
|
57
|
+
"type": "string"
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"required": [
|
|
61
|
+
"prNumber",
|
|
62
|
+
"originalBranch",
|
|
63
|
+
"repairBranch",
|
|
64
|
+
"baseBranch",
|
|
65
|
+
"worktreePath"
|
|
66
|
+
],
|
|
67
|
+
"title": "CreateRepairBranchResponse",
|
|
68
|
+
"type": "object"
|
|
41
69
|
}
|
|
42
70
|
}
|
|
@@ -20,8 +20,16 @@
|
|
|
20
20
|
"type": "object"
|
|
21
21
|
},
|
|
22
22
|
"outputSchema": {
|
|
23
|
-
"
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
"properties": {
|
|
24
|
+
"files": {
|
|
25
|
+
"items": {
|
|
26
|
+
"type": "string"
|
|
27
|
+
},
|
|
28
|
+
"title": "Files",
|
|
29
|
+
"type": "array"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"title": "GetChangedFilesResponse",
|
|
33
|
+
"type": "object"
|
|
26
34
|
}
|
|
27
35
|
}
|
|
@@ -16,8 +16,34 @@
|
|
|
16
16
|
"type": "object"
|
|
17
17
|
},
|
|
18
18
|
"outputSchema": {
|
|
19
|
-
"
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
"properties": {
|
|
20
|
+
"status": {
|
|
21
|
+
"anyOf": [
|
|
22
|
+
{
|
|
23
|
+
"type": "string"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"type": "null"
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"default": null,
|
|
30
|
+
"title": "Status"
|
|
31
|
+
},
|
|
32
|
+
"schema": {
|
|
33
|
+
"anyOf": [
|
|
34
|
+
{
|
|
35
|
+
"additionalProperties": true,
|
|
36
|
+
"type": "object"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"type": "null"
|
|
40
|
+
}
|
|
41
|
+
],
|
|
42
|
+
"default": null,
|
|
43
|
+
"title": "Schema"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"title": "GetCommandSchemaResponse",
|
|
47
|
+
"type": "object"
|
|
22
48
|
}
|
|
23
49
|
}
|
|
@@ -21,8 +21,16 @@
|
|
|
21
21
|
"type": "object"
|
|
22
22
|
},
|
|
23
23
|
"outputSchema": {
|
|
24
|
-
"
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
"properties": {
|
|
25
|
+
"scripts": {
|
|
26
|
+
"additionalProperties": {
|
|
27
|
+
"type": "string"
|
|
28
|
+
},
|
|
29
|
+
"title": "Scripts",
|
|
30
|
+
"type": "object"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"title": "GetPackageScriptsResponse",
|
|
34
|
+
"type": "object"
|
|
27
35
|
}
|
|
28
36
|
}
|
|
@@ -48,8 +48,17 @@
|
|
|
48
48
|
"type": "object"
|
|
49
49
|
},
|
|
50
50
|
"outputSchema": {
|
|
51
|
-
"
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
"properties": {
|
|
52
|
+
"workflowRuns": {
|
|
53
|
+
"items": {
|
|
54
|
+
"additionalProperties": true,
|
|
55
|
+
"type": "object"
|
|
56
|
+
},
|
|
57
|
+
"title": "Workflowruns",
|
|
58
|
+
"type": "array"
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"title": "GetWorkflowRunsResponse",
|
|
62
|
+
"type": "object"
|
|
54
63
|
}
|
|
55
64
|
}
|
|
@@ -43,8 +43,19 @@
|
|
|
43
43
|
"type": "object"
|
|
44
44
|
},
|
|
45
45
|
"outputSchema": {
|
|
46
|
-
"
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
"properties": {
|
|
47
|
+
"logs": {
|
|
48
|
+
"anyOf": [
|
|
49
|
+
{},
|
|
50
|
+
{
|
|
51
|
+
"type": "null"
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
"default": null,
|
|
55
|
+
"title": "Logs"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"title": "RepoLogsResponse",
|
|
59
|
+
"type": "object"
|
|
49
60
|
}
|
|
50
61
|
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "repo_multi_exec",
|
|
3
|
+
"description": "Execute a shell command sequentially across ecosystem repositories (or a filtered subset).",
|
|
4
|
+
"parameters": {
|
|
5
|
+
"properties": {
|
|
6
|
+
"command": {
|
|
7
|
+
"description": "Shell command to execute sequentially across repositories",
|
|
8
|
+
"title": "Command",
|
|
9
|
+
"type": "string"
|
|
10
|
+
},
|
|
11
|
+
"repos": {
|
|
12
|
+
"anyOf": [
|
|
13
|
+
{
|
|
14
|
+
"items": {
|
|
15
|
+
"type": "string"
|
|
16
|
+
},
|
|
17
|
+
"type": "array"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"type": "null"
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"default": null,
|
|
24
|
+
"description": "Optional list of repository names to target",
|
|
25
|
+
"title": "Repos"
|
|
26
|
+
},
|
|
27
|
+
"continueOnError": {
|
|
28
|
+
"anyOf": [
|
|
29
|
+
{
|
|
30
|
+
"type": "boolean"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"type": "null"
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"default": true,
|
|
37
|
+
"description": "Whether to continue execution if a repo command fails",
|
|
38
|
+
"title": "Continueonerror"
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"required": [
|
|
42
|
+
"command"
|
|
43
|
+
],
|
|
44
|
+
"title": "MultiExecInput",
|
|
45
|
+
"type": "object"
|
|
46
|
+
},
|
|
47
|
+
"outputSchema": {
|
|
48
|
+
"properties": {
|
|
49
|
+
"status": {
|
|
50
|
+
"default": "success",
|
|
51
|
+
"description": "Execution status",
|
|
52
|
+
"title": "Status",
|
|
53
|
+
"type": "string"
|
|
54
|
+
},
|
|
55
|
+
"total": {
|
|
56
|
+
"anyOf": [
|
|
57
|
+
{
|
|
58
|
+
"type": "integer"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"type": "null"
|
|
62
|
+
}
|
|
63
|
+
],
|
|
64
|
+
"default": null,
|
|
65
|
+
"description": "Total repositories executed against",
|
|
66
|
+
"title": "Total"
|
|
67
|
+
},
|
|
68
|
+
"results": {
|
|
69
|
+
"anyOf": [
|
|
70
|
+
{
|
|
71
|
+
"items": {
|
|
72
|
+
"additionalProperties": true,
|
|
73
|
+
"type": "object"
|
|
74
|
+
},
|
|
75
|
+
"type": "array"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"type": "null"
|
|
79
|
+
}
|
|
80
|
+
],
|
|
81
|
+
"default": null,
|
|
82
|
+
"description": "Execution results per repository",
|
|
83
|
+
"title": "Results"
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
"title": "MultiExecResponse",
|
|
87
|
+
"type": "object"
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -1,14 +1,126 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "repo_read_agent_context",
|
|
3
|
-
"description": "Read the
|
|
3
|
+
"description": "Read the repository index including metadata, model review chains, or multi-repo ecosystem status.",
|
|
4
4
|
"parameters": {
|
|
5
|
-
"properties": {
|
|
5
|
+
"properties": {
|
|
6
|
+
"path": {
|
|
7
|
+
"anyOf": [
|
|
8
|
+
{
|
|
9
|
+
"type": "string"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"type": "null"
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"default": null,
|
|
16
|
+
"description": "Local filesystem path to target repository root",
|
|
17
|
+
"title": "Path"
|
|
18
|
+
},
|
|
19
|
+
"repoPath": {
|
|
20
|
+
"anyOf": [
|
|
21
|
+
{
|
|
22
|
+
"type": "string"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"type": "null"
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
"default": null,
|
|
29
|
+
"description": "Alias for path (filesystem path to target workspace repository root).",
|
|
30
|
+
"title": "Repopath"
|
|
31
|
+
},
|
|
32
|
+
"repo": {
|
|
33
|
+
"anyOf": [
|
|
34
|
+
{
|
|
35
|
+
"type": "string"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"type": "null"
|
|
39
|
+
}
|
|
40
|
+
],
|
|
41
|
+
"default": null,
|
|
42
|
+
"description": "Target GitHub repository string (e.g. org/repo).",
|
|
43
|
+
"title": "Repo"
|
|
44
|
+
},
|
|
45
|
+
"repos": {
|
|
46
|
+
"anyOf": [
|
|
47
|
+
{
|
|
48
|
+
"items": {
|
|
49
|
+
"type": "string"
|
|
50
|
+
},
|
|
51
|
+
"type": "array"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"type": "null"
|
|
55
|
+
}
|
|
56
|
+
],
|
|
57
|
+
"default": null,
|
|
58
|
+
"description": "List of repository names to fetch context for",
|
|
59
|
+
"title": "Repos"
|
|
60
|
+
},
|
|
61
|
+
"all": {
|
|
62
|
+
"anyOf": [
|
|
63
|
+
{
|
|
64
|
+
"type": "boolean"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"type": "null"
|
|
68
|
+
}
|
|
69
|
+
],
|
|
70
|
+
"default": null,
|
|
71
|
+
"description": "Whether to fetch context across all discovered ecosystem repositories",
|
|
72
|
+
"title": "All"
|
|
73
|
+
}
|
|
74
|
+
},
|
|
6
75
|
"title": "ReadAgentContextInput",
|
|
7
76
|
"type": "object"
|
|
8
77
|
},
|
|
9
78
|
"outputSchema": {
|
|
10
|
-
"
|
|
11
|
-
|
|
12
|
-
|
|
79
|
+
"properties": {
|
|
80
|
+
"status": {
|
|
81
|
+
"default": "success",
|
|
82
|
+
"title": "Status",
|
|
83
|
+
"type": "string"
|
|
84
|
+
},
|
|
85
|
+
"packageName": {
|
|
86
|
+
"anyOf": [
|
|
87
|
+
{
|
|
88
|
+
"type": "string"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"type": "null"
|
|
92
|
+
}
|
|
93
|
+
],
|
|
94
|
+
"default": null,
|
|
95
|
+
"title": "Packagename"
|
|
96
|
+
},
|
|
97
|
+
"gitCommit": {
|
|
98
|
+
"anyOf": [
|
|
99
|
+
{
|
|
100
|
+
"type": "string"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"type": "null"
|
|
104
|
+
}
|
|
105
|
+
],
|
|
106
|
+
"default": null,
|
|
107
|
+
"title": "Gitcommit"
|
|
108
|
+
},
|
|
109
|
+
"config": {
|
|
110
|
+
"anyOf": [
|
|
111
|
+
{
|
|
112
|
+
"additionalProperties": true,
|
|
113
|
+
"type": "object"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"type": "null"
|
|
117
|
+
}
|
|
118
|
+
],
|
|
119
|
+
"default": null,
|
|
120
|
+
"title": "Config"
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
"title": "ReadAgentContextResponse",
|
|
124
|
+
"type": "object"
|
|
13
125
|
}
|
|
14
126
|
}
|
|
@@ -36,8 +36,51 @@
|
|
|
36
36
|
"type": "object"
|
|
37
37
|
},
|
|
38
38
|
"outputSchema": {
|
|
39
|
-
"
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
"properties": {
|
|
40
|
+
"checks": {
|
|
41
|
+
"anyOf": [
|
|
42
|
+
{
|
|
43
|
+
"items": {
|
|
44
|
+
"additionalProperties": true,
|
|
45
|
+
"type": "object"
|
|
46
|
+
},
|
|
47
|
+
"type": "array"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"type": "null"
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"default": null,
|
|
54
|
+
"title": "Checks"
|
|
55
|
+
},
|
|
56
|
+
"failedChecks": {
|
|
57
|
+
"anyOf": [
|
|
58
|
+
{
|
|
59
|
+
"items": {
|
|
60
|
+
"additionalProperties": true,
|
|
61
|
+
"type": "object"
|
|
62
|
+
},
|
|
63
|
+
"type": "array"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"type": "null"
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
"default": null,
|
|
70
|
+
"title": "Failedchecks"
|
|
71
|
+
},
|
|
72
|
+
"logs": {
|
|
73
|
+
"anyOf": [
|
|
74
|
+
{},
|
|
75
|
+
{
|
|
76
|
+
"type": "null"
|
|
77
|
+
}
|
|
78
|
+
],
|
|
79
|
+
"default": null,
|
|
80
|
+
"title": "Logs"
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"title": "ReadCiLogsResponse",
|
|
84
|
+
"type": "object"
|
|
42
85
|
}
|
|
43
86
|
}
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.7.0](https://github.com/arii/boomtick/compare/mcp-v0.6.2...mcp-v0.7.0) (2026-10-29)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* **aggregate:** agent onboarding, multi-repo context, and sequential orchestration ([#1001](https://github.com/arii/boomtick/issues/1001)) ([7060777](https://github.com/arii/boomtick/commit/7060777195a84d391b5098226ce06a04ddefcd9a))
|
|
9
|
+
* **aggregate:** pure-node container, review runner hardening, mcp modernization, and offline dag engine ([#1002](https://github.com/arii/boomtick/issues/1002)) ([056503c](https://github.com/arii/boomtick/commit/056503c8c21b5bd99f3b9d874ee7fac25972362a))
|
|
10
|
+
* **mcp:** modernize boomtick-mcp with typed outputSchema, resources interface, and streamable HTTP transport ([26401df](https://github.com/arii/boomtick/commit/26401df06774e9de7756a375e0080810cc35926e))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* **mcp:** resolve active repository dynamically across workspaces ([#981](https://github.com/arii/boomtick/issues/981)) ([9a757ea](https://github.com/arii/boomtick/commit/9a757ea5d1a878861e69bee4e36201849f7a03e4))
|
|
16
|
+
|
|
3
17
|
## [0.6.2](https://github.com/arii/boomtick/compare/mcp-v0.6.1...mcp-v0.6.2) (2026-10-28)
|
|
4
18
|
|
|
5
19
|
|
package/README.md
CHANGED
|
@@ -41,19 +41,21 @@ A Model Context Protocol (MCP) server designed to empower AI agents with structu
|
|
|
41
41
|
|
|
42
42
|
### Installation
|
|
43
43
|
```bash
|
|
44
|
-
|
|
45
|
-
pnpm
|
|
46
|
-
|
|
44
|
+
# From repository root
|
|
45
|
+
pnpm --filter @arii/boomtick-mcp run build
|
|
46
|
+
|
|
47
|
+
# Register boomtick-mcp across installed agent hosts automatically
|
|
48
|
+
td mcp install --execute
|
|
47
49
|
```
|
|
48
50
|
|
|
49
|
-
###
|
|
51
|
+
### Manual Configuration via MCP Client (e.g. Claude Desktop, Cursor)
|
|
50
52
|
Add the following to your MCP client configuration (e.g. `claude_desktop_config.json`):
|
|
51
53
|
```json
|
|
52
54
|
{
|
|
53
55
|
"mcpServers": {
|
|
54
56
|
"boomtick": {
|
|
55
57
|
"command": "node",
|
|
56
|
-
"args": ["/absolute/path/to/
|
|
58
|
+
"args": ["/absolute/path/to/mcp/dist/index.js"],
|
|
57
59
|
"env": {
|
|
58
60
|
"GITHUB_TOKEN": "your_pat",
|
|
59
61
|
"GITHUB_OWNER": "your_org",
|
package/dist/config/dynamic.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { execSync } from "child_process";
|
|
2
|
+
import { findRepoRoot } from "./repo.js";
|
|
2
3
|
let cachedDynamicConfig = null;
|
|
3
|
-
export function initializeConfig() {
|
|
4
|
+
export function initializeConfig(targetCwd) {
|
|
4
5
|
if (cachedDynamicConfig !== null) {
|
|
5
6
|
return cachedDynamicConfig;
|
|
6
7
|
}
|
|
7
8
|
try {
|
|
8
|
-
const cwd =
|
|
9
|
+
const cwd = findRepoRoot(targetCwd);
|
|
9
10
|
const cmd = `td config view`;
|
|
10
11
|
const output = execSync(cmd, {
|
|
11
12
|
cwd,
|
package/dist/config/repo.js
CHANGED
|
@@ -2,11 +2,8 @@ import path from "path";
|
|
|
2
2
|
import fs from "fs";
|
|
3
3
|
import { fileURLToPath } from "url";
|
|
4
4
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
5
|
-
export function findRepoRoot() {
|
|
6
|
-
|
|
7
|
-
return process.env.BOOMTICK_REPO_PATH;
|
|
8
|
-
}
|
|
9
|
-
let current = process.cwd();
|
|
5
|
+
export function findRepoRoot(startDir) {
|
|
6
|
+
let current = startDir || process.cwd();
|
|
10
7
|
while (current !== path.parse(current).root) {
|
|
11
8
|
if (fs.existsSync(path.join(current, "project_config.json")) ||
|
|
12
9
|
fs.existsSync(path.join(current, "workspace.json")) ||
|
|
@@ -15,6 +12,9 @@ export function findRepoRoot() {
|
|
|
15
12
|
}
|
|
16
13
|
current = path.dirname(current);
|
|
17
14
|
}
|
|
15
|
+
if (process.env.BOOMTICK_REPO_PATH) {
|
|
16
|
+
return process.env.BOOMTICK_REPO_PATH;
|
|
17
|
+
}
|
|
18
18
|
current = __dirname;
|
|
19
19
|
while (current !== path.parse(current).root) {
|
|
20
20
|
if (fs.existsSync(path.join(current, "project_config.json")) ||
|
package/dist/config.test.js
CHANGED
|
@@ -19,9 +19,10 @@ describe("config", () => {
|
|
|
19
19
|
const mockConfig = { github_repo: "owner/repo", base_branch: "origin/main", vite_base_path: "/app/" };
|
|
20
20
|
vi.mocked(execSync).mockReturnValue(JSON.stringify(mockConfig));
|
|
21
21
|
const { initializeConfig } = await import("./config.js");
|
|
22
|
+
const { findRepoRoot } = await import("./config/repo.js");
|
|
22
23
|
const result = initializeConfig();
|
|
23
24
|
expect(execSync).toHaveBeenCalledWith("td config view", expect.objectContaining({
|
|
24
|
-
cwd:
|
|
25
|
+
cwd: findRepoRoot()
|
|
25
26
|
}));
|
|
26
27
|
expect(result).toEqual(mockConfig);
|
|
27
28
|
});
|
|
@@ -103,10 +104,16 @@ describe("config", () => {
|
|
|
103
104
|
expect(() => config.githubOwner).toThrow("GITHUB_OWNER must be set via environment variable or project_config.json");
|
|
104
105
|
expect(() => config.githubRepo).toThrow("GITHUB_REPO must be set via environment variable or project_config.json");
|
|
105
106
|
});
|
|
106
|
-
it("should resolve
|
|
107
|
+
it("should resolve active workspace from process.cwd() over BOOMTICK_REPO_PATH when inside a repo", async () => {
|
|
107
108
|
process.env.BOOMTICK_REPO_PATH = "/custom/repo/path";
|
|
108
109
|
const { config } = await import("./config.js");
|
|
109
|
-
expect(config.repoPath).toBe("
|
|
110
|
+
expect(config.repoPath).toBe(process.cwd().replace(/\/mcp$/, ""));
|
|
111
|
+
});
|
|
112
|
+
it("should fallback to BOOMTICK_REPO_PATH when process.cwd() is outside any repo", async () => {
|
|
113
|
+
process.env.BOOMTICK_REPO_PATH = "/custom/repo/path";
|
|
114
|
+
const { findRepoRoot } = await import("./config/repo.js");
|
|
115
|
+
const rootDir = process.platform === "win32" ? "C:\\" : "/";
|
|
116
|
+
expect(findRepoRoot(rootDir)).toBe("/custom/repo/path");
|
|
110
117
|
});
|
|
111
118
|
it("should resolve defaultBaseBranch, viteBasePath, and ghPath", async () => {
|
|
112
119
|
process.env.DEFAULT_BASE_BRANCH = "develop";
|