@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.
Files changed (2) hide show
  1. package/dist/index.js +26 -5
  2. 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. For a marketing CREATIVE (a task in an mkt campaign): channel + 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.",
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
- channel: strSchema("mkt: Instagram, TikTok, LinkedIn, \u2026"),
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: "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.",
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.12.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>",