Skip to main content
Glama
artyomredko-collab

Boards & Pins MCP Server

README.md
# Boards & Pins MCP Server

An [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server that lets Claude interact with Pinterest — browsing, creating, and managing boards, pins, sections, and user profiles via the Pinterest API v5.

## Features

- Browse boards and pins with bookmark-based pagination
- Create boards, sections, and pins from image URLs
- Update and move pins across boards and sections
- Search pins by keyword
- View pin images directly inside Claude (base64 image blocks)
- OAuth 2.0 with automatic token refresh, or direct access token

## Requirements

- Node.js >= 20
- A Pinterest account and app (see [Configuration](docs/configuration.md))

## Quick Start

```bash
git clone https://github.com/sapyx/sapyx-mcp.git
cd sapyx-mcp
npm install
npm run build
```

Copy the environment template and fill in your credentials:

```bash
cp .env.example .env
```

Then add the server to your MCP client (see [Configuration](docs/configuration.md)).

## Authentication

Two modes are supported:

| Mode | Env vars | Access |
|------|----------|--------|
| Direct token | `PINTEREST_ACCESS_TOKEN` | Read-only |
| OAuth 2.0 | `PINTEREST_APP_ID` + `PINTEREST_APP_SECRET` | Full read + write |

For OAuth, trigger the flow via the `pinterest_auth` tool. Tokens are stored in `~/.mcp-credentials/pinterest-tokens.json` and refreshed automatically.

Full details: [docs/authentication.md](docs/authentication.md)

## Tools

14 tools across four groups:

| Group | Tools |
|-------|-------|
| **Auth** | `pinterest_auth`, `pinterest_auth_status` |
| **Boards** | `list_boards`, `create_board`, `list_board_sections`, `create_board_section` |
| **Pins** | `list_pins`, `get_pin`, `get_pin_image`, `update_pin`, `move_pin`, `create_pin` |
| **Search** | `search_pins`, `get_user_profile` |

Full reference: [docs/tools.md](docs/tools.md)

## Project Structure

```
src/
  index.ts          # Entry point — env validation, server setup, STDIO transport
  auth.ts           # OAuth 2.0 flow, token storage, refresh logic
  api.ts            # Typed HTTP client wrapping Pinterest API v5
  types.ts          # TypeScript interfaces (Pin, Board, tokens, etc.)
  tools/
    auth.ts         # pinterest_auth, pinterest_auth_status
    boards.ts       # list_boards, create_board, list_board_sections, create_board_section
    pins.ts         # list_pins, get_pin, get_pin_image, update_pin, move_pin, create_pin
    search.ts       # search_pins, get_user_profile
docs/
  authentication.md # OAuth flow, token storage, refresh logic
  tools.md          # Full tool reference with parameters
  api-client.md     # Internal API client documentation
  configuration.md  # Env vars, MCP client setup, Pinterest app setup
```

## Tech Stack

- **Language:** TypeScript (ES2022, Node16 modules)
- **Runtime:** Node.js >= 20
- **MCP Framework:** `@modelcontextprotocol/sdk`
- **Validation:** Zod
- **Transport:** STDIO

## Documentation

- [Authentication](docs/authentication.md)
- [Tools Reference](docs/tools.md)
- [API Client](docs/api-client.md)
- [Configuration](docs/configuration.md)

TDQS

A3.5/5.0

Scored across 15 tools

Disambiguation5/5

Each tool has a clear, distinct purpose: list versus get, retrieval versus analytics, etc. No two tools appear to overlap in function.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case (e.g., get_board, list_pins, search_boards, pinterest_auth_status).

Tool Count5/5

With 15 tools, the server is well-scoped for a Pinterest API wrapper, covering boards, pins, analytics, authentication, user profile, and social lists without being excessive.

Completeness2/5

The tool set is entirely read-only and lacks any create, update, or delete operations for boards or pins, which is a significant gap given the server name implies management of boards and pins.

Maintenance

ActivityInactive
ResponsivenessNo issues