REA
Local reverse-engineering toolkit for binaries, apps, websites and Android devices over MCP
Local static analysis for dead code, security flaws, secrets and code quality, callable from an MCP client
By oha (individual) Python Local · stdio Developer toolsSecurity
69 popularity score ★ 887 ↓ 65k/mo
Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs SKYLOS_API_KEY. Replace each <NAME> with your value.
pip install skylosclaude mcp add skylos -e SKYLOS_API_KEY=<SKYLOS_API_KEY> -- python -m skylos_mcp.server{
"mcpServers": {
"skylos": {
"command": "python",
"args": [
"-m",
"skylos_mcp.server"
],
"env": {
"SKYLOS_API_KEY": "<SKYLOS_API_KEY>"
}
}
}
}{
"mcpServers": {
"skylos": {
"command": "python",
"args": [
"-m",
"skylos_mcp.server"
],
"env": {
"SKYLOS_API_KEY": "<SKYLOS_API_KEY>"
}
}
}
}{
"servers": {
"skylos": {
"type": "stdio",
"command": "python",
"args": [
"-m",
"skylos_mcp.server"
],
"env": {
"SKYLOS_API_KEY": "<SKYLOS_API_KEY>"
}
}
}
}[mcp_servers.skylos]
command = "python"
args = ["-m", "skylos_mcp.server"]
[mcp_servers.skylos.env]
SKYLOS_API_KEY = "<SKYLOS_API_KEY>"gemini mcp add --scope user -e SKYLOS_API_KEY=<SKYLOS_API_KEY> skylos python -- -m skylos_mcp.serverSKYLOS_API_KEY secret |
Required: Skylos Cloud key from the dashboard settings; without it only analyze works, 5 calls a day. |
|---|---|
SKYLOS_MCP_RESULTS_DIR |
Optional: Where results are saved. |
SKYLOS_CLOUD_URL |
Optional: Skylos Cloud address for key checks and credits. |
SKYLOS_GREP_BUDGET |
Optional: Seconds allowed for the reference search before a patch. |
| Set together: http | |
MCP_TRANSPORT |
Optional: sse or streamable-http serves over HTTP; then SKYLOS_MCP_TOKEN is required. |
MCP_BIND |
Optional: Address to listen on in HTTP mode. |
PORT |
Optional: Port in HTTP mode. |
SKYLOS_MCP_TOKEN secret |
Optional: Bearer token clients must send in HTTP mode, at least 16 characters. |
Skylos is a static analysis tool, and its Python package ships an MCP server (the skylos_mcp.server module) that gives an MCP client the same engine the skylos CLI uses. The assistant passes a folder or file path and gets structured findings back: unused functions, imports and classes with confidence scores, taint-tracked injection and SSRF issues, hard-coded keys, complexity and architecture problems, and supply-chain risks such as imported packages that do not exist on the registry. Python has the deepest coverage; TypeScript/JavaScript and Java get dead-code, security and quality checks, while PHP, Dart, Rust, C#, Kotlin and Shell get narrower coverage. Since 4.50 the PyPI wheels for Linux, macOS and Windows on x86_64 and arm64 bundle the skylos-go engine that Go checks need; on other platforms it has to be built separately.
Beyond scanning, some tools are meant for coding agents: checking a diff or an edited line range for hallucinated references and removed controls, scoring an AI agent's guardrails against OWASP lists, attributing changes to bots or people from git history, and learning from triage decisions. Two tools can change code. generate_fix builds a patch that deletes or comments out dead code and writes it only with apply=true. remediate plans fixes by default; with dry_run=false it asks an LLM for fixes and edits files in place. At v5.0.0 it does not run your tests and rejects test_cmd over MCP, although the docs page still says it validates fixes with tests and reverts broken ones.
The server file at v5.0.0 (skylos_mcp/server.py) registers sixteen tools. The README and docs also describe a change_map tool, but that file does not register it. Every result is saved to ~/.skylos/mcp_results/ (or SKYLOS_MCP_RESULTS_DIR) and can be read back through skylos://results resources.
| Runtime | Python 3.10+ |
|---|---|
| Runs on | macOS, Windows, Linux |
| Skylos Cloud (skylos.dev) | Free tierAPI key needed for every tool except analyze; remediate is paid with credits (10 per call per the README) |
Install skylos (pip install skylos) in the Python interpreter the client starts; the docs' config points at a venv's python when it lives in one. Create SKYLOS_API_KEY in the skylos.dev dashboard settings. remediate with dry_run=false and verify_dead_code need the LLM extra (pip install "skylos[llm]", which brings litellm) plus credentials for the model provider in the server's environment (the docs name OPENAI_API_KEY and ANTHROPIC_API_KEY, or SKYLOS_LLM_BASE_URL for a local model). Go checks outside the bundled wheel platforms need the skylos-go engine built separately; skylos doctor prints the build command.
Without SKYLOS_API_KEY only analyze works, capped at 5 calls a day (skylos_mcp/auth.py); the other fifteen tools return an authentication error. With a key, calls are capped per hour by plan: 50 free, 500 Pro, 5,000 Enterprise. remediate costs 10 credits per call except on Enterprise plans. The key is checked against skylos.dev when the server starts; if that check fails, the server falls back to the keyless mode. The plain pip install does not bring litellm, so the LLM tools fail until the skylos[llm] extra is added; the MCP docs page does not mention this. Relative paths resolve against the server's working directory.
Developers who want an assistant to scan a local codebase for dead code, injection flaws or leaked keys, and agents that should check their own edits before a person sees them. Analysis runs on your machine, so it fits private code, but most tools need a skylos.dev account key. With a key, the server must reach skylos.dev for credit checks, so it does not suit offline or air-gapped use. Keyless use is limited to one tool five times a day. If you cannot create an account, the skylos CLI (skylos verify, skylos defend, skylos . -a) runs the same checks locally with no key.
13 only read, 1 changes things, 2 can delete or overwrite. A ? marks an optional parameter.
analyzepath: stringconfidence?: integerexclude_folders?: arrayexpand_advice?: booleansecurity_scanpath: stringconfidence?: integerexclude_folders?: arrayexpand_advice?: booleanquality_checkpath: stringconfidence?: integerexclude_folders?: arrayexpand_advice?: booleanarchitecture_checkpath: stringconfidence?: integerexclude_folders?: arrayexpand_advice?: booleanhealth_scorepath: stringconfidence?: integerinclude_security?: booleaninclude_secrets?: booleaninclude_quality?: booleanexclude_folders?: arrayexpand_advice?: booleansecrets_scanpath: stringconfidence?: integerexclude_folders?: arrayexpand_advice?: booleanremediate deletespath: stringmax_fixes?: integerdry_run?: booleanmodel?: stringtest_cmd?: stringseverity?: stringverify_dead_codepath: stringconfidence?: integermodel?: stringmax_verify?: integermax_challenge?: integerexclude_folders?: stringprovenance_scanpath: stringdiff_base?: stringgenerate_fix deletespath: stringmode?: stringmin_safety?: numberapply?: booleanlearn_triage changespath: stringaction_id: stringaction: stringget_triage_suggestionspath: stringvalidate_code_changediff: stringpath?: stringpolicy?: stringcheck_dependencies?: booleanverify_changepath?: stringfile?: stringline_range?: stringconfidence?: integerproject_context?: booleaninclude_dependency_hallucinations?: booleanexclude_folders?: stringcontract_path?: stringcontract_enabled?: booleaninclude_security_findings?: booleanverify_agentpath?: stringfail_on?: stringmin_score?: integerowasp_framework?: stringowasp_version?: stringexclude_folders?: stringget_security_contextpath: stringskylos://resultsskylos://results/latestskylos://results/{run_id}