# πŸš€ 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개) Β· [πŸ›‘οΈ λ³΄μ•ˆ](#️-λ³΄μ•ˆ-μ•„ν‚€ν…μ²˜)
--- ## ✨ μ™œ 이 ν”„λ‘œμ νŠΈμΈκ°€μš”? | 문제점 | ν•΄κ²°μ±… | |--------|--------| | 🐳 λ³΅μž‘ν•œ 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 ```
πŸ“ μˆ˜λ™ μ„€μΉ˜ (λŒ€μ•ˆ) ```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" } } } } ```
--- ## πŸ› οΈ 전체 도ꡬ λͺ©λ‘ (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** ν•˜μ— λ°°ν¬λ©λ‹ˆλ‹€. 자유둭게 μ‚¬μš©, μˆ˜μ •, λ°°ν¬ν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€. ---
**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)