Skip to content
Back to skills

Docs

CSecurity

This guide is for AI agents (Claude, etc.) helping a new user set up Reacher interactively. Walk through each step in order, asking for user input where needed. The user does **not** need a VPS or Tailscale to get started. Confirm what they want before deciding which path to take. ---

  • 28 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added May 26, 2026
documentationgobashnodenodejsdockergitapi

Works with

  • claude code
  • terminal
  • api
  • mcp

Security analysis

C71/100
  • criticalAccesses sensitive system or user directories
  • criticalAccesses sensitive system or user directories
  • mediumInstalls packages at runtime which could introduce malicious dependencies

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

Scanned May 27, 2026

npx -y skills add ouim-me/reacher --skill docs --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Docs?

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

Security grade badge for Docs
[![Security: C — Skills Directory](https://www.skillsdirectory.com/api/skills/ouim-me-docs/badge)](https://www.skillsdirectory.com/skills/ouim-me-docs)

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
# Reacher Setup Guide for AI Agents

This guide is for AI agents (Claude, etc.) helping a new user set up Reacher interactively. Walk through each step in order, asking for user input where needed.

The user does **not** need a VPS or Tailscale to get started. Confirm what they want before deciding which path to take.

---

## Step 1: Understand what the user wants

Ask the user:

> "What do you want Claude to be able to do? For example:
> - Call APIs on your behalf (GitHub, Linear, Notion, etc.)
> - Remember things across conversations (knowledge base)
> - Control a browser
> - SSH into your servers"

Based on their answer:
- **API + memory only** → Path 1 or 2 (no VPS or Tailscale needed)
- **+ SSH to machines** → Path 3 (needs Tailscale + VPS + SSH key)

---

## Step 2: Prerequisites check

**Always required:**
- Node.js 22+ — run `node --version` to check. Install from [nodejs.org](https://nodejs.org) if missing.
- A GitHub account — for `gist_kb` (knowledge base) and API calls to GitHub.

**Only for SSH features:**
- A [Tailscale](https://tailscale.com) account with devices enrolled
- A VPS or always-on machine with a public HTTPS URL

---

## Step 3: Clone and install

```bash
git clone https://github.com/thezem/reacher.git
cd reacher
npm install
cp .env.example .env
```

Confirm the user sees the `reacher` directory and that `npm install` completed without errors.

---

## Step 4: Configure `.env`

Open `.env` in a text editor. Walk through these values:

### Always set:

**`MCP_SECRET`** — any random string. Claude uses this to authenticate with the server.
```bash
openssl rand -hex 32
```
Paste the output as `MCP_SECRET`.

**`GITHUB_TOKEN`** — for the knowledge base and GitHub API calls.
1. Go to [github.com/settings/tokens](https://github.com/settings/tokens)
2. Create a new token (classic)
3. Grant `gist` scope (read + write)
4. Paste as `GITHUB_TOKEN`

**`PROXY_ALLOWED_DOMAINS`** — domains `fetch_external` can call. Start with:
```
PROXY_ALLOWED_DOMAINS=api.github.com
```

**`FETCH_EXTERNAL_TOKEN_MAP`** — maps domains to token env vars for automatic auth injection:
```
FETCH_EXTERNAL_TOKEN_MAP={"api.github.com":"GITHUB_TOKEN"}
```

### Only for SSH features:

**`TAILSCALE_API_KEY`** — for querying the Tailscale device list and activating SSH tools.
1. Go to [tailscale.com/admin/settings/keys](https://login.tailscale.com/admin/settings/keys)
2. Generate an API key with "Devices (read)" scope
3. Paste as `TAILSCALE_API_KEY`

**`SSH_DEFAULT_USER`** — the default SSH username on target machines.
```
SSH_DEFAULT_USER=your-username
```

---

## Step 5: Start the server

```bash
node index.js
```

The startup log shows which tools are active:
```
✅ MCP Server started on http://localhost:3000
📋 Active tools: fetch_external, browser, gist_kb, github_search
```

If `TAILSCALE_API_KEY` was set, `ssh_exec` and `tailscale_status` will also appear.

---

## Step 6: Connect to Claude

### Path A — Claude Code (local, no public URL needed)

Add to the user's MCP config (via `/mcp` in Claude Code):

```json
{
  "mcpServers": {
    "reacher": {
      "type": "http",
      "url": "http://localhost:3000/mcp?token=THEIR_MCP_SECRET"
    }
  }
}
```

### Path B — Claude.ai via Cloudflare Tunnel (no VPS needed)

Open a second terminal:
```bash
npx cloudflared tunnel --url http://localhost:3000
```

Copy the printed URL (e.g. `https://random-words.trycloudflare.com`).

In Claude.ai → Settings → Integrations → Add custom connector:
```
https://random-words.trycloudflare.com/mcp?token=THEIR_MCP_SECRET
```

### Path C — Claude.ai via VPS

The server needs a public HTTPS URL. See [deployment.md](deployment.md) for full options (Caddy, Docker, EasyPanel, Railway).

In Claude.ai → Settings → Integrations → Add custom connector:
```
https://yourdomain.com/mcp?token=THEIR_MCP_SECRET
```

---

## Step 7: SSH key setup (Path C only)

If the user wants `ssh_exec`:

```bash
ssh-keygen -t ed25519 -f ~/.ssh/reacher-key -N ""
```

Add the public key to each target machine:
```bash
ssh-copy-id -i ~/.ssh/reacher-key.pub user@hostname
```

For Docker: mount the key in `docker-compose.yml`:
```yaml
volumes:
  - ~/.ssh/reacher-key:/root/.ssh/reacher-key:ro
```

---

## Step 8: Verify

Ask the user to start a new Claude conversation and try:

- **"Save a note to my knowledge base: Reacher is set up."** — tests `gist_kb`
- **"What devices are on my Tailscale network?"** — tests `tailscale_status` (Path C only)

---

## Troubleshooting

| Problem | Fix |
|---|---|
| Server won't start | Check `MCP_SECRET` is set in `.env` |
| Tools missing | Check startup log — missing env vars = those tools not registered |
| "Unauthorized" from Claude | `MCP_SECRET` in URL doesn't match `.env` |
| `fetch_external` blocked | Domain not in `PROXY_ALLOWED_DOMAINS` — add it and restart |
| SSH fails | Confirm Tailscale is running on target; try `sudo tailscale up --ssh` |
| Cloudflare URL changed | Restart `cloudflared` to get a new URL, or use a named tunnel |

Files in this skill

  • configuration.md4.3 KB
  • deployment.md3.6 KB
  • extending.md2.7 KB
  • safety.md2.4 KB
  • setup.md5.6 KB
  • skill.md4.9 KB
  • tools.md8.6 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.