@glie/mcp-polaris 0.13.0 → 0.14.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/dist/index.js +86 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -95,6 +95,9 @@ var INSTRUCTIONS = [
|
|
|
95
95
|
`\u2022 "It's reviewed, ship it" \u2192 polaris.task.approve (human-only); ship several together via polaris.stack.* \u2192 stack.release`,
|
|
96
96
|
`\u2022 "My task is stuck in a blocked stack" \u2192 fix the conflict on YOUR branch (rebase agent/task-N onto dev, push) \u2014 the rc PR flips to ready automatically. A stacked task can't advance individually; never merge the rc PR by hand.`,
|
|
97
97
|
'\u2022 "Break a milestone into tasks" \u2192 polaris.milestone.qa_list / qa_answer (while in discovery)',
|
|
98
|
+
'\u2022 "Jot something down for later" \u2192 polaris.idea.create (a title is enough). NO dates: an idea is not a milestone.',
|
|
99
|
+
'\u2022 "What have we already thought of?" \u2192 polaris.idea.list \u2014 read it before proposing work; it also holds what was turned down',
|
|
100
|
+
'\u2022 "This idea is now real" \u2192 polaris.idea.promote (needs end_date + team) \u2014 the one door from the idea list to the timeline',
|
|
98
101
|
`\u2022 "Triage support / what's waiting?" \u2192 polaris.ticket.list (status, project_key) \u2014 P1 first`,
|
|
99
102
|
'\u2022 "Reply to a customer / hand off" \u2192 polaris.ticket.reply then polaris.ticket.pass(to)',
|
|
100
103
|
'\u2022 "Turn a report into work" \u2192 polaris.ticket.frame_issue \u2192 polaris.issue.add_task \xD7N (framing is HUMAN-only; the helpdesker proposes it)',
|
|
@@ -162,16 +165,97 @@ var TOOLS = [
|
|
|
162
165
|
},
|
|
163
166
|
{
|
|
164
167
|
name: "polaris.project.arm",
|
|
165
|
-
description: "Arm a project for auto-approval (human-only): while armed,
|
|
168
|
+
description: "Arm a project for auto-approval (human-only): while armed, a task an agent writes in `draft` (discovery's batch, a campaign's pieces) is approved into `backlog` on your behalf, with no per-task click. Tasks a person creates by hand and support work still wait in `draft`. `approval \u2192 release` is never automatic. Not retroactive: drafts already there stay. Idempotent.",
|
|
166
169
|
inputSchema: objSchema({ key: strSchema("project key (e.g. saasA)") }, ["key"]),
|
|
167
170
|
call: async (args) => (await apiCall("POST", `/api/projects/${args.key}/arm`)).body
|
|
168
171
|
},
|
|
169
172
|
{
|
|
170
173
|
name: "polaris.project.disarm",
|
|
171
|
-
description: "Disarm a project (human-only). Immediate effect: the next task
|
|
174
|
+
description: "Disarm a project (human-only). Immediate effect: the next task an agent writes in `draft` waits for a person again. Tasks already moved to `backlog` stay there. Idempotent.",
|
|
172
175
|
inputSchema: objSchema({ key: strSchema("project key (e.g. saasA)") }, ["key"]),
|
|
173
176
|
call: async (args) => (await apiCall("POST", `/api/projects/${args.key}/disarm`)).body
|
|
174
177
|
},
|
|
178
|
+
{
|
|
179
|
+
name: "polaris.idea.list",
|
|
180
|
+
description: "List a project's IDEAS \u2014 what might matter later, before it has a date. An idea is not a milestone: no dates, no tasks, never on the timeline. Read this before proposing new work: it is where the things already thought of (and the things already turned down) live. Optional status filter: open|promoted|dropped.",
|
|
181
|
+
inputSchema: objSchema({
|
|
182
|
+
project_key: strSchema("project key (e.g. saasA)"),
|
|
183
|
+
status: strSchema("open|promoted|dropped")
|
|
184
|
+
}, ["project_key"]),
|
|
185
|
+
call: async (args) => {
|
|
186
|
+
const qs = typeof args.status === "string" ? `?status=${args.status}` : "";
|
|
187
|
+
return (await apiCall("GET", `/api/projects/${args.project_key}/ideas${qs}`)).body;
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
name: "polaris.idea.create",
|
|
192
|
+
description: "Capture an idea in a project. The title is the only required field \u2014 capturing has to cost less than losing the idea. No dates: if it has a deadline it is a milestone, so use polaris.milestone.create instead. Needs a token.",
|
|
193
|
+
inputSchema: objSchema({
|
|
194
|
+
project_key: strSchema("project key (e.g. saasA)"),
|
|
195
|
+
title: strSchema("one line \u2014 what the idea is"),
|
|
196
|
+
note_md: strSchema("optional: what it is and why now; becomes the milestone's description on promotion"),
|
|
197
|
+
team: strSchema("optional: dev|mkt \u2014 leave empty if you don't know yet")
|
|
198
|
+
}, ["project_key", "title"]),
|
|
199
|
+
call: async (args) => {
|
|
200
|
+
const { project_key, ...body } = args;
|
|
201
|
+
return (await apiCall("POST", `/api/projects/${project_key}/ideas`, body)).body;
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
name: "polaris.idea.update",
|
|
206
|
+
description: "Refine an open idea \u2014 its title, note or team. A promoted idea is refused: it became a milestone, and the milestone is the truth from then on (use polaris.milestone.update). Needs a token.",
|
|
207
|
+
inputSchema: objSchema({
|
|
208
|
+
project_key: strSchema(),
|
|
209
|
+
id: intSchema("idea id"),
|
|
210
|
+
title: strSchema(),
|
|
211
|
+
note_md: strSchema(),
|
|
212
|
+
team: strSchema("dev|mkt")
|
|
213
|
+
}, ["project_key", "id"]),
|
|
214
|
+
call: async (args) => {
|
|
215
|
+
const { project_key, id, ...body } = args;
|
|
216
|
+
return (await apiCall("PATCH", `/api/projects/${project_key}/ideas/${id}`, body)).body;
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
name: "polaris.idea.promote",
|
|
221
|
+
description: "Promote an idea into a milestone \u2014 the one door between the idea list and the timeline. Demands what a milestone demands: end_date, and a team (unless the idea already carries one). The milestone is created and the idea stamped in ONE transaction; promoting twice returns the first milestone and writes nothing. Needs a token.",
|
|
222
|
+
inputSchema: objSchema({
|
|
223
|
+
project_key: strSchema(),
|
|
224
|
+
id: intSchema("idea id"),
|
|
225
|
+
end_date: strSchema("YYYY-MM-DD \u2014 the deadline the milestone commits to"),
|
|
226
|
+
team: strSchema("dev|mkt \u2014 required unless the idea already has one"),
|
|
227
|
+
start_date: strSchema("YYYY-MM-DD, optional"),
|
|
228
|
+
name: strSchema("optional: overrides the idea's title"),
|
|
229
|
+
description_md: strSchema("optional: overrides the idea's note"),
|
|
230
|
+
framework_key: strSchema("optional: e.g. feature, marketing")
|
|
231
|
+
}, ["project_key", "id", "end_date"]),
|
|
232
|
+
call: async (args) => {
|
|
233
|
+
const { project_key, id, ...body } = args;
|
|
234
|
+
return (await apiCall("POST", `/api/projects/${project_key}/ideas/${id}/promote`, body)).body;
|
|
235
|
+
}
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
name: "polaris.idea.drop",
|
|
239
|
+
description: "Drop an idea, with the reason it was dropped. Reversible (polaris.idea.reopen) \u2014 dropping is not a one-way door, because almost every good idea looks bad at first. Idempotent: dropping twice keeps the first reason. Needs a token.",
|
|
240
|
+
inputSchema: objSchema({
|
|
241
|
+
project_key: strSchema(),
|
|
242
|
+
id: intSchema("idea id"),
|
|
243
|
+
reason: strSchema("why it was dropped")
|
|
244
|
+
}, ["project_key", "id"]),
|
|
245
|
+
call: async (args) => {
|
|
246
|
+
const { project_key, id, ...body } = args;
|
|
247
|
+
return (await apiCall("POST", `/api/projects/${project_key}/ideas/${id}/drop`, body)).body;
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
name: "polaris.idea.reopen",
|
|
252
|
+
description: "Put a dropped idea back on the open list, clearing its reason. Required before promoting a dropped idea \u2014 resurrecting is a decision, not a side effect. Needs a token.",
|
|
253
|
+
inputSchema: objSchema({ project_key: strSchema(), id: intSchema("idea id") }, [
|
|
254
|
+
"project_key",
|
|
255
|
+
"id"
|
|
256
|
+
]),
|
|
257
|
+
call: async (args) => (await apiCall("POST", `/api/projects/${args.project_key}/ideas/${args.id}/reopen`, {})).body
|
|
258
|
+
},
|
|
175
259
|
{
|
|
176
260
|
name: "polaris.project.pause_publishing",
|
|
177
261
|
description: "Pause publishing through Polaris for a product (human-only). While paused, no creative of this product goes out at its scheduled hour. It does NOT hold the clock: a piece whose hour passes meanwhile comes back to the person in `release`, like any other late piece \u2014 that is what pausing is for. Idempotent: a second call keeps the original pause, and the original reason. `reason` is optional and is what whoever finds it paused reads.",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@glie/mcp-polaris",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"description": "Model Context Protocol (stdio) server exposing Polaris, glie's ops platform, as native tools in Claude Code and any MCP client.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "glie <carlos@glie.ai>",
|