Skip to content
Back to skills

R2xsql Connect

ASecurity

Connect to radare2 sessions via r2xsql and bootstrap analysis. Use when starting a new SQL session, routing to other skills, or setting up CLI/HTTP/MCP connections.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 17, 2026
devopsrustgobashsqlgitbackend

Works with

  • cli
  • mcp

Security analysis

A100/100

Pro scans all 6 files and shows the line behind each finding

Scanned October 17, 2026

npx -y skills add NetVar1337/agent-skill-canon --skill r2xsql-connect --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of R2xsql Connect?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for R2xsql Connect
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/netvar1337-r2xsql-connect/badge)](https://www.skillsdirectory.com/skills/netvar1337-r2xsql-connect)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: r2xsql-connect
description: "Connect to radare2 sessions via r2xsql and bootstrap analysis. Use when starting a new SQL session, routing to other skills, or setting up CLI/HTTP/MCP connections."
allowed-tools:
  - Bash
  - Read
  - Glob
  - Grep
---

## Prerequisite: radare2 must be installed

r2xsql does **not** bundle radare2 and does not install it. The default
portable `r2xsql` binary spawns radare2 as a subprocess, so radare2 must exist
on the machine before anything here works.

```bash
r2pm -ci radare2                       # radare2's own package manager
git clone https://github.com/radareorg/radare2 && radare2/sys/install.sh
sudo apt install radare2               # distro package (may lag)
brew install radare2                   # macOS
```

It is located **by name on `PATH`** — literally `radare2` (`radare2.exe` on
Windows). r2xsql never looks for `r2`, never searches beside its own
executable, and reads no environment variable. If radare2 is not on `PATH`,
pass `--r2-exe /path/to/radare2`.

Confirm what you actually connected to before trusting results:

```bash
r2xsql -s <file> -q "SELECT value FROM binary WHERE key='radare2_version'"
```

A too-old radare2 does not raise an error — r2xsql parses radare2's JSON by
field name, so a renamed field just yields empty columns. Prefer a recent 6.x.

## CLI Help (verbatim `r2xsql --help`)

```
r2xsql 0.0.1 — SQL interface for radare2 (pipe-only)
Copyright (c) 2024-2026 Elias Bachaalany

Usage: r2xsql [options]
  -s <file>          open the given binary or r2 project
  -q "<sql>"         run a single SQL statement (".<cmd>" runs a raw r2 command)
  -f <file.sql>      run a SQL script file
  -i                 interactive REPL
  -w, --write        open in write mode (persist with `Ps` on exit)
      --no-analyze   skip the implicit `aaa` at startup
      --project NAME r2 project name (reuses cached analysis; saves on exit if -w)
      --r2pipe       use the r2pipe backend (spawn radare2)
      --r2-exe PATH  path to radare2 executable for r2pipe
      --http [port]  start HTTP REST server (default: random 8100-8999)
      --mcp  [port]  start MCP SSE server   (default: random 9000-9999)
      --bind <addr>  bind address for --http / --mcp (default: 127.0.0.1)
      --token <tok>  require Bearer token on HTTP endpoints
      --version      print version and exit
  -h, --help         print this help and exit
```

r2xsql comes in two binaries with an identical CLI. The default **`r2xsql`**
(pipe-only, portable) prints `r2xsql 0.0.1 — SQL interface for radare2
(pipe-only)`; **`r2xsql-full`** (in-process libr, ships the plugin) prints
`r2xsql-full 0.0.1 — … (embedded radare2 / libr)`. Everything else is identical.

**Key takeaway:** `-s` accepts any path radare2 itself would accept — a
raw binary, an r2 project (`.r2/<name>`), or a debugger/emulator URI
(`dbg://`, `frida://`). r2xsql does **not** create the radare2 session
type; it just speaks the same `-s` you would pass to `radare2` itself.

---

## Additional Resources

- For canonical schema catalog: [references/schema-catalog.md](references/schema-catalog.md)
- For CLI reference, REPL commands, server modes, and runtime controls: [references/cli-reference.md](references/cli-reference.md)
- For HTTP server guide: [references/server-guide.md](references/server-guide.md)
- For deployment (where on disk `r2xsql` / `r2xsql-full` and `core_r2xsql.dll` go): [references/deployment.md](references/deployment.md)

---

## Choosing a backend

| Backend | When to use |
|---|---|
| **libr** (`r2xsql-full`) | In-process; links the radare2 C libraries directly and runs commands via `r_core_cmd_str`. Faster *per query on a long-lived session* — NOT faster end-to-end (analysis dominates equally). The backend used by the **`r2xsql-full`** binary (built with `-DR2XSQL_BUILD_FULL=ON`). **ABI-locked to the exact radare2 build it was compiled against** — never suggest pairing `r2xsql-full` or `core_r2xsql` with a different radare2; use the pipe binary for that. |
| **r2pipe** (`r2xsql`, or `--r2pipe`) | **Launches and manages its own** `radare2 -q0 <path>` subprocess over stdio — there is NO attach-to-a-running-r2 mode; `--r2-exe <path>` only chooses which radare2 to launch. The **only** backend in the default portable **`r2xsql`** binary; also forceable in `r2xsql-full` with `--r2pipe` (e.g. an ABI mismatch you want to route around). |
| **in-r2 plugin** (`core_r2xsql.dll`) | Already inside radare2 and want SQL access to *this* core. Load with `L core_r2xsql.dll`, then `sql <SQL>` / `sql.<SQL>` (shorthand; bare `sql` or `sql.` prints help) / `sql.http [port]` / `sql.mcp [port]`. The plugin reuses the host `RCore *` — no second core is created. |
| **mock**  | `MockBackend` (public, in `<r2xsql/backend_mock.hpp>`) accepts canned `{cmd → response}` and records every issued command — handy for embedding r2xsql without a live radare2. |

## REPL

```
r2xsql -s <file> -i
sql> SELECT name FROM funcs LIMIT 5;
sql> .quit
```

The REPL is a thin wrapper around `Session::query`. Statements are
terminated by newline; multi-statement scripts go through `-f` or
`-q "...; ...; ..."` instead. A line that starts with `.` (other than
`.quit`/`.exit`) runs a **raw r2 command** — e.g. `sql> .pdf @ entry0`
prints disassembly straight from r2 (same as `-q ".<cmd>"`).

## Common bootstrap query

```sql
SELECT key, value FROM binary ORDER BY key;
```

Gives you `bintype`, `arch`, `bits`, `os`, plus the `func_count`,
`string_count`, `import_count`, `section_count` quick-counts before
drilling in.

## Runtime settings

Per-session runtime controls (query timeout, hints, a scoped-timeout stack) live
in the writable `runtime_settings` table — read with `SELECT`, change with
`UPDATE`:

```sql
SELECT key, value, type, scope FROM runtime_settings;                    -- discover the surface
UPDATE runtime_settings SET value='5000' WHERE key='query_timeout_ms';  -- raise the per-query timeout
```

Full key list and semantics in
[references/cli-reference.md](references/cli-reference.md) and the schema catalog.

Files in this skill

  • SKILL.md6 KB
  • agents/openai.yaml43 B
  • references/cli-reference.md6.9 KB
  • references/deployment.md11.5 KB
  • references/schema-catalog.md60.9 KB
  • references/server-guide.md6.3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.