Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
제작자가 쓴 설명(영어 원문)
Give your AI assistant feedback pinned to the exact element, with its code, so it can fix and reply.
이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.
이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
SKYELIGHT_API_URL, SKYELIGHT_API_TOKEN비밀로 표시된 값은 내 계정의 열쇠예요. 절대 다른 사람과 공유하거나 채팅에 붙여 넣지 마세요.
필요한 것
어떤 앱을 쓰세요?
위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.
웹, 데스크톱, 모바일의 Claude에서 쓸 수 있어요:
https://app.skyelight.ai/mcpClaude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요
{
"mcpServers": {
"skyelight": {
"command": "npx",
"args": [
"-y",
"@skyelight/mcp"
],
"env": {
"SKYELIGHT_API_URL": "your-value",
"SKYELIGHT_API_TOKEN": "your-value"
}
}
}
}터미널에서 이 명령어를 실행하세요
claude mcp add --transport http skyelight https://app.skyelight.ai/mcpclaude mcp add skyelight --env SKYELIGHT_API_URL=your-value --env SKYELIGHT_API_TOKEN=your-value -- npx -y @skyelight/mcp실행하기 전에 빈 값을 채워 주세요.
프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"skyelight": {
"url": "https://app.skyelight.ai/mcp"
}
}
}프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"skyelight": {
"command": "npx",
"args": [
"-y",
"@skyelight/mcp"
],
"env": {
"SKYELIGHT_API_URL": "your-value",
"SKYELIGHT_API_TOKEN": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"skyelight": {
"type": "http",
"url": "https://app.skyelight.ai/mcp"
}
}
}프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"skyelight": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@skyelight/mcp"
],
"env": {
"SKYELIGHT_API_URL": "your-value",
"SKYELIGHT_API_TOKEN": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요:
https://app.skyelight.ai/mcp메뉴 이름은 요금제나 시기에 따라 조금 다를 수 있어요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
도구 이름과 설명은 서버가 2026년 11월 6일에 알려 준 그대로예요. 우리가 아니라 제작자가 쓴 글이고, 일반 텍스트로만 보여 드려요.
list_workspacesWorkspaces you can reach, with the role you hold in each, and who you are. Use when you do not know what exists yet, to find which workspace a project belongs to, or to learn your own user id.
list_projectsProjects you can reach, newest activity first, across every workspace unless one is named. Start here when no project is bound — `list_items` needs a project id and this is where one comes from.
list_itemsList feedback items (bugs, ideas, comments) people left on a Skyelight project. Returns a summary of the project plus matching items. Start here to see what is outstanding. An item's hand-off (investigate, plan, fix) is set by the team and binding: on investigate or plan, reply o
search_itemsFind items whose thread mentions some text. Searches replies as well as the original message, so an item someone already diagnosed in a reply still turns up.
post_updateReport back on an item: what you found, what you changed, a link to the PR. Posts as a reply on the thread the feedback was left on, so the person who reported it sees the answer where they asked. Use this when you finish work on an item, and when you get stuck.
create_itemOpen a new thread on a page, as the person whose connection you are using. Only available on a person's own connection — an agent reporting what it found or changed uses post_update on the thread it was working, so the answer lands where the question was asked.
publish_review_linkShare something with Skyelight for review, and get a link people can pin feedback on. Two ways: - code: one file Skyelight hosts at its own link with the review badge on it. A whole HTML page, or one React component with an export default (Tailwind classes and npm imports work; l
list_membersThe people in a workspace: name, email, role and id. Call it when you are asked to tell, ask or hand something to someone by name, then pass their name or id to assign, or in mentions on create_item or post_update.
assignHand an item to a person, who is notified the way an assignment in the app notifies them. Pass null as the assignee to unassign it. Only owners, admins and collaborators can assign; a resolved item has to be reopened first.
set_statusMove an item to open, deferred or resolved. Use it to close the loop after you have fixed something and said so — post_update first, so the person who reported it reads what changed, then set_status. "deferred" is for work that is real but not now.
get_itemEverything needed to work one item: the whole thread in order, the page and URL it is on, the anchor identifying the element the person pointed at, and the pictures — what the page looked like when it was pinned, plus anything people attached — returned as images you can look at
project_reviewEverything needed to write an accurate project review or hand-off document: the shape of the work, every resolved thread and how it ended, what was deferred and why, what is still open, and the longest conversations quoted in full, which is where decisions were made. Every entry
whats_newWhat changed on a project since you last looked: new threads, new replies grouped by thread, what was resolved or deferred, and what was assigned to you or mentioned you. Use when the user asks what has changed on a project since they last checked. Without `since` it reads from t
find_by_sourceFeedback by the code that rendered it, from the file and line the Skyelight build plugin stamps on each element. Pass a file (a path or just its name) or a component to see every thread about it before you edit it; pass neither to get the hot spots, every stamped file ranked by o
find_similarHas this already been reported? Pass the text you are about to report (and the page, if you know it) before create_item, or an itemId to find what an existing thread duplicates. Returns likely matches with why each matched: shared words, same page, same element, same source file.
merge_itemsFold duplicate items into one, the way merging works in the app: the duplicates leave the list and count as extra reports on the item they were merged into. Use it only when find_similar and the threads themselves show they are the same problem. Owners, admins and collaborators c
decision_logThe decisions a project made in its threads, quoted: every thread resolved or deferred after a discussion, with the conversation, plus types people corrected and where outcomes keep recurring. Also returns the project's existing rules, so you can tell what is new. Use it to write
save_ruleKeep a rule the team agreed on ("sentence case in every button", "the brand gray stays, do not raise contrast bugs on it") in the project's context, under Rules learned. The classifier reads that context, and every agent reads it through decision_log, so it shapes future threads.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 6일 점검
레지스트리 이름이 도메인 skyelight.ai 기준으로 확인되었어요(레지스트리가 도메인 소유를 확인해요)
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
2049ms 만에 응답(HTTP 200)
로그인 필요 없음
도구 설명 18개를 읽었고, AI에게 보내는 숨겨진 지시는 없었어요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
해당하는 기본 점검 3개 중 3개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
입력해야 할 값: SKYELIGHT_API_URL, SKYELIGHT_API_TOKEN
둘 다 가능해요. 내 컴퓨터에 설치해도 되고, 클라우드 버전에 연결해도 돼요.
GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(1.1.1)은 어제 레지스트리에 올라왔어요.
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. URL로 연결되기 때문에, 원격 MCP 서버를 지원하는 앱(예: 개발자 모드의 ChatGPT)에서도 쓸 수 있어요.
같은 카테고리에는: Spec Driven Development, Remote Desktop Commander, Fomu MCP
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Kenya government form guides: checklists, draft letters, eCitizen, Huduma, timelines. Sample data.
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
An MCP server that lets a coding agent read the feedback people left on your running app — the thread, the page, and the element they were pointing at — and report back on it when the work is done.
Full guide: skyelight.ai/docs/mcp. The REST API behind the local server is documented at skyelight.ai/docs/api.
Two ways to connect, with the same eighteen tools either way:
Every plan includes every tool, Free included, for owners, admins and collaborators. On Free, your agent gets 25 agent threads a month; Pro and above have no limit. A reviewer reads and comments in the web app but does not get agent tools.
npx @skyelight/mcp init
Finds your coding agents, registers Skyelight's remote server with them, and leaves the sign-in to OAuth — the first time the agent connects it opens a browser and you approve it there. It shows what it will change and waits; --yes skips that once you have read it.
It knows Claude Code, Cursor, Grok, Codex, Gemini CLI and Windsurf. With several installed it asks which; --client cursor or --client all answers in advance. npx @skyelight/mcp remove takes the entry out again. Point at another deployment with SKYELIGHT_URL=https://…; the deployment tells the installer its own MCP URL and OAuth client over /mcp/install-config, so this package holds no environment-specific constants.
The same setup, with a snippet per client, is in the Skyelight web app under account settings → Coding Agents.
/plugin marketplace add plastrlab/skyelight-mcp
/plugin install skyelight@skyelight
The plugin connects Claude Code to Skyelight's remote server (sign-in is OAuth, as above) and adds a skill for working through feedback and two commands: /skyelight:whats-new and /skyelight:fix-feedback. Its files are .claude-plugin/marketplace.json and plugin/ in this repository.
gemini extensions install https://github.com/plastrlab/skyelight-mcp
Then, in Gemini CLI, sign in once:
/mcp auth skyelight
A browser opens on Skyelight; sign in and allow the connection. Gemini CLI lists the tools before you sign in, so it won't ask by itself. The extension connects Gemini CLI to Skyelight's remote server and adds the same skill and the same two commands as the Claude Code plugin: /skyelight:whats-new and /skyelight:fix-feedback. Its files are gemini-extension.json, GEMINI.md, commands/ and skills/ at the root of this repository.
Get a personal access token. In the Skyelight web app, go to account settings → API Keys → create one. It is shown once, belongs to the organization you create it in, and can be given an expiry.
Then add the server to your client:
{
"mcpServers": { "skyelight": { "command": "npx", "args": ["-y", "@skyelight/mcp"], "env": { "SKYELIGHT_API_URL": "https://app.skyelight.ai", "SKYELIGHT_API_TOKEN": "sky_..." } } } }
Claude Code users can skip the file:
claude mcp add skyelight \
--env SKYELIGHT_API_URL=https://app.skyelight.ai \ --env SKYELIGHT_API_TOKEN=sky_... \ -- npx -y @skyelight/mcp
SKYELIGHT_API_URL is https://app.skyelight.ai, the same host as the MCP URL on the Coding Agents page (https://app.skyelight.ai/mcp), without /mcp. A deployment's .convex.site host also works.
Checked in order, so an existing setup keeps working:
SKYELIGHT_API_TOKEN / SKYELIGHT_API_URL in the environment.env.local, then .env, in the working directory~/.skyelight/credentials — {"apiUrl": "...", "token": "sky_..."}With the local server, if you can reach several projects, drop a .skyelight.json at the repo root:
{ "projectId": "j57abc...", "projectName": "Checkout rebuild" }
Tools then default to that project and nobody has to pass an id. Without it (and always on the remote server), list_items asks for a project and the agent calls list_projects first rather than guess.
| Tool | What it is for |
|---|---|
list_workspaces | Which workspaces this credential can reach, and who you are. |
list_projects | The projects inside them, with the ids the other tools take. |
list_items | What is outstanding. Filter by page, type, status, assignee, hand-off. |
search_items | Find items whose thread mentions some text, replies included. |
get_item | Everything needed to work one item: thread, page, anchor, code, images. |
post_update | Report back on the thread the feedback came from. |
create_item | Raise a new item — an audit finding, something you noticed. |
set_status | Move an item to open, deferred or resolved. |
list_members | Who is in the workspace, so you can name an assignee or a mention. |
assign | Hand an item to a person, or unassign it. |
whats_new | What changed since you last looked, from your own bookmark. |
project_review | Where a project landed, for a wrap-up or hand-off document. |
decision_log | What the team decided in its threads, quoted, and its current rules. |
save_rule | Keep an agreed rule in the project context (owners and admins). |
find_by_source | Feedback on a file or component before you edit it, or the hot spots. |
find_similar | Check for an existing report before creating one. |
merge_items | Fold duplicate items into one. |
publish_review_link | Share something for review: code for Skyelight to host, or a deployed app's address. |
Which tools change things. list_workspaces, list_projects, list_items, search_items, get_item, list_members, project_review, find_by_source, find_similar and decision_log only read. post_update, create_item, set_status, assign, save_rule, merge_items, publish_review_link and whats_new (which moves your "last looked" bookmark) make changes. Every tool carries MCP annotations saying which it is, with merge_items marked destructive, so your client can ask before a write runs.
Publishing for review. publish_review_link takes one of two things:
code: one HTML page, or one React component with an export default (a Claude prototype, a v0 snippet). Skyelight hosts it at its own link on skyelight.page with the review badge on it, in a project you name or a new one. Publishing again makes a new version at the same link.url: an app already deployed, such as a Lovable, v0 or Bolt project on *.lovable.app or *.vercel.app. The address goes on the project's Review Links, and the answer carries a script tag for the app's and the review link to share (the address with ?skyelight=1).Code that imports the rest of its app is not hosted; the answer says to send the app's url instead. It answers to publish_prototype too, its name before 0.7.0.
list_items leads with a summary — totals, breakdown by type and by page — so an agent can tell you the shape of the work before pulling any of it. Rows are stubs; get_item is where the thread and the anchor live.
"What is assigned to me." list_workspaces returns your own user id, and list_items takes assignee: "me", so the most ordinary question anyone asks an agent needs no id looked up by hand.
"What was I asked to fix." A person can hand a thread to an agent in the app (Hand off: Investigate, Plan or Fix). list_items takes task with one of those, or "none", and each row names its hand-off. With assignee: "me" it is your own queue of fixes.
Merged duplicates do not appear twice. When somebody merges five reports of one problem in the web app, the duplicates leave the list and the item they were merged into says 5 reports. A list that shows all five reads as five bugs.
Alpha: 21 items total — 15 open, 3 deferred, 3 resolved, 19 unassigned.
By type: bug (7), idea (4), feedback (10). Busiest pages: /checkout (8), /settings (4).
2 matches:
Deliberately prose rather than JSON. A tool that returns a bare array invites a model to read the array out; this one invites it to summarise.
A row's line is the one-sentence summary Skyelight's classifier wrote, where there is one, rather than the first 140 characters of whatever somebody typed — four truncated paragraphs are not something you can choose between.
One call reads the 2,000 most recent items in a project. Past that the result says so, in words, rather than presenting a slice as the total.
get_item returns the screenshot taken when the pin was left, and any images people attached to the thread, as image content blocks — things a model can actually look at, not links it cannot open.
Screenshot of the page when this was pinned: attached below.
2 images attached to this thread: also below.
Capped at four per call. Anything too large to inline comes back as its link with the reason, so a picture never disappears silently.
get_item also names the Linear issue a thread was handed to, and who it was delegated to, so an agent does not start work a Linear-hosted agent is finishing. Reactions come back counted by emoji — a thread with one comment and nine thumbs up is not a thread with one comment.
If the app was built with @skyelight/build, get_item ends with the line that changes what an agent does next:
Written by components/Card.tsx, line 88, in build a1b2c3d on branch feat/checkout.
The file saves a grep. The commit and branch are how an agent tells "still broken" from "already fixed, this pin is stale" — and, on a preview deployment, which branch the code it wants is actually on.
Every write is a person's. Your sign-in or token carries your access, so a reply the agent posts is yours. Over the remote server, the editor it came through is shown as a mark beside the timestamp rather than as the author.
There is no service-account mode, and workspace API keys (sk_live_...) no longer
앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요