Atomicreps

io.github.atomicreps由 GitHub 账号 atomicreps 发布v0.1.0更新于 Oct 24, 2026

Retrieval practice in your coding agent: one short question about what you just built.

已验证Streamable HTTP可网页运行知识与记忆开发者工具

概览

AI 生成的概览

Atomicreps 是一个检索练习类 MCP 服务器,会就编码代理刚完成的改动向你提一道简短选择题,并批改你的作答。

可以做什么
请求一次练习:获取一道关于本次会话改动的题目、一条提示或什么都不给,可按主题或类型筛选,并提供后续追问的句柄。作答:提交一个选项字母,得到判定、一行解释,以及最多三个本次会话涉及的其他主题。查看进度:显示总结、技能、练习记录、连续天数或静音项。调整设置:设置频率、固定主题、难度范围、偏好领域、带时长的静音,以及是否在编辑器原生对话框中提问。
适用场景
适合希望针对与 AI 编码代理一起编写的代码做轻量间隔检索练习、凭记忆回忆改动而非重读代码的开发者。在 Claude Code、Copilot、Cursor、Windsurf、Codex 或其他 MCP 客户端中,改动文件的任务结束后想要一道小测验时使用。
运行要求
需要 Node 24 或更高版本,以及免费的 Atomicreps 账户。登录需在提供方网站输入代码,令牌保存在本地。服务器以 npx 启动的本地 stdio 进程或远程端点运行,需要网络访问。未声明环境变量或请求头。
安装前请注意
服务器会用你的令牌把编辑器的 JSON-RPC 消息转发到 Atomicreps 服务器,令牌保存在本地配置文件中。请求练习时会发送带小权重的目录句柄以及包名、文件扩展名和文件夹名;README 称不会发送代码、文件内容或提示词。connect 命令可能写入编辑器配置以及 Claude Code 的钩子和权限,logout --purge 会删除它写入的条目。对话框设置会阻塞当前回合。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Atomicreps,将其添加到工作区。
  2. 连接 所需的 凭据。它们会被私密存储,绝不会在公开页面上展示。
  3. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.atomicreps%2Fatomicreps/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。 客户端会在首次连接时完成 OAuth 登录。

{
  "mcpServers": {
    "atomicreps": {
      "type": "http",
      "url": "https://atomicreps.com/mcp"
    }
  }
}

README

atomicreps

[Listed on mcpservers.org] [npm]

One short question about the thing you just built. Works inside Claude Code, GitHub Copilot, Cursor, Windsurf, Codex, or any MCP client.

You describe a bug, your coding agent changes the code, and Atomic Reps asks you one multiple-choice question about that change. You answer with a letter, from memory, and the server grades it.

The two-minute demo: four bugs fixed in Claude Code, one question after each.

https://github.com/user-attachments/assets/521c1bb3-9f75-4c25-8b71-ed763de7debc

Quick start

Requires Node 24+ and a free account. On an older Node, every command prints the version it needs instead of starting.

npx atomicreps

The first run is a setup wizard:

  1. Pick what to practise, how often, and how hard.
  2. Sign in: the terminal prints a code, and you type it at atomicreps.com/connect.
  3. Pick your editors. connect writes only the entries you tick.

Then go back to work. When your agent finishes a task that changed files, the question appears after its answer:

[Claude Code fixes an N+1 query, then Atomic Reps asks a question about SQL joins]

Type the letter. The verdict comes back with a one-line explanation, and the next line names up to three other topics the session touched:

[The verdict: correct, with the explanation and the topics the session also touched]

Every run after the first opens the terminal screen: your streak, this session, your topics, mutes and rate.

Commands

npx atomicreps            the terminal screen; the setup wizard on the first runnpx atomicreps setup      the setup wizard again: areas, topics, how often, how hardnpx atomicreps login      sign in from a browser with a typed codenpx atomicreps connect    register the server with your editornpx atomicreps connect --pin   pin the launch args to this installed version, for a command you can commitnpx atomicreps mcp        the stdio MCP server process (what the editor launches)npx atomicreps doctor     token, server ping, version, when the next rep may come, allowlistnpx atomicreps why        the last ten times a question could have appeared, and why it did or did notnpx atomicreps logout     forget the token on this machinenpx atomicreps logout --purge   also forget your reps and status, and offer to undo connect

Add --alpha to any command to use staging. It keeps its own token and cache, so you can be signed in to both staging and production at once.

Plain connect writes npx -y atomicreps mcp, which always resolves to whatever is latest at launch. connect --pin writes npx -y atomicreps@<version> mcp instead, the version this CLI is running, so an organisation can review one exact command and commit it rather than trusting npx to fetch the same thing twice.

Claude Code

npx atomicreps connect offers four Claude Code rows:

  • Claude Code registers the server at user scope.
  • …and a question at the end of each turn adds a Stop hook and a UserPromptSubmit hook to ~/.claude/settings.json. When Claude finishes a turn that changed files, the question prints in your terminal without Claude taking an extra turn, and the letter you type next is graded. Hooks you already have stay.
  • …and allow its four tools adds rep, answer, me and settings to permissions.allow, so the first question does not stop on a permission prompt.
  • …and a Claude Code status line shows the open question under the prompt. A status line you already have keeps printing first.

Without connect, the server alone:

claude mcp add --scope user atomicreps -- npx -y atomicreps mcp

GitHub Copilot

npx atomicreps connect offers VS Code and Copilot CLI as rows. Without it:

code --add-mcp '{"name":"atomicreps","type":"stdio","command":"npx","args":["-y","atomicreps","mcp"]}'copilot mcp add atomicreps -- npx -y atomicreps mcp

Copilot in JetBrains, Visual Studio, Xcode and Eclipse reads the same entry from its own mcp.json (Settings, then MCP). A team can commit it as .vscode/mcp.json so every clone has it:

json
{  "servers": {    "atomicreps": { "type": "stdio", "command": "npx", "args": ["-y", "atomicreps", "mcp"] }  }}

Copilot reads the server's instructions and calls rep when a task ends, the same as Cursor and Codex. Approve the four tools once and they stay approved.

Cursor, Windsurf, Codex and other clients

connect adds one entry to ~/.cursor/mcp.json or ~/.codeium/windsurf/mcp_config.json, and runs codex mcp add for Codex. Anything already in those files stays. By hand:

codex mcp add atomicreps -- npx -y atomicreps mcp
json
{  "mcpServers": {    "atomicreps": { "command": "npx", "args": ["-y", "atomicreps", "mcp"] }  }}

Any other MCP client takes the same command: npx -y atomicreps mcp. The "I'll set it up myself" row in connect prints it and writes nothing.

How a rep is served

When your coding agent finishes a task, it calls rep once with a few words for what changed. The server picks one question, or nothing, and your agent shows it to you unchanged. Reply with a letter, or ignore it.

Under the verdict, one line names up to three other things the session touched. A number asks about one of them. "Never Swift" mutes a topic permanently. "Not this topic" mutes it for thirty days. "Unmute Swift" removes the mute. "How am I doing" prints your summary.

The server enforces the pace, not the agent. It sets a minimum gap between automatic reps, a daily cap, and mute and off. It refuses an answer typed within seconds of the question. It never includes the answer key in a rep. Every failure returns no rep rather than an error; doctor says why.

Tools

toolwhat it does
rep({ touched?, ask?, topic?, kind?, exclude? })one question, one insight, or nothing; ask takes a handle from an offer
answer({ pick, id? })the verdict, the explanation, and the offer line
me({ show? })summary, skills, reps, streak or mutes
settings({ intensity?, topics?, levels?, prefer?, mute?, muteMinutes?, days?, unmute?, dialog? })the rate, the pinned topics, the difficulty range, the preferred areas, mutes, the dialog

Handles are topic or topic.subskill (react.hooks_core). Fifty sub-skill slugs repeat across topics, so the topic is always part of the name.

settings({ dialog: true }) asks for the letter in your editor's native dialog instead of the chat. It blocks the turn, so it is a setting, never the default.

Privacy

What leaves your machine on a rep call: catalog handles with small weights. Also package, file extension and folder names the public catalog already knows. Your agent's touched words are matched to handles on your machine; the words themselves are never sent. An unknown package name is dropped. A private name (@acme/react-internal) is sent as its public alias (react). We never send your code, a file's contents, or a prompt. npx atomicreps setup prints the exact payload for your repo, before you sign in.

npx atomicreps mcp forwards each JSON-RPC message from your editor to the Atomic Reps server with your token. The answer comes back the same way. ATOMICREPS_API is honoured only for an Atomic Reps or loopback address, since your token goes wherever it points. Anything else is ignored and reported by doctor; set ATOMICREPS_UNSAFE_ORIGIN=1 to override.

Login

npx atomicreps prints a code. Type it at atomicreps.com/connect while signed in; a forwarded link approves nothing. The token is saved in ~/.config/atomicreps/config.json (mode 0600), prefixed arep_ so secret scanners find it. You can revoke it from your account page. logout forgets it; logout --purge also deletes the reps and status this machine cached, then lists every editor entry connect wrote (both channels) and removes the ones you leave ticked.

The trust boundary, and how to report a vulnerability: SECURITY.md.

Check it yourself

dist/cli.js is built from these files and nothing else. The package has no runtime dependencies.

npm installnpm run build    # writes dist/cli.js from srcnpm test         # the behaviour described above, as tests

To compare with what npm serves: npm pack atomicreps, then read its dist/cli.js beside the one you just built. Everything the client sends is in src/api.ts. Everything it reads from your repository is in src/infer.ts.

MIT.

来源:README.md,提交 ca7de9a

工具

0
该服务器需要登录,因此 SourceWeft 无法在没有账号的情况下读取其工具,也未收录。已连接账号所能看到的内容可能因账号及其权限而异。

版本历史

1
  1. v0.1.0最新Oct 1, 2026

评分

已满足适用检查项的 85%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分