Skip to main content
Glama
coreline-ai

Antigravity GLM MCP

by coreline-ai
README.md
<div align="center">

# πŸš€ Antigravity GLM MCP

**Gemini (Antigravity) ⟷ GLM-4.5 λͺ¨λΈ λΈŒλ¦Ώμ§€ MCP μ„œλ²„**

*λ³΅μž‘ν•œ μ½”λ”© μž‘μ—…μ„ GLM AIμ—κ²Œ μœ„μž„ν•˜κ³ , 25κ°€μ§€ κ°•λ ₯ν•œ λ„κ΅¬λ‘œ μžλ™ν™”ν•˜μ„Έμš”.*

[![Python](https://img.shields.io/badge/Python-3.11+-3776AB?style=for-the-badge&logo=python&logoColor=white)](https://www.python.org/)
[![MCP](https://img.shields.io/badge/MCP-Protocol-00C853?style=for-the-badge)](https://modelcontextprotocol.io/)
[![Tools](https://img.shields.io/badge/Tools-25-FF6F00?style=for-the-badge)]()
[![License](https://img.shields.io/badge/License-MIT-yellow?style=for-the-badge)](LICENSE)
[![Security](https://img.shields.io/badge/Security-Hardened-blue?style=for-the-badge&logo=shield)]()

[πŸ“– λ¬Έμ„œ](#-λ¬Έμ„œ) Β· [⚑ λΉ λ₯Έ μ‹œμž‘](#-λΉ λ₯Έ-μ‹œμž‘-5λΆ„) Β· [πŸ› οΈ 도ꡬ](#️-전체-도ꡬ-λͺ©λ‘-25개) Β· [πŸ›‘οΈ λ³΄μ•ˆ](#️-λ³΄μ•ˆ-μ•„ν‚€ν…μ²˜)

</div>

---

## ✨ μ™œ 이 ν”„λ‘œμ νŠΈμΈκ°€μš”?

| 문제점 | ν•΄κ²°μ±… |
|--------|--------|
| 🐳 λ³΅μž‘ν•œ Docker μ„€μ • | βœ… **Zero-Docker**: HTTPS 직접 호좜둜 μ¦‰μ‹œ μ‹œμž‘ |
| πŸ” API ν‚€ 유좜 우렀 | βœ… **λ³΄μ•ˆ κ°•ν™”**: ν™˜κ²½λ³€μˆ˜ 필터링, μƒŒλ“œλ°•μŠ€ 적용 |
| πŸ“ 파일 μ‹€μˆ˜ 볡ꡬ λΆˆκ°€ | βœ… **μžλ™ λ°±μ—…**: μˆ˜μ •/μ‚­μ œ μ „ 버전 관리 |
| 🧠 μ„Έμ…˜ κ°„ 정보 손싀 | βœ… **영ꡬ λ©”λͺ¨λ¦¬**: JSON 기반 μž₯κΈ° κΈ°μ–΅ μ €μž₯μ†Œ |
| ⚠️ μœ„ν—˜ν•œ μ‰˜ λͺ…λ Ή μ‹€ν–‰ | βœ… **ν™”μ΄νŠΈλ¦¬μŠ€νŠΈ**: 승인된 λͺ…λ Ήλ§Œ ν—ˆμš© |

---

## πŸ—οΈ μ•„ν‚€ν…μ²˜

```mermaid
flowchart LR
    subgraph "πŸ–₯️ Gemini Desktop"
        A[Antigravity Agent]
    end
    
    subgraph "πŸ”§ MCP Server"
        B[antigravity_glm_mcp]
        C[25 Tools]
        D[Security Layer]
    end
    
    subgraph "☁️ Cloud APIs"
        E[GLM-4.5 API]
        F[Web Search]
    end
    
    subgraph "πŸ’Ύ Local Storage"
        G[Files & Git]
        H[Memory DB]
        I[Backups]
    end

    A <--> |MCP Protocol| B
    B --> C
    C --> D
    D --> E
    D --> F
    D --> G
    D --> H
    D --> I
```

---

## πŸ“– λ¬Έμ„œ

| πŸ“„ λ¬Έμ„œ | πŸ” μ„€λͺ… |
|:--------|:--------|
| **[πŸ›οΈ μ•„ν‚€ν…μ²˜](docs/ARCHITECTURE.md)** | μ‹œμŠ€ν…œ 섀계, λ³΄μ•ˆ 계측, 톡신 흐름 상세 |
| **[πŸ“š 도ꡬ 레퍼런슀](docs/TOOLS.md)** | 25개 도ꡬ νŒŒλΌλ―Έν„° 및 응닡 λͺ…μ„Έ |
| **[⚑ ν€΅μŠ€νƒ€νŠΈ](docs/QUICKSTART.md)** | 5λΆ„ μ„€μΉ˜ κ°€μ΄λ“œ 및 첫 μ‚¬μš© 예제 |

---

## ⚑ λΉ λ₯Έ μ‹œμž‘ (5λΆ„)

### πŸ“‹ 사전 μš”κ΅¬μ‚¬ν•­

- **Python 3.11+** (κ°€μƒν™˜κ²½ ꢌμž₯)
- **[Zhipu AI API ν‚€](https://open.bigmodel.cn/)** λ˜λŠ” ν˜Έν™˜ μ—”λ“œν¬μΈνŠΈ

### πŸš€ μ„€μΉ˜ 방법

```bash
# 1. μ €μž₯μ†Œ 클둠
git clone https://github.com/coreline-ai/antigravity_glm_mcp.git
cd antigravity_glm_mcp

# 2. κ°€μƒν™˜κ²½ 생성 및 ν™œμ„±ν™”
python3.11 -m venv .venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate

# 3. μžλ™ μ„€μΉ˜ (ꢌμž₯)
python scripts/install.py
```

<details>
<summary><b>πŸ“ μˆ˜λ™ μ„€μΉ˜ (λŒ€μ•ˆ)</b></summary>

```bash
# μ˜μ‘΄μ„± μ„€μΉ˜
pip install -r requirements.txt

# MCP μ„€μ • νŒŒμΌμ— μΆ”κ°€ (~/.gemini/settings.json λ“±)
```

```json
{
  "mcpServers": {
    "antigravity_glm_mcp": {
      "command": "/path/to/.venv/bin/python",
      "args": ["/path/to/antigravity_glm_mcp/src/server.py"],
      "env": {
        "PROJECT_ROOT": "/your/workspace",
        "ZHIPU_API_KEY": "your-api-key",
        "GLM_MODEL": "GLM-4.5",
        "GLM_BASE_URL": "https://api.z.ai/api/coding/paas/v4",
        "PYTHONPATH": "/path/to/antigravity_glm_mcp"
      }
    }
  }
}
```

</details>

---

## πŸ› οΈ 전체 도ꡬ λͺ©λ‘ (25개)

### 🧠 μ§€λŠ₯ μœ„μž„ (Intelligence Delegation)

| 도ꡬ | μ„€λͺ… | μ£Όμš” νŒŒλΌλ―Έν„° |
|:-----|:-----|:-------------|
| **`glm_cmd`** | GLM에 λ³΅μž‘ν•œ μž‘μ—… μœ„μž„ | `task_description`, `context` |
| **`glm_bypass`** | μ›μ‹œ ν”„λ‘¬ν”„νŠΈ 직접 전솑 | `prompt` |
| **`glm_image_analyze`** | 이미지 뢄석 (Vision) | `image_path`, `prompt` |

### πŸ“ 파일 μ‹œμŠ€ν…œ (File System)

| 도ꡬ | μ„€λͺ… | μ£Όμš” νŒŒλΌλ―Έν„° |
|:-----|:-----|:-------------|
| **`glm_file_read`** | 파일 λ‚΄μš© 읽기 | `path`, `encoding` |
| **`glm_file_create`** | μƒˆ 파일 생성 | `path`, `content`, `overwrite` |
| **`glm_file_edit`** | λ¬Έμžμ—΄ μΉ˜ν™˜ μˆ˜μ • | `path`, `old_string`, `new_string` |
| **`glm_file_delete`** | 파일 μ‚­μ œ (λ°±μ—… 보관) | `path` |
| **`glm_file_rollback`** | 이전 버전 볡원 | `path`, `version` |
| **`glm_dir_list`** | 디렉토리 λͺ©λ‘ | `path`, `recursive` |
| **`glm_grep`** | μ •κ·œμ‹ 파일 검색 | `pattern`, `path`, `case_sensitive` |

### πŸ’» μ½”λ“œ μ‹€ν–‰ (Code Execution)

| 도ꡬ | μ„€λͺ… | μ£Όμš” νŒŒλΌλ―Έν„° |
|:-----|:-----|:-------------|
| **`glm_code_run`** | Python μƒŒλ“œλ°•μŠ€ μ‹€ν–‰ | `code`, `timeout` |
| **`glm_shell_exec`** | ν™”μ΄νŠΈλ¦¬μŠ€νŠΈ μ‰˜ μ‹€ν–‰ | `command`, `cwd` |

### 🌿 Git ν˜‘μ—… (Git Collaboration)

| 도ꡬ | μ„€λͺ… | μ£Όμš” νŒŒλΌλ―Έν„° |
|:-----|:-----|:-------------|
| **`glm_git_status`** | μ €μž₯μ†Œ μƒνƒœ 쑰회 | `repo_path` |
| **`glm_git_commit`** | 변경사항 컀밋 | `message`, `add_all` |
| **`glm_git_log`** | 컀밋 이λ ₯ 쑰회 | `n`, `oneline` |
| **`glm_git_diff`** | 변경사항 비ꡐ | `stat_only`, `commit` |

### 🌐 λ„€νŠΈμ›Œν¬ (Network)

| 도ꡬ | μ„€λͺ… | μ£Όμš” νŒŒλΌλ―Έν„° |
|:-----|:-----|:-------------|
| **`glm_http_request`** | HTTP μš”μ²­ (SSRF λ°©μ§€) | `url`, `method`, `body` |
| **`glm_web_search`** | DuckDuckGo μ›Ή 검색 | `query`, `max_results` |

### 🧠 λ©”λͺ¨λ¦¬ & 데이터 (Memory & Data)

| 도ꡬ | μ„€λͺ… | μ£Όμš” νŒŒλΌλ―Έν„° |
|:-----|:-----|:-------------|
| **`glm_memory_save`** | μž₯κΈ° λ©”λͺ¨λ¦¬ μ €μž₯ | `key`, `value`, `category` |
| **`glm_memory_get`** | λ©”λͺ¨λ¦¬ 쑰회 | `key` |
| **`glm_memory_list`** | 전체 λ©”λͺ¨λ¦¬ λͺ©λ‘ | `category`, `limit` |
| **`glm_memory_delete`** | λ©”λͺ¨λ¦¬ μ‚­μ œ | `key` |
| **`glm_db_query`** | SQLite 쿼리 μ‹€ν–‰ | `query`, `db_path`, `read_only` |

### πŸ“Š 관리 & λ‘œκΉ… (Management)

| 도ꡬ | μ„€λͺ… | μ£Όμš” νŒŒλΌλ―Έν„° |
|:-----|:-----|:-------------|
| **`glm_schedule_task`** | μž‘μ—… μ˜ˆμ•½ (Cron) | `action`, `cron`, `command` |
| **`glm_action_log`** | μ—μ΄μ „νŠΈ ν™œλ™ 둜그 | `limit`, `action_filter` |

---

## πŸ›‘οΈ λ³΄μ•ˆ μ•„ν‚€ν…μ²˜

이 ν”„λ‘œμ νŠΈλŠ” **4단계 λ³΄μ•ˆ 계측**을 κ΅¬ν˜„ν•©λ‹ˆλ‹€:

```mermaid
flowchart TB
    subgraph "Layer 1: Sandbox"
        A[PROJECT_ROOT 경둜 검증]
    end
    
    subgraph "Layer 2: Network"
        B[SSRF λ°©μ§€ - 내뢀망 IP 차단]
        C[DNS Rebinding λ°©μ–΄]
    end
    
    subgraph "Layer 3: Execution"
        D[RCE λ°©μ§€ - ν™˜κ²½λ³€μˆ˜ 필터링]
        E[μ‰˜ ν™”μ΄νŠΈλ¦¬μŠ€νŠΈ]
    end
    
    subgraph "Layer 4: Data"
        F[μžλ™ λ°±μ—…]
        G[API ν‚€ 격리]
    end
    
    A --> B --> D --> F
```

| 보호 λŒ€μƒ | μœ„ν˜‘ | λ°©μ–΄ 쑰치 |
|:----------|:-----|:----------|
| 파일 μ‹œμŠ€ν…œ | Path Traversal | `PROJECT_ROOT` μ™ΈλΆ€ μ ‘κ·Ό 차단 |
| λ„€νŠΈμ›Œν¬ | SSRF 곡격 | 내뢀망 IP(10.x, 172.x, 192.168.x) 필터링 |
| μ½”λ“œ μ‹€ν–‰ | RCE / ν‚€ 유좜 | `ZHIPU_API_KEY` λ“± 민감 ν™˜κ²½λ³€μˆ˜ 차단 |
| μ‰˜ λͺ…λ Ή | μ‹œμŠ€ν…œ 파괴 | `rm -rf`, `sudo` λ“± μœ„ν—˜ λͺ…λ Ή 차단 |

> [!WARNING]
> `glm_shell_exec`λŠ” **ν™”μ΄νŠΈλ¦¬μŠ€νŠΈμ— λ“±λ‘λœ μ•ˆμ „ν•œ λͺ…λ Ήλ§Œ** μ‹€ν–‰ν•©λ‹ˆλ‹€.
> `rm`, `sudo`, `chmod 777` 등은 μ›μ²œ μ°¨λ‹¨λ©λ‹ˆλ‹€.

---

## πŸ”§ ν™˜κ²½λ³€μˆ˜ μ„€μ •

| λ³€μˆ˜λͺ… | ν•„μˆ˜ | μ„€λͺ… | κΈ°λ³Έκ°’ |
|:-------|:----:|:-----|:-------|
| `ZHIPU_API_KEY` | βœ… | GLM API 인증 ν‚€ | - |
| `PROJECT_ROOT` | βœ… | μž‘μ—… λŒ€μƒ 디렉토리 | ν˜„μž¬ 디렉토리 |
| `GLM_MODEL` | ❌ | μ‚¬μš©ν•  λͺ¨λΈ | `glm-4-plus` |
| `GLM_BASE_URL` | ❌ | API μ—”λ“œν¬μΈνŠΈ | `https://open.bigmodel.cn/api/paas/v4` |
| `GLM_TIMEOUT` | ❌ | μš”μ²­ νƒ€μž„μ•„μ›ƒ (초) | `120` |

---

## πŸ“‚ ν”„λ‘œμ νŠΈ ꡬ쑰

```
antigravity_glm_mcp/
β”œβ”€β”€ πŸ“„ README.md                 # 이 λ¬Έμ„œ
β”œβ”€β”€ πŸ“„ requirements.txt          # Python μ˜μ‘΄μ„±
β”œβ”€β”€ πŸ“„ pyproject.toml            # νŒ¨ν‚€μ§€ 메타데이터
β”‚
β”œβ”€β”€ πŸ“ src/                      # μ†ŒμŠ€ μ½”λ“œ
β”‚   β”œβ”€β”€ server.py                # MCP μ„œλ²„ μ§„μž…μ 
β”‚   β”œβ”€β”€ models.py                # 곡톡 λͺ¨λΈ (ToolResponse λ“±)
β”‚   β”‚
β”‚   β”œβ”€β”€ πŸ“ core/                 # 핡심 인프라
β”‚   β”‚   β”œβ”€β”€ config.py            # μ„€μ • κ΄€λ¦¬μž
β”‚   β”‚   β”œβ”€β”€ glm_client.py        # GLM API ν΄λΌμ΄μ–ΈνŠΈ
β”‚   β”‚   β”œβ”€β”€ sandbox.py           # 경둜 λ³΄μ•ˆ 검증
β”‚   β”‚   └── backup.py            # μžλ™ λ°±μ—… μ‹œμŠ€ν…œ
β”‚   β”‚
β”‚   └── πŸ“ tools/                # 25개 도ꡬ κ΅¬ν˜„
β”‚       β”œβ”€β”€ glm_cmd.py           # μ§€λŠ₯ μœ„μž„ (cmd, bypass)
β”‚       β”œβ”€β”€ file_ops.py          # 파일 CRUD
β”‚       β”œβ”€β”€ dir_ops.py           # 디렉토리 μž‘μ—…
β”‚       β”œβ”€β”€ grep_ops.py          # 파일 검색
β”‚       β”œβ”€β”€ code_ops.py          # μ½”λ“œ μ‹€ν–‰
β”‚       β”œβ”€β”€ shell_ops.py         # μ‰˜ μ‹€ν–‰
β”‚       β”œβ”€β”€ git_ops.py           # Git ν˜‘μ—…
β”‚       β”œβ”€β”€ http_ops.py          # HTTP μš”μ²­
β”‚       β”œβ”€β”€ web_ops.py           # μ›Ή 검색
β”‚       β”œβ”€β”€ db_ops.py            # DB 쿼리
β”‚       β”œβ”€β”€ memory_ops.py        # λ©”λͺ¨λ¦¬ 관리
β”‚       β”œβ”€β”€ image_ops.py         # 이미지 뢄석
β”‚       β”œβ”€β”€ schedule_ops.py      # μž‘μ—… μ˜ˆμ•½
β”‚       └── reporting.py         # 둜그 관리
β”‚
β”œβ”€β”€ πŸ“ scripts/                  # μœ ν‹Έλ¦¬ν‹° 슀크립트
β”‚   └── install.py               # μžλ™ μ„€μΉ˜ 슀크립트
β”‚
β”œβ”€β”€ πŸ“ docs/                     # λ¬Έμ„œ
β”‚   β”œβ”€β”€ ARCHITECTURE.md          # μ•„ν‚€ν…μ²˜ 상세
β”‚   β”œβ”€β”€ TOOLS.md                 # 도ꡬ 레퍼런슀
β”‚   └── QUICKSTART.md            # λΉ λ₯Έ μ‹œμž‘ κ°€μ΄λ“œ
β”‚
β”œβ”€β”€ πŸ“ tests/                    # ν…ŒμŠ€νŠΈ μ½”λ“œ
β”‚   β”œβ”€β”€ local_tools_test.py      # 둜컬 도ꡬ 톡합 ν…ŒμŠ€νŠΈ
β”‚   └── simple_test.py           # μ§€λŠ₯ 도ꡬ ν…ŒμŠ€νŠΈ
β”‚
└── πŸ“ data/                     # λŸ°νƒ€μž„ 데이터 (Git μ œμ™Έ)
    β”œβ”€β”€ memory/                  # 영ꡬ λ©”λͺ¨λ¦¬ μ €μž₯μ†Œ
    └── action_logs.jsonl        # μ—μ΄μ „νŠΈ ν™œλ™ 둜그
```

---

## πŸ§ͺ ν…ŒμŠ€νŠΈ

```bash
# κ°€μƒν™˜κ²½ ν™œμ„±ν™” ν›„

# 1. .env 파일 생성 (ꢌμž₯)
cp .env.sample .env
# .env νŒŒμΌμ„ μ—΄μ–΄ ZHIPU_API_KEYλ₯Ό μž…λ ₯ν•˜μ„Έμš”.

# 2. 둜컬 도ꡬ ν…ŒμŠ€νŠΈ (API ν‚€ λΆˆν•„μš”)
./.venv/bin/python tests/local_tools_test.py

# 3. μ§€λŠ₯ 도ꡬ ν…ŒμŠ€νŠΈ (API ν‚€ ν•„μš”)
# .env 파일이 μ—†λ‹€λ©΄ 직접 export ν•˜μ„Έμš”.
export ZHIPU_API_KEY="your-key" 
./.venv/bin/python tests/simple_test.py
```

---

## πŸ“œ λΌμ΄μ„ μŠ€

이 ν”„λ‘œμ νŠΈλŠ” **MIT License** ν•˜μ— λ°°ν¬λ©λ‹ˆλ‹€. 
자유둭게 μ‚¬μš©, μˆ˜μ •, λ°°ν¬ν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

---

<div align="center">

**Made with ❀️ for Gemini Γ— GLM Collaboration**

[![GitHub stars](https://img.shields.io/github/stars/coreline-ai/antigravity_glm_mcp?style=social)](https://github.com/coreline-ai/antigravity_glm_mcp)

</div>

TDQS

C2.7/5.0

Scored across 25 tools

Disambiguation4/5

Most tools have distinct purposes, but 'glm_cmd' (delegating to GLM) and 'glm_bypass' (raw prompt) could confuse an agent. Also, multiple log-related tools (glm_action_log, glm_git_log) are separate but might be misinterpreted without careful reading.

Naming Consistency5/5

All tools follow a consistent 'glm_<domain>_<action>' pattern (e.g., glm_file_create, glm_git_commit). This makes the tool set predictable and easy to navigate.

Tool Count3/5

With 25 tools, the server is on the heavy side for a general-purpose assistant. While each tool serves a purpose, the count is borderline and could be streamlined by merging some functions (e.g., memory operations).

Completeness4/5

The tool surface covers a wide range: file operations, git, memory, code execution, web search, HTTP, image analysis, shell, scheduling, and DB queries. Minor gaps exist (e.g., no file rename or explicit memory update), but overall it's quite comprehensive for an AI assistant.

Maintenance

ActivityInactive
ResponsivenessNo issues