agent-tool
agent-tool
AI 코딩 에이전트를 위한 MCP(Model Context Protocol) 도구 서버입니다.
왜?
AI 코딩 에이전트(Claude Code, Cursor, Codex 등)의 내장 도구에는 알려진 한계가 있습니다:
탭 들여쓰기 깨짐: LLM은 공백을 출력하지만 프로젝트는 탭을 사용합니다. 내장 Edit 도구가 공백을 그대로 작성하여 들여쓰기 스타일을 손상시킵니다.
인코딩 손상: EUC-KR, Shift-JIS 또는 GB18030 파일을 편집하면 조용히 UTF-8로 변환되어 레거시 프로젝트를 망가뜨립니다.
너무 많은 개별 도구: 에이전트가 Redis CLI, MySQL 클라이언트, SSH 클라이언트 등을 찾고, 설치하고, 구성하게 하는 것은 지루하고 오류가 발생하기 쉽습니다. agent-tool은 54개의 도구를 하나의 바이너리로 묶고 컴팩트한 프로필을 통해 필요 시 노출합니다.
리버스 엔지니어링 지원 없음: 내장 도구는 바이너리를 디스어셈블하거나 PE/ELF 헤더를 검사하거나 함수 경계를 찾거나 상호 참조를 검색할 수 없습니다. agent-tool은 정적 바이너리 분석(디스어셈블, xref, 함수 탐지), DAP 디버거, CheatEngine 스타일 메모리 도구를 포함하여 에이전트에 완전한 리버스 엔지니어링 기능을 제공합니다.
네트워크 검열: 일부 국가에서는 정부 차원의 웹 필터링이 일반
curl/wget요청을 차단합니다. agent-tool은 이러한 제한을 우회하기 위해 기본적으로 ECH(Encrypted Client Hello)와 DoH(DNS over HTTPS)를 사용합니다.
agent-tool은 모델 컨텍스트를 제한된 범위로 유지하면서 프로젝트 규칙을 보존하는 에이전트 중심 도구로 이러한 문제를 해결합니다.
Related MCP server: DevToolkit MCP Server
지원되는 에이전트
Claude Code, Codex CLI, Cursor, Windsurf, Cline, Gemini CLI 및 MCP 호환 에이전트.
기본적으로 LLM 효율적
기본 core 프로필은 전체 54개 대신 toolbox를 포함한 11개의 스키마만 노출합니다. 프로토콜 수준 측정에서 직렬화된 도구 목록이 약 84KB(full)에서 18KB로 줄었습니다. toolbox(operation="describe", tool="ssh", compact=true, tool_operation="execute")를 사용하여 한 작업의 필드와 필수 목록만 로드한 다음, toolbox(operation="call", tool="ssh", arguments={...})를 통해 호출합니다. 게이트웨이는 동적 도구 목록 새로고침에 의존하지 않으므로 Codex와 같은 고정 바인딩 클라이언트에서도 작동합니다. Describe는 도구/버전에 바인딩된 schema_handle을 반환합니다. 이후 describe에서 이를 보내면 스키마가 여전히 최신일 때 변경 사항이 없다는 짧은 확인 응답을 반환합니다. --profile coding|remote|analysis|full로 시작할 수도 있습니다.
잠재적으로 큰 텍스트 응답은 기본적으로 32K 문자로 제한되며 최대 상한은 128K입니다. 잘림은 항상 표시되며, 페이지 가능한 도구는 next_offset 또는 next_cursor를 반환합니다. 로컬 상대 경로는 명시적 워크스페이스를 기준으로 해석된 다음 MCP 클라이언트 루트를 기준으로 해석됩니다.
기능
도구 | 설명 | 상태 |
Edit | 스마트 들여쓰기와 인코딩 보존을 지원하는 문자열 교체(dry_run 지원) | ✅ |
Read | 인코딩을 인식하고 줄 번호가 포함된 읽기. 기본 400줄/32K 문자, 잘림 및 정확한 | ✅ |
Write | 인코딩을 인식하는 파일 생성/덮어쓰기 | ✅ |
Grep | 인코딩을 인식하는 정규식 검색, 32K 출력 예산, 파일별로 그룹화된 간결한 출력, 상대 경로, | ✅ |
Glob |
| ✅ |
ListDir | 제한된/페이지 가능한 디렉터리 목록. max_entries + 연속 커서, 디렉터리/파일 필터, 항목 이름 glob 필터, 개수 전용 모드, 평면/트리 출력 | ✅ |
Diff | 두 파일을 비교하여 통합 diff 출력(인코딩 인식). 줄 끝이나 끝의 개행에서만 다른 파일은 빈 diff 대신 그 사실을 알려줌 | ✅ |
Patch | 파일에 통합 diff 패치 적용(dry_run 지원). 각 줄은 자체 줄 끝을 유지하므로 CRLF/LF 혼합 파일이 다시 쓰이지 않음 | ✅ |
Checksum | 파일 해시 계산(md5, sha1, sha256) | ✅ |
FileInfo | 파일 메타데이터(크기, 인코딩, 혼합 줄 끝 수, 들여쓰기, 줄 수) | ✅ |
Compress | zip / tar.gz 아카이브 생성 | ✅ |
Decompress | zip / tar.gz 아카이브 추출(Zip Slip/Bomb 보호) | ✅ |
Backup | 제외 패턴을 지원하는 타임스탬프 zip 백업. 디렉터리 통계, 패턴 일치 수, 가장 큰 파일을 보여주는 dry_run 미리보기 | ✅ |
ConvertEncoding | 파일 인코딩 변환(EUC-KR ↔ UTF-8, BOM 추가/제거 등) | ✅ |
Delete | 안전한 단일 파일 삭제(디렉터리 불가, 심볼릭 링크 불가, 시스템 경로 보호, dry_run) | ✅ |
Rename | 원자적 파일/디렉터리 이름 변경 또는 이동(dry_run) | ✅ |
SysInfo | 시스템 정보 — OS, CPU, RAM, 디스크, 가동 시간, CPU 사용량 측정 | ✅ |
FindTools | 설치된 개발 도구 검색 — 컴파일러, 런타임, 빌드 시스템(Go, .NET, Node, Python, Java, Rust, C/C++ 등). PATH, 환경 변수, 알려진 위치(~/bin, snap, scoop, Homebrew, SDKMAN, nvm, fnm, pyenv) 검색 | ✅ |
ProcList | 실행 중인 프로세스 나열 — PID, 이름, 명령줄, 메모리. 민감한 인수 자동 마스킹. 이름 또는 포트로 필터링 | ✅ |
ProcKill | PID 또는 포트로 프로세스 종료, 일시 중지 또는 재개. 트리 종료, 시그널 선택(kill/term/hup/int/stop/cont), 좀비 처리(Linux), dry_run | ✅ |
ProcExec | 명령을 새 프로세스로 실행. 포그라운드/백그라운드/일시 중지 시작, 타임아웃/환경 변수, 만료되는 원시 출력 검색을 지원하는 안전한 반복 진단 압축 | ✅ |
EnvVar | 환경 변수 읽기. 민감한 값(비밀번호, 토큰) 자동 마스킹 | ✅ |
Firewall | 방화벽 규칙 읽기 — iptables/nftables/firewalld(Linux), netsh(Windows). 읽기 전용 | ✅ |
SSH | 32K 머리+꼬리 캡처, 원본 바이트 수, 적절한 0이 아닌 종료 오류, 백그라운드 작업( | ✅ |
SFTP | SSH를 통한 파일 전송 및 원격 파일 시스템 관리. 업로드, 다운로드, ls, stat, mkdir, rm, chmod, rename. SSH 세션 풀 재사용. 전송당 최대 2GB | ✅ |
Bash | 작업 디렉터리/환경 유지, 안전한 반복 진단 압축, 만료되는 원시 출력 검색을 지원하는 영구 셸 세션. 세션 풀링(최대 5개, 유휴 타임아웃 30분). Unix: bash/sh, Windows: PowerShell/git-bash/cmd | ✅ |
WebFetch | 웹 콘텐츠를 텍스트/Markdown으로 가져오기(기본 32K/최대 128K). ECH + DoH, HTML→Markdown 변환, SSRF 보호, 프록시 지원, Chrome User-Agent | ✅ |
WebSearch | Brave Search 또는 Naver API를 통한 웹 검색. API 키 환경 변수( | ✅ |
Download | URL에서 디스크로 파일 다운로드. 기본 ECH + DoH. SSRF 보호. HTTP/SOCKS5 프록시. 원자적 쓰기. 최대 2GB | ✅ |
HTTPReq | 모든 메서드(GET/POST/PUT/PATCH/DELETE/HEAD/OPTIONS)로 HTTP 요청 실행. 사용자 지정 헤더, 본문, 프록시를 사용한 API 테스트. SSRF 보호 | ✅ |
JSONQuery | 점 표기법 경로(예: | ✅ |
YAMLQuery | 점 표기법 경로(JSONQuery와 동일한 구문)로 YAML 파일 쿼리 | ✅ |
TOMLQuery | 점 표기법 경로(JSONQuery와 동일한 구문)로 TOML 파일 쿼리. TOML 고유 유형(datetime, int64) 지원 | ✅ |
Copy | 원자적 쓰기 및 권한 보존으로 파일/디렉터리 복사. 재귀 디렉터리 복사. Windows 잠긴 파일 폴백(실행 중인 exe/DLL을 옆으로 이름 변경). dry_run 미리보기 | ✅ |
Mkdir | 선택적 권한 모드(8진수, 예: 0755)로 디렉터리 생성. 기본 재귀(mkdir -p). dry_run 미리보기 | ✅ |
MultiRead | 호출 전체 32K 예산, 파일당 기본 200줄, 긴 줄 안전, 파일별/전체 연속 메타데이터로 최대 50개 파일 읽기. 해시는 선택 사항 | ✅ |
RegexReplace | 파일/디렉터리 전체에서 정규식 찾기 및 바꾸기. 인코딩 및 줄 끝 보존, 캡처 그룹($1, $2). 바이너리 파일 건너뜀. dry_run 미리보기 | ✅ |
TLSCheck | TLS 인증서 세부 정보 확인 — 주체, 발급자, 만료, SAN, TLS 버전, 암호화 스위트 | ✅ |
DNSLookup | DNS 레코드 조회(A/AAAA/MX/CNAME/TXT/NS/SOA). 개인 정보 보호를 위해 기본적으로 DNS over HTTPS(DoH) 사용 | ✅ |
MySQL | MySQL/MariaDB에서 SQL 쿼리 실행. 행/열/셀/전체 출력 한도를 구성할 수 있는 표 형식의 SELECT 결과, DML의 영향받은 행 수. 페이징에는 SQL LIMIT/OFFSET 사용 | ✅ |
Redis | 유형별 형식화된 출력으로 Redis 명령 실행. TLS 지원. 위험한 명령(FLUSHALL, SHUTDOWN 등) 차단 | ✅ |
PortCheck | 호스트에서 TCP 포트가 열려 있는지 확인. 응답 시간과 함께 OPEN/CLOSED 반환. 호스트 이름, IPv4, IPv6 지원 | ✅ |
ExternalIP | 외부(공용) IP 주소 가져오기. 자동 폴백을 지원하는 여러 공급자(ipify, ifconfig.me, icanhazip) | ✅ |
SLOC | 언어별 소스 코드 줄 수 계산. 70개 이상 언어 감지, 파일별/언어별 분석, 빈 줄 통계, max_depth 제어 | ✅ |
Debug | DAP(Debug Adapter Protocol)를 통한 대화형 디버거. 변수, 완성, 모듈, 로드된 소스에 대한 제한된 값/출력 및 페이징을 포함한 전체 DAP 지원. dlv(Go), debugpy(Python), codelldb(C/C++/Rust)로 테스트됨. 모든 DAP 호환 어댑터와 작동. Stdio 및 TCP 모드. 참고: vsdbg(Microsoft)는 VS Code 라이선스가 필요하며 독립 실행형으로 사용할 수 없음 — 오픈 소스 대안으로 codelldb 또는 netcoredbg 사용 | ✅ |
Analyze | 정적 바이너리 분석 및 리버스 엔지니어링. x86/x64/ARM/ARM64 디스어셈블리, 제한된 페이지 가능 PE 가져오기 출력을 포함한 PE/ELF/Mach-O 파싱, xref, 함수 검색/호출 그래프, 포인터/RTTI/vtable/구조체 분석, imphash, Rich 헤더, DWARF, 문자열, hexdump, 패턴 검색, 엔트로피, 오버레이 감지, 바이너리 diff. 전역 파일 크기 제한 없음 | ✅ |
Memtool | CheatEngine 스타일 프로세스 메모리 도구 — 메모리 값 검색/필터/읽기/쓰기, read_chain(base+오프셋 포인터 체인 해석, 한 번의 호출로 일괄 처리), 실시간 디스어셈블리(x86/x64/ARM/ARM64), 실행 취소, 구조체 패턴 검색, 포인터 스캔, 메모리 diff. 대용량 스캔을 위한 디스크 지원 스냅샷. 유휴 타임아웃이 있는 세션 관리. Windows(ReadProcessMemory) 및 Linux(/proc/pid/mem). Windows에서 권한 상승 시 SeDebugPrivilege 자동 활성화, 옵트인 | ✅ |
IPC | TCP를 통한 AI 에이전트 세션 간 프로세스 간 통신. 차단 수신이 포함된 1:1 메시지 전달. 프로토콜: [2-byte type][4-byte length][payload]. 작업: send, receive(타임아웃 포함 차단), ping. 머신 간에 작동. 최대 1MB 메시지, 300초 타임아웃 | ✅ |
Wintool | Windows GUI 자동화 — 창 및 자식 컨트롤 찾기/열거, 스크린샷 캡처(PrintWindow를 통한 ImageContent PNG), 클립보드 이미지 읽기, 텍스트 읽기/설정, 클릭, 입력, 원시 메시지 보내기, 표시/숨기기/최소화/최대화, 이동/크기 조정, 닫기, 포커스. screenshot/clipboard는 기본적으로 ImageContent 반환(파일 출력을 위한 save_path 옵션). AI 에이전트가 GUI 애플리케이션을 "보고" 상호 작용할 수 있게 함. Windows 전용 | ✅ |
CodeGraph | 완전히 내장된 의미론적 코드 그래프: Go 표준 라이브러리 AST와 C/C++, Python, C#, Rust, Java용 지연 압축 tree-sitter WASM. 선언/정의 식별성, 반환 체인 및 제네릭/별칭 전파, 전이적 include, 보정된 오버로드 증거, 가상/인터페이스 디스패치, 매크로/콜백 엣지, 빌드 조건 출처, 다중 루트 워크스페이스를 추가. 컴파일러, 언어 서버, 외부 바이너리, LLM 호출, 토큰 비용 없음 | ✅ |
SetConfig | 런타임 설정 변경(인코딩, 파일 크기 제한, 심볼릭 링크, 작업 영역 등) | ✅ |
Help | 에이전트용 내장 사용 가이드(인코딩, 들여쓰기, 문제 해결) | ✅ |
주요 개선 사항
스마트 들여쓰기
LLM은 일반적으로 공백을 출력하지만 많은 프로젝트는 탭을 사용합니다. AgentTool은 파일의 기존 스타일에 맞게 들여쓰기를 자동 변환합니다.
.editorconfig에서indent_style및indent_size를 읽습니다.콘텐츠 기반 감지(처음 100줄)로 폴백합니다.
레거시 파일 보호: 실제 콘텐츠가
.editorconfig와 모순되면 변환하지 않습니다.
인코딩 보존
편집은 UTF-8을 강제하지 않고 원본 파일 인코딩을 보존합니다.
탐지 우선순위: BOM →
.editorconfigcharset → BOM 없는 UTF-16 → 유효한 UTF-8 → chardet 자동 감지 → 폴백 인코딩지원 인코딩: UTF-8, UTF-8 BOM, EUC-KR, Shift-JIS, ISO-8859-1, UTF-16(LE/BE, BOM 포함 또는 미포함) 등
ASCII에 대한 오탐 경고 없음: 유효한 UTF-8은 직접 검증되므로 순수 ASCII 파일은 낮은 신뢰도 경고를 발생시키지 않습니다.
줄 끝(Line endings): LF, CRLF, CR 및 혼합 파일을 감지합니다.
edit은 파일이 CRLF 또는 LF를 사용하든, 둘을 혼합한 파일을 포함해 여러 줄old_string과 일치하며,edit/regexreplace로 삽입된 텍스트는 삽입되는 영역의 줄바꿈 스타일을 따르므로 파일의 나머지 부분은 바이트 단위로 동일하게 유지됩니다.
토큰 안전 디렉터리 목록
listdir은 기본적으로 페이지당 500개 항목을 반환하고, 더 많은 항목이 있으면 next_cursor를 반환합니다. directories_only, files_only, name_pattern(예: A*) 또는 include의 여러 OR 패턴으로 결과를 좁힐 수 있습니다. 일치하는 파일/디렉터리 개수만 필요한 경우 counts_only=true를 사용하세요.
유휴 메모리 해제
도구 호출 없이 30분이 지나면 서버는 힙을 OS에 반환합니다. stdio MCP 서버는 버려진 클라이언트와 조용한 클라이언트를 구분할 수 없습니다 -- 해당 서버를 생성한 프로세스는 살아 있을 수도, 이미 사용을 마쳤을 수도, 파이프를 계속 열어 두고 있을 수도 있어서 EOF가 결코 도착하지 않습니다 -- 그리고 그런 추측으로 종료하면 단지 일시 중지된 세션이 끊어질 수 있습니다. 메모리를 해제하는 것은 그 절충에서 안전한 선택입니다. 한 번 50MB 파일을 읽은 인스턴스는 머신이 가동되는 동안 200MB를 계속 보유하는 대신 ~20MB 기준선으로 돌아갑니다. 열려 있는 shell 및 ssh 세션은 유지되며, 클라이언트가 관찰할 수 있는 것은 아무것도 변하지 않습니다.
빠른 시작
릴리스에서 OS에 맞는 바이너리를 다운로드합니다.
agent-tool install을 실행합니다(특정 에이전트의 경우agent-tool install claude).IDE / 에이전트를 다시 시작합니다.
완료 — 간결한 핵심 도구를 즉시 사용할 수 있으며,
toolbox는 다른 모든 도구를 요청 시 설명하고 호출합니다.
또는 AI 에이전트에게 대신 처리하도록 요청하세요:
"https://github.com/knewstimek/agent-tool/releases/latest에서 agent-tool을 다운로드하고
agent-tool install을 실행하세요."
유능한 AI 코딩 에이전트(Claude Code, Codex 등)라면 다운로드 → 설치 → 재시작의 전체 흐름을 자동으로 처리할 수 있습니다.
권장: 에이전트가 agent-tool을 선호하도록 설정
설치 후 에이전트는 agent-tool에 접근할 수 있지만 여전히 기본 제공 도구(Read, Edit 등)를 기본으로 사용할 수 있습니다. 에이전트가 agent-tool의 인코딩 인식 및 들여쓰기 인지 도구를 선호하도록 하려면 아래 지침 중 하나를 추가하세요.
코드 탐색 팁: 대규모 프로젝트의 경우 AST 기반 코드 탐색을 활성화하려면 CLAUDE.md / AGENTS.md에 다음을 추가하세요:
At the start of a session, run codegraph(op="index", path="<project_root>") to build a code index.
For several repositories sharing one graph, use codegraph(op="index", path="<db_root>", roots=["<source_root_1>", "<source_root_2>"]). Source-root provenance prevents unrelated projects with the same symbol names from contaminating candidates while explicit/transitive includes can still cross roots.
Then use codegraph for structural queries (find, callers, callees, methods, inherits) instead of grep.Strict 또는 Soft를 선택하세요:
모드 | 사용 시점 | 지침 |
Strict | 비UTF-8 파일 또는 혼합 들여쓰기가 있는 프로젝트 |
|
Soft | 일반 프로젝트 |
|
적용 위치:
프로젝트별 — 프로젝트의 CLAUDE.md에 추가합니다:
ALWAYS use agent-tool MCP tools (mcp__agent-tool__*) instead of built-in file tools.전역(모든 프로젝트) — ~/.claude/CLAUDE.md에 추가합니다:
ALWAYS use agent-tool MCP tools (mcp__agent-tool__*) instead of built-in file tools.강제 적용 — ~/.claude/settings.json을 통해 권한 수준에서 기본 제공 파일 도구를 차단합니다:
{
"permissions": {
"deny": ["Read", "Edit", "MultiEdit", "Write", "Glob", "Grep"]
}
}이렇게 하면 Claude Code의 기본 제공 파일 도구를 사용할 수 없게 되어 에이전트가 agent-tool을 사용할 수밖에 없습니다. 프롬프트 지침에 의존하지 않고 엄격하게 적용하려는 경우 권장됩니다.
~/.codex/config.toml에 추가합니다(최상위,[mcp_servers.*]내부가 아님):
model_instructions_file = "~/.codex/model_instructions.md"~/.codex/model_instructions.md를 생성합니다:
ALWAYS use agent-tool MCP tools (mcp__agent-tool__*) instead of built-in file tools.Codex를 다시 시작합니다.
프로젝트별 — 대신 프로젝트의 AGENTS.md에 추가합니다.
프로젝트의 .cursorrules, .windsurfrules 또는 AGENTS.md에 추가합니다:
ALWAYS use agent-tool MCP tools (mcp__agent-tool__*) instead of built-in file tools.설치
자동 설치(권장)
# Register with all detected agents (full auto-approve — all tools)
agent-tool install
# Safe mode — only auto-approve local file tools (no SSH, HTTP, DB, shell)
agent-tool install --safe-approve
# No auto-approve — manual approval required for every tool call
agent-tool install --no-auto-approve
# Register with a specific agent
agent-tool install claude
agent-tool install claude --safe-approve
# Uninstall (removes agent-tool entry only, preserves other settings)
agent-tool uninstall # from all agents
agent-tool uninstall claude # from specific agent설치 권한 수준:
수준 | 플래그 | 자동 승인 도구 |
Full(기본값) | (없음) | 모든 도구( |
Safe |
| 로컬 전용 도구 29개(read, edit, write, grep, glob 등) — SSH, HTTP, DB, bash, 프로세스 제어 없음 |
None |
| 도구 없음 — 모든 호출에 수동 승인 필요 |
승인 수준은 스키마 프로필과 독립적입니다. 설치가 전체 네임스페이스를 승인하더라도 서버는 여전히 토큰 효율적인 core 프로필로 시작할 수 있습니다. toolbox는 --safe-approve로 자동 승인되지 않도록 의도적으로 설계되었습니다. operation=call 게이트웨이가 네트워크, 셸, 데이터베이스 및 프로세스 제어 도구를 호출할 수 있기 때문입니다. 안전 모드 사용자는 각 toolbox 승인을 검토해야 하며, 전체 AgentTool 네임스페이스를 신뢰하려는 경우가 아니라면 영구 허용 규칙을 부여하지 않아야 합니다.
수동 설정
Claude Code / Cursor / Cline(settings.json 또는 mcp.json):
{
"mcpServers": {
"agent-tool": {
"command": "/path/to/agent-tool"
}
}
}Codex CLI(~/.codex/config.toml):
[mcp_servers.agent-tool]
command = "/path/to/agent-tool"옵션
# Select the initial schema profile (default: core)
agent-tool --profile coding
# Set fallback encoding for projects with non-UTF-8 files
agent-tool --fallback-encoding EUC-KR프로필은 추가형 프리셋입니다: core(스키마 11개), coding(core에 파일/빌드/셸 관련 더 넓은 도구가 추가된 프로필), remote, analysis, full. 런타임에서는 클라이언트에 독립적인 toolbox 게이트웨이를 우선 사용하세요: operation=describe는 도구 하나의 스키마를 반환하며(compact=true와 tool_operation을 함께 사용하면 단일 작업으로 제한됩니다), operation=call은 안정적인 toolbox 바인딩을 통해 해당 도구를 호출합니다. 반환된 schema_handle을 다시 보내면 변경되지 않은 스키마를 다시 수신하지 않습니다. 명령 진단이 압축된 경우 operation=output은 보고된 ID로 제한된 원시 출력을 30분 동안 검색하며, 페이지네이션이 필요하면 next_offset을 보고합니다. enable, disable, profile은 tools/list_changed를 지원하는 클라이언트에서 계속 사용할 수 있습니다. 고정 바인딩 클라이언트는 항상 게이트웨이를 계속 사용할 수 있습니다.
환경 변수
CLI 플래그를 반복하지 않으려면 AGENT_TOOL_FALLBACK_ENCODING 및/또는 AGENT_TOOL_PROFILE을 설정하세요:
# Windows (no admin required)
setx AGENT_TOOL_FALLBACK_ENCODING EUC-KR
setx AGENT_TOOL_PROFILE coding
# Linux / macOS (add to ~/.bashrc or ~/.zshrc)
export AGENT_TOOL_FALLBACK_ENCODING=EUC-KR
export AGENT_TOOL_PROFILE=coding우선순위: CLI 플래그 > 환경 변수 > 기본값(UTF-8).
로컬 SSH/SFTP 연결 프로필
SSH와 SFTP는 connection_profile 또는 세션 로컬 connection_id를 허용하므로 host, user, key, jump-host 필드를 반복할 필요가 없습니다. 프로필은 OS 사용자 구성 디렉터리의 agent-tool/connections.json에서 읽습니다. 위치는 AGENT_TOOL_CONNECTION_PROFILE_FILE로 재정의할 수 있습니다. 이 파일을 로컬에 유지하고, 워크스페이스 안에 배치하는 경우 명시적으로 무시되도록 하세요.
{
"connections": {
"dev": {
"host": "192.0.2.10",
"user": "builder",
"key_file": "/local/path/to/id_ed25519",
"host_key_check": "strict",
"trusted": true
}
}
}최초 호출은 불투명한 connection_id를 반환하며, 이 ID는 두 도구 모두 30분 동안 재사용할 수 있습니다. trusted:true는 표시에만 영향을 줍니다. 허용된 사설 주소 경고는 호출마다가 아니라 풀링된 연결당 한 번만 표시됩니다. SSRF 차단과 클라우드 메타데이터 보호는 변경되지 않습니다. SSH는 또한 quiet, echo_command, result_only를 지원하며, 마지막 옵션은 stdout, stderr, exit_code를 중심으로 한 간결한 JSON을 반환합니다. SFTP는 quiet, result_only, upload_many(최대 100개 파일)를 지원합니다.
런타임 구성
에이전트는 재시작 없이 set_config를 통해 런타임에 설정을 변경할 수 있습니다:
매개변수 | 설명 | 기본값 |
| 자동 감지에 실패할 때의 폴백 인코딩 |
|
| 인코딩 감지 경고 표시 |
|
| read/edit/grep의 최대 파일 크기(MB) |
|
| tar 아카이브에서 심링크 추출 허용 |
|
| 명시적 로컬 워크스페이스 루트. 그렇지 않으면 첫 번째 MCP 클라이언트 루트가 사용된 다음 cwd가 사용됩니다. | (MCP root/cwd) |
| webfetch/download/httpreq가 사설 IP에 접근하도록 허용 |
|
| mysql 도구가 사설 IP에 접근하도록 허용 |
|
| redis 도구가 사설 IP에 접근하도록 허용 |
|
| ssh/sftp 도구가 사설 IP에 접근하도록 허용 |
|
| DNS over HTTPS를 전역적으로 활성화(webfetch/download/httpreq/dnslookup) |
|
| Encrypted Client Hello를 전역적으로 활성화(webfetch/download/httpreq) |
|
빌드
go build -trimpath -ldflags="-s -w" -o agent-tool .크로스 컴파일:
GOOS=linux GOARCH=amd64 go build -trimpath -ldflags="-s -w" -o agent-tool .
GOOS=darwin GOARCH=arm64 go build -trimpath -ldflags="-s -w" -o agent-tool .
GOOS=windows GOARCH=amd64 go build -trimpath -ldflags="-s -w" -o agent-tool.exe .문제 해결
깨진 텍스트(인코딩 문제)
한국어, 일본어 또는 기타 비ASCII 텍스트가 깨진 문자로 표시되는 경우:
옵션 1: .editorconfig에 charset을 추가합니다:
[*]
charset = euc-kr옵션 2: 환경 변수 설정(영구적):
setx AGENT_TOOL_FALLBACK_ENCODING EUC-KR # Windows
export AGENT_TOOL_FALLBACK_ENCODING=EUC-KR # Linux옵션 3: CLI 플래그(세션별):
agent-tool --fallback-encoding EUC-KR에이전트용 기본 제공 도움말
agent-tool에는 에이전트가 사용법 안내를 위해 호출할 수 있는 agent_tool_help 도구가 포함되어 있습니다. 에이전트가 인코딩 경고나 깨진 텍스트를 발견하면 다음을 호출할 수 있습니다:
{ "tool": "agent_tool_help", "arguments": { "topic": "encoding" } }사용 가능한 주제: overview, encoding, indentation, tools, troubleshooting
보안
agent-tool은 강력한 시스템 접근 권한(SSH, MySQL, Redis, 파일 작업, HTTP 요청)을 제공합니다. AI 코딩 에이전트와 함께 사용할 때는 프롬프트 인젝션 위험에 유의하세요:
SSRF 보호: 클라우드 메타데이터 IP(169.254.x.x, fe80::/10)는 설정과 관계없이 항상 차단됩니다. 사설 IP 접근은
set_config(allow_http_private,allow_mysql_private,allow_redis_private,allow_ssh_private)를 통해 프로토콜별로 구성할 수 있습니다.DLP(데이터 유출 방지): 모든 아웃바운드 HTTP 요청 본문에서 민감한 데이터 패턴(PEM 개인 키, AWS 액세스 키, GitHub/GitLab 토큰, Slack 토큰, .env 파일 덤프)을 검사하고 전송 전에 차단합니다.
프롬프트 인젝션 경고: 모든 사설 IP 연결은 사용자와 AI 에이전트 모두에게 보이는 보안 경고를 표시하여, 가져온 웹 콘텐츠로부터의 프롬프트 인젝션 공격을 감지하는 데 도움을 줍니다.
Zip Slip 보호:
../경로 탐색이 포함된 아카이브 항목은 차단됩니다(zip 및 tar 모두).Zip Bomb 보호: 단일 파일 제한(1GB), 전체 추출 제한(5GB).
심볼릭 링크: 기본적으로 건너뜁니다.
set_config allow_symlinks=true로 활성화할 수 있습니다(tar 전용, zip 심볼릭 링크는 항상 건너뜀). 활성화된 경우에도 출력 디렉터리 외부를 대상으로 하는 심볼릭 링크는 차단됩니다.파일 크기 제한: 최대 파일 크기를 구성할 수 있으며(기본 100MB) 대용량 파일로 인한 OOM을 방지합니다.
set_config max_file_size_mb=N으로 조정할 수 있습니다.인코딩 안전성: chardet는 메모리 효율을 위해 전체 파일이 아닌 64KB 샘플을 사용합니다.
최대 보안을 위해, 특히 SSH 명령, 외부 URL에 대한 HTTP 요청, 데이터베이스 쿼리의 경우 AI 에이전트의 도구 호출을 승인하기 전에 검토하십시오.
기술 스택
언어: Go
인코딩: saintfish/chardet + golang.org/x/text
배포: 단일 바이너리(크로스 컴파일)
라이선스
Available Tools
11 toolsagent_tool_help
Returns usage guide for agent-tool. Call this when you encounter encoding warnings, garbled text, or need to understand agent-tool features. Topics: overview, encoding, indentation, tools, debug, analyze, troubleshooting.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | Help topic. Available: overview, encoding, indentation, tools, debug, analyze, memtool, wintool, codegraph, troubleshooting. Empty = overview |
editA
Replace exact text in a file. Preserves encoding and local line endings, adapts indentation using the file and .editorconfig, and supports dry-run plus hash-guarded edits.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Alias for file_path | |
| dry_run | No | Preview only; default false | |
| file_path | No | File path; relative to workspace/MCP root | |
| new_string | No | Replacement text; must differ from old_string | |
| old_string | No | Exact text to find in the file | |
| new_content | No | Alias for new_string | |
| old_content | No | Alias for old_string | |
| replace_all | No | Replace every match; default false | |
| indent_style | No | tabs or spaces-N; default auto-detect | |
| expected_hash | No | Expected SHA-256; mismatch rejects edit |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses several non-obvious traits: preserves encoding and local line endings, adapts indentation via .editorconfig, and supports dry-run and hash-guarded edits. It does not detail failure modes or response format, but for a mutation tool it offers respectable transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tight sentence that front-loads the core action ('Replace exact text in a file') and packs three behavioral notes into a compact clause. Every phrase earns its place with zero fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is moderately complex with 10 parameters, but all are fully documented in the schema. The description covers key behavioral aspects (encoding, line endings, indentation, dry-run, hash). However, it lacks guidance on when to use this tool versus the closely related siblings (write, patch, multiedit), which is a meaningful completeness gap for correct selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description reiterates the purpose of dry_run and expected_hash and adds context about indentation adaptation, but does not add meaning beyond what the schema already documents for the parameters. It neither compensates for gaps nor contradicts the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Replace'), a resource ('a file'), and a distinctive qualifier ('exact text'), clearly separating it from write (new content) and patch (diff-based). It does not name sibling tools, but the exact-text aspect is sufficiently differentiating against the sibling set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for exact text replacement and mentions advanced features (dry-run, hash-guard) that suggest safe editing contexts. However, it provides no explicit guidance on when to use this tool versus write, patch, or multiedit, and offers no exclusion criteria or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
globA
Finds files matching a glob pattern. Supports ** recursive matching and sorts results by modification time (newest first). Defaults to 200 workspace-relative paths and 32768 characters per page. Skips hidden paths and paths excluded by root .gitignore/.ignore or the common generated/vendor policy unless explicitly included. Returns total/has_more/truncated metadata and an opaque next_cursor.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Directory to search. Defaults to configured workspace, MCP client root, or current directory | |
| limit | No | Maximum paths returned per page. Default: 200, Max: 5000 | |
| cursor | No | Opaque continuation cursor returned by a previous glob call | |
| pattern | Yes | Glob pattern to match files (e.g. **/*.go or src/**/*.ts) | |
| include_hidden | No | Traverse hidden directories. Explicit hidden roots are always searched. Default: false | |
| relative_paths | No | Return paths relative to the search directory. Default: true | |
| include_ignored | No | Include paths excluded by .gitignore/.ignore or the common generated/vendor policy. Default: false | |
| max_output_chars | No | Maximum returned text characters. Default: 32768, Max: 131072 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden, and it excels: it discloses sorting by modification time, default limits (200 paths, 32768 chars), skip rules for hidden and ignored paths, and pagination via next_cursor and metadata (total/has_more/truncated). This is thorough and actionable, covering the major behavioral traits an agent needs to anticipate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose, followed by key behaviors and return metadata. Every sentence adds distinct information (recursion, sorting, defaults, exclusions, pagination) with no filler. It is well-structured and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters, no annotations, and no output schema, the description covers the essential usage context: purpose, defaults, skip rules, sorting, and pagination metadata. It clearly states the return includes metadata and a cursor, which is sufficient for an agent to invoke and handle results. Minor gaps exist (e.g., exact shape of the path list) but these are not critical for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value beyond the schema by explaining how parameters interact: e.g., include_hidden affects traversal, include_ignored overrides skip rules, and limit/cursor govern pagination. It also clarifies default behavior (workspace-relative, 200 limit). This enriches parameter understanding without contradicting the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: 'Finds files matching a glob pattern.' It immediately distinguishes from siblings like listdir (directory listing) and grep (content search) by specifying pattern matching and recursive support. This is a specific, unambiguous purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when pattern-based file discovery is needed but does not explicitly state when to prefer this over listdir or grep, nor does it list exclusions (e.g., 'for directory contents, use listdir'). Context is provided via behavior (e.g., default limits, skip rules) but not as routing guidance. It is adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grepA
Regex-search encoding-aware files or directories. Supports context, glob filters, content/file/count modes, ignored-path controls, and bounded pageable output. Directory searches skip detected binaries; explicit files are searched.
| Name | Required | Description | Default |
|---|---|---|---|
| glob | No | Directory file filter, e.g. *.go | |
| path | No | File or directory; defaults to workspace/MCP root/CWD | |
| after | No | Lines after; overrides context | |
| before | No | Lines before; overrides context | |
| cursor | No | Continuation cursor; incompatible with context lines | |
| context | No | Lines before/after; max 1000 | |
| pattern | Yes | Regular expression | |
| file_path | No | Alias for path | |
| recursive | No | Recurse; default true | |
| ignore_case | No | Ignore case | |
| max_results | No | Matches per page; default 100, max 100000 | |
| output_mode | No | content (default), files_with_matches, or count | |
| output_format | No | compact (default) or classic path:line:text | |
| include_hidden | No | Include hidden directories | |
| max_line_chars | No | Per-line cap; default 4000, max 32768 | |
| relative_paths | No | Paths relative to root; directory default true | |
| include_ignored | No | Include ignored/generated/vendor paths | |
| max_output_chars | No | Output cap; default 32768, max 131072 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does a strong job: it discloses encoding-awareness, binary skipping in directories, bounded pagination, ignored-path controls, and output modes. It does not mention rate limits or auth, but for a read-only search tool, this is comprehensive. No contradiction with annotations since none exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose, and every clause adds value (modes, filters, output behavior, binary handling). No fluff, well-structured for quick parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite 18 parameters and no output schema, the description covers the major behavioral areas (search scope, filters, pagination, binary handling). It does not explicitly mention incompatibilities like cursor vs. context, but those are captured in the schema. The description is sufficient for an agent to understand the tool's role and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter. The description adds high-level context (e.g., 'context, glob filters, content/file/count modes') that maps to parameters but does not explain each individually. It does not go beyond the schema, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Regex-search') and resource ('encoding-aware files or directories'), and enumerates key features that distinguish it from siblings like glob (which finds filenames) and read (which reads content). It leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage via feature list but does not explicitly state when to use grep versus alternatives (e.g., 'use for content search, not filename matching'). It does clarify directory vs. explicit file behavior, but lacks direct routing guidance or exclusions, so the agent must infer from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listdirA
Lists directory contents with bounded, pageable output. Default: flat listing, max_depth=3, max_entries=500. When has_more=true, pass next_cursor as cursor to fetch the next page. Filter by type with directories_only or files_only, and by entry-name glob with name_pattern (single) or include (multiple OR patterns, e.g. ["A*", "*.go"]). Use counts_only=true for counts without names, flat=false for a visual tree, and relative_paths=true to save tokens. Skips hidden entries and common build/vendor directories during recursion.
| Name | Required | Description | Default |
|---|---|---|---|
| flat | No | Flat listing without tree connectors (one path per line). Default: true | |
| path | No | Directory to list. Relative paths use the configured workspace or MCP client root | |
| cursor | No | Opaque continuation cursor returned by a previous listdir call | |
| include | No | Additional entry-name glob patterns. An entry is included when any pattern matches | |
| file_path | No | Alias for path | |
| max_depth | No | Maximum depth for traversal. Default: 3 | |
| files_only | No | Return files only: true or false. Default: false | |
| counts_only | No | Return matching directory/file counts without listing names: true or false. Default: false | |
| max_entries | No | Maximum entries to return per page. Default: 500, maximum: 10000 | |
| name_pattern | No | Glob matched against each entry name, for example A* or *.go | |
| relative_paths | No | Show paths relative to the root. Saves tokens: true or false. Default: false | |
| directories_only | No | Return directories only while still traversing them: true or false. Default: false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does a good job: it discloses pagination mechanics, skip behavior for hidden/build/vendor entries, the flat/tree distinction, counting mode, and token-saving relative paths. It does not describe the exact response fields, but it mentions has_more and next_cursor sufficient to drive pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Each sentence carries a distinct responsibility: definition, defaults, pagination, filtering, output modes, skipped entries. There is no filler or repetition, and key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers defaults, pagination, filtering, output modes, and behavioral exclusions, which is a solid level of context. Since there is no output schema, the only minor gap is omitted return record shape, but the provided behavior is enough for a capable agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds relationship semantics beyond the schema: pagination binds has_ more to the cursor parameter, name_pattern versus include as single/multi OR patterns, and counts_only relative_paths as output modifiers. These are not obvious from names alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'lists directory contents' and immediately adds the defining scope: bounded, pageable output. This is a specific verb plus resource and distinguishes the tool from siblings like read, write, and grep, even before opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives practical usage guidance: paginate with cursor when has_more=true, filter with directories_only/files_only, and use counts_only or relative_paths for optimization. It does not explicitly tell an agent when to prefer listdir over sibling tools like glob, but the tool's 'list directory contents' purpose implies the context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
multieditA
Applies multiple old_string -> new_string replacements to a single file in one call. Edits are applied sequentially in order; each edit sees the result of the previous one. Atomic: if any edit fails, the file is not modified at all. Encoding-aware: preserves original file encoding (UTF-8, EUC-KR, Shift-JIS, etc.). Line-ending aware: old_string matches whether the file uses CRLF or LF, and inserted newlines follow the region being edited (mixed-newline files stay intact). Accepts "path" as alias for "file_path". Use dry_run=true to preview all changes without modifying the file.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Alias for file_path | |
| edits | Yes | Ordered list of replacements to apply sequentially | |
| dry_run | No | Preview changes without modifying the file: true or false. Default: false | |
| file_path | No | File to edit. Relative paths use the configured workspace or MCP client root |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does this well. It discloses sequential application, atomic rollback on any failure, encoding preservation, CRLF/LF line-ending awareness, and alias support. These are meaningful behavioral characteristics beyond what the schema shows and are critical for correct agent use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Each sentence earns its place: core function first, then ordering, atomicity, encoding, line endings, alias, and dry-run. It is detailed but compact, and the most important operational facts are front-loaded before the alias and dry-run notes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-edit file mutation tool with no annotations and no output schema, this description is unusually complete: it tells the agent what action, in what order, with what safety guarantees, and how to preview. Return format is not described, but the invocation-relevant behavior is covered thoroughly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by clarifying that old_string matching is encoding- and line-ending-aware, that newlines in inserted text follow the edited region, that path is an alias for file_path, and that dry_run preveview changes. This supplements the schema rather than restating it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Applies multiple old_string -> new_string replacements to a single file'), includes the precise edit primitive, and differentiates itself from siblings like edit by emphasizing multiple replacements, sequential application, and atomicity. An agent can clearly understand what the tool does and roughly how it differs from single-edit or patch alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear use-context: a single file with many ordered replacements, plus a dry_run option for previewing. It does not explicitly name sibling alternatives or state when not to use it, but the description makes the intended scenario obvious and includes an actionable preview-first workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
multireadA
Reads multiple files in a single call to reduce API round-trips. Encoding-aware: auto-detects file encoding for each file. Supports offset/limit for reading specific line ranges. Defaults to 200 lines per file and 32768 characters total across the call. Returns visible per-file and overall truncation metadata with continuation positions. Use file_paths or paths (string array) with global offset/limit, or files (object array) for per-file offset/limit. If a file fails, the error is included in output and remaining files continue. Maximum 50 files per request.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Remove the default per-file line limit. The total character budget still applies. Default: false | |
| files | No | Per-file read ranges. Each entry has path, offset, limit. Takes priority over file_paths | |
| limit | No | Maximum lines per file. Default: 200. Set 0 or all=true to remove the line limit | |
| paths | No | Compatibility alias for file_paths; prefer file_paths | |
| offset | No | Line number to start from (1-based, negative = from end). Default: 1 | |
| file_paths | No | File paths to read. All files use the global offset/limit. Use files for per-file ranges | |
| include_hash | No | Include per-file SHA-256 hashes. Default: false | |
| max_line_chars | No | Maximum characters returned from one line. Default: 4000, Max: 32768 | |
| max_output_chars | No | Maximum total returned text characters across all files. Default: 32768, Max: 131072 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden. It discloses encoding auto-detection, default line and character budgets, truncation metadata with continuation positions, per-file error isolation, and the 50-file cap. This is unusually transparent for a tool with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence contributes a distinct behavior or usage constraint: purpose, encoding, line/character limits, per-file modes, failure handling, and max file count. It is dense but not bloated, and the most important fact is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 9 parameters, no annotations, and no output schema, the description is remarkably complete. It covers defaults, limits, semantics, file failure handling, encoding behavior, and truncation continuation positions, leaving an agent with the practical knowledge needed to invoke it and interpret its results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers 100% of parameters, so the baseline is 3. The description adds value by tying parameters to usage modes: global offset/limit vs per-file files entries, the interaction of all=true with the total character budget, and the 50-file request cap not visible in the schema. These aggregates help an agent pick the right parameter shape.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Reads multiple files in a single call to reduce API round-trips.' This immediately distinguishes it from the single-file 'read' sibling and clearly states the batching purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong contextual guidance: use the tool for reading multiple files efficiently, choose global file_paths/paths vs per-file files objects depending on offset/limit needs, and understand failure/encoding/limit behavior. It does not explicitly name the single-file 'read' tool as the alternative, but the multiple-vs-single distinction is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
patchA
Applies a unified diff patch to a file. Parses @@ hunk headers, verifies context lines, and applies changes. Encoding-aware: preserves original file encoding. Line-ending aware: each line keeps its own ending (a mixed CRLF/LF file is not rewritten) and a file without a trailing newline does not gain one. Use dry_run=true to preview without modifying the file.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Alias for file_path | |
| patch | Yes | Unified diff text (output of the diff tool) | |
| dry_run | No | Preview patch result without modifying the file: true or false. Default: false | |
| file_path | No | File to patch. Relative paths use the configured workspace or MCP client root |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description directly contradicts the provided annotations: it says the tool 'applies changes' and can modify a file, while annotations mark readOnlyHint=true and destructiveHint=false. This is an annotation contradiction, which forces the lowest score regardless of the strong encoding and line-ending details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: it front-loads the primary action, then adds useful encoding/line-ending behavior, and ends with an actionable dry-run usage. Every sentence contributes unique information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool description covers the behavioral full picture: diff format, context verification, encoding preservation, line-ending behavior, and dry-run safety. The confusing annotation contradiction prevents a 5, but as a standalone spec it is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all four parameters clearly, including patch, dry_run, and the path aliases. The description adds little beyond restating that dry_run previews without modifying, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a precise verb-resource pair: 'Applies a unified diff patch to a file.' It further clarifies behavior with hunk parsing and context verification, making it clearly distinct from nearby siblings like edit, write, or multiedit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys a clear use-case: applying unified diff output to a file, with dry_run for preview. It does not explicitly contrast with edit or write, but the diff-specific framing makes the correct context fairly obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
readA
Read text with line numbers or return raster images as ImageContent. Detects common encodings; SVG stays text. Text is bounded and reports truncation/next_offset. Use offset/limit to page; relative paths use the workspace or MCP root.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Disable line cap; character cap remains | |
| path | No | Alias for file_path | |
| limit | No | Line limit; default 400. Use 0 or all=true for no line cap | |
| offset | No | Start line: 1-based integer, negative from end, 'start-end', or [start,end]; default 1 | |
| end_line | No | Inclusive end with start_line | |
| file_path | No | Absolute or workspace/MCP-root-relative file path | |
| start_line | No | Alias for offset | |
| include_hash | No | Include SHA-256; default true | |
| max_line_chars | No | Per-line character cap; default 4000, max 32768 | |
| max_output_chars | No | Output character cap; default 32768, max 131072 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden and addresses key behaviors: encoding detection, SVG staying text, bounded output with truncation/next_offset reporting, and image results as ImageContent. It does not discuss permissions or failure modes, but for a read operation it discloses the traits most likely to surprise an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences front-load the core behavior and pack each line with non-redundant detail (images, encoding, truncation, paging, paths). No sentence is wasted and the structure lets an agent scan quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, 0-required, no-output-schema tool, the description covers the most important invocation concerns: return type, encoding edge case, truncation reporting, paging, and path base. It does not spell out all optional parameters, but those are fully documented in the schema, so an agent can call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds value beyond the schema by explaining paging semantics ('Use offset/limit to page') and relative path resolution ('workspace or MCP root'). This helps disambiguate offset/limit and file_path without repeating every schema field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action ('Read text') and a clear resource, and covers the image-return case ('raster images as ImageContent'), going beyond a bare tautology. It does not explicitly name a sibling such as multiread to differentiate, but the core behavior is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives actionable context for paging ('Use offset/limit to page') and path interpretation ('relative paths use the workspace or MCP root'), which helps an agent decide how to call it. However, it provides no explicit guidance on when to prefer a sibling like multiread or grep, so the when-vs-alternatives guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toolboxC
Discover and call tools without loading every schema. Use describe, preferably compact with tool_operation, then call with arguments. Reuse schema_handle. output retrieves preserved paged command output. list shows tools; enable/disable/profile manage direct bindings. Profiles: core-lite, core, coding, remote, analysis, full.
| Name | Required | Description | Default |
|---|---|---|---|
| tool | No | Target tool for describe/call | |
| tools | No | Tool names for enable/disable | |
| groups | No | Groups for enable/disable: core, file, coding, system, remote, data, analysis, windows | |
| compact | No | Return a reduced describe schema | |
| profile | No | Profile to add; core-lite, core, coding, remote, analysis, or full. core-lite is smallest at startup | |
| arguments | No | Target arguments for call; describe first if unknown | |
| operation | No | list (default), describe, call, output, enable, disable, or profile | |
| output_id | No | Raw output ID for output | |
| output_offset | No | Output character offset; default 0 | |
| schema_handle | No | Prior handle; short acknowledgement if unchanged | |
| tool_operation | No | Operation-specific compact schema, e.g. execute | |
| output_max_chars | No | Output character limit; default 32768, max 130048 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that output is paged and preserved, that describe can be compact, and that profile management exists. However, it does not reveal side effects of enable/disable/profile operations (like whether they alter persistent state), auth requirements, or any output format details. For a tool that can modify bindings and profiles, more transparency is needed, but the basic behavioral facts are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but poorly structured: it front-loads operational guidance but then lists operations and profiles in an unorganized way. Each sentence adds info, but the flow is jumbled, mixing instructions, operation list, and profile list without clear separation. It's not concise enough for the complexity; ideally it would use a structured list for operations and profiles.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (12 parameters, multiple operations, nested objects), the description covers the high-level workflow and mentions key parameters and profiles. However, it lacks details on return values (no output schema), side effects of enable/disable/profile, and edge cases like how output_id relates to output operation. It is minimally adequate but leaves gaps that an agent might need to infer or test.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter already has a description in the schema. The description adds some usage context around certain parameters (e.g., 'compact' and 'tool_operation' relationship, 'profile' list), but it doesn't add meaning beyond the schema for most parameters. It does clarify the default operation is 'list' and that 'schema_handle' might return a short acknowledgement, but that's marginal. With full coverage, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description lists multiple operations ('list', 'describe', 'call', etc.) and the tool name 'toolbox' hints at a dispatch tool, but the core purpose is not stated as a single verb+resource. It bundles several operations, making the primary purpose ambiguous. The list of sibling tools (read, write, edit) are specific file operations, while this one is a general dispatcher, but that distinction is implied rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives some guidance on when to use certain operations: 'Use describe, preferably compact with tool_operation, then call with arguments' and 'output retrieves preserved paged command output'. However, it does not explicitly contrast with alternatives or state exclusions. It implies that for performance, compact describe is preferred, but it doesn't say when NOT to use this tool vs. siblings; it assumes the agent knows this is a dispatch tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
writeA
Create or overwrite a file. Preserves existing encoding, uses .editorconfig for new files, and creates parent directories.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Alias for file_path | |
| content | Yes | Content to write to the file | |
| file_path | No | File path; relative to workspace/MCP root |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does well by revealing important side effects: overwriting, preserving existing encoding, applying .editorconfig for new files, and creating parent directories. It stops short of mentioning irreversibility risks, permissions, or failure behavior, but the core destructive nature is communicated through 'overwrite.'
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence that front-loads the primary action ('Create or overwrite a file') and then adds three compact behavioral details. Every clause earns its place, with no filler or repetition of schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple write tool, the description covers the essential contextual details: overwrite semantics, encoding handling, editorconfig behavior, and directory creation. It lacks an explicit note about destructive impact or comparison to edit/patch, but the schema covers parameter requirements and the description provides enough behavioral context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the structured fields already document content, file_path, and path as an alias. The description adds no parameter-specific detail beyond the schema, which matches the baseline of 3; no compensation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Create or overwrite a file') and further specifies exact behavior: preserving encoding, applying .editorconfig for new files, and creating parent directories. This clearly identifies it as a whole-file write operation and differentiates it from siblings like edit, patch, and multiedit, which imply targeted changes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool—creating new files or fully overwriting existing ones—but does not explicitly say when not to use it or mention alternatives such as edit/patch for partial modifications. An agent can infer the use case from 'Create or overwrite a file,' but there is no direct routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v1.0.2- Changed
agent_tool_help1 field changed- changed
Input schema / properties / topic / descriptionPrevious value: -"Help topic. Available: overview, encoding, indentation, tools, debug, analyze, memtool, wintool, codegraph, ipc, troubleshooting. Empty = overview"New value: +"Help topic. Available: overview, encoding, indentation, tools, debug, analyze, memtool, wintool, codegraph, troubleshooting. Empty = overview"
6 tool updates
v0.9.7- Changed
edit6 fields changed- changed
Input schema / properties / dry_run / descriptionPrevious value: -"Preview changes without modifying the file: true or false. Default: false"New value: +"Preview only; default false" - changed
Input schema / properties / expected_hash / descriptionPrevious value: -"Optional SHA-256 hash of the file. If provided and mismatched, edit is rejected (optimistic concurrency)."New value: +"Expected SHA-256; mismatch rejects edit" - changed
Input schema / properties / file_path / descriptionPrevious value: -"File to edit. Relative paths use the configured workspace or MCP client root"New value: +"File path; relative to workspace/MCP root" - changed
Input schema / properties / indent_style / descriptionPrevious value: -"Override indentation style. Values: tabs or spaces-N (e.g. spaces-4). Empty = auto-detect (default)"New value: +"tabs or spaces-N; default auto-detect" - changed
Input schema / properties / new_string / descriptionPrevious value: -"Replacement text (must differ from old_string)"New value: +"Replacement text; must differ from old_string" - changed
Input schema / properties / replace_all / descriptionPrevious value: -"Replace all occurrences instead of just the first: true or false. Default: false"New value: +"Replace every match; default false"
- Changed
glob1 field changed- changed
Input schema / properties / include_ignored / descriptionPrevious value: -"Traverse generated/vendor directories such as node_modules, vendor, target, build, and dist. Default: false"New value: +"Include paths excluded by .gitignore/.ignore or the common generated/vendor policy. Default: false"
- Changed
grep17 fields changed- changed
Input schema / properties / after / descriptionPrevious value: -"Lines after each match. Overrides context. Default: 0, Max: 1000"New value: +"Lines after; overrides context" - changed
Input schema / properties / before / descriptionPrevious value: -"Lines before each match. Overrides context. Default: 0, Max: 1000"New value: +"Lines before; overrides context" - changed
Input schema / properties / context / descriptionPrevious value: -"Lines before and after each match (like grep -C). Default: 0, Max: 1000"New value: +"Lines before/after; max 1000" - changed
Input schema / properties / cursor / descriptionPrevious value: -"Opaque continuation cursor returned by a previous grep call. Not supported with context lines"New value: +"Continuation cursor; incompatible with context lines" - changed
Input schema / properties / glob / descriptionPrevious value: -"Glob pattern to filter files (e.g. *.go). Only used when path is a directory"New value: +"Directory file filter, e.g. *.go" - changed
Input schema / properties / ignore_case / descriptionPrevious value: -"Case-insensitive search. Default: false"New value: +"Ignore case" - changed
Input schema / properties / include_hidden / descriptionPrevious value: -"Search hidden directories. Explicitly provided hidden roots are always searched. Default: false"New value: +"Include hidden directories" - changed
Input schema / properties / include_ignored / descriptionPrevious value: -"Search common generated/vendor directories instead of skipping them. Default: false"New value: +"Include ignored/generated/vendor paths" - changed
Input schema / properties / max_line_chars / descriptionPrevious value: -"Maximum characters per matching/context line. Default: 4000, Max: 32768"New value: +"Per-line cap; default 4000, max 32768" - changed
Input schema / properties / max_output_chars / descriptionPrevious value: -"Maximum total result characters. Default: 32768, Max: 131072"New value: +"Output cap; default 32768, max 131072" - changed
Input schema / properties / max_results / descriptionPrevious value: -"Maximum matching lines/files per page. Default: 100, Max: 100000"New value: +"Matches per page; default 100, max 100000" - changed
Input schema / properties / output_format / descriptionPrevious value: -"Content layout: compact (group matches by file, default) or classic (path:line:text on every line)"New value: +"compact (default) or classic path:line:text" - changed
Input schema / properties / output_mode / descriptionPrevious value: -"Output mode: content (default), files_with_matches, or count"New value: +"content (default), files_with_matches, or count" - changed
Input schema / properties / path / descriptionPrevious value: -"File or directory to search. Defaults to configured workspace, MCP client root, or current directory"New value: +"File or directory; defaults to workspace/MCP root/CWD" - changed
Input schema / properties / pattern / descriptionPrevious value: -"Regular expression pattern to search for"New value: +"Regular expression" - changed
Input schema / properties / recursive / descriptionPrevious value: -"Recurse into subdirectories. Default: true"New value: +"Recurse; default true" - changed
Input schema / properties / relative_paths / descriptionPrevious value: -"Return paths relative to the search root. Default: true for directory searches"New value: +"Paths relative to root; directory default true"
- Changed
read11 fields changed- changed
Input schema / properties / all / descriptionPrevious value: -"Remove the default line limit. The max_output_chars safety budget still applies. Default: false"New value: +"Disable line cap; character cap remains" - changed
Input schema / properties / end_line / descriptionPrevious value: -"Inclusive end line used with start_line"New value: +"Inclusive end with start_line" - changed
Input schema / properties / file_path / descriptionPrevious value: -"Absolute or workspace-relative path to the file to read"New value: +"Absolute or workspace/MCP-root-relative file path" - changed
Input schema / properties / include_hash / descriptionPrevious value: -"Include SHA-256 for optimistic edit concurrency. Default: true"New value: +"Include SHA-256; default true" - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum lines to return. Default: 400. Set 0 or all=true to remove the line limit; the character budget still applies"New value: +"Line limit; default 400. Use 0 or all=true for no line cap" - changed
Input schema / properties / max_line_chars / descriptionPrevious value: -"Maximum characters returned from one line. Default: 4000, Max: 32768"New value: +"Per-line character cap; default 4000, max 32768" - changed
Input schema / properties / max_output_chars / descriptionPrevious value: -"Maximum returned text characters. Default: 32768, Max: 131072"New value: +"Output character cap; default 32768, max 131072" - changed
Input schema / properties / offset / descriptionPrevious value: -"Line offset. Integer (1-based, negative=from end), string range 'start-end', or [start,end] array. Default: 1"New value: +"Start line: 1-based integer, negative from end, 'start-end', or [start,end]; default 1" - added
Input schema / properties / offset / typeAdded value: +"integer" - changed
Input schema / properties / path / descriptionPrevious value: -"Compatibility alias for file_path; prefer file_path"New value: +"Alias for file_path" - changed
Input schema / properties / start_line / descriptionPrevious value: -"Compatibility alias for offset; prefer offset"New value: +"Alias for offset"
- Changed
toolbox12 fields changed- changed
Input schema / properties / arguments / descriptionPrevious value: -"Target tool arguments for operation=call. Use operation=describe first when the schema is unknown"New value: +"Target arguments for call; describe first if unknown" - changed
Input schema / properties / compact / descriptionPrevious value: -"Return a reduced input schema: true or false. Pair with tool_operation for operation-specific fields"New value: +"Return a reduced describe schema" - changed
Input schema / properties / groups / descriptionPrevious value: -"Tool groups to enable or disable: core, file, coding, system, remote, data, analysis, windows"New value: +"Groups for enable/disable: core, file, coding, system, remote, data, analysis, windows" - changed
Input schema / properties / operation / descriptionPrevious value: -"Operation: list (default), describe, call, output, enable, disable, profile. Prefer describe/call because they work even when the MCP client ignores dynamic tool-list changes"New value: +"list (default), describe, call, output, enable, disable, or profile" - changed
Input schema / properties / output_id / descriptionPrevious value: -"Preserved raw command output ID for operation=output"New value: +"Raw output ID for output" - changed
Input schema / properties / output_max_chars / descriptionPrevious value: -"Maximum raw-output characters returned by operation=output. Default: 32768, Max: 130048"New value: +"Output character limit; default 32768, max 130048" - changed
Input schema / properties / output_offset / descriptionPrevious value: -"Character offset for operation=output paging. Default: 0"New value: +"Output character offset; default 0" - changed
Input schema / properties / profile / descriptionPrevious value: -"Profile for operation=profile: core, coding, remote, analysis, full"New value: +"Profile to add; core-lite, core, coding, remote, analysis, or full. core-lite is smallest at startup" - changed
Input schema / properties / schema_handle / descriptionPrevious value: -"Handle returned by an earlier describe; matching handles return only an unchanged acknowledgement"New value: +"Prior handle; short acknowledgement if unchanged" - changed
Input schema / properties / tool / descriptionPrevious value: -"Single tool name for operation=describe or call"New value: +"Target tool for describe/call" - changed
Input schema / properties / tool_operation / descriptionPrevious value: -"Target tool operation for compact describe, for example execute or upload"New value: +"Operation-specific compact schema, e.g. execute" - changed
Input schema / properties / tools / descriptionPrevious value: -"Individual tool names to enable or disable"New value: +"Tool names for enable/disable"
- Changed
write1 field changed- changed
Input schema / properties / file_path / descriptionPrevious value: -"File to write. Relative paths use the configured workspace or MCP client root"New value: +"File path; relative to workspace/MCP root"
1 tool update
v0.9.6- Changed
toolbox3 fields changed- added
Input schema / properties / compactAdded value: +{ + "description": "Return a reduced input schema: true or false. Pair with tool_operation for operation-specific fields", + "type": "boolean" +} - added
Input schema / properties / schema_handleAdded value: +{ + "description": "Handle returned by an earlier describe; matching handles return only an unchanged acknowledgement", + "type": "string" +} - added
Input schema / properties / tool_operationAdded value: +{ + "description": "Target tool operation for compact describe, for example execute or upload", + "type": "string" +}
53 tool updates
v0.9.5- Removed
analyze - Removed
backup - Removed
bash - Removed
checksum - Removed
codegraph - Removed
compress - Removed
convert_encoding - Removed
copy - Removed
debug - Removed
decompress - Removed
delete - Removed
diff - Removed
dnslookup - Removed
download - Changed
edit3 fields changed- added
Input schema / properties / dry_run / typeAdded value: +"boolean" - changed
Input schema / properties / file_path / descriptionPrevious value: -"Absolute path to the file to edit"New value: +"File to edit. Relative paths use the configured workspace or MCP client root" - added
Input schema / properties / replace_all / typeAdded value: +"boolean"
- Removed
envvar - Removed
externalip - Removed
file_info - Removed
find_tools - Removed
firewall - Changed
glob8 fields changed- added
Input schema / properties / cursorAdded value: +{ + "description": "Opaque continuation cursor returned by a previous glob call", + "type": "string" +} - added
Input schema / properties / include_hiddenAdded value: +{ + "description": "Traverse hidden directories. Explicit hidden roots are always searched. Default: false", + "type": "boolean" +} - added
Input schema / properties / include_ignoredAdded value: +{ + "description": "Traverse generated/vendor directories such as node_modules, vendor, target, build, and dist. Default: false", + "type": "boolean" +} - added
Input schema / properties / limitAdded value: +{ + "description": "Maximum paths returned per page. Default: 200, Max: 5000", + "type": "integer" +} - added
Input schema / properties / max_output_charsAdded value: +{ + "description": "Maximum returned text characters. Default: 32768, Max: 131072", + "type": "integer" +} - changed
Input schema / properties / path / descriptionPrevious value: -"Directory to search in (absolute path). Defaults to current directory if empty"New value: +"Directory to search. Defaults to configured workspace, MCP client root, or current directory" - changed
Input schema / properties / relative_paths / descriptionPrevious value: -"Return paths relative to the search directory instead of absolute paths. Saves tokens in output: true or false. Default: false"New value: +"Return paths relative to the search directory. Default: true" - added
Input schema / properties / relative_paths / typeAdded value: +[ + "null", + "boolean" +]
- Changed
grep21 fields changed- changed
Input schema / properties / after / descriptionPrevious value: -"Lines of context after each match (like grep -A). Overrides context. Default: 0"New value: +"Lines after each match. Overrides context. Default: 0, Max: 1000" - added
Input schema / properties / after / typeAdded value: +"integer" - changed
Input schema / properties / before / descriptionPrevious value: -"Lines of context before each match (like grep -B). Overrides context. Default: 0"New value: +"Lines before each match. Overrides context. Default: 0, Max: 1000" - added
Input schema / properties / before / typeAdded value: +"integer" - changed
Input schema / properties / context / descriptionPrevious value: -"Lines of context before and after each match (like grep -C). Default: 0"New value: +"Lines before and after each match (like grep -C). Default: 0, Max: 1000" - added
Input schema / properties / context / typeAdded value: +"integer" - added
Input schema / properties / cursorAdded value: +{ + "description": "Opaque continuation cursor returned by a previous grep call. Not supported with context lines", + "type": "string" +} - changed
Input schema / properties / ignore_case / descriptionPrevious value: -"Case insensitive search: true or false. Default: false"New value: +"Case-insensitive search. Default: false" - added
Input schema / properties / ignore_case / typeAdded value: +"boolean" - added
Input schema / properties / include_hiddenAdded value: +{ + "description": "Search hidden directories. Explicitly provided hidden roots are always searched. Default: false", + "type": "boolean" +} - added
Input schema / properties / include_ignoredAdded value: +{ + "description": "Search common generated/vendor directories instead of skipping them. Default: false", + "type": "boolean" +} - added
Input schema / properties / max_line_charsAdded value: +{ + "description": "Maximum characters per matching/context line. Default: 4000, Max: 32768", + "type": "integer" +} - added
Input schema / properties / max_output_charsAdded value: +{ + "description": "Maximum total result characters. Default: 32768, Max: 131072", + "type": "integer" +} - changed
Input schema / properties / max_results / descriptionPrevious value: -"Maximum number of matching lines/files to return. Default: 100"New value: +"Maximum matching lines/files per page. Default: 100, Max: 100000" - added
Input schema / properties / max_results / typeAdded value: +"integer" - added
Input schema / properties / output_formatAdded value: +{ + "description": "Content layout: compact (group matches by file, default) or classic (path:line:text on every line)", + "type": "string" +} - changed
Input schema / properties / output_mode / descriptionPrevious value: -"Output mode: 'content' (matching lines with path:line:text, default), 'files_with_matches' (file paths only), 'count' (match count per file)"New value: +"Output mode: content (default), files_with_matches, or count" - changed
Input schema / properties / path / descriptionPrevious value: -"File or directory to search in (absolute path). Defaults to current directory"New value: +"File or directory to search. Defaults to configured workspace, MCP client root, or current directory" - changed
Input schema / properties / recursive / descriptionPrevious value: -"Recurse into subdirectories: true or false. Default: true"New value: +"Recurse into subdirectories. Default: true" - added
Input schema / properties / recursive / typeAdded value: +[ + "null", + "boolean" +] - added
Input schema / properties / relative_pathsAdded value: +{ + "description": "Return paths relative to the search root. Default: true for directory searches", + "type": [ + "null", + "boolean" + ] +}
- Removed
httpreq - Removed
ipc - Removed
jsonquery - Changed
listdir12 fields changed- added
Input schema / properties / counts_onlyAdded value: +{ + "description": "Return matching directory/file counts without listing names: true or false. Default: false", + "type": "boolean" +} - added
Input schema / properties / cursorAdded value: +{ + "description": "Opaque continuation cursor returned by a previous listdir call", + "type": "string" +} - added
Input schema / properties / directories_onlyAdded value: +{ + "description": "Return directories only while still traversing them: true or false. Default: false", + "type": "boolean" +} - added
Input schema / properties / files_onlyAdded value: +{ + "description": "Return files only: true or false. Default: false", + "type": "boolean" +} - added
Input schema / properties / includeAdded value: +{ + "description": "Additional entry-name glob patterns. An entry is included when any pattern matches", + "items": { + "type": "string" + }, + "type": [ + "null", + "array" + ] +} - changed
Input schema / properties / max_depth / descriptionPrevious value: -"Maximum depth for tree traversal. Default: 3"New value: +"Maximum depth for traversal. Default: 3" - added
Input schema / properties / max_depth / typeAdded value: +"integer" - added
Input schema / properties / max_entriesAdded value: +{ + "description": "Maximum entries to return per page. Default: 500, maximum: 10000", + "type": "integer" +} - added
Input schema / properties / name_patternAdded value: +{ + "description": "Glob matched against each entry name, for example A* or *.go", + "type": "string" +} - changed
Input schema / properties / path / descriptionPrevious value: -"Absolute path to the directory to list"New value: +"Directory to list. Relative paths use the configured workspace or MCP client root" - changed
Input schema / properties / relative_paths / descriptionPrevious value: -"Show the root as '.' instead of the full absolute path. Saves tokens in output: true or false. Default: false"New value: +"Show paths relative to the root. Saves tokens: true or false. Default: false" - added
Input schema / properties / relative_paths / typeAdded value: +"boolean"
- Removed
memtool - Removed
mkdir - Changed
multiedit2 fields changed- added
Input schema / properties / dry_run / typeAdded value: +"boolean" - changed
Input schema / properties / file_path / descriptionPrevious value: -"Absolute path to the file to edit"New value: +"File to edit. Relative paths use the configured workspace or MCP client root"
- Changed
multiread14 fields changed- added
Input schema / properties / allAdded value: +{ + "description": "Remove the default per-file line limit. The total character budget still applies. Default: false", + "type": "boolean" +} - changed
Input schema / properties / file_paths / descriptionPrevious value: -"List of absolute file paths to read. All files use the global offset/limit. Use 'files' instead for per-file ranges"New value: +"File paths to read. All files use the global offset/limit. Use files for per-file ranges" - changed
Input schema / properties / files / items / properties / limit / descriptionPrevious value: -"Max lines to read. Default: 0 (all)"New value: +"Max lines to read. Default: 200. Set 0 to remove the line limit" - added
Input schema / properties / files / items / properties / limit / typeAdded value: +[ + "null", + "integer" +] - added
Input schema / properties / files / items / properties / offset / typeAdded value: +[ + "null", + "integer" +] - changed
Input schema / properties / files / items / properties / path / descriptionPrevious value: -"Absolute file path"New value: +"Absolute or workspace-relative file path" - added
Input schema / properties / include_hashAdded value: +{ + "description": "Include per-file SHA-256 hashes. Default: false", + "type": "boolean" +} - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of lines to read per file. Default: 0 (all)"New value: +"Maximum lines per file. Default: 200. Set 0 or all=true to remove the line limit" - added
Input schema / properties / limit / typeAdded value: +[ + "null", + "integer" +] - added
Input schema / properties / max_line_charsAdded value: +{ + "description": "Maximum characters returned from one line. Default: 4000, Max: 32768", + "type": "integer" +} - added
Input schema / properties / max_output_charsAdded value: +{ + "description": "Maximum total returned text characters across all files. Default: 32768, Max: 131072", + "type": "integer" +} - changed
Input schema / properties / offset / descriptionPrevious value: -"Line number to start reading from (1-based). Negative = from end (e.g. -5 = last 5 lines). Default: 1"New value: +"Line number to start from (1-based, negative = from end). Default: 1" - added
Input schema / properties / offset / typeAdded value: +[ + "null", + "integer" +] - changed
Input schema / properties / paths / descriptionPrevious value: -"Alias for file_paths"New value: +"Compatibility alias for file_paths; prefer file_paths"
- Removed
mysql - Changed
patch2 fields changed- added
Input schema / properties / dry_run / typeAdded value: +"boolean" - changed
Input schema / properties / file_path / descriptionPrevious value: -"Absolute path to the file to patch"New value: +"File to patch. Relative paths use the configured workspace or MCP client root"
- Removed
portcheck - Removed
procexec - Removed
prockill - Removed
proclist - Changed
read13 fields changed- added
Input schema / properties / allAdded value: +{ + "description": "Remove the default line limit. The max_output_chars safety budget still applies. Default: false", + "type": "boolean" +} - changed
Input schema / properties / end_line / descriptionPrevious value: -"End line number (1-based, inclusive). Sets limit = end_line - start_line + 1 when used with start_line"New value: +"Inclusive end line used with start_line" - added
Input schema / properties / end_line / typeAdded value: +[ + "null", + "integer" +] - changed
Input schema / properties / file_path / descriptionPrevious value: -"Absolute or relative path to the file to read"New value: +"Absolute or workspace-relative path to the file to read" - added
Input schema / properties / include_hashAdded value: +{ + "description": "Include SHA-256 for optimistic edit concurrency. Default: true", + "type": [ + "null", + "boolean" + ] +} - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of lines to read. Default: 0 (all)"New value: +"Maximum lines to return. Default: 400. Set 0 or all=true to remove the line limit; the character budget still applies" - added
Input schema / properties / limit / typeAdded value: +[ + "null", + "integer" +] - added
Input schema / properties / max_line_charsAdded value: +{ + "description": "Maximum characters returned from one line. Default: 4000, Max: 32768", + "type": "integer" +} - added
Input schema / properties / max_output_charsAdded value: +{ + "description": "Maximum returned text characters. Default: 32768, Max: 131072", + "type": "integer" +} - changed
Input schema / properties / offset / descriptionPrevious value: -"Line offset. Integer (1-based, negative=from end), string range 'start-end', or [start,end] array. Default: 0 (all)"New value: +"Line offset. Integer (1-based, negative=from end), string range 'start-end', or [start,end] array. Default: 1" - changed
Input schema / properties / path / descriptionPrevious value: -"Alias for file_path"New value: +"Compatibility alias for file_path; prefer file_path" - changed
Input schema / properties / start_line / descriptionPrevious value: -"Alias for offset (1-based line number to start reading from)"New value: +"Compatibility alias for offset; prefer offset" - added
Input schema / properties / start_line / typeAdded value: +[ + "null", + "integer" +]
- Removed
redis - Removed
regexreplace - Removed
rename - Removed
set_config - Removed
sftp - Removed
sloc - Removed
ssh - Removed
sysinfo - Removed
tlscheck - Removed
tomlquery - Added
toolbox - Removed
webfetch - Removed
websearch - Removed
wintool - Changed
write1 field changed- changed
Input schema / properties / file_path / descriptionPrevious value: -"Absolute path to the file to write"New value: +"File to write. Relative paths use the configured workspace or MCP client root"
- Removed
yamlquery
53 tool updates
v0.8.7- Added
agent_tool_help - Added
analyze - Added
backup - Added
bash - Added
checksum - Added
codegraph - Added
compress - Added
convert_encoding - Added
copy - Added
debug - Added
decompress - Added
delete - Added
diff - Added
dnslookup - Added
download - Added
edit - Added
envvar - Added
externalip - Added
file_info - Added
find_tools - Added
firewall - Added
glob - Added
grep - Added
httpreq - Added
ipc - Added
jsonquery - Added
listdir - Added
memtool - Added
mkdir - Added
multiedit - Added
multiread - Added
mysql - Added
patch - Added
portcheck - Added
procexec - Added
prockill - Added
proclist - Added
read - Added
redis - Added
regexreplace - Added
rename - Added
set_config - Added
sftp - Added
sloc - Added
ssh - Added
sysinfo - Added
tlscheck - Added
tomlquery - Added
webfetch - Added
websearch - Added
wintool - Added
write - Added
yamlquery
TDQS
Scored across 11 tools
edit/multiedit/patch and read/multiread are closely related, but the descriptions clearly distinguish single-vs-multiple edits, direct reading, and unified-diff application. glob, grep, and listdir have distinct search/listing roles, while toolbox/help are recognizably meta tools.
Most tool names are lowercase single tokens, and multiedit/multiread follow a consistent compound pattern, but agent_tool_help uses underscored prefixed naming and listdir is not separated as list_dir. There is no clear verb_noun convention, though the set remains readable.
11 tools is well-scoped for a file/coding-agent MCP. The core file operations are joined by useful multi-file and meta-discovery helpers, with no excessive tool count.
The surface covers reading, writing, editing, patching, searching, listing, and multi-file operations. It lacks explicit delete, rename, or move tools, which is a minor gap for full file lifecycle coverage.
Maintenance
Related MCP Connectors
Shared control plane for AI coding agents — tasks, memory, decisions, file locks. 12 tools.
13 free utility tools for AI agents: web text, markdown, hashing, IDs, dates, units, JSON.
Image & PDF tools for AI agents: compress, convert, resize, PDF, AI vision, pipeline.
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables secure local filesystem operations and interactive terminal sessions for AI assistants. Provides 12 tools for file management, directory operations, code searching, and running interactive REPLs with security protections.9 npmMIT
- AlicenseNot gradedqualityDmaintenanceProvides AI assistants with 28 developer tools across file, git, code analysis, HTTP, and system domains, enabling tasks like file editing, repository management, code analysis, and shell command execution.11 npm2MIT
- AlicenseAqualityDmaintenanceEnables AI agents to autonomously navigate a codebase by listing directories, reading files, searching code, and running whitelisted commands.57 npmISC
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to safely interact with the file system through a set of tools for reading, writing, deleting, copying, moving files, and managing directories.-