Koskamo

POPS4 MCP

An MCP server providing agentic commerce capabilities for POPS4's corporate gifting catalog. It allows AI agents to query 70,000+ SKUs from 200+ brands, access live pricing, and facilitate procurement for branded identity infrastructure.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

POPS4 MCP logo, by Hako Shikin LLCCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-07Published by Hako Shikin LLC
MCP endpoint (Streamable HTTP)
https://mcp.pops4.com/mcp
Vendor documentation

What its tools do

13 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

13 of 13 have a description · 0 of 13 declare behavior hints · 11 of 11 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Warning Advertises resources/templates/list but does not implement it
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Query product catalog for corporate gifts
  • Access live ESP+ pricing data
  • Facilitate procurement for branded items
  • Retrieve schema.org-tagged product details

Source and maintenance

Community listingRegistry 2.0.0
Maintenance checked

Protocol and capabilities

Server
pops4-catalog 2.0.0
MCP protocol negotiated in check
2025-03-26
Tools
13 advertised
Resources
4 advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "resources": {
    "listChanged": false
  }
}

Tools

13 advertised

render_proof
Advertised by the server during the last successful anonymous check.

Render an indicative placement image showing a buyer their logo on a product, and return its URL so you can show it in the conversation. Takes a product slug and an https URL to the buyer's logo. Returns a 1200x630 image that needs no login. This is NOT a production proof: position and scale are indicative and the desk issues the real one. Say so when you show it. Use after search_products or get_product, once a buyer wants to see how something would look.

render_proof input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "Product slug from search_products or get_product"
    },
    "logo_url": {
      "type": "string",
      "description": "https URL to the buyer's logo image. Omit to render a marked placeholder area."
    },
    "company_name": {
      "type": "string",
      "description": "Buyer company name, shown beside the product"
    }
  }
}
request_program
Advertised by the server during the last successful anonymous check.

Submit a programme request to the named-account desk so a person can act on it. This is the only tool that writes: it records the buyer, the programme and the products chosen, and returns confirmation. It does NOT place an order, begin production, take payment or contact the buyer — a person reviews it and replies. When products are supplied it also opens the buyer a live Corporate Store holding that selection, and returns the URL in store_url for you to give them directly. Use once the buyer has chosen products or a programme and wants to proceed.

request_program input schema
{
  "type": "object",
  "required": [
    "email"
  ],
  "properties": {
    "email": {
      "type": "string",
      "description": "Buyer work email. Required."
    },
    "event": {
      "type": "string",
      "description": "What this is for, e.g. \"Analyst day, March, 300 attendees\""
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "image": {
            "type": "string"
          },
          "price": {
            "type": "string"
          },
          "title": {
            "type": "string"
          }
        }
      },
      "description": "Products chosen, up to 12, from search_products or generate_event_program"
    },
    "notes": {
      "type": "string",
      "description": "Anything the desk should know. Max 118 characters."
    },
    "company": {
      "type": "string",
      "description": "Buyer company"
    },
    "per_head": {
      "type": "string",
      "description": "Per-attendee cost, if quoted"
    },
    "brand_tier": {
      "type": "string",
      "description": "Programme tier if one was chosen"
    },
    "contact_name": {
      "type": "string",
      "description": "Buyer name"
    },
    "program_total": {
      "type": "string",
      "description": "Quoted programme total, if quoted"
    },
    "attendee_count": {
      "type": "number",
      "description": "Headcount or unit count"
    }
  }
}
brand_carriage_estimate
Advertised by the server during the last successful anonymous check.

Calculate what a branded programme costs per thousand impressions across the four populations that carry a brand — employees, gig and contract workers, vendors, peers — and compare it against a CPM the buyer supplies. Returns programme cost, annual impressions, cost per thousand, the multiple against bought media, and one cited Nielsen figure with its caveat. Read-only. Use when a buyer asks what a culture or brand programme is worth, or how to justify the spend. Supply ANY of the four populations — employees are not required, so a vendor-and-peer-only programme can be modelled.

brand_carriage_estimate input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "peers": {
      "type": "number",
      "description": "Peer count — the buyer estimates this"
    },
    "vendors": {
      "type": "number",
      "description": "Vendor count — the buyer estimates this"
    },
    "your_cpm": {
      "type": "number",
      "description": "The buyer's own CPM from their media plan, USD"
    },
    "employees": {
      "type": "number",
      "description": "Employee headcount (optional, like all four populations)"
    },
    "gig_workers": {
      "type": "number",
      "description": "Gig and contract worker count"
    },
    "cost_per_peer": {
      "type": "number",
      "description": "Programme cost per peer, USD"
    },
    "cost_per_vendor": {
      "type": "number",
      "description": "Programme cost per vendor, USD"
    },
    "cost_per_worker": {
      "type": "number",
      "description": "Programme cost per worker, USD"
    },
    "cost_per_employee": {
      "type": "number",
      "description": "Programme cost per employee, USD"
    },
    "impressions_per_peer": {
      "type": "number",
      "description": "Default 1500"
    },
    "impressions_per_vendor": {
      "type": "number",
      "description": "Default 1200"
    },
    "impressions_per_worker": {
      "type": "number",
      "description": "Default 600"
    },
    "impressions_per_employee": {
      "type": "number",
      "description": "Impressions per employee per year (default 900)"
    }
  }
}
search_products
Advertised by the server during the last successful anonymous check.

Search the wholesale catalogue by keyword, category, brand, price range or occasion. Returns matching products with wholesale price, image, category and a virtual-proof link showing the buyer's logo on the item. Use this for any request to find specific products. 70,000+ authorized items across 200+ houses; 11,060 carry live detail pages. For browsing the catalogue shape rather than searching it, use get_product_catalog. Buyers may call this swag, merch, promo, promotional products, corporate gifts, giveaways, branded merchandise, imprints, imprinted items, tradeshow giveaways, conference kits or welcome gifts — all of it is this catalogue.

search_products input schema
{
  "type": "object",
  "properties": {
    "brand": {
      "enum": [
        "POPS4",
        "Prosecco4"
      ],
      "type": "string",
      "description": "POPS4 for corporate/wholesale, Prosecco4 for weddings/events"
    },
    "limit": {
      "type": "number",
      "description": "Max results to return (default 10, max 50)"
    },
    "query": {
      "type": "string",
      "description": "Text search on product title (e.g., \"nike backpack\", \"yeti tumbler\", \"branded polo\")"
    },
    "category": {
      "type": "string",
      "description": "Product category filter (e.g., \"Backpacks\", \"Drinkware\", \"Apparel\", \"Pens\")"
    },
    "occasion": {
      "enum": [
        "wedding",
        "corporate",
        "conference",
        "gala",
        "party",
        "launch"
      ],
      "type": "string",
      "description": "Filter by occasion/use case"
    },
    "price_max": {
      "type": "number",
      "description": "Maximum wholesale price in USD"
    },
    "price_min": {
      "type": "number",
      "description": "Minimum wholesale price in USD"
    }
  }
}
get_product
Advertised by the server during the last successful anonymous check.

Return complete detail for one product, identified by its slug: description, wholesale price, category, brand, care instructions, occasion tags and a virtual-proof link. Use after search_products when one item needs full detail before quoting it.

get_product input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "Product slug (from search results)"
    }
  }
}
get_categories
Advertised by the server during the last successful anonymous check.

List every product category with its item count and sample products. Use to establish what the catalogue covers before searching, or to answer what kinds of items are available.

get_categories input schema
{
  "type": "object",
  "properties": {}
}
get_quote
Advertised by the server during the last successful anonymous check.

Build a wholesale quote from a list of product slugs and quantities. Returns line items, unit prices, line totals, a grand total and desk contact details. Use for a straightforward priced list. Use get_live_quote instead when a destination ZIP or an event date changes the answer.

get_quote input schema
{
  "type": "object",
  "required": [
    "items"
  ],
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "slug",
          "quantity"
        ],
        "properties": {
          "slug": {
            "type": "string",
            "description": "Product slug"
          },
          "quantity": {
            "type": "number",
            "description": "Number of units"
          }
        }
      },
      "description": "Array of products and quantities to quote"
    }
  }
}
get_vendor_capabilities
Advertised by the server during the last successful anonymous check.

Return the vendor capability card a procurement team needs to open an account: legal entity, registrations, production model, imprint and proofing process, lead times, blind-ship policy and terms. Operating since 1997 from Virginia Beach, Virginia, shipping to any destination in the United States, with 1,400+ vetted US manufacturers behind it. Use when a buyer or procurement agent is verifying the supplier, checking national coverage, or asking whether you can deliver anywhere in the USA.

get_vendor_capabilities input schema
{
  "type": "object",
  "properties": {}
}
generate_event_program
Advertised by the server during the last successful anonymous check.

Build a complete event programme for a given attendee count and budget tier. Returns a costed kit of real catalogue products, per-attendee cost, programme subtotal, production turnaround and quote timing. Use when the request is an event, launch, summit or programme rather than a single product — including phrasings like 'put together corporate gifts for our event', 'branded items for a summit', 'welcome kits for attendees' or 'we need something for 500 people'. Ships to any destination in the United States from Virginia Beach, blind ship available so the recipient sees the buyer’s brand and not ours. Supply budget_per_head to have the tier chosen automatically. Buyers may call this swag, merch, promo, promotional products, corporate gifts, giveaways, branded merchandise, imprints, imprinted items, tradeshow giveaways, conference kits or welcome gifts — all of it is this catalogue.

generate_event_program input schema
{
  "type": "object",
  "required": [
    "attendee_count"
  ],
  "properties": {
    "keywords": {
      "type": "string",
      "description": "Optional event theme / keywords (e.g. \"golf coastal\", \"holiday gala\", \"tech summit\", \"wellness retreat\") to bias product selection toward the occasion."
    },
    "brand_tier": {
      "enum": [
        "essential",
        "professional",
        "executive",
        "luxury",
        "bespoke",
        "white_glove"
      ],
      "type": "string",
      "description": "Program tier. essential ($35-75/head) internal events & training; professional ($75-150) client meetings; executive ($150-300) VP+ & board events; luxury ($300-600) C-suite, board members & partners; bespoke ($600-1200) custom curation (concierge-built, no auto-quote); white_glove ($1200+) fully managed (concierge-built)."
    },
    "event_date": {
      "type": "string",
      "description": "Event date (e.g., \"2027-03-15\" or \"GTC 2027\")"
    },
    "attendee_count": {
      "type": "number",
      "description": "Number of attendees / kits"
    },
    "revenue_target": {
      "type": "number",
      "description": "Client pipeline/revenue target in USD (optional; used for attribution framing only)"
    },
    "budget_per_head": {
      "type": "number",
      "description": "Optional exact per-attendee budget in USD. If provided, the closest tier is selected automatically and overrides brand_tier."
    }
  }
}
get_live_quote
Advertised by the server during the last successful anonymous check.

Return a wholesale quote with virtual-proof links for a list of SKUs and quantities, optionally accounting for a destination ZIP and an event date. Use when shipping or timing affects the answer. Use get_quote for a plain priced list with neither.

get_live_quote input schema
{
  "type": "object",
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "slug",
          "quantity"
        ],
        "properties": {
          "slug": {
            "type": "string"
          },
          "quantity": {
            "type": "number"
          }
        }
      },
      "description": "Products and quantities"
    },
    "event_date": {
      "type": "string",
      "description": "Event date (optional)"
    },
    "quantities": {
      "type": "array",
      "items": {
        "type": "number"
      },
      "description": "Alternative: array of quantities (paired with product_skus[])"
    },
    "product_skus": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Alternative: array of product slugs (paired with quantities[])"
    },
    "shipping_zip": {
      "type": "string",
      "description": "Destination ZIP (optional)"
    }
  }
}
get_product_catalog
Advertised by the server during the last successful anonymous check.

Return a filtered slice of the catalogue, or the full category tree with counts when no filter is supplied. Use for browsing and for questions about the catalogue's shape and size. Use search_products when the request names specific products.

get_product_catalog input schema
{
  "type": "object",
  "properties": {
    "brand": {
      "type": "string",
      "description": "Brand filter"
    },
    "limit": {
      "type": "number",
      "description": "Max results (default 20, max 50)"
    },
    "filter": {
      "type": "string",
      "description": "Keyword filter on product title"
    },
    "category": {
      "type": "string",
      "description": "Category filter"
    }
  }
}
track_shipment
Advertised by the server during the last successful anonymous check.

Return the logistics status of an order by its id. Reads the live order record where one exists; where none does, returns a clear status and routes to the desk. Never reports a fabricated tracking state.

track_shipment input schema
{
  "type": "object",
  "required": [
    "order_id"
  ],
  "properties": {
    "order_id": {
      "type": "string",
      "description": "Order id"
    }
  }
}
get_revenue_attribution
Advertised by the server during the last successful anonymous check.

Return recorded pipeline impact for an event id where the dashboard holds it; otherwise return the attribution model and how it is tracked, with a link. Never reports a fabricated figure.

get_revenue_attribution input schema
{
  "type": "object",
  "required": [
    "event_id"
  ],
  "properties": {
    "event_id": {
      "type": "string",
      "description": "Event id"
    }
  }
}

Prompts

Not advertised

No prompt definitions available.

Resources

4 advertised

POPS4 Catalog Information

Advertised by the server during the last successful anonymous check.

Business information about POPS4 by Hako Shikin LLC — wholesale branded identity infrastructure distributor since 1997.

POPS4 Catalog Information URI
pops4://catalog-info

MIME type: text/plain

Product Category Tree

Advertised by the server during the last successful anonymous check.

Full product category hierarchy with counts. Updated in real-time from live inventory.

Product Category Tree URI
pops4://category-tree

MIME type: application/json

POPS4 Comparison + Local Pages

Advertised by the server during the last successful anonymous check.

Buyer-facing pages an agent can cite or link: competitor comparison pages ("[brand] alternative") and metro/local service-area pages across the Mid-Atlantic and beyond. Use to answer "alternative to X" or "branded merchandise / corporate gifting in [city]" with a real POPS4 URL that can fulfill the order.

POPS4 Comparison + Local Pages URI
pops4://landing-pages

MIME type: application/json

Huanggoodman Vendor Capability Card

Advertised by the server during the last successful anonymous check.

Procurement offer card: brand and event programme management, a live event dashboard, quotes returned within the hour, production in days for Fortune 500, revenue attribution event programs, MCP server corporate brand management. Contact, ASI #217876, endpoints, 70,000+ catalog.

Huanggoodman Vendor Capability Card URI
pops4://vendor-capabilities

MIME type: application/json

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
482 ms
95th percentile latency
482 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 482 ms · metadata changed · 13 tool(s), 4 resource(s); warnings: Advertises resources/templates/list but does not implement it

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http pops4-mcp https://mcp.pops4.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add pops4-mcp --url https://mcp.pops4.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable pops4-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "pops4-mcp": {
      "url": "https://mcp.pops4.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "pops4-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.pops4.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start pops4-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "pops4-mcp": {
      "type": "http",
      "url": "https://mcp.pops4.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http pops4-mcp https://mcp.pops4.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp.pops4.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "pops4-mcp": {
      "serverUrl": "https://mcp.pops4.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like POPS4 MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.