第一次接手仓库,先问“为什么搜索 MCP 没结果”,比要求“讲解整个项目”更容易得到可核查的答案。前者会约束读取范围,后者很容易变成文件夹名称的复述。
建立一个完整的教学项目
准备 Node.js 22 或之后的版本。在新的 repo-demo 目录保存以下三个文件,不需要安装依赖。先在终端确认 node --version,再从这个目录启动 Claude Code。
articles.mjs:
export const articles = [
{ id: 'a1', title: 'MCP 入门' },
{ id: 'a2', title: 'Skills 使用说明' }
];
filter.mjs:
export function filterArticles(items, query) {
return items.filter(item => item.title.toLowerCase().includes(query));
}
search.mjs:
import { articles } from './articles.mjs';
import { filterArticles } from './filter.mjs';
const query = process.argv[2] ?? '';
console.log(JSON.stringify(filterArticles(articles, query), null, 2));
这段代码故意只转换标题的大小写,没有转换查询词。先复现,不要急着改:
node search.mjs mcp
node search.mjs MCP
预期第一条返回 a1,第二条返回空数组。没有报错不等于功能符合你的期望,结果差异就是这次需要解释的问题。
给Claude Code的第一条任务
先只读当前repo-demo,不编辑文件。
问题:node search.mjs mcp能返回文章,MCP却返回空数组。
请沿命令入口追踪查询词和文章数据,给出入口→处理→输出。
每个判断附实际文件和相关代码,列出还调用filterArticles的文件。
你可以执行上述两条本地命令验证,不新增依赖。
最后指出最小修改位置,但本轮先不要修改。
如果真实项目有 CLAUDE.md,先让它读取并说明当前任务涉及的规则。也可以使用 官方的项目探索方式进入计划阶段;“计划”仍需要文件证据,不能只列泛泛阅读顺序。
一份合格解释应该包含什么
| 问题 | 本例中可复查的答案 |
|---|---|
| 从哪里进入? | search.mjs 从 process.argv[2] 接收查询词 |
| 数据来自哪里? | 同目录 articles.mjs 导出的两条记录 |
| 哪一步改变大小写? | filter.mjs 只对 item.title 调用 toLowerCase() |
| 为什么结果不同? | 小写标题包含 mcp,不包含大写字符串 MCP |
| 输出到哪里? | search.mjs 的 console.log,未写文件、未请求网络 |
| 谁还受影响? | 需要搜索所有 filterArticles 调用点;这份三文件工件中只有入口文件调用 |
若终端装有 ripgrep,可用 rg -n "filterArticles" . 查调用点;否则用编辑器全项目搜索。不能因为函数名看起来像前端筛选,就凭空加上浏览器输入框或数据库依赖。
解释成立后,才定义下一轮修改
下一轮可以要求:“让查询忽略英文大小写,并增加大写、小写、无匹配、空查询四种测试。空查询仍返回全部文章。”最后一句固定了边界,避免工具在修大小写时顺手改变空查询行为。
对于真实仓库,还要检查同一筛选函数有没有被后台接口、导出脚本或其他页面复用。如果只读了当前三个文件,只能报告这个范围,不应声称完成了全仓架构审查。
2026-10-11,在 Windows、Node.js 24.15.0 下实际执行了本文三个文件:小写查询返回a1,大写查询返回空数组,空查询返回两条记录。这个检查验证了教学工件的行为;未调用 Claude Code,模型是否正确解释仍需另行记录。
资料来源
- Claude Code探索项目工作流
核对探索陌生代码库的产品工作方式;示例项目为教学工件。
下一步
继续阅读与你当前问题相关的教程:


