This server has a single tool with multiple critical quality gaps. The tool name 'run_gemini' is a generic verb that does not clearly convey action (get_, create_, search_, etc. are preferred). The description is in Korean and only 42 characters when translated ('Execute a prompt using Gemini'), which is below the rubric baseline of 194 chars average for tool descriptions. The tool combines multiple responsibilities: executing a prompt, analyzing files/directories/URLs, and managing working directories, this violates the single-responsibility principle. The input schema has three parameters with type definitions (all strings), but parameter descriptions are minimal and vague (e.g., 'Gemini에 전달할 프롬프트' provides no guidance on format, length, or constraints). No output schema is documented, the tool returns a dict with 'result' or 'error' keys, but field types and structure are not formally specified. Error handling returns generic error objects without actionable recovery guidance (e.g., 'FileNotFoundError' returns only 'Gemini CLI가 설치되어 있지 않습니다' without next steps). The tool takes a risk classification of WRITE but contains dangerous subprocess.run with shell=True and user-controlled prompt injection vectors (file_dir_url_path is concatenated directly into the shell command). No input validation, sanitization, or parameter constraints are present. The implementation is visible in the source, so this is not an inferred tool.
Gemini를 사용하여 프롬프트를 실행합니다.
Generic tool name 'run_gemini' lacks clear action verb. Does not follow verb_noun convention (get_, create_, search_, list_, send_, update_). LLMs cannot infer action from name alone.
Tool description is only 42 characters (Korean: 'Gemini를 사용하여 프롬프트를 실행합니다'). Rubric baseline is 194 chars average; A+ tools require 50 - 200 chars. Current description provides no WHEN/WHY context or prerequisites.
Input parameters lack proper descriptions for LLM understanding. 'prompt' description ('Gemini에 전달할 프롬프트') is vague, does not specify format, length limits, language, or constraints. 'file_dir_url_path' is ambiguous, not clear if it accepts file paths, directory paths, or URLs, or all three. 'working_directory' description ('작업 디렉토리 (필수)') only notes it is required, not why or what happens if invalid.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 32 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
No output schema documented. Tool returns dict with 'result' or 'error' keys, but field types, structure, and contents are not formally specified. LLMs cannot plan downstream tool calls or extract structured data.
Tool combines multiple responsibilities: execute prompt, analyze files/directories/URLs, manage working directory. Violates single-responsibility principle. Should be split into separate tools (e.g., 'execute_gemini_prompt' + 'analyze_file_with_gemini').
CRITICAL SECURITY: subprocess.run called with shell=True and user-controlled input (file_dir_url_path) concatenated into prompt string. This enables command injection. LLM-provided 'file_dir_url_path' could contain shell metacharacters ('$(...)', '`...`', '|', ';', '&&'). Even though shell=True uses quoting, it is insufficient against deliberate injection.
No input validation. 'working_directory' parameter not validated as an existing directory. 'prompt' has no length limits or content constraints. Paths not checked for directory traversal (e.g., '../../../etc/passwd'). LLMs can pass arbitrary values leading to errors or security issues.
Error handling is generic and non-actionable. 'FileNotFoundError' returns 'Gemini CLI가 설치되어 있지 않습니다' (Gemini CLI is not installed) without recovery guidance (e.g., 'Install via pip install gemini-cli'). TimeoutExpired returns '시간 초과' (timeout) without retry advice. Errors do not categorize as retryable vs. fatal.
Tool marked as WRITE risk but no confirmation/dry-run mechanism. Executing arbitrary Gemini commands with side effects (file analysis, directory traversal) without preview or confirmation step violates confirmation-request pattern.
Parameters accept opaque internal identifiers (working_directory is a raw filesystem path). Tool should accept human-friendly identifiers (project name, workspace ID) and resolve them server-side, matching chat data model expectations.