IDEye Context Engine — VS Code 扩展
IDEye 通过 MCP(Model Context Protocol)为 AI 编程 Agent 提供 IDE 上下文感知能力——支持 Claude Code / Codex / Gemini / OpenCode / Kimi / Qwen / ZCode / Grok / Qoder / Reasonix 等各类 Agent,以及任何 MCP 兼容客户端。本扩展是 IDEye 的 VS Code 端采集器。
AI 编程助手对 IDE 内正在发生什么往往是"盲区":当前打开哪个文件、光标在哪、选中了哪段代码、编译有没有报错、Git 处于什么状态。IDEye 在 IDE 侧持续采集这些上下文,经本地 daemon 以 MCP 暴露给 Agent。Agent 调用 IDEye 工具即可拿到真实编辑状态、按符号名跨文件查询代码、甚至驱动 IDE 打开文件与跳转定位——不再凭空猜测"你在看什么",也无需把代码复制粘贴进对话。
功能特性
- IDE 上下文采集(快照):持续采集当前文件 / 光标 / 选中代码 / 打开的标签页 / 工作区 / 错误诊断 / Git 状态 / 最近修改 / 符号结构,Agent 调用秒回,无需实时计算
- 双向通道(只读查询 / 导航 / Code Action):Agent 不依赖光标、按符号名跨文件查询——15 个 method(定义 / 引用 / 悬停 / 实现 / 签名 / 调用层级 / 类型层级 / 符号搜索 / 全文搜索 / 诊断 / IDE 导航 / Code Action 建议),见「双向通道」一节
- 自动拉起 daemon:扩展激活即拉起本地 daemon(HTTP
:47582),崩溃自动重启(指数退避),零手动操作
- 多 Agent 共享:多个 Agent / MCP 客户端连同一 daemon,上下文单一权威;多项目按
projectRoot / select_project 隔离
- 一键接入所有 Agent:命令面板一条命令,把 MCP 配置 + 使用提示词写入本机所有已安装的 Agent
- OAuth 自动授权:兼容 Claude Code 等对 HTTP MCP 强制 OAuth 的客户端,免配置
快速开始(一键接入)
- 安装扩展并打开任意项目。
- 打开命令面板(
Ctrl+Shift+P)→ 运行 IDEye: 一键接入所有 Agent。
- 扩展会自动:
- 为已安装的每个 Agent 写入全局 MCP 配置(指向
http://localhost:47582/mcp);
- 写入该 Agent 的全局提示词文件(
CLAUDE.md / AGENTS.md,带 <!-- ACE_START --> 标记块,可重复运行不重复追加);
- 在
~/.local/bin/ 写入全局 ace 命令(stdio 兜底)。
运行结果打印在 IDEye 输出面板:每个 Agent 是"已配置 / 未检测到"一目了然。
提示:配置已写入,重启对应的 Agent 会话后生效。
手动配置
一键命令之外,手动接入只需两步:写 MCP 配置 + 写提示词。所有 Agent 共用同一个 daemon 地址 http://localhost:47582/mcp。
1. MCP 配置
在 Agent 的全局 MCP 配置文件中注册 ace(各 Agent 的 MCP 配置文件与提示词文件在同一目录,见「提示词(使用指引)」表格):
{
"mcpServers": {
"ace": { "type": "http", "url": "http://localhost:47582/mcp" }
}
}
Claude Code 也可用命令行:claude mcp add ace --type http --url http://localhost:47582/mcp(用户级)。
TOML 系(Codex / Grok / Reasonix)与 OpenCode / ZCode 的结构字段略有差异,推荐直接使用一键命令自动写入,避免手误。
2. 提示词
把使用指引写入 Agent 的全局提示词文件(~/.claude/CLAUDE.md / ~/.codex/AGENTS.md 等,路径见「提示词(使用指引)」表格),以 <!-- ACE_START --> / <!-- ACE_END --> 标记块包裹。一键接入时已自动写入,重复运行会更新而非重复追加;内容参考「工具清单(AI Agent 使用指引)」一节。
3. stdio 模式(兜底,无 HTTP daemon 时)
若某 Agent 只支持 stdio:一键接入时扩展已在 ~/.local/bin/ 写入全局 ace 命令,配置为:
{ "type": "stdio", "command": "~/.local/bin/ace" }
stdio 模式下多会话自动 relay 共享上下文,cwd 自动路由项目。
双向通道(只读查询 / 导航 / Code Action)
Agent 以任意符号名跨文件查询,不依赖光标定位;Server 经 WS 下发 request,扩展复用 VS Code LSP 执行查询后回 response:
| method |
说明 |
definition / references / hover |
符号的定义位置 / 引用位置 / 类型与签名 |
workspace_symbols / text_search / document_symbols |
全局符号搜索 / 全文搜索 / 任意文件 outline |
implementations |
接口 / 抽象类的实现位置 |
signature |
函数 / 方法的参数列表 |
call_hierarchy / type_hierarchy |
直接调用关系 / 直接父类子类 |
get_errors |
任意文件的实时诊断(IDE 按需跑 inspection,返回错误 / 警告列表) |
open_file / reveal / select |
IDE 导航(打开 Tab / 跳转行列 / 选中区间,focus=false 后台打开不抢焦点) |
code_actions |
只读修复建议列表(标题 + 类型 + 是否首选,不含 edits,不应用修复) |
范围红线:全程只读查询 + IDE 导航定位 + 只读建议,不做写操作 / 代码执行 / 应用修复。能力跟随 VS Code 已装语言扩展(内置 JS/TS 等),非声明语言返回明确提示而非静默空。
提示词(使用指引)
一键接入时,扩展已把使用指引写入各 Agent 的全局提示词文件:
| Agent |
提示词文件 |
| Claude Code |
~/.claude/CLAUDE.md |
| Codex CLI |
~/.codex/AGENTS.md |
| Gemini CLI |
~/.gemini/AGENTS.md |
| OpenCode |
~/.config/opencode/AGENTS.md |
| Kimi Code |
~/.kimi-code/AGENTS.md |
| Qwen Code |
~/.qwen/AGENTS.md |
| ZCode |
~/.zcode/AGENTS.md |
| Grok CLI |
~/.grok/AGENTS.md |
| Qoder |
~/.qoder/AGENTS.md |
| Reasonix |
~/.reasonix/AGENTS.md |
内容以 <!-- ACE_START --> / <!-- ACE_END --> 标记块写入,重复运行一键命令会更新而非重复追加。你也可以手动把使用指引写入上述文件(内容参考「工具清单」一节),效果相同。
工具清单(AI Agent 使用指引)
以下指引面向 AI Agent:你有 IDEye 提供的 IDE 上下文感知工具(MCP),在合适的场景主动调用合适的工具,由 AI 决策,而不是等用户明确指定。工具名即 MCP 工具名;双向通道的协议 method 名(definition / references / hover 等)即对应工具去掉 get_ 前缀,见上节。用触发场景反查工具,不要按工具名猜。以下按「用户问什么 / 你要做什么 → 应调用哪个工具」排列,工具名与 mcp-server 注册完全一致。
上下文感知(快照,秒回)
- 用户说「这里 / 这个 / 当前 / 刚才 / 我改了什么」,或泛指当前编辑状态 → get_current_context(一次拿全:文件/光标/选中/标签/诊断/Git/最近修改)
- 用户说「当前文件 / 正在编辑哪个文件」→ get_active_file
- 用户说「看我选中的 / 优化这段 / 这段代码」→ get_selection
- 用户问「光标在哪 / 第几行」→ get_cursor_position
- 用户问「打开了哪些文件 / 标签页」→ get_open_tabs
- 用户问项目信息「根路径 / 框架 / 技术栈 / 包管理器」→ get_workspace
- 用户问「项目结构 / 目录树 / 文件组织」→ get_project_structure
- 用户问「最近改了什么 / 开发进度」→ get_recent_changes
- 用户问「报错 / 编译错误 / 有什么问题」→ get_errors(默认已打开文件诊断);怀疑错在未打开文件 → get_errors { file }(IDE 对该文件实时跑分析,较慢)
- 用户问「最近 IDE 发生了什么(打开/保存/切换文件)」→ get_recent_events
- 用户问「分支 / diff / 当前 Git 状态」→ get_git_context
符号查询(跨文件,可传 symbol 按名查,不依赖光标)
- 跨文件搜「某函数/类/组件在哪定义」「某文案/关键词全库在哪出现」→ search { name }(同时搜符号 + 全文,返回分组;没找到会给引导)
- 问「某文件有哪些函数/类/结构」→ get_symbol { file }(outline;缺省当前文件)
- 问「X 在哪定义 / 跳转定义」→ get_definition { symbol }
- 问「X 被谁引用 / 哪些地方用了」→ get_references { symbol }
- 问「X 是什么类型 / 什么签名 / 干什么的」→ get_hover { symbol }
- 问「X 有哪些实现 / 哪些类实现了它」→ get_implementations { symbol }
- 问「X 的函数签名 / 参数」→ get_signature { symbol }
- 问「X 调用了谁 / 谁调用了 X」→ get_call_hierarchy { symbol }(可选 direction: incoming/outgoing)
- 问「X 的父类 / 子类」→ get_type_hierarchy { symbol }(可选 direction: supertypes/subtypes)
操作(会改变 IDE 视图,仅用户明确要求时用)
- 「帮我打开 X 文件」→ open_file { file }(focus=false 后台打开不抢焦点)
- 「跳到 X 文件第 N 行 / 定位到位置」→ reveal_location { file, line, column }
- 「选中 X 文件某段代码」→ select_code { file, start, end }
- 「这个报错 IDE 建议怎么修」→ get_code_actions { file, line }(配合 get_errors;只读建议,不应用修复)
会话 / 项目
- 问「有哪些项目接入 / 可用上下文」→ list_projects
- 多项目切换 / 指定目标项目 → select_project { projectRoot }(绑定后免传 projectRoot)
- 新会话问「之前改了什么 / 延续开发意图」→ get_context_summary
使用原则
- 触发场景优先:先判断「用户要的是什么」,再按上表选工具,不要凭工具名猜。
- 模糊指代先取上下文(get_current_context / get_selection),不猜测。
- 最小调用:能用一次 get_current_context 拿全就不逐个调;但明确的单项问题(如「X 被谁引用」)直接调对应工具,不用先拿全集。
- 传 symbol 按名查询不依赖光标;不传则用当前光标处符号(仅 definition/references/hover 支持)。
- 多项目默认用 select_project 绑定;也可每次显式传 projectRoot。
- 工具返回 { message } 时区分两种:快照失败提示(IDE 未连接/上下文缺失)vs 空内容提示(当前确实无数据)。IDE 未连接时先如实告知,不臆造内容。
排错
| 现象 |
处理 |
Agent 报 SDK auth failed / Invalid OAuth error response |
daemon 是 HTTP 模式,Claude Code 等强制 OAuth。确认扩展已激活、daemon 在 :47582 运行(curl http://localhost:47582/mcp 有响应);daemon 已内置 OAuth 自动授权,无需手动配 token |
| 工具返回"尚无 IDE 上下文" |
扩展未连接 / 未打开文件。确认扩展已安装激活、工作区已打开 |
| 一键接入显示"未检测到"某 Agent |
该 Agent 未安装,或其全局配置目录不存在。手动配置见上文 |
| daemon 未自动拉起 |
确认扩展包内 dist/extension.js 与 mcp-server/dist/index.js 都存在(vsix 已内置);或用 ACE_SERVER_PATH 指定 server 路径 |
| 端口被占用 |
daemon 默认 :47582,可用环境变量 ACE_HTTP_PORT 改端口(需同步改各 Agent 配置) |
配置
| 变量 |
默认 |
说明 |
ACE_HTTP_PORT |
47582 |
daemon HTTP 端口(MCP over HTTP) |
ACE_WS_PORT |
47821 |
WebSocket 端口(收扩展推送) |
ACE_WS_URL |
ws://localhost:47821 |
扩展侧连接地址 |
ACE_MEMORY_PATH |
~/.ace/memory.json |
Agent Memory 落盘路径 |
ACE_SERVER_PATH |
— |
显式指定 daemon 脚本路径 |