Apktool MCP Server
apktool-mcp-server(Zin의 역엔지니어링 MCP 제품군의 일부)
⚡ 클로드와 같은 LLM을 사용하여 Android APK를 분석하기 위해 apktool 위에 구축된 완전 자동화된 MCP 서버입니다. 이를 통해 취약점을 발견하고, 매니페스트를 분석하고, 손쉽게 리버스 엔지니어링을 수행할 수 있습니다.
AI 도구를 사용하여 생성된 이미지입니다.
🤖 apktool-mcp-server는 무엇인가요?
apktool-mcp-server는 Claude와 같은 LLM에 대한 라이브 리버스 엔지니어링 지원을 제공하기 위해 Model Context Protocol(MCP) 과 직접 통합되는 Apk Tool 용 MCP 서버입니다.
생각해 보세요: "디컴파일 → 컨텍스트 인식 코드 검토 → AI 추천" - 모두 실시간으로 진행됩니다.
데모를 보세요!
https://github.com/user-attachments/assets/d50251b8-6b1c-4341-b18e-ae54eb24a847
CTF 해결
https://github.com/user-attachments/assets/c783a604-a636-4e70-9fa8-37e3d219b20b
Related MCP server: ghidraMCP
Zin MCP Suite의 다른 프로젝트
현재 MCP 도구
사용 가능한 MCP 도구는 다음과 같습니다.
build_apk()— 디코딩된 APKTool 프로젝트에서 APK를 빌드합니다.get_manifest()— 디코딩된 APK 프로젝트에서 AndroidManifest.xml 콘텐츠를 가져옵니다.get_apktool_yml()— 디코딩된 APK 프로젝트에서 apktool.yml 정보를 가져옵니다.list_smali_directories()— 프로젝트에 있는 모든 smali 디렉토리를 나열합니다.list_smali_files()— 특정 smali 디렉토리에 있는 smali 파일을 나열합니다. 선택적으로 패키지 접두사로 필터링합니다.get_smali_file()— 클래스 이름으로 특정 smali 파일의 내용을 가져옵니다.modify_smali_file()— 특정 smali 파일의 내용을 수정합니다.list_resources()— 프로젝트의 리소스를 나열하고, 선택적으로 리소스 유형별로 필터링합니다.get_resource_file()— 특정 리소스 파일의 콘텐츠를 가져옵니다.modify_resource_file()— 특정 리소스 파일의 내용을 수정합니다.search_in_file()— 지정된 확장자를 가진 파일에서 패턴을 검색합니다.clean_project()— 재구축을 준비하기 위해 프로젝트 디렉토리를 정리합니다.decode_apk()— APKTool을 사용하여 APK 파일을 디코딩하고 리소스와 smali 코드를 추출합니다.
🗒️ 샘플 프롬프트
🔍 기본 코드 이해
"dvac 프로젝트에 대한 모든 smali 디렉토리를 나열하세요."
"dvac 프로젝트에서 패키지 접두사 com.vulnerable.component 아래에 있는 모든 smali 파일을 보여주세요."
"com.vulnerable.component.MainActivity 클래스에 대한 smali 코드를 가져오세요."
“MainActivity.smali를 이전 버전과 비교하고 차이점을 보여주세요.”
dvac 프로젝트의 smali 파일에서 startActivity 사용법을 검색하세요.
🛡️ 취약점 탐지
“dvac AndroidManifest.xml에 선언된 권한을 분석하고 위험한 권한을 표시합니다.”
"프로젝트의 모든 .xml 및 .smali 파일에서 하드코딩된 URL이나 IP를 검색합니다."
"smali 파일에서 PendingIntent.getActivity의 모든 용도를 찾아보세요."
“dvac의 AndroidManifest.xml에서 내보낸 활동이나 수신기를 확인하세요.”
"android.permission.SEND_SMS 또는 READ_CONTACTS에 액세스하는 모든 smali 파일을 나열하세요."
🛠️ 리버스 엔지니어링 도우미
"이 APK를 디코딩하세요: dvac.apk 그리고 dvac라는 프로젝트를 만드세요."
"test-harness라는 이름의 새로운 APKTool 프로젝트를 만듭니다."
"재구축하기 전에 DVAC 프로젝트를 청소하세요."
"외부 분석을 위해 dvac 프로젝트에서 DEX 파일을 추출합니다."
"onCreate()의 시작 부분에 로그 줄을 삽입하려면 MainActivity.smali를 수정하세요."
📦 정적 분석
“dvac 프로젝트에서 AndroidManifest.xml 전체를 가져옵니다.”
"dvac 프로젝트에 대한 apktool.yml의 내용을 보여주세요."
"레이아웃 유형의 모든 리소스 파일을 나열합니다."
"모든 리소스 및 smali 파일에서 password라는 단어를 검색하세요."
"어떤 권한이 사용되는지 확인하고 일반적인 과도한 권한 부여 위험과 비교하세요."
🤖 AI 코드 수정
"MainActivity.smali의 onCreate() 메서드를 수정하여 토스트 메시지를 추가합니다."
"strings.xml에서 모든 http:// 링크를 https://로 바꾸세요."
“AndroidManifest.xml의 모든 액티비티에 android:exported=false 속성을 추가합니다.”
"LoginManager.smali의 validateLogin 메서드를 패치하여 항상 true를 반환하도록 합니다."
"MainActivity.smali의 모든 메서드에 로깅 문을 추가합니다."
📄 문서 및 메타데이터
"작업 공간에 있는 모든 디코딩된 APKTool 프로젝트를 나열합니다."
"apktool.yml 구성을 보고 버전, 원본 APK 메타데이터, 압축 설정을 검토해 보세요."
"ADB를 통해 연결된 모든 Android 기기를 가져옵니다. (ADB MCP 서버로 마이그레이션됩니다.)"
"apktool.yml에서 프로젝트 dvac에 대한 메타데이터를 가져옵니다."
"현재 서버에 설치된 APKTool 버전을 확인하세요."
🛠️ 시작하기
1. 릴리스에서 다운로드: https://github.com/zinja-coder/apktool-mcp-server/releases
지엑스피1
2. Ollama 및 Zin MCP 클라이언트를 사용하여 로컬 LLM에서 실행 - 권장
⚡ STDIO MCP 서버용의 가볍고 빠르며 간단한 CLI 기반 MCP 클라이언트로, Ollama와 MCP 서버를 실행하는 로컬 LLM 간의 간극을 메우고 연결해 줍니다.
지금 확인하세요: https://github.com/zinja-coder/zin-mcp-client
데모: 곧 출시됩니다.
🤖 3. 클로드 데스크탑 설정
Claude Desktop이 MCP를 활성화하여 실행되고 있는지 확인하세요.
예를 들어, 저는 Kali Linux에 대해 다음을 사용했습니다: https://github.com/aaddrick/claude-desktop-debian
LLM 파일에 MCP 서버를 구성하고 추가합니다.
nano ~/.config/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.json
그리고 그 안에는 다음과 같은 내용이 있습니다:
{
"mcpServers": {
"apktool-mcp-server": {
"command": "/<path>/<to>/uv",
"args": [
"--directory",
"</PATH/TO/>apktool-mcp-server/",
"run",
"apktool_mcp_server.py"
]
}
}
}바꾸다:
uv실행 파일의 실제 경로를path/to/uv로 지정합니다.이 저장소를 복제한 절대 경로를 포함하는
path/to/apktool-mcp-server
그런 다음 내장된 통합 기능을 사용하여 코드를 탐색하고 실시간 코드 검토 메시지를 통해 상호 작용합니다.
버그, 문제점, 기능 제안, 성능 문제, 일반적인 질문, 문서 문제를 보고합니다.
해당 템플릿에 대한 문제를 제기해 주시기 바랍니다.
Claude Desktop Client에서 테스트되었으며, 다른 AI에 대한 지원도 곧 테스트될 예정입니다!
🙏 크레딧
이 프로젝트는 @iBotPeaches 가 개발하고 관리하는 놀라운 오픈소스 안드로이드 리버스 엔지니어링 도구인 Apktool 용 MCP 서버입니다. 모든 핵심 APK 디코딩 및 리소스 처리 로직은 @iBotPeaches의 소유입니다. 저는 AI 기능을 갖춘 MCP 서버를 지원하기 위해 이 서버를 확장했습니다.
Apktool의 원본 README.md는 참고 및 출처 표시를 위해 이 저장소에 포함되어 있습니다.
또한 Debian 기반 Linux용 Claude 데스크톱을 개발한 @aaddrick 에게도 큰 감사를 표합니다.
마지막으로, 모델 컨텍스트 프로토콜을 개발한 @anthropics 와 @FastMCP 팀에 감사드립니다.
그리고 이와 같은 프로젝트가 가능하도록 라이브러리와 종속성을 제공하는 모든 오픈 소스 프로젝트 유지 관리자와 기여자.
📄 라이센스
apktool-mcp-server 및 모든 관련 프로젝트는 Apache 2.0을 상속합니다.
⚖️ 법적 경고
부인 성명
apktool-mcp-server 도구 및 이 프로젝트의 모든 관련 도구는 교육, 연구 및 윤리적 보안 평가 목적으로만 사용됩니다. 명시적이든 묵시적이든 어떠한 보증도 없이 "있는 그대로" 제공됩니다. 사용자는 이러한 도구 사용 시 모든 관련 법률, 규정 및 윤리 지침을 준수할 전적인 책임을 집니다.
apktool-mcp-server 사용함으로써 귀하는 테스트 권한이 있는 환경(예: 귀하가 소유하거나 명시적으로 분석 권한을 부여받은 애플리케이션)에서만 이를 사용하는 데 동의합니다. 이러한 도구를 무단 리버스 엔지니어링, 지적 재산권 침해 또는 악의적인 활동에 사용하는 것은 엄격히 금지됩니다.
apktool-mcp-server 개발자는 이러한 도구의 사용 또는 오용으로 인해 발생하는 모든 피해, 데이터 손실, 법적 결과 또는 기타 결과에 대해 책임을 지지 않습니다. 사용자는 자신의 행동과 사용으로 인해 발생하는 모든 결과에 대해 전적인 책임을 집니다.
책임감 있게 사용하세요. 지적 재산권을 존중하세요. 윤리적인 해킹 관행을 준수하세요.
🙌 기여 또는 지원
기여하다
도움이 되셨나요? ⭐️를 눌러주세요.
아이디어가 있으신가요? 이슈를 공개하거나 PR을 제출하세요.
위에 뭔가를 추가하고 싶으신가요? DM이나 멘션 주세요. README에 추가해 드릴게요!
감사 및 평가 배지 수령
감사를 담당하고 평가 배지를 제공해 주신 Mseep.net에 감사드립니다.
리버스 엔지니어링 및 AI 커뮤니티를 위해 ❤️로 제작되었습니다.
Available Tools
16 toolsanalyze_project_structureB
Analyze the structure of a decoded APK project and provide comprehensive metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| project_dir | Yes | Path to the APKTool project directory |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description does not disclose whether the tool is read-only, destructive, or what side effects it may have. 'Provide comprehensive metadata' is vague; the output schema exists but is not leveraged in the description.
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?
Single sentence, concise and front-loaded. Could include more details but is not verbose.
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?
While the tool is simple with one parameter and an output schema exists, the description lacks usage guidelines and behavioral transparency, making it incomplete for an agent to fully understand when and how to use it.
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?
Only one parameter with 100% schema description coverage. The tool description adds no additional meaning beyond 'Path to the APKTool project directory' already in 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 clearly states the tool analyzes the structure of a decoded APK project and provides comprehensive metadata. The verb 'Analyze' and resource 'structure of a decoded APK project' are specific, and it distinguishes from sibling tools like decode_apk or build_apk.
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?
No guidance on when to use this tool versus alternatives like get_apktool_yml or list_resources. Prerequisites ('must have a decoded APK') are implied but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_apkB
Build an APK file from a decoded APKTool project with enhanced validation.
| Name | Required | Description | Default |
|---|---|---|---|
| debug | No | Build with debugging info | |
| timeout | No | Command timeout in seconds | |
| force_all | No | Force rebuild all files | |
| output_apk | No | Optional output APK path | |
| project_dir | Yes | Path to the APKTool project directory |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It mentions 'enhanced validation' but does not explain what that entails (e.g., checks, side effects like overwriting existing APK). Lacks information on permissions, required tools (apktool), or potential errors.
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?
Single sentence, no wasted words. Front-loaded with the core action and key qualifier ('enhanced validation').
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 having an output schema, the description lacks completeness. It does not mention the output location or how validation works. For a build tool with 5 parameters, more context is needed.
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 all 5 parameters. The description adds no additional meaning beyond the schema, meeting the baseline.
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 builds an APK from a decoded APKTool project, which is distinct from sibling tools like decode_apk (decodes) and clean_project (cleans). The verb 'Build' and resource 'APK file' are specific and 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?
No guidance on when to use this tool versus alternatives such as decode_apk or analyze_project_structure. Lacks prerequisites (e.g., must have a decoded project) or exclusions (e.g., not for building signed APKs).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clean_projectA
Clean a project directory to prepare for rebuilding with enhanced backup support.
| Name | Required | Description | Default |
|---|---|---|---|
| backup | No | Whether to create a backup of build directories before cleaning | |
| project_dir | Yes | Path to the APKTool project directory |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It mentions 'enhanced backup support' indicating potential destructive action with a safety net, but does not detail what exactly is removed or whether the backup is recoverable. The behavioral traits are partially transparent but could be more explicit.
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, front-loaded sentence that encapsulates the tool's purpose and key feature (backup support). Every part is informative with no redundancy. It is appropriately concise for a simple tool.
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 simplicity (2 parameters, one required) and the presence of an output schema, the description provides sufficient context for the core functionality. It could be improved by mentioning what types of files or directories are cleaned, but overall it is complete enough for an agent to understand the tool's role.
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 has 100% coverage for parameter descriptions, so the schema already explains the parameters. The tool description does not add any additional meaning or context beyond what is in the schema. Per guidelines, 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 the tool's function: cleaning a project directory to prepare for rebuilding. It specifies the resource (project directory) and the action (clean), and the phrase 'enhanced backup support' adds context. This effectively distinguishes it from sibling tools like build_apk or decode_apk.
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 before rebuilding but does not explicitly state when to use this tool versus alternatives like build_apk. No guidance on when not to use or prerequisites. It could clarify that it is intended for cleaning build artifacts before a fresh build.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decode_apkC
Decode an APK file using APKTool with comprehensive validation and error handling.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Force delete destination directory if it exists | |
| no_res | No | Do not decode resources | |
| no_src | No | Do not decode sources | |
| timeout | No | Command timeout in seconds | |
| apk_path | Yes | Path to the APK file to decode | |
| output_dir | No | Custom output directory (optional) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description claims 'comprehensive validation and error handling' but is vague. With no annotations, the description carries full burden but fails to disclose side effects (e.g., file overwrites), required permissions, or execution characteristics beyond what's in the schema.
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?
Single sentence, front-loaded with the primary action. Efficient but could be more informative without becoming verbose.
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 6 parameters and a complex operation (APK decoding), the description lacks details about output location, file creation, or prerequisites. Output schema exists but description should contextualize the tool's effect.
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% with descriptions for all 6 parameters. Description adds no additional meaning, so 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?
Description uses a specific verb ('decode') and resource ('APK file'), clearly stating the tool's primary function. It lacks mention of output or distinguishing features but 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?
No explicit guidance on when to use this tool versus siblings. Agent must infer from the name and schema. No alternatives or exclusions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_apktool_ymlA
Get apktool.yml information from a decoded APK project with validation.
| Name | Required | Description | Default |
|---|---|---|---|
| project_dir | Yes | Path to APKTool project directory |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 mentions 'validation' but does not disclose what validation entails, whether the tool is read-only, or what happens if the file is missing or the project is invalid.
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 conveys the essential purpose without unnecessary words. It is appropriately concise, though slightly more structure (e.g., listing output format) could improve clarity.
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 simplicity (one parameter) and the presence of an output schema (not shown but indicated), the description provides sufficient context for a basic understanding. However, it could benefit from a brief note on the validation process.
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% with a clear parameter description ('Path to APKTool project directory'). The description adds no additional meaning beyond the schema for the single parameter, so baseline score of 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 the action ('Get'), the specific resource ('apktool.yml information'), and the context ('from a decoded APK project'). It also mentions 'with validation', which distinguishes it from other sibling tools like 'get_manifest' or 'get_resource_file'.
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 clear context (when to use: to get apktool.yml information from a decoded APK project) but does not provide explicit when-not-to-use guidance or mention alternative sibling tools for similar operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_manifestB
Get the AndroidManifest.xml content from a decoded APK project with validation.
| Name | Required | Description | Default |
|---|---|---|---|
| project_dir | Yes | Path to the APKTool project directory |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full burden. Mentions 'validation', implying some processing beyond simple retrieval, but does not detail validation behavior, side effects, or error conditions.
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?
Single sentence, 11 words, front-loaded with action and target. No wasted words.
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?
Minimal description suffices for a simple read operation with output schema present, but lacks behavioral details and usage context that would help the agent select correctly among many sibling tools.
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. Description adds no additional meaning beyond the schema's parameter description.
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?
Description clearly states the tool retrieves AndroidManifest.xml content from a decoded APK project, with additional validation. Differentiates from siblings like get_apktool_yml or get_resource_file by specifying the target file.
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?
No guidance on when to use this tool versus alternatives, nor prerequisites (e.g., project must be decoded). Siblings exist for similar files but no comparison provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_resource_fileB
Get content of a specific resource file with validation and metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| project_dir | Yes | Path to the APKTool project directory | |
| resource_name | Yes | Name of the resource file | |
| resource_type | Yes | Resource type (e.g., "layout", "drawable") |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears full burden. It mentions 'validation and metadata' but does not explain what validation is performed, what metadata is returned, or any side effects. Behavior such as authentication, permissions, or response format (though an output schema exists) is not disclosed.
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 sentence that front-loads the core purpose ('Get content of a specific resource file') without any wasted words. It efficiently communicates the tool’s function.
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 presence of an output schema and high schema coverage, the description is minimally adequate. However, it lacks details on return value structure, error handling, or any additional behavioral context that would fully equip an agent, especially since no annotations assist.
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 all three parameters. The description adds no extra meaning beyond the schema, such as format or constraints. Baseline score of 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 clearly states the tool retrieves content of a specific resource file with validation and metadata. The verb 'Get' and resource 'resource file' are specific, and mentioning 'validation and metadata' adds distinct context. It is well differentiated from siblings like list_resources or get_smali_file.
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 no guidance on when to use this tool versus alternatives (e.g., list_resources to browse files or modify_resource_file to edit). No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_smali_fileC
Get content of a specific smali file by class name with validation.
| Name | Required | Description | Default |
|---|---|---|---|
| class_name | Yes | Full class name (e.g., com.example.MyClass) | |
| project_dir | Yes | Path to the APKTool project directory |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must fully disclose behavior. Only mentions 'with validation' without specifics. No details on side effects, error conditions, or access requirements.
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?
Very concise single sentence. Front-loaded with purpose. Could benefit from breaking into multiple sentences for structure, but not overly verbose.
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?
Has output schema, so return values are covered. Minimal description is adequate for a simple read operation, but lacks details on validation and expected 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?
Schema coverage is 100%, so baseline is 3. Description adds no extra meaning beyond what schema already provides (class_name and project_dir descriptions).
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?
Clearly states it gets content of a smali file by class name with validation. Distinguishes from listing or modifying siblings, but not explicitly.
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?
No guidance on when to use this tool versus alternatives like list_smali_files or modify_smali_file. Missing context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workspace_infoA
Get information about the APKTool MCP server workspace and current projects.
Returns: Dictionary with workspace information and project list
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 states that the tool returns a dictionary but does not disclose whether it has any side effects, requires a workspace to be initialized, or is read-only. Given the tool's name implies a read operation, the description lacks explicit confirmation of behavioral traits.
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 extremely concise with two sentences. Every word serves a purpose: stating the action and the return type. No fluff or redundancy.
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 zero parameters and the presence of an output schema, the description provides adequate high-level context. However, it lacks details like what 'workspace information' includes or how the 'project list' is structured. The agent might need to rely on the output schema for specifics.
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 tool has zero parameters, so baseline 4 is appropriate. The description does not add parameter-specific meaning beyond the schema (which has no properties). It does mention the return type (dictionary), which is output-related but not necessary for the parameter dimension.
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's purpose: to get workspace information and project list. It uses a specific verb ('Get information') and resource ('APKTool MCP server workspace and current projects'). This distinguishes it from sibling tools that focus on specific project operations like build_apk, decode_apk, etc.
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 no guidance on when to use this tool versus its siblings (e.g., analyze_project_structure, get_apktool_yml). It simply states what it does, leaving the agent to infer context from the tool name and sibling names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_checkA
Check the health status of the APKTool MCP server and APKTool installation.
Returns: Dictionary containing server status and APKTool availability
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description discloses the return value (a dictionary with server status and APKTool availability), providing useful behavioral context beyond the schema.
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 purpose, no wasted words. Extremely concise.
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 health check with no parameters and an output schema, the description is complete. It could mention that it is a read-only operation, but not a major gap.
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?
With zero parameters and 100% schema coverage, the description does not need to add parameter info; baseline 4 is appropriate for no parameters.
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 checks health status of the APKTool MCP server and APKTool installation, which is specific and distinguishes it from sibling tools (e.g., build_apk, decode_apk).
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 the tool is used to verify health, but lacks explicit guidance on when to use it versus alternatives, or any when-not scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_resourcesC
List resources with pagination support and enhanced metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of items to return (0 means use default) | |
| offset | No | Starting offset for pagination | |
| project_dir | Yes | Path to the APKTool project directory | |
| resource_type | No | Optional resource type to filter by (e.g., "layout", "drawable") |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only states it lists resources with pagination and 'enhanced metadata', but does not disclose any behavioral traits like performance impact, authorization needs, or what 'enhanced metadata' entails. The description is insufficient for safe and effective 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?
The description is a single concise sentence (8 words) and front-loaded with the main action. However, it is so brief that it sacrifices informative value; a bit more detail would improve it without losing conciseness.
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 has 4 parameters, no annotations, and an output schema, the description is minimally viable but leaves gaps. It does not clarify what 'enhanced metadata' means or the scope of 'resources'. The output schema exists, so return values don't need explanation, but the description still lacks context about the tool's domain (APK resources).
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 mentions pagination (aligns with 'count' and 'offset') but does not add meaning beyond the schema's field descriptions. No param-specific explanations are added.
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 verb 'List' and resource 'resources', and adds features 'pagination support and enhanced metadata'. It distinguishes from sibling tools like get_resource_file and list_smali_files, though it could be more specific about what constitutes a 'resource' in this context.
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?
No guidance is provided on when to use this tool versus alternatives (e.g., get_resource_file for a single resource, or list_smali_files). The description lacks explicit when-to-use or when-not-to-use information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_smali_directoriesC
List all smali directories in a project with enhanced metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| project_dir | Yes | Path to the APKTool project directory |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description should disclose behavioral traits. It only mentions 'enhanced metadata' without explaining what that entails (e.g., whether it is read-only, if permissions are needed, or any side effects).
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 sentence that is concise but lacks substance. It is front-loaded but does not provide enough information to be fully helpful.
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 simplicity of the tool (one parameter, no annotations) and the existence of an output schema (not shown), the description is too minimal. It fails to explain what 'enhanced metadata' includes or how the output is structured, leaving gaps for an 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 input schema already documents the single parameter. The description adds no additional meaning beyond 'project_dir', so it meets the baseline but does not enhance understanding.
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 smali directories in a project, which distinguishes it from the sibling list_smali_files tool. The mention of 'enhanced metadata' adds some specificity, though vague.
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?
No guidance on when to use this tool versus alternatives like list_smali_files or analyze_project_structure. The description does not provide context on prerequisites or typical scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_smali_filesA
List smali files with pagination support and enhanced filtering.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of items to return (0 means use default) | |
| offset | No | Starting offset for pagination | |
| smali_dir | No | Which smali directory to use (smali, smali_classes2, etc.) | smali |
| project_dir | Yes | Path to the APKTool project directory | |
| package_prefix | No | Optional package prefix to filter by (e.g., "com.example") |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must cover behavioral traits. It mentions pagination and filtering but omits details like read-only nature, performance implications, or error conditions.
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 succinct with no redundant words. It conveys the core purpose in a single sentence.
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 presence of an output schema and full parameter descriptions, the description is largely complete. However, it lacks an explanation of what 'enhanced filtering' entails, which could affect usage.
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. Description adds no further meaning beyond the schema; 'enhanced filtering' is vague and not elaborated.
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 'List smali files' with pagination and filtering. It distinguishes from sibling 'list_smali_directories' which lists directories, not files.
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 does not provide explicit guidance on when to use this tool versus alternatives like 'get_smali_file' or 'list_smali_directories'. Usage is implied but not clarified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modify_resource_fileB
Modify the content of a specific resource file with validation and backup support.
| Name | Required | Description | Default |
|---|---|---|---|
| new_content | Yes | New content for the resource file | |
| project_dir | Yes | Path to the APKTool project directory | |
| create_backup | No | Whether to create a backup of the original file | |
| resource_name | Yes | Name of the resource file | |
| resource_type | Yes | Resource type (e.g., "layout", "values") |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Mentions validation and backup support, adding context beyond the basic 'modify'. But 'validation' is vague, and backup behavior (e.g., automatic, restore) is not explained. With no annotations, the description partially carries the transparency burden.
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?
Single sentence, concise, but lacks additional useful structure. Could include more details without being verbose.
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?
Adequate for a modification tool with output schema (assumed). Describes action and key features, but could explain validation and backup more thoroughly given the tool's complexity.
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 parameters are described in schema. Description adds no extra meaning beyond schema, such as format or constraints, meeting baseline.
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?
Description clearly states it modifies a specific resource file with validation and backup, distinguishing it from read tool get_resource_file and similar modify_smali_file. However, it does not explicitly differentiate from siblings.
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?
No guidance on when to use this tool versus alternatives like modify_smali_file or get_resource_file. No when-not or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modify_smali_fileB
Modify smali file content with validation and backup support.
| Name | Required | Description | Default |
|---|---|---|---|
| class_name | Yes | Full class name (e.g., com.example.MyClass) | |
| new_content | Yes | New content for the smali file | |
| project_dir | Yes | Path to the APKTool project directory | |
| create_backup | No | Whether to create a backup of the original file |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It mentions 'validation and backup support' but does not explain what validation entails, whether backups are automatic or optional, or any destructive potential (e.g., overwriting files). The behavioral impact of modification is under-specified.
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 sentence that is concise and front-loaded with the tool's purpose. However, it could be more structured by separating core function from additional features (validation, backup) without adding unnecessary verbosity.
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 has 4 parameters, 3 required, and an output schema (not described), the description lacks context about return values, error handling, validation criteria, and how backups are managed. It does not provide enough information for an agent to fully understand the tool's behavior and outcomes.
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 has 100% description coverage for all four parameters, so the schema already explains each parameter. The description adds only a general mention of 'validation and backup support', which hints at the 'create_backup' parameter but does not add new semantic value beyond 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 clearly states the verb 'Modify' and the resource 'smali file content', and it specifically mentions 'validation and backup support', distinguishing it from sibling tools like 'get_smali_file' (read-only) and 'modify_resource_file' (for resources).
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 no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. It does not mention that this tool is for modifying compiled smali code versus other modification scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_in_filesC
Search for patterns in files with pagination and enhanced filtering.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of items to return (0 means use default) | |
| offset | No | Starting offset for pagination | |
| max_results | No | Maximum total results to collect before pagination | |
| project_dir | Yes | Path to the APKTool project directory | |
| case_sensitive | No | Whether search should be case sensitive | |
| search_pattern | Yes | Text pattern to search for | |
| file_extensions | No | List of file extensions to search in |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behaviors like non-destructiveness, file access patterns, or performance implications. It only mentions 'pagination' and 'enhanced filtering' without operational 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?
Single sentence, no fluff, but lacks structure. Could be more informative while remaining concise.
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 7 parameters and an output schema, the description is too brief. It omits key context like supported pattern types (regex?), search scope (only project_dir?), and default behaviors.
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. Description adds no additional meaning beyond the schema; 'enhanced filtering' is too vague to clarify parameter usage.
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?
Description clearly states verb 'Search' and resource 'patterns in files', and adds context about pagination and enhanced filtering. However, it does not differentiate from sibling tools like 'get_smali_file' or 'analyze_project_structure', which have distinct purposes.
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?
No guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites. The description only states what it does without context for selection.
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.
16 tool updates
v1.0.1- Added
analyze_project_structure - Changed
build_apk15 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / debug / descriptionAdded value: +"Build with debugging info" - removed
Input schema / properties / debug / titleRemoved value: -"Debug" - added
Input schema / properties / force_all / descriptionAdded value: +"Force rebuild all files" - removed
Input schema / properties / force_all / titleRemoved value: -"Force All" - added
Input schema / properties / output_apk / descriptionAdded value: +"Optional output APK path" - removed
Input schema / properties / output_apk / titleRemoved value: -"Output Apk" - added
Input schema / properties / project_dir / descriptionAdded value: +"Path to the APKTool project directory" - removed
Input schema / properties / project_dir / titleRemoved value: -"Project Dir" - added
Input schema / properties / timeoutAdded value: +{ + "default": 300, + "description": "Command timeout in seconds", + "type": "integer" +} - removed
Input schema / titleRemoved value: -"build_apkArguments" - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / propertiesRemoved value: -{ - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / titleRemoved value: -"build_apkOutput"
- Changed
clean_project10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / backup / descriptionAdded value: +"Whether to create a backup of build directories before cleaning" - removed
Input schema / properties / backup / titleRemoved value: -"Backup" - added
Input schema / properties / project_dir / descriptionAdded value: +"Path to the APKTool project directory" - removed
Input schema / properties / project_dir / titleRemoved value: -"Project Dir" - removed
Input schema / titleRemoved value: -"clean_projectArguments" - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / propertiesRemoved value: -{ - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / titleRemoved value: -"clean_projectOutput"
- Changed
decode_apk16 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / apk_path / descriptionAdded value: +"Path to the APK file to decode" - removed
Input schema / properties / apk_path / titleRemoved value: -"Apk Path" - added
Input schema / properties / force / descriptionAdded value: +"Force delete destination directory if it exists" - removed
Input schema / properties / force / titleRemoved value: -"Force" - added
Input schema / properties / no_res / descriptionAdded value: +"Do not decode resources" - removed
Input schema / properties / no_res / titleRemoved value: -"No Res" - added
Input schema / properties / no_src / descriptionAdded value: +"Do not decode sources" - removed
Input schema / properties / no_src / titleRemoved value: -"No Src" - added
Input schema / properties / output_dirAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Custom output directory (optional)" +} - added
Input schema / properties / timeoutAdded value: +{ + "default": 300, + "description": "Command timeout in seconds", + "type": "integer" +} - removed
Input schema / titleRemoved value: -"decode_apkArguments" - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / propertiesRemoved value: -{ - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / titleRemoved value: -"decode_apkOutput"
- Changed
get_apktool_yml8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / project_dir / descriptionAdded value: +"Path to APKTool project directory" - removed
Input schema / properties / project_dir / titleRemoved value: -"Project Dir" - removed
Input schema / titleRemoved value: -"get_apktool_ymlArguments" - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / propertiesRemoved value: -{ - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / titleRemoved value: -"get_apktool_ymlOutput"
- Changed
get_manifest8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / project_dir / descriptionAdded value: +"Path to the APKTool project directory" - removed
Input schema / properties / project_dir / titleRemoved value: -"Project Dir" - removed
Input schema / titleRemoved value: -"get_manifestArguments" - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / propertiesRemoved value: -{ - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / titleRemoved value: -"get_manifestOutput"
- Changed
get_resource_file12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / project_dir / descriptionAdded value: +"Path to the APKTool project directory" - removed
Input schema / properties / project_dir / titleRemoved value: -"Project Dir" - added
Input schema / properties / resource_name / descriptionAdded value: +"Name of the resource file" - removed
Input schema / properties / resource_name / titleRemoved value: -"Resource Name" - added
Input schema / properties / resource_type / descriptionAdded value: +"Resource type (e.g., \"layout\", \"drawable\")" - removed
Input schema / properties / resource_type / titleRemoved value: -"Resource Type" - removed
Input schema / titleRemoved value: -"get_resource_fileArguments" - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / propertiesRemoved value: -{ - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / titleRemoved value: -"get_resource_fileOutput"
- Changed
get_smali_file10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / class_name / descriptionAdded value: +"Full class name (e.g., com.example.MyClass)" - removed
Input schema / properties / class_name / titleRemoved value: -"Class Name" - added
Input schema / properties / project_dir / descriptionAdded value: +"Path to the APKTool project directory" - removed
Input schema / properties / project_dir / titleRemoved value: -"Project Dir" - removed
Input schema / titleRemoved value: -"get_smali_fileArguments" - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / propertiesRemoved value: -{ - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / titleRemoved value: -"get_smali_fileOutput"
- Added
get_workspace_info - Added
health_check - Changed
list_resources12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / countAdded value: +{ + "default": 0, + "description": "Number of items to return (0 means use default)", + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "description": "Starting offset for pagination", + "type": "integer" +} - added
Input schema / properties / project_dir / descriptionAdded value: +"Path to the APKTool project directory" - removed
Input schema / properties / project_dir / titleRemoved value: -"Project Dir" - added
Input schema / properties / resource_type / descriptionAdded value: +"Optional resource type to filter by (e.g., \"layout\", \"drawable\")" - removed
Input schema / properties / resource_type / titleRemoved value: -"Resource Type" - removed
Input schema / titleRemoved value: -"list_resourcesArguments" - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / propertiesRemoved value: -{ - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / titleRemoved value: -"list_resourcesOutput"
- Changed
list_smali_directories8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / project_dir / descriptionAdded value: +"Path to the APKTool project directory" - removed
Input schema / properties / project_dir / titleRemoved value: -"Project Dir" - removed
Input schema / titleRemoved value: -"list_smali_directoriesArguments" - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / propertiesRemoved value: -{ - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / titleRemoved value: -"list_smali_directoriesOutput"
- Changed
list_smali_files14 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / countAdded value: +{ + "default": 0, + "description": "Number of items to return (0 means use default)", + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "description": "Starting offset for pagination", + "type": "integer" +} - added
Input schema / properties / package_prefix / descriptionAdded value: +"Optional package prefix to filter by (e.g., \"com.example\")" - removed
Input schema / properties / package_prefix / titleRemoved value: -"Package Prefix" - added
Input schema / properties / project_dir / descriptionAdded value: +"Path to the APKTool project directory" - removed
Input schema / properties / project_dir / titleRemoved value: -"Project Dir" - added
Input schema / properties / smali_dir / descriptionAdded value: +"Which smali directory to use (smali, smali_classes2, etc.)" - removed
Input schema / properties / smali_dir / titleRemoved value: -"Smali Dir" - removed
Input schema / titleRemoved value: -"list_smali_filesArguments" - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / propertiesRemoved value: -{ - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / titleRemoved value: -"list_smali_filesOutput"
- Changed
modify_resource_file16 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / create_backup / descriptionAdded value: +"Whether to create a backup of the original file" - removed
Input schema / properties / create_backup / titleRemoved value: -"Create Backup" - added
Input schema / properties / new_content / descriptionAdded value: +"New content for the resource file" - removed
Input schema / properties / new_content / titleRemoved value: -"New Content" - added
Input schema / properties / project_dir / descriptionAdded value: +"Path to the APKTool project directory" - removed
Input schema / properties / project_dir / titleRemoved value: -"Project Dir" - added
Input schema / properties / resource_name / descriptionAdded value: +"Name of the resource file" - removed
Input schema / properties / resource_name / titleRemoved value: -"Resource Name" - added
Input schema / properties / resource_type / descriptionAdded value: +"Resource type (e.g., \"layout\", \"values\")" - removed
Input schema / properties / resource_type / titleRemoved value: -"Resource Type" - removed
Input schema / titleRemoved value: -"modify_resource_fileArguments" - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / propertiesRemoved value: -{ - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / titleRemoved value: -"modify_resource_fileOutput"
- Changed
modify_smali_file14 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / class_name / descriptionAdded value: +"Full class name (e.g., com.example.MyClass)" - removed
Input schema / properties / class_name / titleRemoved value: -"Class Name" - added
Input schema / properties / create_backup / descriptionAdded value: +"Whether to create a backup of the original file" - removed
Input schema / properties / create_backup / titleRemoved value: -"Create Backup" - added
Input schema / properties / new_content / descriptionAdded value: +"New content for the smali file" - removed
Input schema / properties / new_content / titleRemoved value: -"New Content" - added
Input schema / properties / project_dir / descriptionAdded value: +"Path to the APKTool project directory" - removed
Input schema / properties / project_dir / titleRemoved value: -"Project Dir" - removed
Input schema / titleRemoved value: -"modify_smali_fileArguments" - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / propertiesRemoved value: -{ - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / titleRemoved value: -"modify_smali_fileOutput"
- Changed
search_in_files17 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / case_sensitiveAdded value: +{ + "default": false, + "description": "Whether search should be case sensitive", + "type": "boolean" +} - added
Input schema / properties / countAdded value: +{ + "default": 0, + "description": "Number of items to return (0 means use default)", + "type": "integer" +} - added
Input schema / properties / file_extensions / descriptionAdded value: +"List of file extensions to search in" - removed
Input schema / properties / file_extensions / titleRemoved value: -"File Extensions" - added
Input schema / properties / max_results / descriptionAdded value: +"Maximum total results to collect before pagination" - removed
Input schema / properties / max_results / titleRemoved value: -"Max Results" - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "description": "Starting offset for pagination", + "type": "integer" +} - added
Input schema / properties / project_dir / descriptionAdded value: +"Path to the APKTool project directory" - removed
Input schema / properties / project_dir / titleRemoved value: -"Project Dir" - added
Input schema / properties / search_pattern / descriptionAdded value: +"Text pattern to search for" - removed
Input schema / properties / search_pattern / titleRemoved value: -"Search Pattern" - removed
Input schema / titleRemoved value: -"search_in_filesArguments" - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / propertiesRemoved value: -{ - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / titleRemoved value: -"search_in_filesOutput"
13 tool updates
v1.0.0- First observed
build_apk - First observed
clean_project - First observed
decode_apk - First observed
get_apktool_yml - First observed
get_manifest - First observed
get_resource_file - First observed
get_smali_file - First observed
list_resources - First observed
list_smali_directories - First observed
list_smali_files - First observed
modify_resource_file - First observed
modify_smali_file - First observed
search_in_files
TDQS
Scored across 16 tools
Each tool targets a distinct action or resource type (e.g., decode vs build, smali vs manifest vs resources). There is no ambiguity between tools; even list tools separate directories, files, and resources clearly.
All tool names follow a consistent verb_noun pattern with lowercase and underscores. Verbs like get, list, modify, build are used predictably, making the naming scheme uniform and easy to navigate.
16 tools cover the core APK decoding, building, analysis, and modification workflows without being excessive. The count is well-scoped for the domain and each tool serves a distinct purpose.
The set covers primary CRUD operations for resources and smali files, plus decode/build/analyze. A minor gap is the lack of a modify_apktool_yml tool, but overall the surface is comprehensive for typical APKTool tasks.
Maintenance
Related MCP Connectors
Augments MCP Server - A comprehensive framework documentation provider for Claude Code
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Related MCP Servers
- AlicenseBqualityBmaintenanceA Model Context Protocol server that connects to a custom JADX fork (JADX-AI) and enables local LLMs to interact with decompiled Android app code for live reverse engineering assistance.32795Apache 2.0
- AlicenseNot gradedqualityDmaintenanceAn Model Context Protocol server that enables LLMs to autonomously reverse engineer applications by exposing Ghidra's decompilation and analysis tools. It allows AI agents to list code structures, rename methods, and analyze binaries directly through MCP-compatible clients.Apache 2.0
- AlicenseNot gradedqualityDmaintenanceMCP server that integrates Ghidra for binary analysis, enabling decompilation, disassembly, and advanced reverse engineering tasks through Claude Code.16MIT
- AlicenseNot gradedqualityFmaintenanceMCP server that allows LLMs to autonomously reverse engineer applications using Ghidra, exposing tools like decompilation, renaming, and listing methods.27Apache 2.0