src/tools/. They share a common registration pattern but are otherwise fully independent — no shared state, no cross-tool dependencies.
Design philosophy
The surface area is intentional. Rather than shipping a dedicated tool for every API (GitHub, Linear, Notion, Jira…), Reacher ships one authenticated HTTP proxy —fetch_external — and lets you add any API by adding its domain to an allowlist. Claude already knows REST APIs. It just needs a way to call them with your credentials without you pasting tokens into every prompt.
The result is six tools that cover the full infrastructure loop:
- Discover your machines (
tailscale_status) - Execute commands on them (
ssh_exec) - Call any allowed API (
fetch_external) - Search GitHub activity (
github_search) - Persist knowledge across conversations (
gist_kb) - Automate web tasks (
browser)
Tool registration pattern
Every tool insrc/tools/*.js exports four things:
src/mcp-server.js via server.tool(name, description, schema, handler). The server wraps each handler to inject the appropriate environment variables (API keys, allowed domains) so Claude never receives them directly.
Tools summary
All tools
ssh_exec
Execute shell commands on remote Tailscale devices. Supports Linux and Windows (cmd/PowerShell), with a command blocklist and directory allowlist.
tailscale_status
List every device in your Tailscale network with IPs, OS, online status, and last-seen time.
fetch_external
Authenticated HTTP proxy with per-domain token injection. Add any API by adding one line to your config.
github_search
Search GitHub for pull requests or commits by author and date range, with clean minimal output.
gist_kb
Persistent knowledge base backed by private GitHub Gists. Read, write, list, and delete entries across conversations.
browser
CDP-based headless browser control via the
agent-browser CLI. Navigate, click, fill forms, and take snapshots.