Code Mode
Code Mode 是 Hawa Code 内置的一款工具,它允许模型通过一段 JavaScript 代码来调用已配置的 MCP server 能力,并把执行结果返回给模型继续处理。
- 支持几万级别 MCP 工具数量,通过 Search 渐进式按需发现,不占用上下文窗口体积。
- 通过代码串联多个 MCP 工具调用,减少 MCP 工具调用结果往复传输,减少 Token 使用。
- 通用的代码逻辑可以保存,自动复用,可以实现业务功能自进化。
快速开始
1. 配置文件
Code Mode 使用 .codemode.json 配置 MCP server,格式与 .mcp.json 一致。
配置文件支持两个层级:
- 全局配置:
~/.hcode/.codemode.json - 项目配置:
{项目目录}/.codemode.json
项目配置会覆盖全局配置。
示例 .codemode.json:
{ "mcpServers": { "supabase": { "type": "http", "url": "https://mcp.supabase.com/mcp", "headers": { "Authorization": "Bearer your-token" } }, "github": { "type": "http", "url": "https://api.githubcopilot.com/mcp/", "headers": { "Authorization": "Bearer your-token" } } }} |
提示:如果没有单独配置
.codemode.json,Code Mode 也会复用 Hawa Code 已有的 MCP 配置(全局配置、项目配置、.mcp.json)。
2. 使用方式
在对话中让 Hawa Code 进入 Code Mode,模型会自动生成 JavaScript 代码并执行。你无需手动安装插件或执行额外命令。
典型用法:
- 调用某个 MCP 工具查询数据
- 组合多个 MCP 工具完成多步骤任务
- 搜索可用工具并自动发现能力
代码格式
Code Mode 接收一段 JavaScript 异步箭头函数,并执行它。
你可以直接写箭头函数体:
async () => { const result = await codemode.supabase.list_tables(); return result;} |
也可以只写函数体内容,系统会自动包装:
const result = await codemode.supabase.list_tables();return result; |
调用 MCP 工具
已配置的 MCP server 会以 .> 的形式暴露为 JavaScript 函数。
例如,配置了一个名为 supabase 的 server,其中有一个工具叫 list_tables,可以这样调用:
async () => { const tables = await codemode.supabase.list_tables(); return tables;} |
如果 server 名或工具名包含特殊字符,会自动转换为合法的 JavaScript 标识符。例如 my-server 会变成 codemode.my_server。
发现可用工具
搜索工具
如果你不确定某个能力在哪里,可以使用 codemode.search():
async () => { const matches = await codemode.search("list tables"); return matches;} |
返回的结果包含工具路径、所属 server、方法名、描述和匹配分数,帮助你快速定位需要的工具。
查看工具详情
使用 codemode.describe() 查看某个工具的类型定义和参数说明:
async () => { const docs = await codemode.describe("supabase.list_tables"); return docs;} |
也可以只描述整个 server:
async () => { const docs = await codemode.describe("supabase"); return docs;} |
保存和复用代码片段
你可以把常用的代码保存为 snippet,方便后续调用:
async () => { await codemode.saveSnippet( "list-supabase-tables", "const tables = await codemode.supabase.list_tables(); return tables;", "列出 supabase 中的所有表" ); return "saved";} |
snippet 会保存在项目目录的 .codemode-snippets.json 文件中,和 MCP 工具一样可以被 codemode.search() 和 codemode.describe() 找到。
组合多个工具
Code Mode 的真正价值在于可以组合多个 MCP 工具完成复杂任务。
例如:
async () => { const tables = await codemode.supabase.list_tables(); const details = []; for (const table of tables.slice(0, 5)) { const schema = await codemode.supabase.describe_table({ table }); details.push({ table, schema }); } return details;} |
执行环境说明
- Code Mode 在独立的 Node 子进程中执行代码,代码通过 IPC 与 Hawa Code 通信。
- 执行环境不包含
fs、require、process等 Node.js API,所有 I/O 只能通过已配置的 MCP 工具完成。 - 单次执行默认超时时间为 60 秒,超时会自动终止。
- 标准 JavaScript 语法可用,但不支持 TypeScript 类型注解。
权限与确认
Code Mode 属于需要用户确认的工具。执行前会询问你是否允许,确认后才会运行代码。如果你开启了自动权限模式,符合条件时可能无需每次确认。
常见场景
| 场景 | 示例 |
| 查询数据库 | codemode.supabase.query({ sql: "SELECT * FROM users" }) |
| 查询 GitHub 信息 | codemode.github.search_issues({ query: "repo:owner/repo is:open" }) |
| 组合多工具 | 先列表面板,再查询每个表的 Schema |
| 复用逻辑 | 把常用查询保存为 snippet |
欢迎使用 Hawa Code https://www.hawacode.com/