Skip to main content
Glama
kenjudy

instapaper-mcp

by kenjudy
README.md
# instapaper-mcp

MCP server for saving URLs to [Instapaper](https://www.instapaper.com) via the Instapaper Simple API.

## Tools

| Tool | Description |
|---|---|
| `add_to_instapaper` | Save a URL to your Instapaper account |

## Setup

### 1. Install and build

```sh
npm install
npm run build
```

### 2. Store credentials in the macOS Keychain

```sh
security add-generic-password -s instapaper-mcp -a username -w "your-email@example.com"
security add-generic-password -s instapaper-mcp -a password -w "your-password"
```

### 3. Create a wrapper script

Create `run.sh` in the project root (already gitignored):

```sh
#!/bin/sh
export INSTAPAPER_USERNAME=$(security find-generic-password -s instapaper-mcp -a username -w)
export INSTAPAPER_PASSWORD=$(security find-generic-password -s instapaper-mcp -a password -w)
exec node /Users/kenjudy/Projects/instapaper-mcp/dist/index.js
```

```sh
chmod 700 run.sh
```

### 4. Configure Claude Desktop

Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "instapaper": {
      "command": "/Users/kenjudy/Projects/instapaper-mcp/run.sh"
    }
  }
}
```

Restart Claude Desktop after saving the config.

## Development

```sh
npm test          # run tests
npm run typecheck # type-check without emitting
npm run build     # compile to dist/
```

## Credentials

The server reads credentials from environment variables at startup:

- `INSTAPAPER_USERNAME`: your Instapaper account email
- `INSTAPAPER_PASSWORD`: your Instapaper account password

The server exits immediately with an error if either variable is missing.

Credentials are kept out of config files by reading them from the macOS Keychain in `run.sh`. The wrapper script is gitignored; never commit credentials to version control.