@skyelight/mcp 0.4.0 → 0.4.1
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 +121 -0
- package/README.md +55 -14
- package/package.json +2 -1
- package/src/version.js +1 -1
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
Notable changes to `@skyelight/mcp`. Dates are npm publish dates.
|
|
4
|
+
|
|
5
|
+
The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this package follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
What a version number means here: the tools are the interface. A **minor** is a
|
|
9
|
+
new tool, a new argument, or a new field in a result — an agent that ignores it
|
|
10
|
+
keeps working. A **patch** is a fix or a wording change. A **major** would be
|
|
11
|
+
removing a tool or an argument, or changing what an existing field means, and
|
|
12
|
+
there has not been one.
|
|
13
|
+
|
|
14
|
+
## 0.4.1 — 2026-09-19
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- **Two wrong permission claims in the README**, which is what npm serves on
|
|
19
|
+
the package page. It said a reviewer "reads and cannot write" — a reviewer
|
|
20
|
+
replies and raises items like every other role. It also said resolving stays
|
|
21
|
+
a person's call "for a thread you do not own", which read as a rule for
|
|
22
|
+
everyone; the actual rule touches only reviewers, who may move threads they
|
|
23
|
+
opened and nobody else's. Both are now taken from `convex/mcp/writes.ts`.
|
|
24
|
+
- Documented the 0.4.0 tool surface, which the README had not caught up with:
|
|
25
|
+
the image blocks, merged duplicates, `assignee: "me"`, and the read ceiling.
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
|
|
29
|
+
- This changelog, and it ships in the package.
|
|
30
|
+
|
|
31
|
+
## 0.4.0 — 2026-09-19
|
|
32
|
+
|
|
33
|
+
Nine things the Skyelight web app had shown a person for months that the tool
|
|
34
|
+
results did not carry.
|
|
35
|
+
|
|
36
|
+
### Added
|
|
37
|
+
|
|
38
|
+
- **`get_item` returns the pictures as pictures.** The screenshot taken when
|
|
39
|
+
the pin was left, and any images people attached to the thread, come back as
|
|
40
|
+
MCP `image` content blocks instead of links no agent tool can open. Capped at
|
|
41
|
+
four per call and 4MB each; anything skipped is named with its link and the
|
|
42
|
+
reason. The stdio transport fetches the storage URL, and the remote endpoint
|
|
43
|
+
reads its own storage directly.
|
|
44
|
+
- **Merged duplicates leave the list**, and the item they were merged into
|
|
45
|
+
carries `reportCount`. Five reports of one problem used to read as five bugs.
|
|
46
|
+
- **`list_workspaces` returns `you`** — the caller's own user id and name — and
|
|
47
|
+
`list_items` accepts `assignee: "me"`. "What is assigned to me" had no way to
|
|
48
|
+
be asked before.
|
|
49
|
+
- **`get_item` carries `linear`**, naming the issue a thread was handed to and
|
|
50
|
+
who it was delegated to, so an agent stops starting work a Linear-hosted
|
|
51
|
+
agent is already finishing.
|
|
52
|
+
- **`get_item` carries `attachments` and `reactions`.** Attachments cover the
|
|
53
|
+
thread and its replies, in reading order; reactions are counted by emoji
|
|
54
|
+
rather than listed one row per person.
|
|
55
|
+
- **List rows use the classifier's one-line summary** where there is one, with
|
|
56
|
+
`excerptSource` saying whether the line is a machine summary or the
|
|
57
|
+
reporter's own words. Rows used to be the first 140 characters of whatever
|
|
58
|
+
somebody typed.
|
|
59
|
+
- **The 2,000-item read ceiling states itself.** `capped` is set when it binds
|
|
60
|
+
and the narration calls the counts a floor rather than a total. The scan also
|
|
61
|
+
reads newest-first, so the items it keeps when it binds are the live ones.
|
|
62
|
+
|
|
63
|
+
### Fixed
|
|
64
|
+
|
|
65
|
+
- `set_status` returned a bare string where the server expected `{ text, data }`,
|
|
66
|
+
so a successful move answered with an empty content block and the model had
|
|
67
|
+
no way to tell it had worked.
|
|
68
|
+
- `initialize` reported `0.1.0`. Both transports carried their own stale copy
|
|
69
|
+
of that literal while the package shipped 0.3.0. There is one `VERSION`
|
|
70
|
+
constant now, and a test asserts it matches `package.json`.
|
|
71
|
+
- `status=deferred` was refused with a 400 by the API the stdio transport calls,
|
|
72
|
+
although every tool schema has offered `deferred` since it existed.
|
|
73
|
+
|
|
74
|
+
## 0.3.0 — 2026-09-17
|
|
75
|
+
|
|
76
|
+
### Added
|
|
77
|
+
|
|
78
|
+
- Grok in the installer's client list, and a README that lists it.
|
|
79
|
+
|
|
80
|
+
## 0.2.0 — 2026-09-09
|
|
81
|
+
|
|
82
|
+
### Added
|
|
83
|
+
|
|
84
|
+
- `npx @skyelight/mcp init` — finds the coding agent, registers the remote
|
|
85
|
+
server with it, and leaves sign-in to OAuth, so nothing is pasted and no key
|
|
86
|
+
is stored on disk.
|
|
87
|
+
- The `ui://` item card, for clients that can render an MCP Apps resource. The
|
|
88
|
+
text result is complete on its own, so the card is strictly additive.
|
|
89
|
+
|
|
90
|
+
## 0.1.4 — 2026-09-09
|
|
91
|
+
|
|
92
|
+
### Added
|
|
93
|
+
|
|
94
|
+
- The component that rendered the pinned element, where `@skyelight/build`
|
|
95
|
+
stamped it.
|
|
96
|
+
|
|
97
|
+
## 0.1.3 — 2026-09-09
|
|
98
|
+
|
|
99
|
+
### Added
|
|
100
|
+
|
|
101
|
+
- Projects sort by real activity rather than by when the project record last
|
|
102
|
+
changed, so "anything new here?" gets a true answer.
|
|
103
|
+
|
|
104
|
+
## 0.1.2 — 2026-09-08
|
|
105
|
+
|
|
106
|
+
### Added
|
|
107
|
+
|
|
108
|
+
- The source file and line behind a pin, and a repo permalink pinned to the
|
|
109
|
+
commit the page was built from.
|
|
110
|
+
|
|
111
|
+
## 0.1.1 — 2026-09-08
|
|
112
|
+
|
|
113
|
+
### Fixed
|
|
114
|
+
|
|
115
|
+
- The README npm was serving.
|
|
116
|
+
|
|
117
|
+
## 0.1.0 — 2026-09-08
|
|
118
|
+
|
|
119
|
+
First release. An MCP server over stdio that reads the feedback people left on
|
|
120
|
+
a running app — the thread, the page, the element they pointed at — and reports
|
|
121
|
+
back on it (SKY-273).
|
package/README.md
CHANGED
|
@@ -83,21 +83,29 @@ Tools then default to that project and nobody has to pass an id. Without it,
|
|
|
83
83
|
|
|
84
84
|
## Tools
|
|
85
85
|
|
|
86
|
-
| Tool | What it is for
|
|
87
|
-
| ----------------- |
|
|
88
|
-
| `list_workspaces` | Which workspaces this credential can reach.
|
|
89
|
-
| `list_projects` | The projects inside them, with the ids the other tools take.
|
|
90
|
-
| `list_items` | What is outstanding. Filter by page, type, status, assignee.
|
|
91
|
-
| `search_items` | Find items whose thread mentions some text, replies included.
|
|
92
|
-
| `get_item` | Everything needed to work one item: thread, page, anchor, code. |
|
|
93
|
-
| `post_update` | Report back on the thread the feedback came from.
|
|
94
|
-
| `create_item` | Raise a new item — an audit finding, something you noticed.
|
|
95
|
-
| `set_status` | Move an item to open, deferred or resolved.
|
|
86
|
+
| Tool | What it is for |
|
|
87
|
+
| ----------------- | ----------------------------------------------------------------------- |
|
|
88
|
+
| `list_workspaces` | Which workspaces this credential can reach, and who you are. |
|
|
89
|
+
| `list_projects` | The projects inside them, with the ids the other tools take. |
|
|
90
|
+
| `list_items` | What is outstanding. Filter by page, type, status, assignee. |
|
|
91
|
+
| `search_items` | Find items whose thread mentions some text, replies included. |
|
|
92
|
+
| `get_item` | Everything needed to work one item: thread, page, anchor, code, images. |
|
|
93
|
+
| `post_update` | Report back on the thread the feedback came from. |
|
|
94
|
+
| `create_item` | Raise a new item — an audit finding, something you noticed. |
|
|
95
|
+
| `set_status` | Move an item to open, deferred or resolved. |
|
|
96
96
|
|
|
97
97
|
`list_items` leads with a summary — totals, breakdown by type and by page — so
|
|
98
98
|
an agent can tell you the shape of the work before pulling any of it. Rows are
|
|
99
99
|
stubs; `get_item` is where the thread and the anchor live.
|
|
100
100
|
|
|
101
|
+
**"What is assigned to me."** `list_workspaces` returns your own user id, and
|
|
102
|
+
`list_items` takes `assignee: "me"`, so the most ordinary question anyone asks
|
|
103
|
+
an agent needs no id looked up by hand.
|
|
104
|
+
|
|
105
|
+
**Merged duplicates do not appear twice.** When somebody merges five reports of
|
|
106
|
+
one problem in the web app, the duplicates leave the list and the item they were
|
|
107
|
+
merged into says `5 reports`. A list that shows all five reads as five bugs.
|
|
108
|
+
|
|
101
109
|
## What the agent sees
|
|
102
110
|
|
|
103
111
|
```
|
|
@@ -107,12 +115,40 @@ Busiest pages: /checkout (8), /settings (4).
|
|
|
107
115
|
|
|
108
116
|
2 matches:
|
|
109
117
|
- The pay button does nothing on the second click
|
|
110
|
-
bug · open · /checkout · unassigned · 2 replies — id i1
|
|
118
|
+
bug · open · /checkout · unassigned · 2 replies · 5 reports — id i1
|
|
111
119
|
```
|
|
112
120
|
|
|
113
121
|
Deliberately prose rather than JSON. A tool that returns a bare array invites a
|
|
114
122
|
model to read the array out; this one invites it to summarise.
|
|
115
123
|
|
|
124
|
+
A row's line is the one-sentence summary Skyelight's classifier wrote, where
|
|
125
|
+
there is one, rather than the first 140 characters of whatever somebody typed —
|
|
126
|
+
four truncated paragraphs are not something you can choose between.
|
|
127
|
+
|
|
128
|
+
One call reads the 2,000 most recent items in a project. Past that the result
|
|
129
|
+
says so, in words, rather than presenting a slice as the total.
|
|
130
|
+
|
|
131
|
+
### The pictures
|
|
132
|
+
|
|
133
|
+
`get_item` returns the screenshot taken when the pin was left, and any images
|
|
134
|
+
people attached to the thread, as **image content blocks** — things a model can
|
|
135
|
+
actually look at, not links it cannot open.
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
Screenshot of the page when this was pinned: attached below.
|
|
139
|
+
2 images attached to this thread: also below.
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Capped at four per call. Anything too large to inline comes back as its link
|
|
143
|
+
with the reason, so a picture never disappears silently.
|
|
144
|
+
|
|
145
|
+
### What somebody else already did
|
|
146
|
+
|
|
147
|
+
`get_item` also names the Linear issue a thread was handed to, and who it was
|
|
148
|
+
delegated to, so an agent does not start work a Linear-hosted agent is
|
|
149
|
+
finishing. Reactions come back counted by emoji — a thread with one comment and
|
|
150
|
+
nine thumbs up is not a thread with one comment.
|
|
151
|
+
|
|
116
152
|
### Where the code is
|
|
117
153
|
|
|
118
154
|
If the app was built with [`@skyelight/build`](https://www.npmjs.com/package/@skyelight/build),
|
|
@@ -146,8 +182,13 @@ reason. A personal token is the only credential the API accepts.
|
|
|
146
182
|
The server enforces nothing; the API does. Whatever your account can do in the
|
|
147
183
|
web app, the agent can do through your token, and nothing more:
|
|
148
184
|
|
|
149
|
-
-
|
|
185
|
+
- **Owner, admin, collaborator and reviewer** all read and write — a reviewer
|
|
186
|
+
can reply on a thread and raise one, which is what a client seat is for.
|
|
187
|
+
- A **reviewer** can only `set_status` on threads they opened themselves. Every
|
|
188
|
+
other role can move anyone's. It is the rule the web app already applies:
|
|
189
|
+
closing someone else's report is a decision about their report.
|
|
150
190
|
- A **project-bound** credential answers 404 outside its project rather than
|
|
151
191
|
reporting that something exists but is forbidden.
|
|
152
|
-
-
|
|
153
|
-
|
|
192
|
+
- Workspaces your plan or seat does not cover are **listed and marked** rather
|
|
193
|
+
than hidden, with the reason, so a client can see the workspace they know
|
|
194
|
+
exists and be told which gate closed instead of being told it is missing.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skyelight/mcp",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "MCP server for Skyelight \u2014 read feedback items from your project as an agent",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"files": [
|
|
11
11
|
"LICENSE",
|
|
12
12
|
"README.md",
|
|
13
|
+
"CHANGELOG.md",
|
|
13
14
|
"src"
|
|
14
15
|
],
|
|
15
16
|
"engines": {
|
package/src/version.js
CHANGED