Metadata-Version: 2.4
Name: pointguard-mcp
Version: 0.1.0
Summary: MCP server for Creative Market's Pointguard search platform — discover fonts, graphics, and creative assets through natural conversation.
Project-URL: Homepage, https://github.com/creativemarket/pointguard-mcp
Project-URL: Repository, https://github.com/creativemarket/pointguard-mcp
Author: Creative Market
License: MIT
Keywords: ai,creative-market,fonts,mcp,search
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Requires-Python: >=3.10
Requires-Dist: httpx>=0.27
Requires-Dist: mcp>=1.0
Requires-Dist: pydantic>=2.0
Description-Content-Type: text/markdown

# Pointguard MCP Server

An [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) server that exposes Creative Market's Pointguard search platform to AI assistants. Discover fonts, graphics, templates, and creative assets through natural conversation.

## Features

| Tool | Description |
|------|-------------|
| `search_products` | Search by style, mood, subject, or keyword with natural language |
| `get_product` | Get full product details — pricing, category, file types, availability |
| `browse_category` | Explore products by classification (Fonts, Graphics, Photos, etc.) |
| `browse_shop` | Browse a designer or studio's full catalog |
| `find_similar` | Find visually/stylistically similar products using embeddings |
| `autocomplete` | Get search suggestions from partial input |
| `suggested_searches` | Discover related searches and trending terms |

## Example Queries

Once connected to an MCP-compatible client (Claude, Cursor, etc.), you can ask:

- *"Find me a condensed sans-serif for a sports brand logo."*
- *"Show me retro display fonts for a vinyl record label."*
- *"I need textures and grunge graphics for a concert poster."*
- *"Find script fonts under $30 that work for wedding stationery."*
- *"Show me font alternatives to Futura."* (uses `find_similar`)
- *"What's trending in the Fonts category?"*

## Installation

```bash
cd pointguard-mcp
pip install -e .
```

## Configuration

Set environment variables:

| Variable | Default | Description |
|----------|---------|-------------|
| `POINTGUARD_BASE_URL` | `http://localhost:5000` | Pointguard API base URL |
| `POINTGUARD_TIMEOUT` | `30` | Request timeout in seconds |

For production:
```bash
export POINTGUARD_BASE_URL=https://pointguard-public.cm-ops.com
```

## Usage

### Standalone (stdio)

```bash
pointguard-mcp
```

### With Claude Desktop

Add to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "pointguard": {
      "command": "pointguard-mcp",
      "env": {
        "POINTGUARD_BASE_URL": "https://pointguard-public.cm-ops.com"
      }
    }
  }
}
```

### With Cursor

Add to `.cursor/mcp.json` in your project:

```json
{
  "mcpServers": {
    "pointguard": {
      "command": "pointguard-mcp",
      "env": {
        "POINTGUARD_BASE_URL": "https://pointguard-public.cm-ops.com"
      }
    }
  }
}
```

## Category Reference

| ID | Category |
|----|----------|
| 1 | Fonts |
| 2 | Graphics |
| 3 | Templates |
| 4 | Themes |
| 5 | 3D |
| 6 | Photos |
| 8 | Video |
| 9 | Add-ons |

## Development

```bash
# Install in development mode
pip install -e .

# Run directly
python -m pointguard_mcp.server

# Test with MCP inspector
npx @modelcontextprotocol/inspector pointguard-mcp
```

## Architecture

```
┌─────────────────┐     stdio      ┌──────────────────┐     HTTP/JSON     ┌─────────────────┐
│  AI Assistant   │◄──────────────►│  pointguard-mcp  │◄────────────────►│  Pointguard API │
│  (Claude, etc.) │                │  (MCP Server)    │                   │  (Flask + ES)   │
└─────────────────┘                └──────────────────┘                   └─────────────────┘
```

The MCP server is a thin translation layer:
1. Receives structured tool calls from the AI assistant via MCP protocol
2. Maps them to Pointguard API HTTP requests
3. Formats responses back as readable text for the LLM

## Autocomplete Endpoint

The `autocomplete` tool requires a completion suggest endpoint on the Pointguard API:

```
GET /creative-market/completions/suggest?prefix=mono&size=10
```

If this endpoint doesn't exist yet, add it to the Pointguard Flask app (see `pointguard/api/creative_market/resources/`).

