MCP server for Creative Market's Pointguard search platform — discover fonts, graphics, and creative assets through natural conversation.
Project description
Pointguard MCP Server
An MCP (Model Context Protocol) server that exposes Creative Market's Pointguard search platform to AI assistants. Discover fonts, graphics, templates, and creative assets through natural conversation.
Quick Start — Cursor
1. Install from PyPI:
pip install pointguard-mcp
2. Find where it was installed:
which pointguard-mcp
Copy the full path (e.g. /usr/local/bin/pointguard-mcp or /Users/you/miniforge3/envs/myenv/bin/pointguard-mcp).
3. Add to Cursor:
Go to Cursor → Settings → Features → MCP → Add new global MCP server, or create/edit ~/.cursor/mcp.json:
{
"mcpServers": {
"pointguard": {
"command": "/full/path/to/pointguard-mcp",
"env": {
"POINTGUARD_BASE_URL": "https://your-pointguard-api-host.com",
"CM_API_USER": "your-cm-api-user",
"CM_API_PASS": "your-cm-api-pass"
}
}
}
}
4. Restart Cursor (or go to Settings → Features → MCP and click the ↺ refresh icon next to pointguard).
5. Open a chat and try it:
"Find me a condensed sans-serif for a sports brand logo"
Features
| Tool | Description |
|---|---|
search_products |
Search by style, mood, subject, or keyword with natural language |
get_product |
Internal Pointguard index metadata for agent reasoning — numeric shop ID, category IDs, file type IDs, visibility, staff pick flag |
browse_category |
Explore products by classification using the full CM category taxonomy |
browse_shop |
Browse a designer or studio's full catalog by shop ID |
find_similar |
Find visually/stylistically similar products using embeddings |
autocomplete |
Get search suggestions from partial input |
suggested_searches |
Discover related searches and trending terms |
browse_creative_market |
Search CM directly for rich display data — titles, prices, preview images, designer info |
get_product_details |
Display-ready product data from the CM API — title, URL, full image gallery, description, shop name, formatted price. Accepts up to 50 IDs |
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 Filson Pro Font Family (16 fonts)." (uses
find_similar) - "What's trending in the Fonts category?"
- "Show me everything by Loudoun Design Co." (uses
browse_shop) - "Browse sans-serif fonts." (uses
browse_categorywith ID 81)
Installation
pip install pointguard-mcp
Or in development mode:
cd pointguard-mcp
pip install -e .
Configuration
Set environment variables before running:
| Variable | Default | Description |
|---|---|---|
POINTGUARD_BASE_URL |
http://localhost:5000 |
Pointguard API base URL |
POINTGUARD_TIMEOUT |
30 |
Request timeout in seconds |
CM_API_USER |
(required) | Creative Market API basic auth username |
CM_API_PASS |
(required) | Creative Market API basic auth password |
Usage
Standalone (stdio)
pointguard-mcp
With Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"pointguard": {
"command": "pointguard-mcp",
"env": {
"POINTGUARD_BASE_URL": "https://your-api-host.com",
"CM_API_USER": "your-cm-api-user",
"CM_API_PASS": "your-cm-api-pass"
}
}
}
}
With Cursor
Add to .cursor/mcp.json in your project:
{
"mcpServers": {
"pointguard": {
"command": "pointguard-mcp",
"env": {
"POINTGUARD_BASE_URL": "https://your-api-host.com",
"CM_API_USER": "your-cm-api-user",
"CM_API_PASS": "your-cm-api-pass"
}
}
}
}
Category Reference
Top-level Categories
| ID | Category |
|---|---|
| 1 | Graphics |
| 2 | Templates |
| 3 | Fonts |
| 4 | Add-ons (Brushes & More) |
| 6 | Photos |
| 7 | 3D |
| 8 | Stock Video / Footage |
| 23 | Illustrations |
| 26 | Icons |
| 1800 | Mockups |
Font Subcategories
| ID | Subcategory |
|---|---|
| 80 | Serif |
| 81 | Sans Serif |
| 82 | Script |
| 84 | Symbols |
| 85 | Blackletter |
| 86 | Slab Serif |
| 88 | Handwritten |
Template Subcategories
| ID | Subcategory |
|---|---|
| 50 | Logos |
| 19 | Posters |
| 42 | Flyers |
| 46 | Invitations |
| 45 | Business Cards |
| 49 | Presentations |
| 52 | Social Media |
| 44 | Stationery |
| 41 | Brochures |
| 43 | Resumes |
Other Notable Subcategories
| ID | Subcategory |
|---|---|
| 27 | Textures (Graphics) |
| 28 | Patterns (Graphics) |
| 24 | Objects (Graphics) |
| 131 | Nature (Photos) |
| 132 | People (Photos) |
| 127 | Food & Drink (Photos) |
| 21 | Product Mockups |
| 1801 | Device Mockups |
| 1805 | Apparel Mockups |
| 2601 | Solid Icons |
| 2602 | Outline Icons |
| 2603 | Duotone Icons |
See CATEGORY_MAP in server.py for the full list of 170+ category and subcategory mappings.
Development
# Install in development mode
pip install -e .
# Run directly
python -m pointguard_mcp.server
# Test with MCP inspector (browser UI)
npx @modelcontextprotocol/inspector pointguard-mcp
Architecture
┌─────────────────┐ stdio ┌──────────────────┐ HTTP/JSON ┌──────────────────────┐
│ AI Assistant │◄──────────────►│ pointguard-mcp │◄────────────────►│ Pointguard API │
│ (Claude, etc.) │ │ (MCP Server) │ │ (Flask + ES) │
└─────────────────┘ └──────────────────┘ └──────────────────────┘
│
│ HTTPS
▼
┌──────────────────┐
│ creativemarket │
│ .com (search + │
│ product detail) │
└──────────────────┘
The MCP server has two data sources:
- Pointguard API (
POINTGUARD_BASE_URL) — powerssearch_products,get_product,browse_category,browse_shop,find_similar,autocomplete,suggested_searches - creativemarket.com — powers
browse_creative_market(search with preview images) andget_product_details(full image gallery, descriptions, licenses via authenticated API)
Endpoints Used
| Tool | Endpoint | Returns |
|---|---|---|
search_products |
POST /creative-market/products/search |
Product IDs + relevance tokens |
get_product |
GET /creative-market/product/{id} |
Internal metadata — shop ID, category IDs, file types, flags |
browse_category |
POST /creative-market/products/category |
Product IDs |
browse_shop |
POST /creative-market/products/shop |
Product IDs |
find_similar |
POST /creative-market/product/{id}/similar |
Product IDs |
autocomplete |
GET /creative-market/completions/suggest |
Suggestion strings |
suggested_searches |
POST /creative-market/suggested-searches |
Related search terms |
browse_creative_market |
GET https://creativemarket.com/search/{query} |
Display-ready product cards (title, price, thumbnail, shop name) |
get_product_details |
GET https://creativemarket.com/api/external/newsletter/product-details/{ids} |
Display-ready detail (title, URL, images, description, shop URL) |
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pointguard_mcp-0.3.0.tar.gz.
File metadata
- Download URL: pointguard_mcp-0.3.0.tar.gz
- Upload date:
- Size: 13.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6d4256522c46d8e2dba479d88e890117686f06e310e883817ae67869033f5674
|
|
| MD5 |
fb5d58fc36b64c78d20b215c47ff6f24
|
|
| BLAKE2b-256 |
e05b0e62dd25981874b9f1ab78d3dd996d3bd8142f6421b97a3920481844ced7
|
Provenance
The following attestation bundles were made for pointguard_mcp-0.3.0.tar.gz:
Publisher:
publish.yml on creativemarket/pointguard-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pointguard_mcp-0.3.0.tar.gz -
Subject digest:
6d4256522c46d8e2dba479d88e890117686f06e310e883817ae67869033f5674 - Sigstore transparency entry: 1769394367
- Sigstore integration time:
-
Permalink:
creativemarket/pointguard-mcp@4b113aa36289a3bcd7a8e60e36e621a55aa146ca -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/creativemarket
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4b113aa36289a3bcd7a8e60e36e621a55aa146ca -
Trigger Event:
release
-
Statement type:
File details
Details for the file pointguard_mcp-0.3.0-py3-none-any.whl.
File metadata
- Download URL: pointguard_mcp-0.3.0-py3-none-any.whl
- Upload date:
- Size: 13.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
604ea88fe0f1a349aaecdbc9bc2e23aa0222fc5423cb78e17be80dd77b65c6b9
|
|
| MD5 |
7d468fe730650ef72062c4ddeff02244
|
|
| BLAKE2b-256 |
1e8d052d62f069104b62974d06fc42ba011e153c4b31a90714424e66043d7e41
|
Provenance
The following attestation bundles were made for pointguard_mcp-0.3.0-py3-none-any.whl:
Publisher:
publish.yml on creativemarket/pointguard-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pointguard_mcp-0.3.0-py3-none-any.whl -
Subject digest:
604ea88fe0f1a349aaecdbc9bc2e23aa0222fc5423cb78e17be80dd77b65c6b9 - Sigstore transparency entry: 1769395125
- Sigstore integration time:
-
Permalink:
creativemarket/pointguard-mcp@4b113aa36289a3bcd7a8e60e36e621a55aa146ca -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/creativemarket
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4b113aa36289a3bcd7a8e60e36e621a55aa146ca -
Trigger Event:
release
-
Statement type: