Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Talk and Alt+click on your web app: your agent gets the exact elements and the code behind them.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
POINTCAST_DIR, POINTCAST_HANDOFF你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"pointcast": {
"command": "npx",
"args": [
"-y",
"pointcast",
"mcp"
],
"env": {
"POINTCAST_DIR": "your-value",
"POINTCAST_HANDOFF": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add pointcast --env POINTCAST_DIR=your-value --env POINTCAST_HANDOFF=your-value -- npx -y pointcast mcp运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"pointcast": {
"command": "npx",
"args": [
"-y",
"pointcast",
"mcp"
],
"env": {
"POINTCAST_DIR": "your-value",
"POINTCAST_HANDOFF": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"pointcast": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"pointcast",
"mcp"
],
"env": {
"POINTCAST_DIR": "your-value",
"POINTCAST_HANDOFF": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
POINTCAST_DIR envPOINTCAST_HANDOFF env这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 Hugelidus 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.8.1)于39天前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。
同一分类中有:Spec Driven Development, Remote Desktop Commander, Verbaly
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ 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.
i18n for coding agents: extract, check and translate an app's text, with drafts a person approves
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
Turn a pointcast recording — a microphone transcript plus the elements you pointed at while narrating — into a Markdown spec a coding agent can read, or serve it straight to one over MCP. The recordings come from the pointcast Chrome extension (install it from the releases).
Public beta (0.2): feedback and bug reports are welcome in the issues.
No install needed — run it with npx:
npx pointcast --help
The extension already transcribes in the browser, so the CLI does not install a speech model by default. To transcribe on this machine (pointcast transcribe, process --force, or a recording the extension could not transcribe), add @huggingface/transformers (about 450 MB with ONNX Runtime):
npm install -g pointcast @huggingface/transformers
npx -p pointcast -p @huggingface/transformers pointcast process --force
--engine openai needs neither.
The local model is Xenova/whisper-base (the extension's *Fast*). --model Xenova/whisper-small is its *Accurate*: fewer misheard words, about twice as slow, a 512 MB download the first time.
pointcast setup Set pointcast up in this project: your coding agents, your
stack, the browser extension, then doctor. Asks first. pointcast process [session-dir] Transcribe (if needed), fuse and render session.md. Default session-dir: the latest session in --dir / POINTCAST_DIR / /pointcast. pointcast transcribe Write words.json from audio, on its own. pointcast mcp Run a stdio MCP server exposing sessions read-only. While it runs, it also receives the extension's recordings on 127.0.0.1, so they skip Chrome's downloads. pointcast issue [session-dir] --repo owner/name Experimental: file the spec as a GitHub issue, linked to the code. pointcast doctor Check this machine's setup, with a fix for each problem.
process writes session.md next to the recording and copies it to the clipboard, ready to paste into a coding agent. Run pointcast --help for every flag (--engine, --format, --stdout, …). --style precise words the spec's instruction as "change only the referenced elements, and only as asked", --style intent as "build what a request for something new means, in the app's style"; without it, the spec uses what the recording chose in the popup (intent for recordings made before the setting existed).
npx pointcast@latest setup
run in your project, looks for Claude Code, Codex, Gemini CLI (on PATH) and Cursor (a .cursor folder, or on PATH) and, for each one that does not have pointcast yet, shows what it would do and asks y/N: the plugin install commands for Claude Code and Codex, gemini extensions install for Gemini CLI, and for Cursor the pointcast server (pinned to this exact version) merged into the project's .cursor/mcp.json. It then says what your stack needs (the pointcast-django lines for a Django project, nothing for React, Vue or Svelte dev builds), how to add the browser extension, and runs doctor. It never edits your Python settings or an agent's config files itself.
--dry-run prints the plan and changes nothing (and skips doctor); --yes does every step without asking; --json prints the plan and outcome for agents; --repo sets it up for another folder. Without a terminal and without --yes it is a dry run.
npx pointcast doctor
prints one line per check, with a fix under each problem: the Node.js version (22.12 or newer), the sessions folder it reads (--dir / POINTCAST_DIR / /pointcast) with how many recordings it holds and the newest one, whether a pointcast MCP server is receiving recordings from the extension on 127.0.0.1:20547 (and which version: with several agent sessions open, one of their servers receives and all of them read the same folder; one older than the CLI is usually a session started before an update, worth restarting), whether @huggingface/transformers is installed for local transcription, and, on Linux, whether a clipboard tool (wl-copy, xclip or xsel) is there. It only reads: it says hello to the MCP server but never sends it a recording, and uses no network unless you add --online, which compares your version with the latest on npm. --json prints the same report for scripts. It exits with 1 only when something pointcast needs is broken (an old Node.js, a --dir or POINTCAST_DIR that does not exist); optional parts that are not set up are warnings.
When the recording was made on a dev build (React, Vue, Svelte), each pointed element carries the chain of components that rendered it. pointcast then looks the element's text up in those files and adds the line that holds it to the spec:
- [a] «Export» → code:
src/pages/Dashboard.tsx — src/components/OrdersTable.tsx:22 — Export in src/App.tsx ← in src/main.tsx
In a small evaluation this more than halved the tokens a coding agent spent finding the elements (docs/eval). The lookup needs your source, so it runs where the source is:
--repo . Otherwise it renders the spec without the lines and says why in one line. In a monorepo, run it from the repository root: a file the recording calls src/App.tsx is also found at apps/web/src/App.tsx, when only one file matches.Only lines that match exactly once are added; nothing is added when a match is ambiguous. session.json is never changed.
The issue body is the raw spec for now; it will be rewritten into a readable issue before this leaves the experimental stage.
pointcast issue --repo owner/name --dry-run # print the title and body
pointcast issue --repo owner/name # create the issue pointcast issue --repo owner/name --open # print and open a prefilled issues/new link
issue takes the latest session (or the one you name), reads the repository at its default branch or --ref , resolves the code locations there, and links every file:line to that file at that commit, so the links never drift. Creating the issue needs a token: GITHUB_TOKEN, else the one gh auth login stored. Reading a public repository works without one, within GitHub's rate limit. --open needs no token; when the body is too long for a link, it prints the body for you to paste. If none of the recording's files is in the repository, issue refuses to create the issue, since it looks like the wrong repository.
pointcast mcp runs a stdio MCP server, the main way an agent gets your recordings: at Stop the extension hands the recording to it, and the agent fetches the spec itself, with each element resolved to its line in your project. Pasting the spec from the clipboard is the fallback for agents without MCP. Its 4 read-only tools:
{ "sessions": [...] }: id, date, duration, the pages pointed at, how many requests and elements, a preview of the first request, matchesProject (whether its source files are in the project: true, false, or "unknown" when it names none) and rendered (its session.md is on disk)."latest-here" (the newest recording made on this project: newer ones whose files are all missing here are skipped, and it says which) or "latest" (the newest of all). Renders it from session.json/words.json if session.md isn't on disk yet; never transcribes. The spec starts with a line like 8 requests · 17 elements · ~3,100 tokens."e3").anyProject: true for any) and returns its spec, like get_session, as soon as you press Stop; after timeoutSeconds it answers "No new recording yet", and the agent calls it again. This is what /pointcast watch loops on.An unknown session id gets the 3 newest ids with their preview in the error; an unknown event id gets the valid range (e1…e17).
It looks for sessions the same way pointcast process does: --dir / POINTCAST_DIR / /pointcast.
Pin the version in MCP configs (pointcast@0.8, as below): npx keeps using a cached copy for an unversioned pointcast, which may be an older one. The plugins pin the exact version and update it with each release.
get_session, get_element and wait_for_recording resolve code locations in the project the server was started for: --repo, else CLAUDE_PROJECT_DIR (Claude Code sets it), else the server's working directory. They and list_sessions also take an optional repo argument. When none of the recording's files is in that project, the result starts with a one-line warning that the recording is probably from another project.
get_session and wait_for_recording also take an optional style ("intent" or "precise"), like pointcast process --style: the spec is then rendered in that style, whatever the recording chose, and not cached as session.md. /pointcast precise passes "precise".
wait_for_recordingwait_for_recording returns as soon as a new recording arrives: one that was not in the sessions folder when the agent first called it, and that no tool returned since. By default only this project's recordings count, by the same rule as "latest-here": one whose source files are all missing from the project is skipped, and one that names no files is kept. A skipped recording is not used up: an agent session on the right project still gets it, and anyProject: true returns every recording, with the other-project warning when it applies. So a recording you make while the agent is still applying the previous one is returned by the next call, and one it already read with get_session is not returned twice. It works with several agent sessions open: only one server receives from the extension, and the others see the recording appear in the shared sessions folder.
A tool call cannot last forever, and each client cuts it off at a different time, so the default wait follows the client:
| Client | Its limit for a tool call | Default wait |
|---|---|---|
| Claude Code | none for stdio servers (MCP_TOOL_TIMEOUT sets one); 30 min without a response or progress | 9 min |
| Gemini CLI | timeout in the server's settings, 10 min by default | 9 min |
| Codex | tool_timeout_sec, 60 s by default | 50 s |
| Cursor and others | not documented | 50 s |
The agent can pass timeoutSeconds (at most 1,500, 25 min). When the wait ends with no recording, the answer is not an error, and the agent calls it again, so a short limit only means more calls. While waiting, the server sends progress notifications when
只显示了开头部分;其余内容请在仓库中阅读