@glie/mcp-polaris 0.12.0 → 0.13.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 +26 -5
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -172,6 +172,23 @@ var TOOLS = [
|
|
|
172
172
|
inputSchema: objSchema({ key: strSchema("project key (e.g. saasA)") }, ["key"]),
|
|
173
173
|
call: async (args) => (await apiCall("POST", `/api/projects/${args.key}/disarm`)).body
|
|
174
174
|
},
|
|
175
|
+
{
|
|
176
|
+
name: "polaris.project.pause_publishing",
|
|
177
|
+
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.",
|
|
178
|
+
inputSchema: objSchema({
|
|
179
|
+
key: strSchema("project key (e.g. saasA)"),
|
|
180
|
+
reason: strSchema("why publishing was stopped \u2014 read by whoever finds it paused")
|
|
181
|
+
}, ["key"]),
|
|
182
|
+
call: async (args) => (await apiCall("POST", `/api/projects/${args.key}/pause-publishing`, {
|
|
183
|
+
reason: args.reason
|
|
184
|
+
})).body
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
name: "polaris.project.resume_publishing",
|
|
188
|
+
description: "Resume publishing through Polaris (human-only). Immediate: the next pass publishes whatever is still inside its 15-minute window; anything past it has already gone back to the person. Idempotent.",
|
|
189
|
+
inputSchema: objSchema({ key: strSchema("project key (e.g. saasA)") }, ["key"]),
|
|
190
|
+
call: async (args) => (await apiCall("POST", `/api/projects/${args.key}/resume-publishing`)).body
|
|
191
|
+
},
|
|
175
192
|
{
|
|
176
193
|
name: "polaris.milestone.list",
|
|
177
194
|
description: "List milestones in a project.",
|
|
@@ -325,18 +342,19 @@ var TOOLS = [
|
|
|
325
342
|
},
|
|
326
343
|
{
|
|
327
344
|
name: "polaris.task.create",
|
|
328
|
-
description: "Create a task within a milestone.
|
|
345
|
+
description: "Create a task within a milestone. A marketing CREATIVE (a task in an mkt campaign) carries WHERE IT GOES: `presence_id`, one of the destinations from polaris.destination.list. The channel and the market are read from that destination, and sending them here is refused. It also takes format + scheduled_date (the publish day / calendar slot) + platform (if this creative is individually paid). A CAROUSEL (format=carrossel) also requires `slides` (2..10) \u2014 without it the call is refused, because a carousel with no declared size ships one image.",
|
|
329
346
|
inputSchema: objSchema({
|
|
330
347
|
milestone_id: intSchema(),
|
|
331
348
|
name: strSchema(),
|
|
332
349
|
description_md: strSchema(),
|
|
333
350
|
status: strSchema("draft \u2014 the only status a task can be created in; it reaches the rest by being moved, one legal step at a time (polaris.task.transition)"),
|
|
334
|
-
|
|
351
|
+
presence_id: intSchema("mkt: WHERE THE PIECE GOES \u2014 the id of one of the product's destinations " + "(polaris.destination.list). Required for a creative; the channel and the market come " + "from it. A place the product is not on is refused, with the reason."),
|
|
335
352
|
format: strSchema("mkt: post, carrossel, reel, story, artigo, \u2026"),
|
|
336
353
|
slides: intSchema("mkt: REQUIRED when format is a carousel \u2014 how many images the piece has (2..10). " + "It is a contract: the generator delivers exactly this many. Omit for every other format."),
|
|
337
354
|
medium: strSchema("mkt: what the piece IS \u2014 image | video | text. The engine follows it (Codex, Remotion, " + "the writer). A carousel is `image` with slides > 1: only an image has more than one."),
|
|
338
355
|
surface: strSchema("mkt: where it publishes \u2014 feed | stories | reels | shorts | article | newsletter. It is " + "what separates a reel from a story: same medium, same 9:16, different place (and a " + "story is gone in 24h)."),
|
|
339
356
|
aspect: strSchema("mkt: the piece's SHAPE \u2014 1:1 | 4:5 | 9:16 | 16:9 | 2:3. The format says what the piece " + "IS (post, carrossel, reel), this says how it is framed, and they are independent: a " + "carousel can be vertical, a reel can be square. Omit to take the channel's usual one."),
|
|
357
|
+
link_url: strSchema("mkt: WHERE THE PIECE SENDS THE READER \u2014 the full URL, tracking parameters already in " + "it. Required on a PAID piece: the network does not create an ad without a " + "destination, and the click leaves through the ad itself. On an organic piece it is " + "optional, because there the link travels in the body text."),
|
|
340
358
|
output_type: strSchema("pr|post|video|email|generic \u2014 the delivery medium. Omit it: the format decides (reel/v\xEDdeo/short \u2192 video). Only pass it to override."),
|
|
341
359
|
scheduled_date: strSchema("mkt: publish day (ISO date) \u2014 the calendar slot"),
|
|
342
360
|
platform: strSchema("mkt: ad platform if this creative is individually paid"),
|
|
@@ -406,7 +424,8 @@ var TOOLS = [
|
|
|
406
424
|
name: strSchema(),
|
|
407
425
|
description_md: strSchema("full markdown brief; replaces the current description"),
|
|
408
426
|
asset_url: strSchema("mkt: URL of the produced creative asset (image/video) for the reviewer"),
|
|
409
|
-
output_type: strSchema("pr|post|video|email|generic \u2014 fix the delivery medium of a task filed with the wrong one (it routes the worker to the video or the image pipeline).")
|
|
427
|
+
output_type: strSchema("pr|post|video|email|generic \u2014 fix the delivery medium of a task filed with the wrong one (it routes the worker to the video or the image pipeline)."),
|
|
428
|
+
link_url: strSchema("mkt: where the piece sends the reader \u2014 the full URL with its tracking parameters. A " + "PAID piece cannot go to review without one: the network does not create an ad with " + 'no destination. Send "" to clear it.')
|
|
410
429
|
}, ["id"]),
|
|
411
430
|
call: async (args) => {
|
|
412
431
|
const body = {};
|
|
@@ -418,6 +437,8 @@ var TOOLS = [
|
|
|
418
437
|
body.asset_url = args.asset_url;
|
|
419
438
|
if (typeof args.output_type === "string")
|
|
420
439
|
body.output_type = args.output_type;
|
|
440
|
+
if (typeof args.link_url === "string")
|
|
441
|
+
body.link_url = args.link_url;
|
|
421
442
|
return (await apiCall("PATCH", `/api/tasks/${args.id}`, body)).body;
|
|
422
443
|
}
|
|
423
444
|
},
|
|
@@ -442,7 +463,7 @@ var TOOLS = [
|
|
|
442
463
|
},
|
|
443
464
|
{
|
|
444
465
|
name: "polaris.task.schedule",
|
|
445
|
-
description:
|
|
466
|
+
description: 'Schedule a mkt creative for publication: release \u2192 agendado, and the publisher takes it to `done` when its time arrives. The creative must be bound to an active social account (resolved from its market + channel) and have a publish_at in the future. Its copy is frozen while scheduled \u2014 editing it requires unscheduling first. The hour is not a promise the clock keeps at any cost (docs/spec/publishing.md, "Rules \u2014 the brakes on publishing through Polaris"): more than 15 minutes past it the piece is NOT published, it comes back to `release` carrying the reason, because a post at the wrong hour is not the post that was planned. Publishing is also skipped entirely while the product is paused (polaris.project.pause_publishing), and a piece whose hour passes meanwhile comes back the same way.',
|
|
446
467
|
inputSchema: objSchema({ id: intSchema() }, ["id"]),
|
|
447
468
|
call: async (args) => (await apiCall("POST", `/api/tasks/${args.id}/schedule`)).body
|
|
448
469
|
},
|
|
@@ -781,7 +802,7 @@ var TOOLS = [
|
|
|
781
802
|
},
|
|
782
803
|
{
|
|
783
804
|
name: "polaris.social_account.list",
|
|
784
|
-
description: "The social accounts connected to publish through: a product's (`key`), or the organization's own when `key` is left out \u2014 the company's identity, which publishes as the company and not as a product. Each account says its channel, handle, market and timezone, whether it is `schedulable` (market and timezone set), and whether its credential needs a person (`token_expired`). No credential ever comes back. Connecting is a person's job, through the provider's consent screen; read this to know where a creative can go.",
|
|
805
|
+
description: "The social accounts connected to publish through: a product's (`key`), or the organization's own when `key` is left out \u2014 the company's identity, which publishes as the company and not as a product. Each account says its channel, handle, market and timezone, whether it is `schedulable` (market and timezone set), and whether its credential needs a person (`token_expired`). It also says `settings_problem`: what the NETWORK still requires of this account before anything can go out through it, in a sentence naming the field and where to set it, or null when nothing is missing. A YouTube channel needs a video category (YouTube refuses the upload without one) and an answer to whether its content is made for children (a legal declaration its API never asks for). No credential ever comes back. Connecting is a person's job, through the provider's consent screen; read this to know where a creative can go.",
|
|
785
806
|
inputSchema: objSchema({
|
|
786
807
|
key: strSchema("project key; leave it out for the organization's own accounts")
|
|
787
808
|
}),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@glie/mcp-polaris",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.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>",
|