refactor(agent): MCP 서버 제거 → CLI 도구 직접 실행 전환 + Wiki 도구 추가

This commit is contained in:
2026-03-15 23:05:38 +09:00
parent 2f7c18df49
commit e59fcdf114
8 changed files with 160 additions and 554 deletions

View File

@@ -2,6 +2,7 @@
모든 역할이 gemini-3-flash-preview 모델을 사용하며,
역할별 thinkingBudget을 동적으로 조절합니다.
MCP 서버 없이 CLI 도구를 직접 실행하는 구조입니다.
"""
import asyncio
@@ -29,16 +30,7 @@ ROLE_THINKING: dict[str, int] = {
}
DEFAULT_THINKING = 4096
# 역할별 MCP 서버 접근 허용 목록
# agent만 외부 도구 사용 가능, 나머지 역할은 텍스트 전용
ROLE_MCP_ACCESS: dict[str, list[str]] = {
"agent": ["anime", "infra"],
"coder": [],
"planner": [],
"reviewer": [],
"summarizer": [],
"unified": [],
}
# 동시 호출 제한 (Gemini AI Ultra 120RPM 고려)
_semaphore = asyncio.Semaphore(4)
@@ -73,30 +65,9 @@ class GeminiCaller:
"--approval-mode", "yolo"]
return ["gemini", "--model", GEMINI_MODEL, "--approval-mode", "yolo"]
# MCP 서버 설정 (홈 레벨에 등록)
_MCP_SERVERS = {
"anime": {
"command": str(Path(sys.executable)),
"args": [str(PROJECT_ROOT / "mcp_servers" / "anime_server.py")],
"cwd": str(PROJECT_ROOT),
"trust": True,
},
"infra": {
"command": str(Path(sys.executable)),
"args": [str(PROJECT_ROOT / "mcp_servers" / "infra_server.py")],
"cwd": str(PROJECT_ROOT),
"trust": True,
},
}
def _set_thinking_budget(self, role: str):
"""역할별 thinkingBudget + MCP 서버 설정을 settings.json에 반영.
MCP 서버는 ROLE_MCP_ACCESS에 따라 역할별로 필터링됩니다.
agent 역할만 MCP 도구에 접근 가능하고, 나머지 역할은 제거됩니다.
"""
"""역할별 thinkingBudget을 settings.json에 반영."""
budget = ROLE_THINKING.get(role, DEFAULT_THINKING)
allowed_mcp = ROLE_MCP_ACCESS.get(role, [])
try:
if _SETTINGS_PATH.exists():
settings = json.loads(_SETTINGS_PATH.read_text(encoding="utf-8"))
@@ -110,22 +81,14 @@ class GeminiCaller:
thinking = default.setdefault("thinkingConfig", {})
thinking["thinkingBudget"] = budget
# MCP 서버 — 역할별 접근 제어
mcp_servers = settings.setdefault("mcpServers", {})
for name, cfg in self._MCP_SERVERS.items():
if name in allowed_mcp:
mcp_servers[name] = cfg
else:
mcp_servers.pop(name, None)
# MCP 서버 제거 (CLI 직접 실행으로 전환)
settings.pop("mcpServers", None)
_SETTINGS_PATH.write_text(
json.dumps(settings, indent=2, ensure_ascii=False),
encoding="utf-8",
)
logger.debug(
f"settings.json 업데이트: role={role}, budget={budget}, "
f"mcp={allowed_mcp or 'none'}"
)
logger.debug(f"settings.json 업데이트: role={role}, budget={budget}")
except Exception as e:
logger.warning(f"settings.json 업데이트 실패 (role={role}): {e}")