@freelancercom/phabricator-mcp 2.0.13 → 2.0.15
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/dist/tools/diffusion.js +1 -1
- package/dist/tools/harbormaster.js +3 -2
- package/dist/tools/maniphest.js +14 -10
- package/dist/tools/owners.js +1 -1
- package/dist/tools/paste.js +1 -1
- package/dist/tools/phame.js +4 -3
- package/dist/tools/project.js +1 -1
- package/dist/tools/transaction.js +4 -2
- package/dist/tools/user.js +1 -0
- package/package.json +1 -1
package/dist/tools/diffusion.js
CHANGED
|
@@ -32,7 +32,7 @@ export function registerDiffusionTools(server, client) {
|
|
|
32
32
|
});
|
|
33
33
|
// Search commits
|
|
34
34
|
server.tool('phabricator_commit_search', 'Search Diffusion commits', {
|
|
35
|
-
queryKey: z.string().optional().describe('Built-in query: "all", "authored"'),
|
|
35
|
+
queryKey: z.string().optional().describe('Built-in query: "all", "active", "authored", "audited"'),
|
|
36
36
|
constraints: jsonCoerce(z.object({
|
|
37
37
|
ids: z.array(z.coerce.number()).optional().describe('Commit IDs'),
|
|
38
38
|
phids: z.array(z.string()).optional().describe('Commit PHIDs'),
|
|
@@ -22,7 +22,7 @@ export function registerHarbormasterTools(server, client) {
|
|
|
22
22
|
});
|
|
23
23
|
// Search builds
|
|
24
24
|
server.tool('phabricator_build_search', 'Search Harbormaster builds (CI/build results)', {
|
|
25
|
-
queryKey: z.string().optional().describe('Built-in query: "all"'),
|
|
25
|
+
queryKey: z.string().optional().describe('Built-in query: "all", "initiated", "waiting", "active", "completed"'),
|
|
26
26
|
constraints: jsonCoerce(z.object({
|
|
27
27
|
ids: z.array(z.coerce.number()).optional().describe('Build IDs'),
|
|
28
28
|
phids: z.array(z.string()).optional().describe('Build PHIDs'),
|
|
@@ -93,13 +93,14 @@ export function registerHarbormasterTools(server, client) {
|
|
|
93
93
|
duration: z.coerce.number().optional().describe('Duration in seconds'),
|
|
94
94
|
path: z.string().optional().describe('File path related to the test'),
|
|
95
95
|
coverage: z.record(z.string(), z.string()).optional().describe('Coverage data as {path: "NNCUUUC..."} where N=not executable, C=covered, U=uncovered'),
|
|
96
|
+
format: z.string().optional().describe('Format for details field: "text" (default) or "remarkup"'),
|
|
96
97
|
details: z.string().optional().describe('Additional details or failure message'),
|
|
97
98
|
}))).optional().describe('Unit test results to report'),
|
|
98
99
|
lint: jsonCoerce(z.array(z.object({
|
|
99
100
|
name: z.string().describe('Lint message name'),
|
|
100
101
|
code: z.string().describe('Lint rule code'),
|
|
101
102
|
severity: z.string().describe('Severity: "advice", "autofix", "warning", "error", "disabled"'),
|
|
102
|
-
path: z.string().
|
|
103
|
+
path: z.string().describe('File path'),
|
|
103
104
|
line: z.coerce.number().optional().describe('Line number'),
|
|
104
105
|
char: z.coerce.number().optional().describe('Character offset'),
|
|
105
106
|
description: z.string().optional().describe('Lint message description'),
|
package/dist/tools/maniphest.js
CHANGED
|
@@ -3,7 +3,7 @@ import { jsonCoerce } from './coerce.js';
|
|
|
3
3
|
export function registerManiphestTools(server, client) {
|
|
4
4
|
// Search tasks
|
|
5
5
|
server.tool('phabricator_task_search', 'Search Maniphest tasks with optional filters', {
|
|
6
|
-
queryKey: z.string().optional().describe('Built-in query: "all", "open", "authored", "assigned"'),
|
|
6
|
+
queryKey: z.string().optional().describe('Built-in query: "all", "open", "authored", "assigned", "subscribed"'),
|
|
7
7
|
constraints: jsonCoerce(z.object({
|
|
8
8
|
ids: z.array(z.coerce.number()).optional().describe('Task IDs to search for'),
|
|
9
9
|
phids: z.array(z.string()).optional().describe('Task PHIDs to search for'),
|
|
@@ -34,7 +34,7 @@ export function registerManiphestTools(server, client) {
|
|
|
34
34
|
projects: z.boolean().optional().describe('Include project info'),
|
|
35
35
|
subscribers: z.boolean().optional().describe('Include subscriber info'),
|
|
36
36
|
})).optional().describe('Data attachments to include'),
|
|
37
|
-
order: z.string().optional().describe('Result order: "priority", "updated", "newest", "oldest", "title", "relevance"'),
|
|
37
|
+
order: z.string().optional().describe('Result order: "priority", "updated", "outdated", "newest", "oldest", "closed", "title", "relevance"'),
|
|
38
38
|
limit: z.coerce.number().max(100).optional().describe('Maximum results (max 100)'),
|
|
39
39
|
after: z.string().optional().describe('Cursor for next-page pagination'),
|
|
40
40
|
before: z.string().optional().describe('Cursor for previous-page pagination'),
|
|
@@ -51,9 +51,9 @@ export function registerManiphestTools(server, client) {
|
|
|
51
51
|
projectPHIDs: z.array(z.string()).optional().describe('Project PHIDs to tag'),
|
|
52
52
|
subscriberPHIDs: z.array(z.string()).optional().describe('Subscriber PHIDs'),
|
|
53
53
|
status: z.string().optional().describe('Initial status'),
|
|
54
|
-
subtype: z.string().optional().describe('Task subtype (e.g. "default", "incident")'),
|
|
55
54
|
parentPHIDs: z.array(z.string()).optional().describe('Parent task PHIDs'),
|
|
56
55
|
subtaskPHIDs: z.array(z.string()).optional().describe('Subtask PHIDs'),
|
|
56
|
+
commitPHIDs: z.array(z.string()).optional().describe('Commit PHIDs to associate'),
|
|
57
57
|
points: z.coerce.number().nullable().optional().describe('Story points value (if points are enabled on this instance)'),
|
|
58
58
|
space: z.string().optional().describe('Space PHID to place the task in (for multi-space installations)'),
|
|
59
59
|
comment: z.string().optional().describe('Initial comment on the task (supports Remarkup)'),
|
|
@@ -80,15 +80,15 @@ export function registerManiphestTools(server, client) {
|
|
|
80
80
|
if (params.status !== undefined) {
|
|
81
81
|
transactions.push({ type: 'status', value: params.status });
|
|
82
82
|
}
|
|
83
|
-
if (params.subtype !== undefined) {
|
|
84
|
-
transactions.push({ type: 'subtype', value: params.subtype });
|
|
85
|
-
}
|
|
86
83
|
if (params.parentPHIDs !== undefined) {
|
|
87
84
|
transactions.push({ type: 'parents.set', value: params.parentPHIDs });
|
|
88
85
|
}
|
|
89
86
|
if (params.subtaskPHIDs !== undefined) {
|
|
90
87
|
transactions.push({ type: 'subtasks.set', value: params.subtaskPHIDs });
|
|
91
88
|
}
|
|
89
|
+
if (params.commitPHIDs !== undefined) {
|
|
90
|
+
transactions.push({ type: 'commits.set', value: params.commitPHIDs });
|
|
91
|
+
}
|
|
92
92
|
if (params.points !== undefined) {
|
|
93
93
|
transactions.push({ type: 'points', value: params.points });
|
|
94
94
|
}
|
|
@@ -114,7 +114,6 @@ export function registerManiphestTools(server, client) {
|
|
|
114
114
|
ownerPHID: z.string().nullable().optional().describe('New owner PHID (null to unassign)'),
|
|
115
115
|
priority: z.string().optional().describe('New priority'),
|
|
116
116
|
status: z.string().optional().describe('New status: open, resolved, wontfix, invalid, spite, duplicate'),
|
|
117
|
-
subtype: z.string().optional().describe('Task subtype (e.g. "default", "incident")'),
|
|
118
117
|
addProjectPHIDs: z.array(z.string()).optional().describe('Project PHIDs to add'),
|
|
119
118
|
removeProjectPHIDs: z.array(z.string()).optional().describe('Project PHIDs to remove'),
|
|
120
119
|
addSubscriberPHIDs: z.array(z.string()).optional().describe('Subscriber PHIDs to add'),
|
|
@@ -123,6 +122,8 @@ export function registerManiphestTools(server, client) {
|
|
|
123
122
|
removeParentPHIDs: z.array(z.string()).optional().describe('Parent task PHIDs to remove'),
|
|
124
123
|
addSubtaskPHIDs: z.array(z.string()).optional().describe('Subtask PHIDs to add'),
|
|
125
124
|
removeSubtaskPHIDs: z.array(z.string()).optional().describe('Subtask PHIDs to remove'),
|
|
125
|
+
addCommitPHIDs: z.array(z.string()).optional().describe('Commit PHIDs to associate'),
|
|
126
|
+
removeCommitPHIDs: z.array(z.string()).optional().describe('Commit PHIDs to disassociate'),
|
|
126
127
|
points: z.coerce.number().nullable().optional().describe('Story points value (null to clear)'),
|
|
127
128
|
columnPHID: z.string().optional().describe('Move to workboard column'),
|
|
128
129
|
space: z.string().optional().describe('Space PHID to move the task to (for multi-space installations)'),
|
|
@@ -145,9 +146,6 @@ export function registerManiphestTools(server, client) {
|
|
|
145
146
|
if (params.status !== undefined) {
|
|
146
147
|
transactions.push({ type: 'status', value: params.status });
|
|
147
148
|
}
|
|
148
|
-
if (params.subtype !== undefined) {
|
|
149
|
-
transactions.push({ type: 'subtype', value: params.subtype });
|
|
150
|
-
}
|
|
151
149
|
if (params.addProjectPHIDs !== undefined) {
|
|
152
150
|
transactions.push({ type: 'projects.add', value: params.addProjectPHIDs });
|
|
153
151
|
}
|
|
@@ -172,6 +170,12 @@ export function registerManiphestTools(server, client) {
|
|
|
172
170
|
if (params.removeSubtaskPHIDs !== undefined) {
|
|
173
171
|
transactions.push({ type: 'subtasks.remove', value: params.removeSubtaskPHIDs });
|
|
174
172
|
}
|
|
173
|
+
if (params.addCommitPHIDs !== undefined) {
|
|
174
|
+
transactions.push({ type: 'commits.add', value: params.addCommitPHIDs });
|
|
175
|
+
}
|
|
176
|
+
if (params.removeCommitPHIDs !== undefined) {
|
|
177
|
+
transactions.push({ type: 'commits.remove', value: params.removeCommitPHIDs });
|
|
178
|
+
}
|
|
175
179
|
if (params.points !== undefined) {
|
|
176
180
|
transactions.push({ type: 'points', value: params.points });
|
|
177
181
|
}
|
package/dist/tools/owners.js
CHANGED
|
@@ -3,7 +3,7 @@ import { jsonCoerce } from './coerce.js';
|
|
|
3
3
|
export function registerOwnersTools(server, client) {
|
|
4
4
|
// Search code ownership packages
|
|
5
5
|
server.tool('phabricator_owners_search', 'Search Owners packages (code ownership). Find who owns a code path or list ownership packages.', {
|
|
6
|
-
queryKey: z.string().optional().describe('Built-in query: "all", "active"'),
|
|
6
|
+
queryKey: z.string().optional().describe('Built-in query: "all", "active", "authority"'),
|
|
7
7
|
constraints: jsonCoerce(z.object({
|
|
8
8
|
ids: z.array(z.coerce.number()).optional().describe('Package IDs'),
|
|
9
9
|
phids: z.array(z.string()).optional().describe('Package PHIDs'),
|
package/dist/tools/paste.js
CHANGED
|
@@ -3,7 +3,7 @@ import { jsonCoerce } from './coerce.js';
|
|
|
3
3
|
export function registerPasteTools(server, client) {
|
|
4
4
|
// Search pastes
|
|
5
5
|
server.tool('phabricator_paste_search', 'Search Phabricator pastes', {
|
|
6
|
-
queryKey: z.string().optional().describe('Built-in query: "all", "authored"'),
|
|
6
|
+
queryKey: z.string().optional().describe('Built-in query: "all", "active", "authored"'),
|
|
7
7
|
constraints: jsonCoerce(z.object({
|
|
8
8
|
ids: z.array(z.coerce.number()).optional().describe('Paste IDs'),
|
|
9
9
|
phids: z.array(z.string()).optional().describe('Paste PHIDs'),
|
package/dist/tools/phame.js
CHANGED
|
@@ -3,10 +3,11 @@ import { jsonCoerce } from './coerce.js';
|
|
|
3
3
|
export function registerPhameTools(server, client) {
|
|
4
4
|
// Search blogs
|
|
5
5
|
server.tool('phabricator_blog_search', 'Search Phame blogs', {
|
|
6
|
-
queryKey: z.string().optional().describe('Built-in query: "all", "active"'),
|
|
6
|
+
queryKey: z.string().optional().describe('Built-in query: "all", "active", "archived"'),
|
|
7
7
|
constraints: jsonCoerce(z.object({
|
|
8
8
|
ids: z.array(z.coerce.number()).optional().describe('Blog IDs'),
|
|
9
9
|
phids: z.array(z.string()).optional().describe('Blog PHIDs'),
|
|
10
|
+
statuses: z.string().optional().describe('Blog status: "active" or "archived"'),
|
|
10
11
|
subscribers: z.array(z.string()).optional().describe('Subscriber user/project PHIDs'),
|
|
11
12
|
projects: z.array(z.string()).optional().describe('Project PHIDs'),
|
|
12
13
|
query: z.string().optional().describe('Full-text search query'),
|
|
@@ -80,12 +81,12 @@ export function registerPhameTools(server, client) {
|
|
|
80
81
|
});
|
|
81
82
|
// Search blog posts
|
|
82
83
|
server.tool('phabricator_blog_post_search', 'Search Phame blog posts', {
|
|
83
|
-
queryKey: z.string().optional().describe('Built-in query: "all", "live"'),
|
|
84
|
+
queryKey: z.string().optional().describe('Built-in query: "all", "live", "draft", "archived"'),
|
|
84
85
|
constraints: jsonCoerce(z.object({
|
|
85
86
|
ids: z.array(z.coerce.number()).optional().describe('Post IDs'),
|
|
86
87
|
phids: z.array(z.string()).optional().describe('Post PHIDs'),
|
|
87
88
|
blogPHIDs: z.array(z.string()).optional().describe('Filter by blog PHIDs'),
|
|
88
|
-
visibility: z.array(z.
|
|
89
|
+
visibility: z.array(z.string()).optional().describe('Visibility values: "0" (draft), "1" (published), "2" (archived)'),
|
|
89
90
|
subscribers: z.array(z.string()).optional().describe('Subscriber user/project PHIDs'),
|
|
90
91
|
projects: z.array(z.string()).optional().describe('Project PHIDs'),
|
|
91
92
|
query: z.string().optional().describe('Full-text search query'),
|
package/dist/tools/project.js
CHANGED
|
@@ -3,7 +3,7 @@ import { jsonCoerce } from './coerce.js';
|
|
|
3
3
|
export function registerProjectTools(server, client) {
|
|
4
4
|
// Search projects
|
|
5
5
|
server.tool('phabricator_project_search', 'Search Phabricator projects', {
|
|
6
|
-
queryKey: z.string().optional().describe('Built-in query: "all", "active", "joined"'),
|
|
6
|
+
queryKey: z.string().optional().describe('Built-in query: "all", "active", "joined", "watching"'),
|
|
7
7
|
constraints: jsonCoerce(z.object({
|
|
8
8
|
ids: z.array(z.coerce.number()).optional().describe('Project IDs'),
|
|
9
9
|
phids: z.array(z.string()).optional().describe('Project PHIDs'),
|
|
@@ -2,7 +2,8 @@ import { z } from 'zod';
|
|
|
2
2
|
import { jsonCoerce } from './coerce.js';
|
|
3
3
|
export function registerTransactionTools(server, client) {
|
|
4
4
|
server.tool('phabricator_transaction_search', 'Search transactions (comments, status changes, etc.) on any Phabricator object (e.g., "D123", "T456")', {
|
|
5
|
-
objectIdentifier: z.string().describe('Object ID (e.g., "D123", "T456") or PHID'),
|
|
5
|
+
objectIdentifier: z.string().optional().describe('Object ID (e.g., "D123", "T456") or PHID. Provide this or objectType, not both.'),
|
|
6
|
+
objectType: z.string().optional().describe('Object type group to query (e.g., "TASK", "DREV", "CMIT"). Queries all transactions of that type. Provide this or objectIdentifier, not both.'),
|
|
6
7
|
constraints: jsonCoerce(z.object({
|
|
7
8
|
phids: z.array(z.string()).optional().describe('Transaction PHIDs'),
|
|
8
9
|
authorPHIDs: z.array(z.string()).optional().describe('Author PHIDs'),
|
|
@@ -11,9 +12,10 @@ export function registerTransactionTools(server, client) {
|
|
|
11
12
|
after: z.string().optional().describe('Cursor for next-page pagination'),
|
|
12
13
|
before: z.string().optional().describe('Cursor for previous-page pagination'),
|
|
13
14
|
}, async (params) => {
|
|
14
|
-
const { objectIdentifier, ...searchParams } = params;
|
|
15
|
+
const { objectIdentifier, objectType, ...searchParams } = params;
|
|
15
16
|
const result = await client.call('transaction.search', {
|
|
16
17
|
objectIdentifier,
|
|
18
|
+
objectType,
|
|
17
19
|
...searchParams,
|
|
18
20
|
});
|
|
19
21
|
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
package/dist/tools/user.js
CHANGED
|
@@ -19,6 +19,7 @@ export function registerUserTools(server, client) {
|
|
|
19
19
|
isBot: z.boolean().optional().describe('Filter by bot status'),
|
|
20
20
|
isMailingList: z.boolean().optional().describe('Filter by mailing list status'),
|
|
21
21
|
needsApproval: z.boolean().optional().describe('Filter to users awaiting admin approval'),
|
|
22
|
+
mfa: z.boolean().optional().describe('Filter by MFA enrollment status (admin-only)'),
|
|
22
23
|
createdStart: z.coerce.number().optional().describe('Created after (epoch timestamp)'),
|
|
23
24
|
createdEnd: z.coerce.number().optional().describe('Created before (epoch timestamp)'),
|
|
24
25
|
query: z.string().optional().describe('Full-text search query'),
|
package/package.json
CHANGED