@striderlabs/mcp-poshmark
# @striderlabs/mcp-poshmark
MCP server for automating Poshmark fashion resale marketplace using Playwright and Browserbase.
## Tools
| Tool | Description |
|------|-------------|
| `search_listings` | Search fashion items by brand, category, size, price |
| `get_listing_details` | Get full details of a specific listing |
| `get_my_closet` | List items in a user's closet |
| `create_listing` | Create a new listing with photos and description |
| `get_offers` | View offers received or sent |
| `accept_offer` | Accept an offer on a listing |
## Setup
### Environment Variables
```bash
# Required for authenticated actions (get_my_closet, create_listing, get_offers, accept_offer)
POSHMARK_EMAIL=your@email.com
POSHMARK_PASSWORD=yourpassword
# Optional: Browserbase CDP URL for cloud browser (falls back to local Playwright)
BROWSERBASE_CDP_URL=wss://connect.browserbase.com?apiKey=YOUR_KEY
# Optional: set to "false" to show browser window during local development
HEADLESS=true
```
### Installation
```bash
npm install -g @striderlabs/mcp-poshmark
```
### MCP Configuration
Add to your MCP client configuration (e.g., Claude Desktop `~/Library/Application Support/Claude/claude_desktop_config.json`):
```json
{
"mcpServers": {
"poshmark": {
"command": "mcp-poshmark",
"env": {
"POSHMARK_EMAIL": "your@email.com",
"POSHMARK_PASSWORD": "yourpassword",
"BROWSERBASE_CDP_URL": "wss://connect.browserbase.com?apiKey=YOUR_KEY"
}
}
}
}
```
Or run directly:
```bash
POSHMARK_EMAIL=you@example.com POSHMARK_PASSWORD=secret npx @striderlabs/mcp-poshmark
```
## Tool Reference
### `search_listings`
Search Poshmark for fashion items.
```json
{
"query": "vintage denim jacket",
"brand": "Levi's",
"category": "Women",
"size": "M",
"min_price": 20,
"max_price": 100,
"sort": "price_asc",
"limit": 20
}
```
### `get_listing_details`
Get full details of a listing.
```json
{
"listing_id": "abc123xyz"
}
```
Also accepts full URLs: `"listing_id": "https://poshmark.com/listing/..."`.
### `get_my_closet`
List items in a closet.
```json
{
"username": "seller_handle",
"status": "available",
"limit": 50
}
```
Omit `username` to use the authenticated user's closet.
### `create_listing`
Create a new listing.
```json
{
"title": "Vintage Levi's 501 Jeans",
"description": "Classic straight-leg jeans in excellent condition. Light wash with authentic wear.",
"category": "Women > Jeans",
"brand": "Levi's",
"size": "28",
"condition": "EUC",
"original_price": 89,
"listing_price": 35,
"color": "Blue",
"image_paths": ["/path/to/photo1.jpg", "/path/to/photo2.jpg"]
}
```
Condition options: `NWT` (New with tags), `NWOT` (New without tags), `EUC` (Excellent used condition), `GUC` (Good used condition), `Fair`, `Poor`.
### `get_offers`
View offers.
```json
{
"type": "received",
"limit": 20
}
```
Type options: `received`, `sent`, `all`.
### `accept_offer`
Accept an offer.
```json
{
"offer_id": "offer_abc123",
"listing_id": "listing_xyz789"
}
```
## Browser Automation
This server uses Playwright for browser automation.
- **With Browserbase**: Connect via CDP using `BROWSERBASE_CDP_URL`. Ideal for production/cloud use.
- **Without Browserbase**: Falls back to local Chromium. Set `HEADLESS=false` to watch the browser.
## License
MIT
TDQS
Scored across 6 tools
Each tool has a distinct purpose: searching, viewing details, listing closet items, creating listings, viewing offers, and accepting offers. There is no overlap or ambiguity among them.
All tools follow a consistent verb_noun pattern (search_listings, get_listing_details, get_my_closet, create_listing, get_offers, accept_offer). The naming is uniform and predictable.
The server has 6 tools, which is well-scoped for a Poshmark integration covering search, listing management, and offer handling. Each tool serves a clear purpose without redundancy.
The tool set covers core operations like search, get details, list closet, create listing, and manage offers, but lacks update/delete for listings and decline/counter for offers. These are notable gaps in the full lifecycle.