A multi-tool MCP server providing code generation, execution, reasoning, GitHub analysis, web crawling, web search, and YouTube summarization capabilities
Static source inference · medium confidence · detected: Logging
Deprecated protocol patterns detected
Summary
This MCP server has significant definition quality gaps across all 12 tools. While tools are registered via FastMCP's @mcp.tool() decorator with basic descriptions in Korean, most descriptions are vague, parameters lack proper type constraints, and no input/output schemas are explicitly documented. Tool names follow verb_noun convention but descriptions don't clarify WHAT the tool does, WHEN to use it, or what it returns. Parameters like 'model' and 'timeout' lack validation rules. No error recovery guidance is present. Output schemas are completely undocumented, agents cannot plan downstream calls. This is typical of community servers that prioritize functionality over LLM-friendly design.
No documented output schemas for any tool. Agents cannot infer return types, fields, or plan downstream tool chains. Example: rini_code_generation returns a string but LLMs don't know if it's raw code, formatted code, or embedded in a larger response.
Descriptions are too vague and in Korean only, making them inaccessible to non-Korean-speaking LLMs. Example: 'rini_github_analysis' says '주어진 쿼리와 관련 있는 내용의 코드를 해당 url의 github repository에서 찾아온 후 쿼리에 답변합니다' but doesn't explain WHEN to use it instead of rini_get_text_only_from_url, what the output format is, or how to interpret embeddings.
Rewrite all tool descriptions in English (or at minimum provide English translations). Descriptions should follow the pattern: 'Generates Python code based on a query. Returns raw Python source code suitable for execution. Call this when the user asks for a script or function. WHEN NOT: use rini_reasoning for explanations, rini_python_code_execution to run code.' (10 - 200 chars, action + intent + output + differentiation).
Add explicit output schemas to every tool. Example for rini_code_generation: 'Returns: {"code": "string (raw Python/JS/etc source)", "language": "string"}'. Use JSON Schema format so agents can parse and chain calls.
Document parameter constraints in descriptions and schema. Example: 'num (integer, 1 - 100, default 20): Maximum number of search results to return. Results beyond 100 are paginated.' Add 'minimum', 'maximum', and 'enum' to parameter schemas.
Add error recovery guidance to every tool that can fail. Example for rini_python_code_execution: On timeout, return '{"error": "Code execution timed out after 200s. Try: (1) simplify code, (2) add progress prints to debug, (3) call with smaller input."}'. Categorize as retryable vs user-fixable.
For irreversible operations (rini_python_code_execution, rini_create_and_execute_mcp_server), implement a two-step pattern: first call returns a summary and asks for confirmation; second call with a 'confirmed: true' flag executes. Or add a dry_run parameter.
Consolidate search tools or clearly differentiate them. Rename: rini_google_search_fast (results only), rini_google_search_deep (visits pages). Document speed/accuracy tradeoff in descriptions.
Spec posture evidence
Inferred effective spec: <=2025-11-25.
Relies on Logging (deprecated) - log to stderr or use OpenTelemetry
Score history
Overall score trend
↑ 43 points across a rubric change (v1 → v2)
43/100
Scored
Grade
Overall
Spec posture
Rubric
2026-09-22
F
43
<=2025-11-25
v2
2026-03-09
F
0
-
v1
read onlyauthsource verified42/100
구글 검색을 한 뒤 검색 결과의 링크들만 가져오는 함수. 외부 정보나 실시간 데이터가 필요할 때 사용하는 함수.
Parameter descriptions are missing or minimal. 'query' parameter appears in 10+ tools but never explains format, length limits, or examples. 'model' parameter has no validation rules, LLMs will pass arbitrary model names. 'timeout' has no range documented.
rini_python_code_execution and rini_create_and_execute_mcp_server are marked IRREVERSIBLE but have no confirmation/dry-run step. An LLM could accidentally execute malicious code or overwrite files without explicit approval.
No error recovery guidance. When rini_python_code_execution times out or fails, it returns 'Code execution timed out.' without telling the LLM what to do next (retry? simplify code? increase timeout?). Silent failures in rini_github_analysis (git clone errors) provide no next steps.
Tool composition breaks chains: rini_google_search_base returns search results but does not document which fields (url? title? snippet?) are returned. rini_get_text_only_from_url accepts 'url' but doesn't say if it matches the 'url' field from search results. Undocumented field names force LLMs to guess and fail.
Multiple tools with overlapping functionality (rini_google_search_base, rini_google_search_link_only, rini_google_search_shallow) are not clearly differentiated in descriptions. LLMs will waste reasoning cycles deciding which to call. No guidance on speed/accuracy tradeoffs.
No input validation or constraint documentation. rini_google_search_base accepts 'lang' defaulting to 'ko' and 'since'/'until' defaulting to null, but no enum for lang or date format specified. 'num' can be any integer, should be capped 1 - 100.
Add pagination support to search tools. rini_google_search_base already accepts 'start' but doesn't document that results beyond a certain page depth fail. Add 'total_results' and 'next_cursor' to output schema.
Include chaining IDs in outputs. rini_google_search_base should return {"url": "...", "title": "...", "snippet": "..."} so downstream tools (rini_get_text_only_from_url, rini_get_all_from_url) receive properly structured data.
Translate descriptions and add LLM-friendly examples. Instead of vague Japanese text, use: 'Analyzes a GitHub repository to answer code questions. Clones the repo, extracts functions/classes, finds semantically similar code via embeddings, and answers your query with code context. Use for: "How does authentication work in this repo?" or "Find the database query builder."'
Add 'idempotent' or 'safe to retry' hints to tool definitions via toolAnnotations (readOnlyHint for GET-like tools, destructiveHint for DELETE-like, idempotentHint for safe retries). All search tools should be marked read-only; code execution and MCP server creation should be marked destructive.