Skip to main content
Glama
MaddozS

affinity-mcp-proxy

by MaddozS
README.md
# affinity-mcp-proxy

`affinity-mcp-proxy` exposes the local Affinity MCP server as an MCP server over `stdio`.

It is designed for tools that know how to launch MCP servers as local commands, for example:

```json
{
  "mcpServers": {
    "affinity": {
      "command": "pnpm",
      "args": ["dlx", "affinity-mcp-proxy"]
    }
  }
}
```

## What it does

- connects to the local Affinity MCP server over HTTP/SSE
- re-exposes `tools/list` and `tools/call` over `stdio`
- primes `execute_script` with `read_preamble` in the same upstream session
- ships a small CLI for diagnostics and direct tool calls

## Status

- first-class target: macOS
- runtime: Node.js 22+
- package manager: `pnpm`

Other platforms may work, but this package is only validated on macOS in the first release.

## Install and run

Preferred ephemeral usage:

```bash
pnpm dlx affinity-mcp-proxy
```

Direct CLI usage:

```bash
pnpm dlx --package affinity-mcp-proxy affinity-mcp-proxy-cli list-tools
pnpm dlx --package affinity-mcp-proxy affinity-mcp-proxy-cli call-tool search_sdk_hints '{"query":"text style"}'
```

Local development:

```bash
pnpm install
pnpm test
pnpm dlx . --help
node ./affinity_mcp_proxy.mjs --help
```

## Requirements

- Affinity must be open
- the local Affinity MCP server must be enabled and listening
- Node.js 22 or newer

By default the proxy tries these upstream URLs:

- `http://127.0.0.1:6767/sse`
- `http://127.0.0.1:6767`
- `http://[::1]:6767/sse`
- `http://[::1]:6767`

## Environment variables

- `AFFINITY_MCP_URL`
  - force a specific upstream MCP URL
- `AFFINITY_MCP_CONNECT_TIMEOUT_MS`
  - override the connection timeout
- `AFFINITY_MCP_DEBUG`
  - enable proxy debug logs on `stderr`

The proxy requires the SDK to be installed through the package dependencies. There is no alternate local SDK fallback.

## Commands

Proxy server:

```bash
pnpm dlx affinity-mcp-proxy
pnpm dlx affinity-mcp-proxy --help
pnpm dlx affinity-mcp-proxy --version
```

Diagnostic CLI:

```bash
pnpm dlx --package affinity-mcp-proxy affinity-mcp-proxy-cli list-tools
pnpm dlx --package affinity-mcp-proxy affinity-mcp-proxy-cli execute-script-file ./script.js
pnpm dlx --package affinity-mcp-proxy affinity-mcp-proxy-cli render-spread-file DOCUMENT_SESSION_UUID '{"spread_index":2,"out":"/tmp/spread-2.jpg"}'
```

## Troubleshooting

If the proxy exits immediately:

- confirm Affinity is open
- confirm the local MCP endpoint is enabled
- set `AFFINITY_MCP_DEBUG=1` to see connection attempts
- if your environment prefers a specific interface, set `AFFINITY_MCP_URL` explicitly

If text formatting scripts fail inside Affinity with `COMMAND_FAILED`, make sure the script sets the current spread to the target text node spread before calling `doc.formatText(...)`.