Tools reference
The Skyelight MCP server provides 17 tools. The remote server and the local package provide the same tools. Each tool is marked read-only or write, and most clients ask you before they run a write tool.
Each result is short prose with the counts in it, plus the raw data as structured content. When a tool refuses a call, the result contains the reason, so the agent can report it.
All tools
| Tool | Kind | What it is for |
|---|---|---|
list_workspaces | Read | The workspaces you can reach, your role in each, and your user ID |
list_projects | Read | The projects in those workspaces, with the IDs other tools take |
list_items | Read | Open work, filtered by page, type, status or assignee |
search_items | Read | Threads whose text or replies mention a word or phrase |
get_item | Read | One thread in full: replies, page, anchor, source location, images |
list_members | Read | The people in a workspace, to name an assignee or a mention |
post_update | Write | Reply on a thread with what you found or changed |
create_item | Write | Start a new thread on a page |
set_status | Write | Set a thread to open, deferred or resolved |
assign | Write | Assign a thread to a person, or unassign it |
whats_new | Read | What changed on a project since you last looked |
project_review | Read | Counts, outcomes and open threads, for a review or hand-off |
decision_log | Read | What a project decided in its threads, and its current rules |
save_rule | Write | Add an agreed rule to the project context (owners and admins) |
find_by_source | Read | Threads on a file or component, or the files with the most threads |
find_similar | Read | Existing threads that match something you are about to report |
merge_items | Write | Merge duplicate threads into one |
Rules that apply to every tool
- Projects. Most tools take a
projectId. You can leave it out when the workspace has one project, or when the local server has a bound project. Otherwise the error lists your projects and their IDs.list_projectsalso returns them. - Item IDs. In tool and field names, an item is a thread.
list_items,search_itemsand the other listing tools return item IDs. - Naming people. Arguments that take a person (
assignee,mentions) accept a user ID, an email, a full name, a first name, the start of a name, orme. A name that matches more than one person is refused with the candidates, and nothing is written. Calllist_membersto find the right person. - Permissions. Tools act with your role. Owners, admins and collaborators
can call every tool.
save_ruleis limited to workspace owners and admins.
Reading
list_workspacesRead-onlyReturns the workspaces you can reach, your role in each, and your user ID. A workspace where your role or the organization’s plan doesn’t include agent tools is listed with the reason. Takes no arguments.
list_projectsRead-onlyReturns the projects you can reach, most recent activity first. Call it first when no project is bound.
| Argument | Type | Description |
|---|---|---|
workspaceId | string | Narrow to one workspace. Optional |
list_itemsRead-onlyReturns a summary of the project (totals, and counts by type and by page), then one row per thread. Each row shows the thread’s one-line summary when it has one. Merged duplicates are hidden and counted on the thread they were merged into.
list_items reads the 2,000 most recent threads in a project. When a project
has more, the result says so.
| Argument | Type | Description |
|---|---|---|
projectId | string | Optional when a project is bound or the workspace has only one |
page | string | Only threads on one page, for example /checkout |
type | string | A type, for example bug, idea or feedback |
status | open, deferred or resolved | Defaults to every status |
assignee | string | A user ID, me, or none for unassigned threads |
limit | number | Maximum rows. Default 50 |
search_itemsRead-onlyReturns threads that mention a word or phrase. It searches replies as well as the first message, so it also finds threads where the match is only in a reply.
| Argument | Type | Description |
|---|---|---|
query | string | Required. Text to look for |
projectId | string | Optional when a project is bound or the workspace has only one |
status | open, deferred or resolved | Optional |
limit | number | Optional |
get_itemRead-onlyReturns everything needed to work on one thread:
- the first message and every reply, in order;
- the page and URL;
- the anchor that identifies the pinned element;
- the source file, line, component, commit and branch, when the site was built with Skyelight Build, and a link to the file when the project is linked to a repository;
- the screenshot taken when the thread was created, and any images people attached, as images the model can read;
- the Linear issue the thread was sent to, if any, and reaction counts;
- the agent task set when someone handed the thread off: investigate, plan or fix.
Each call returns up to 4 images, each up to 4 MB. The result names any image it skipped, with its link and the reason. If someone moved the pin to another element after the thread was created, the result says the screenshot and page context are from before the move. If the screenshot was deleted under the workspace’s retention setting, the result says so. See Anchoring, context and screenshots.
| Argument | Type | Description |
|---|---|---|
itemId | string | Required |
list_membersRead-onlyReturns the people in a workspace: name, email, role and user ID. Use it to find the person to assign or mention.
| Argument | Type | Description |
|---|---|---|
projectId | string | Optional if a project is bound |
workspaceId | string | Use instead of a project |
Writing
post_updateWritesPosts a reply on a thread, as you. Use it when the work is done, or to report what the agent found when it is stuck.
The item must be a thread. You can’t reply to a reply.
| Argument | Type | Description |
|---|---|---|
itemId | string | Required |
body | string | Required. Up to 4,000 characters |
mentions | array | People to notify, up to 10. Write @Name in the body where you mention them |
links | array | Links such as a pull request, commit or deploy, each with a url and optional label. Up to 5 |
create_itemWritesCreates a new thread on a page, as you. Use it for a new finding, such as an
audit result. To report on a thread the agent is already working on, use
post_update.
Skyelight sets the type, writes a summary and sends notifications for the new thread, the same as for a thread created in the app.
| Argument | Type | Description |
|---|---|---|
url | string | Required. Full URL of the page |
body | string | Required. Up to 4,000 characters |
selector | string | CSS selector for the element, if there is one |
projectId | string | Optional if a project is bound |
pageTitle | string | Optional |
mentions | array | People to notify |
assignee | string | The person to assign it to, or me |
set_statusWritesSets a thread to open, deferred or resolved. Post a reply with
post_update first, so the person who reported it can read what changed.
Use deferred for valid work that is postponed.
| Argument | Type | Description |
|---|---|---|
itemId | string | Required |
status | open, deferred or resolved | Required |
assignWritesAssigns a thread to a person, or unassigns it. The assignee gets the same notification as for an assignment in the app.
A resolved thread must be reopened before you can assign it.
| Argument | Type | Description |
|---|---|---|
itemId | string | Required |
assignee | string or null | Required. A person, me, or null to unassign |
Project history
whats_newRead-onlyReturns what changed on a project since you last looked: new threads, new replies grouped by thread, threads resolved or deferred, and threads assigned to you or mentioning you. Call it at the start of a session.
Without since, whats_new reads from your bookmark on that project and
moves the bookmark forward. Your first call looks back 7 days. With since,
it reads from that time and leaves the bookmark where it is.
| Argument | Type | Description |
|---|---|---|
projectId | string | Optional if a project is bound |
since | string | A date or ISO time, for example 2026-09-01. Optional |
project_reviewRead-onlyReturns what you need to write a project review or hand-off: counts and breakdowns, who took part, resolved threads and their last message, deferred threads and the reason given, open threads, and the longest conversations quoted in full. Every entry includes its item ID, so each statement in the document can be traced to its thread.
The overview returns every count and the first 25 rows of each section. A section returns 100 rows, or 5 conversations, per call. Each result ends with the call that fetches the next page.
| Argument | Type | Description |
|---|---|---|
projectId | string | Optional if a project is bound |
section | resolved, deferred, open or discussions | Omit for the overview. Name one to read it in full |
offset | number | With section, the row to start from |
decision_logRead-onlyReturns the decisions a project made in its threads, quoted: threads resolved or deferred after a discussion, with the last messages of each. It also returns types people corrected, outcomes that recur, and the project’s existing rules.
| Argument | Type | Description |
|---|---|---|
projectId | string | Optional if a project is bound |
since | string | Only decisions after this date |
limit | number | Decisions per page. Default 15, at most 30 |
offset | number | Where to start, from the previous result |
save_ruleWritesAdds a rule the team agreed on to the project context, under “Rules learned”,
with who added it, the date and the threads it came from. Skyelight reads the
project context when it sets a thread’s type, so a saved rule affects future
threads. Agents read the rules through decision_log.
Only workspace owners and admins can save rules. Skyelight refuses an exact duplicate, and a rule that would take the project context past 20,000 characters.
| Argument | Type | Description |
|---|---|---|
rule | string | Required. One plain sentence, under 500 characters |
projectId | string | Optional if a project is bound |
sourceItemIds | array | Threads the rule came from |
Code and duplicates
find_by_sourceRead-onlyReturns threads by the code that rendered the pinned element, using the file and line that Skyelight Build stamps on each element. Pass a file or a component to see every thread about it before you edit it. Pass neither to get the stamped files ranked by open and deferred threads.
find_by_source only finds threads left on builds stamped by Skyelight Build.
| Argument | Type | Description |
|---|---|---|
projectId | string | Optional if a project is bound |
file | string | A path or a file name, for example PricingTable.tsx |
line | number | Threads nearest this line come first |
component | string | A component name, for example PricingTable |
status | open, deferred or resolved | Optional |
limit | number | Optional |
find_similarRead-onlyReturns existing threads that may report the same thing. Pass the text you are about to report, or an existing item. Each match lists why it matched: shared words, the same page, the same element or the same source file. Matching compares text and doesn’t call an AI model.
| Argument | Type | Description |
|---|---|---|
text | string | What you are about to report |
itemId | string | Use instead of text to find duplicates of this thread |
projectId | string | Optional if a project is bound or itemId is given |
page | string | A page path or URL |
selector | string | CSS selector of the element |
includeResolved | boolean | Default true, because a resolved match can mean the problem came back |
limit | number | Maximum matches. Default 5 |
merge_itemsWritesMerges duplicate threads into one. Each duplicate is hidden from thread lists and counts as an extra report on the thread you keep. Nothing is deleted.
All the threads must be in the same project, and they must be threads, not
replies. A call takes up to 50 duplicates. If the thread you keep was itself
merged into another thread, the duplicates go to that one. Returns merged
(how many threads were merged) and canonicalId (the thread they went to).
The tool is marked destructive, so most clients ask before running it, and a
merge can’t be undone. See Duplicates.
| Argument | Type | Description |
|---|---|---|
itemId | string | Required. The thread to keep |
duplicateIds | array | Required. Threads that report the same problem |
The local server calls the same operations over HTTP. To call them from your own code, see the REST API.