Help us improve
Share bugs, ideas, or general feedback.
From adv
Discovers Claude Code tool environment including native tools and MCP servers via scans, amplifies prompts with capabilities, and suggests non-binding tool compositions for 'what tools to use' or 'best approach' queries.
How this skill is triggered — by the user, by Claude, or both
Slash command
/adv:tool-advisorThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are a **Tool Amplifier**: DISCOVER what the user has, DELIVER enriched context, SUGGEST tool compositions as options. You arm the model with knowledge — you never replace its judgment.
Share bugs, ideas, or general feedback.
You are a Tool Amplifier: DISCOVER what the user has, DELIVER enriched context, SUGGEST tool compositions as options. You arm the model with knowledge — you never replace its judgment.
echo "=== MCP Servers ===" ;
for f in ~/.claude/settings.json .claude/settings.json .mcp.json; do
[ -f "$f" ] && echo "-- $f --" && python3 -c "
import sys,json
try:
d=json.load(open('$f')); servers=d.get('mcpServers',{})
for k in servers: print(f' {k}')
if not servers: print(' (none)')
except: print(' (none)')
" 2>/dev/null
done ;
for f in ~/.codex/config.json ~/.codex/settings.json .codex/config.json .codex/settings.json; do
[ -f "$f" ] && echo "-- $f --" && python3 -c "
import sys,json
try:
d=json.load(open('$f')); servers=d.get('mcpServers',{}) or d.get('mcp_servers',{})
for k in servers: print(f' {k}')
if not servers: print(' (none)')
except: print(' (none)')
" 2>/dev/null
done ;
if [ -f ~/.codex/config.toml ]; then
echo "-- ~/.codex/config.toml --" ;
python3 -c "
import re, pathlib
p=pathlib.Path('~/.codex/config.toml').expanduser()
txt=p.read_text(errors='ignore')
found=False
for m in re.finditer(r'^\\s*\\[mcp_servers\\.([^\\]]+)\\]', txt, re.M):
print(f' {m.group(1)}'); found=True
if not found: print(' (none)')
" 2>/dev/null || echo " (none)" ;
fi ;
echo "=== Skills ===" ;
SKILLS_FOUND=0 ;
for root in ~/.claude/skills ~/.agents/skills ~/.codex/skills; do
[ -d "$root" ] || continue ;
for d in "$root"/*/; do
[ -d "$d" ] || continue ;
desc=$(head -25 "$d/SKILL.md" 2>/dev/null | python3 -c "
import sys
lines = sys.stdin.readlines()
in_desc = False; parts = []
for line in lines:
if line.startswith('description:'):
in_desc = True
v = line.split('description:',1)[1].strip().lstrip('>')
if v: parts.append(v)
elif in_desc:
if line.startswith(' ') or line.startswith('\t'): parts.append(line.strip())
else: break
print(' '.join(parts)[:150])
" 2>/dev/null) ;
echo " $(basename "$d"): $desc" ;
SKILLS_FOUND=1 ;
done ;
done ;
[ "$SKILLS_FOUND" -eq 0 ] && echo " (none)" ;
echo "=== Plugins ===" ;
cat ~/.claude/plugins/installed_plugins.json 2>/dev/null | python3 -c "
import sys,json
try:
d=json.load(sys.stdin)
for k in d: print(f' {k}')
if not d: print(' (none)')
except: print(' (none)')
" 2>/dev/null || echo " (none)" ;
echo "=== Agents ===" ;
AGENTS_FOUND=0 ;
for d in ~/.claude/agents ~/.agents/agents ~/.codex/agents; do
[ -d "$d" ] || continue ;
echo "-- $d --" ;
for f in "$d"/*.md "$d"/*.yaml "$d"/*.yml "$d"/*.txt; do
[ -f "$f" ] || continue ;
name=$(basename "$f" | sed 's/\.[^.]*$//') ;
desc=$(head -20 "$f" 2>/dev/null | grep -E '^description:|^role:|^# ' | head -1 | sed 's/^[^:]*:[[:space:]]*//' | sed 's/^# //' | cut -c1-120) ;
echo " $name: ${desc:-(no description)}" ;
AGENTS_FOUND=1 ;
done ;
done ;
[ "$AGENTS_FOUND" -eq 0 ] && echo " (none)" ;
echo "=== Dev Tools ===" ;
for cmd in git node python3 docker pytest npm pnpm bun cargo go java ruby codex claude gemini aider cursor; do
command -v $cmd >/dev/null 2>&1 && echo " $cmd: $(command -v $cmd)"
done ;
echo "=== Environment Hints ===" ;
[ -f .env ] && echo " .env exists ($(wc -l < .env) lines)" ;
[ -f .env.example ] && echo " .env.example exists" ;
[ -f docker-compose.yml ] || [ -f docker-compose.yaml ] && echo " docker-compose found" ;
[ -f Makefile ] && echo " Makefile found" ;
[ -f Taskfile.yml ] && echo " Taskfile found" ;
[ -f justfile ] && echo " justfile found"
→ Output: "Your Environment" table (full) or inline env summary (collapsed).
Classify the task in one line. Extract a "Done when" sentence. This phase is intentionally minimal — the model already reasons about tasks well; the skill's value is enforcing the output format, not the analysis.
Type: [Creation/Modification/Investigation/Research/Review/Data] | Scale: [Small/Medium/Large] | Traits: [key traits]→ Output: Task Profile line + "Done when" sentence.
From Phase 1, highlight only what's relevant to this task. The model would not know MCP tools exist without this scan.
→ Output: "Relevant Capabilities" bullet list.
Present tool compositions as options (model may follow, ignore, or adapt).
Tool -> Tool -> Tool) + "Good for" line + optional "Agent" line~/.claude/agents etc.) fits the task better than the default model, name it. If no custom agent is relevant, omit the Agent line — don't force it.→ Output: "Suggested Approaches" with 1-3 options, each optionally naming a recommended agent.
This phase is a key differentiator — base models almost never proactively audit what's missing from an environment. Be thorough here.
→ Output: table of Tool / Why useful / Install, or "N/A".
If any of these apply, mention them in 1-2 bullets. Otherwise output "N/A". Keep brief — models increasingly handle parallelization natively.
run_in_background## Tool Advisor v3.5
Prompt: `$ARGUMENTS`
### Your Environment
| Layer | Available |
|-------|-----------|
| MCP Servers | [discovered] |
| Skills | [name: description, ...] |
| Agents | [name: description, ...] |
| Plugins | [discovered] |
| CLI | [discovered] |
### Task Profile
- **Type**: [type] / **Scale**: [scale] / **Traits**: [traits]
- **Done when**: [one sentence]
### Relevant Capabilities
- `[tool]` — [why relevant]
### Suggested Approaches
**A — Methodical** (Recommended)
[step -> step -> step]
Good for: [tradeoff]
Agent: [agent name if a discovered agent fits — omit if none relevant]
**B — Fast**
[step -> step -> step]
Good for: [tradeoff]
Agent: [agent name if relevant — omit if none]
**C — [Deep/Skill-enhanced/Agent-parallel]**
[step -> step -> step]
Good for: [tradeoff]
Agent: [agent name if relevant — omit if none]
### Performance Tips
- [only applicable tips, or N/A]
### Missing but Useful
| Tool | Purpose | Install |
|------|---------|---------|
| [tool] | [purpose] | [how] |
(Task is doable without these. Or: N/A — environment sufficient.)
---
## Quick Action
| Approach | First Step |
|----------|-----------|
| Methodical | `[copy-paste command]` |
| Fast | `[copy-paste command]` |
| [Third] | `[copy-paste command]` |
**-> Recommended: "[approach]"** ([one-line reason])
## Tool Advisor v3.5
Prompt: `$ARGUMENTS`
Env: [key tools] | Done when: [criteria]
**Approach**: [single flow] | First step: `[copy-paste command]`
After outputting the template: STOP.
Task(Explore) or code-reviewer insteadInput: Fix the typo in README
## Tool Advisor v3.5
Prompt: `Fix the typo in README`
Env: native tools | Done when: typo corrected, no other changes
**Approach**: Glob("**/README*") -> Read -> Edit | First step: `Glob("**/README*")`
Input: US dashboard 'AI보유 분석' tab has no data. Fix generate_us_dashboard_json.py
Expected: full template with environment scan, Task Profile (Modification / Small-Medium / Cross-reference KR version), 3 approaches (Methodical: Explore->Read->executor->test, Fast: Grep->Read->Edit->test, Agent-parallel: parallel Explore->diff->fix->test), Quick Action table with copy-paste first steps. Then STOP.
Prompt to analyze: $ARGUMENTS
npx claudepluginhub dragon1086/claude-skills --plugin tool-advisorOrchestrates complex tasks by analyzing requirements, discovering plugins/agents/skills/MCPs, matching with confidence scores, and generating strategic execution plans with alternatives.
Analyzes codebase to recommend Claude Code automations: hooks for events, subagents for analysis, skills for workflows, plugins, MCP servers for tools.
Invokes MCP tools via tool-executor for semantic code search, refactoring, AI research, image generation, and library docs when basic tools fall short.