@skyelight/mcp 0.7.2 → 0.8.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/CHANGELOG.md CHANGED
@@ -11,6 +11,23 @@ keeps working. A **patch** is a fix or a wording change. A **major** would be
11
11
  removing a tool or an argument, or changing what an existing field means, and
12
12
  there has not been one.
13
13
 
14
+ ## 0.8.0 — 2026-10-08
15
+
16
+ ### Added
17
+
18
+ - **`list_items` filters by hand-off.** A new `task` argument (`investigate`,
19
+ `plan`, `fix`, or `none`) returns only the items a person handed to an agent
20
+ with that task in the app, or only those with none. Each row in the list now
21
+ names its hand-off, so an agent can choose its work without fetching every
22
+ item.
23
+
24
+ ## 0.7.3 — 2026-10-08
25
+
26
+ ### Changed
27
+
28
+ - **Docs.** The README opens with a picture of Skyelight. No change to the
29
+ tools.
30
+
14
31
  ## 0.7.2 — 2026-10-08
15
32
 
16
33
  ### Changed
package/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # @skyelight/mcp
2
2
 
3
+ <!-- A full URL, not a relative path, so the npm page shows it too. The
4
+ image lives in the public repo (assets/), not in the npm package. -->
5
+ ![Skyelight: feedback pinned to the element, with the source behind it, for your coding agent](https://raw.githubusercontent.com/plastrlab/skyelight-mcp/main/assets/skyelight.png)
6
+
3
7
  [npm](https://www.npmjs.com/package/@skyelight/mcp) ·
4
8
  [source](https://github.com/plastrlab/skyelight-mcp) ·
5
9
  [docs](https://skyelight.ai/docs/mcp)
@@ -111,7 +115,7 @@ agent calls `list_projects` first rather than guess.
111
115
  | --------------------- | ------------------------------------------------------------------------------------ |
112
116
  | `list_workspaces` | Which workspaces this credential can reach, and who you are. |
113
117
  | `list_projects` | The projects inside them, with the ids the other tools take. |
114
- | `list_items` | What is outstanding. Filter by page, type, status, assignee. |
118
+ | `list_items` | What is outstanding. Filter by page, type, status, assignee, hand-off. |
115
119
  | `search_items` | Find items whose thread mentions some text, replies included. |
116
120
  | `get_item` | Everything needed to work one item: thread, page, anchor, code, images. |
117
121
  | `post_update` | Report back on the thread the feedback came from. |
@@ -151,6 +155,11 @@ stubs; `get_item` is where the thread and the anchor live.
151
155
  `list_items` takes `assignee: "me"`, so the most ordinary question anyone asks
152
156
  an agent needs no id looked up by hand.
153
157
 
158
+ **"What was I asked to fix."** A person can hand a thread to an agent in the
159
+ app (Hand off: Investigate, Plan or Fix). `list_items` takes `task` with one of
160
+ those, or `"none"`, and each row names its hand-off. With `assignee: "me"` it
161
+ is your own queue of fixes.
162
+
154
163
  **Merged duplicates do not appear twice.** When somebody merges five reports of
155
164
  one problem in the web app, the duplicates leave the list and the item they were
156
165
  merged into says `5 reports`. A list that shows all five reads as five bugs.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skyelight/mcp",
3
- "version": "0.7.2",
3
+ "version": "0.8.0",
4
4
  "description": "MCP server for Skyelight — read feedback items from your project as an agent",
5
5
  "mcpName": "io.github.plastrlab/skyelight-mcp",
6
6
  "type": "module",
package/src/tools.js CHANGED
@@ -100,6 +100,13 @@ export function toolDefinitions(opts = {}) {
100
100
  'A user id, "me" for whoever this connection belongs to, or ' +
101
101
  '"none" for unassigned items.',
102
102
  },
103
+ task: {
104
+ type: "string",
105
+ enum: ["investigate", "plan", "fix", "none"],
106
+ description:
107
+ "Only items a person handed to an agent with this task (Hand off in the app), " +
108
+ 'or "none" for items with no hand-off. Combine with assignee to find your own.',
109
+ },
103
110
  limit: { type: "number", description: "Max items (default 50)." },
104
111
  },
105
112
  },
@@ -551,6 +558,8 @@ export function renderList(result, { searched } = {}) {
551
558
  const bits = [i.type ?? "unsorted", i.status, i.page];
552
559
  if (i.assignee) bits.push(`assigned to ${i.assignee}`);
553
560
  else bits.push("unassigned");
561
+ // The standing ask, so an agent can pick its work from the list.
562
+ if (i.agentTask) bits.push(`hand-off: ${i.agentTask}`);
554
563
  if (i.replyCount > 0) bits.push(plural(i.replyCount, "reply", "replies"));
555
564
  // How many people hit this, once merging has told us they are the same
556
565
  // thing. Silent at 1, which is almost every row — a list where every line
@@ -886,6 +895,7 @@ export async function callTool(name, args, { client, config }) {
886
895
  type: args.type,
887
896
  status: args.status,
888
897
  assignee: args.assignee,
898
+ task: args.task,
889
899
  limit: args.limit,
890
900
  });
891
901
  return { text: renderList(result), data: result };
package/src/version.js CHANGED
@@ -12,4 +12,4 @@
12
12
  * filesystem there. `test/server.test.js` asserts the two agree, so the pair
13
13
  * cannot drift again without a test going red.
14
14
  */
15
- export const VERSION = "0.7.2";
15
+ export const VERSION = "0.8.0";