Skip to main content
Glama
README.md
# ContextGC

> 基于 AST 解析的上下文智能压缩 MCP 插件 — **节省 70-90% token**

ContextGC 利用 AST 语法树提取代码骨架(imports、类型定义、函数签名),省略实现细节。这是**唯一**支持渐进式上下文加载的 MCP 工具:骨架 → 按需展开函数 → 完整代码。

## 工作原理

```
┌──────────────────────────────────────────────────┐
│  2000 行 React 组件 (≈18,000 tokens)              │
│                                                    │
│  ┌─ read_code_skeleton ──────────────────────────┐ │
│  │  imports + 类型 + 函数签名 (≈2,000 tokens)     │ │
│  │  函数体替换为省略标记                           │ │
│  └────────────────────────────────────────────────┘ │
│                                                    │
│  ┌─ read_function_body ──────────────────────────┐ │
│  │  按需展开指定函数实现 (≈500 tokens)             │ │
│  └────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────┘
```

## 功能

- **`read_code_skeleton`** — 提取源文件结构骨架,减少 70-90% token 用量
- **`read_function_body`** — 按需展开指定函数的完整实现
- **`parse_error_log`** — 压缩错误日志,过滤 node_modules 栈帧
- **`context_gc`** — 垃圾回收缓存骨架,释放上下文窗口空间
- **MCP Prompt 注入** — 自动引导 AI 使用 ContextGC 替代原生 `read_file`
- **三级降级** — AST 解析 → 正则降级 → 截断兜底
- **LRU + TTL 缓存** — 骨架缓存随文件变更自动失效

## 快速开始

### 安装与运行

```bash
# 克隆
git clone https://github.com/YOUR_USERNAME/contextgc-mcp.git
cd contextgc-mcp

# 安装依赖
npm install

# 构建
npm run build

# 运行
node dist/index.js
```

### 配置 Claude Code

```bash
claude mcp add contextgc -- node /path/to/contextgc-mcp/dist/index.js
```

### 配置 Kilo Code / Cursor / Cline

在 MCP 设置中添加:

```json
{
  "mcpServers": {
    "contextgc": {
      "command": "node",
      "args": ["/path/to/contextgc-mcp/dist/index.js"]
    }
  }
}
```

## 工具参考

### `read_code_skeleton`

读取源文件并返回结构骨架。

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `filePath` | string | ✅ | 源文件绝对路径 |
| `focusFunction` | string | ❌ | 保留此函数的完整实现 |
| `focusLine` | number | ❌ | 保留此行所在函数的完整实现 |
| `maxOutputLines` | number | ❌ | 最大输出行数(默认 500) |

### `read_function_body`

展开指定函数的完整实现。

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `filePath` | string | ✅ | 源文件绝对路径 |
| `functionName` | string | ✅ | 要展开的函数名 |
| `includeContext` | boolean | ❌ | 包含前后 5 行上下文(默认 true) |

### `parse_error_log`

压缩错误日志,提取关键信息,过滤噪音。

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `logContent` | string | ✅ | 原始错误日志 / stderr 输出 |
| `workspaceRoot` | string | ❌ | 工作区根路径,用于识别业务代码 |
| `maxFrames` | number | ❌ | 最大保留堆栈帧数(默认 10) |

### `context_gc`

清除缓存骨架,释放上下文空间。

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `strategy` | `"lru"` \| `"all"` \| `"older-than"` | ❌ | GC 策略(默认 `lru`) |
| `ttlMinutes` | number | ❌ | `older-than` 策略的过期分钟数(默认 30) |

## 配置

在工作区根目录创建 `contextgc.config.json`:

```json
{
  "skeleton": {
    "preserveComments": "doc",
    "preserveTypes": true,
    "maxOutputLines": 500
  },
  "cache": {
    "maxEntries": 100,
    "ttlMs": 1800000
  },
  "logTrimmer": {
    "maxFrames": 10,
    "filterPatterns": ["node_modules", "dist", ".next"]
  }
}
```

### 环境变量

| 变量 | 说明 | 默认值 |
|------|------|--------|
| `CONTEXTGC_CONFIG` | 自定义配置文件路径 | 自动搜索 |
| `CONTEXTGC_ENABLED` | 全局开关 | `true` |
| `CONTEXTGC_LOG_LEVEL` | 日志级别(`debug`/`info`/`warn`/`error`) | `warn` |

## 支持的语言

| 语言 | 解析器 | 状态 |
|------|--------|------|
| JavaScript / JSX | Babel | ✅ 完整支持 |
| TypeScript / TSX | Babel | ✅ 完整支持 |
| Python / Go / Rust / Java / C++ | 正则降级 | ⚠️ 基础支持 |
| 其他语言 | 正则降级 | ⚠️ 基础支持 |

> Tree-sitter 集成(完整多语言 AST 支持)计划在 v0.2 实现。

## 架构

```
AI 编码助手 (宿主)
        │ MCP (JSON-RPC 2.0 over stdio)
        ▼
┌─────────────────────────────────┐
│       ContextGC MCP Server       │
│  ┌───────────────────────────┐  │
│  │      MCP 协议层            │  │
│  └─────────┬─────────────────┘  │
│  ┌─────────▼─────────────────┐  │
│  │     工具编排层              │  │
│  │  骨架 | 展开函数 | 日志 | GC│  │
│  └─────────┬─────────────────┘  │
│  ┌─────────▼─────────────────┐  │
│  │     解析器抽象层            │  │
│  │  Babel | Tree-sitter | 正则 │  │
│  └───────────────────────────┘  │
└─────────────────────────────────┘
```

## 开发

```bash
# 安装依赖
npm install

# 构建
npm run build

# 运行测试
npm test

# 监听模式运行测试
npm run test:watch

# 开发模式(自动重编译)
npm run dev
```

## Token 节省基准

| 场景 | 原始 | 压缩后 | 压缩率 |
|------|------|--------|--------|
| 2000 行 React 组件(骨架提取) | ~18,000 tok | ~2,000 tok | **89%** |
| 1000 行 npm build 报错日志 | ~8,000 tok | ~400 tok | **95%** |
| 500 行 diff 输出 | ~5,000 tok | ~1,500 tok | **70%** |
| 综合大型项目调试会话 | ~80,000 tok | ~15,000 tok | **81%** |

> 以上为理论估算值,实际压缩率取决于代码风格和文件结构。

## 许可证

MIT

TDQS

A4.4/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a clear, distinct purpose: freeing cache, compressing error logs, reading structural skeletons, and expanding function bodies. No overlap in functionality.

Naming Consistency5/5

All tools follow a consistent verb_noun snake_case pattern, e.g., context_gc, parse_error_log, read_code_skeleton, read_function_body. Predictable and clear.

Tool Count5/5

Four tools is well-scoped for a server focused on context optimization. Each tool earns its place with a specific function, not too few or too many.

Completeness4/5

The tool set covers the key strategies: triggering GC, compressing errors, reading skeletons, and expanding functions. Minor gaps like clearing specific caches exist but do not hinder typical workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues