Seekmodo developer docs

Reference for the REST shim, MCP JSON-RPC surface, and storefront connectors. Authenticate with HMAC; replay window is 5 minutes.

Model Context Protocol (MCP)

Seekmodo speaks the Model Context Protocol so AI clients like Claude Desktop, Cursor, and ChatGPT can read and write your search configuration on your behalf — discovering zero-result queries, proposing synonyms, pinning products, and tuning ranking — with a human approving every change. For a merchant-facing overview, see the MCP catalog search guide or the broader AI site search overview.

Already a Seekmodo customer?

Open the AI prompt library in your admin to copy ready-to-paste workflows for your AI assistant — or connect Claude / Cursor directly with an operator token.

Connect an AI agent (Claude, Cursor, and friends)

Two paths — pick whichever matches how you work. Both start in admin.seekmodo.com → Settings → AI Integration.

Path A — Wire Claude Desktop or Cursor (recommended)

This lets the AI call Seekmodo tools for you (search telemetry, synonyms, playbooks) while you approve every write.

  1. Click Mint token. Label it (e.g. cursor-laptop). Copy the raw token — it is shown once.
  2. Copy the client snippet from the mint modal (Cursor / Claude Desktop / Cline / Continue tabs).
  3. Paste it into your client's MCP config:
    • Cursor: ~/.cursor/mcp.json (Windows: %USERPROFILE%\.cursor\mcp.json)
    • Claude Desktop: claude_desktop_config.json under AppData (Windows) or Application Support (macOS)
  4. Fully quit and reopen the app. In Cursor the MCP panel should show your Seekmodo server as ready; in Claude type / to see Seekmodo playbooks.
  5. Smoke-test: ask “List my Seekmodo tools” or run /fix-zero-results.

Full snippets, scopes (operator-readonly vs operator), troubleshooting, and playbook walkthroughs: Connect Claude or Cursor runbook.

Path B — No MCP install (plain ChatGPT / Claude.ai / Gemini)

When you see a banner such as “Suggested next: Run fix-zero-results” with Run in Claude / Copy:

  • Copy puts a ready-made prompt on your clipboard — paste it into any chat AI. The AI will walk you through the playbook and ask you to pull data from admin pages as it goes (no gateway token required).
  • Run in Claude is the shortcut once Claude Desktop is connected via Path A above — it opens the playbook against your live tenant.

You can also open the prompt library anytime and hit Copy prompt for any playbook.

Storefront discovery (public AI agents)

Shopper-facing AI agents resolve a storefront's Search MCP endpoint from the storefront URL — not from mcp.seekmodo.com alone. First-party connectors and custom connectors must advertise:

  • GET https://{storefront}/.well-known/mcp.json pointing at https://{tenant_id}.mcp.seekmodo.com/mcp (auth: none), and
  • <link rel="mcp-server"> plus <meta name="mcp-server"> in every storefront <head>.

That anonymous host accepts unauthenticated JSON-RPC for a tight allowlist (primarily search and tenant.handshake), with per-IP rate limits. Full payload shape and implementation notes live on the connectors · Public MCP discovery section. Authenticated operator / connector traffic stays on https://mcp.seekmodo.com/mcp with HMAC or an operator bearer token.

Calling the gateway directly

For server-to-server integrations, the gateway speaks JSON-RPC 2.0 at POST https://mcp.seekmodo.com/mcp. Send tools/list to discover what your tenant can call, and tools/call to invoke a tool. The same tools are also POST /v1/<tool.name> over REST — interactive request schemas live in the REST OpenAPI reference. Tenant API calls use the HMAC headers documented there; operator workflows authenticate with a bearer token minted from your admin.

POST /mcp HTTP/1.1
Host: mcp.seekmodo.com
Content-Type: application/json
X-Seekmodo-Tenant: ten_...
X-Seekmodo-Timestamp: 1717000000
X-Seekmodo-Nonce: 9f3a...
X-Seekmodo-Signature: ...

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/list",
  "params": {}
}

Tool catalog

Live from the gateway · last refreshed Tue, 08 Sep 2026 03:47:36 GMT · 89 available, 1 preview. available= generally available on every plan that includes the surface · preview= name reserved, implementation on the roadmap.

Search

ToolDescriptionMutatesStatus
searchRead-only corpus search. Body params are passthrough to the per-tenant Typesense collection.noavailable
search.by_vehicleVehicle-id-scoped corpus search. Returns products whose `fits_vehicles` int[] contains the requested vehicle_id.noavailable
search.byImageImage-as-query corpus search. Accepts one of {image_b64, image_url, doc_id} and returns SKUs visually similar to the query via CLIP ViT-B/32 + Typesense vector_query.noavailable
suggestTypeahead suggestions: prior-search keywords, prefix-matched products, and matching categories.noavailable
typeaheadFlat-row typeahead for storefront connectors. Returns N prefix-matched docs from the tenant Typesense collection in the legacy {rows} shape WP / Zen Cart connectors expect.noavailable

Catalog & telemetry

ToolDescriptionMutatesStatus
eventsRecord search / click / impression events for analytics, LTR training, and bot-check verdict tagging.yesavailable
indexBulk upsert documents into the tenant's Typesense collection. Mirrors the documents/import wire shape.yesavailable
tenant.catalog_previewReturn a small sample of indexed documents (admin only). With `q`, runs a prefix-match autocomplete used by the admin doc picker.noavailable
tenant.domain.promoteSelf-service swap of the tenant's canonical storefront host. Used by connectors to flip from dev -> prod without an operator round-trip.yesavailable
tenant.handshakeVerify connector configuration and discover the tenant's tool surface, vertical, and rate limits.noavailable
tenant.region.listRead tenant-level multi-region flags + every numinix_mcp_tenant_regions row.noavailable
tenant.snapshotRead (or push to) the full tenant runtime config snapshot.noavailable

Merchandising

ToolDescriptionMutatesStatus
banners.listList banner merchandising rules for the tenant.noavailable
banners.removeDelete a banner merchandising rule by id.yesavailable
banners.setCreate or update a banner merchandising rule.yesavailable
deboosts.listList deboost merchandising rules for the tenant.noavailable
deboosts.removeDelete a deboost merchandising rule by id.yesavailable
deboosts.setCreate or update a deboost merchandising rule.yesavailable
pins.landscapeSnapshot of active pin rules with priority, schedule, audience, and metadata.noavailable
pins.listRead editorial pins for the tenant.noavailable
pins.removeDelete a pin entry by id.yesavailable
pins.setPin or exclude documents for a specific query.yesavailable
redirects.listList keyword redirect merchandising rules for the tenant.noavailable
redirects.proposePropose keyword redirect rules from search telemetry (dry-run only).noavailable
redirects.removeDelete a keyword redirect merchandising rule by id.yesavailable
redirects.setCreate or update a keyword redirect merchandising rule.yesavailable
segments.listList customer segments for the tenant.noavailable
segments.removeDelete a customer segment by id.yesavailable
segments.setCreate or update a customer segment.yesavailable
synonyms.addAdd or replace a synonym entry. id is optional; we generate one if omitted.yesavailable
synonyms.listRead the per-tenant synonym list. Returns Typesense-native synonym entries.noavailable
synonyms.removeDelete a synonym entry by id.yesavailable

Analytics

ToolDescriptionMutatesStatus
analytics.click_painHigh-volume queries with deep average click position (>=5). Highest-leverage pin / reranker candidates.noavailable
analytics.conversion_funnelDaily funnel (searches -> clicks -> add_to_carts -> purchases) plus session-scoped conversion rates.noavailable
analytics.ctr_trendDaily CTR over a rolling window — aggregate (default) or per top-N keyword.noavailable
analytics.latencyPer-tenant search latency (p50, p95) and fallback rate over a rolling window for the operator health card.noavailable
analytics.revenue_by_queryPer-keyword revenue + order count for a rolling window, under a chosen attribution model.noavailable
analytics.search_typesSearch volume breakdown by type (keyword, vehicle/YMM, hybrid) for a rolling window.noavailable
analytics.top_clicked_productsMost-clicked products with click counts and top driving keywords for a rolling window.noavailable
analytics.top_queriesMost-searched keywords with CTR and avg result count for a rolling window.noavailable
analytics.weekly_digestWeekly search digest JSON for email reports (KPIs, keywords, products, zero-results, funnel, latency).noavailable
analytics.zero_resultsSearch queries that returned zero results.noavailable
catalog.getFetch a single indexed catalog document by id or sku with rich default fields.noavailable
catalog.pruneDelete commerce catalog documents whose last_indexed_at is strictly older than the supplied cutoff. Called after a successful full index run so hard-deleted or otherwise absent products stop appearing in suggest/typeahead.yesavailable
catalog.statsCorpus size, schema fingerprint, top-K category breadcrumbs. Read-mostly catalog metadata.noavailable

Recommendations

ToolDescriptionMutatesStatus
bundle.suggestAnchor-based "complete the kit" bundle composer using co_purchase + diversity bias.noavailable
recommend.also_boughtAnchor-anchored frequently-bought-together recommendations from co-purchase signal with lexical fallback.noavailable
recommend.also_viewedAnchor-anchored also-viewed recommendations from broad same-session signal with lexical fallback.noavailable
recommend.relatedAnchor-anchored related-products recommendations from co-view signal with lexical fallback.noavailable
recommend.trendingNon-anchored trending products recommendation (last-30-day co-occurrence aggregation).noavailable

A/B testing

ToolDescriptionMutatesStatus
ab.archiveArchive an experiment without promoting any variant.yesavailable
ab.createCreate a new A/B experiment with at least two variants.yesavailable
ab.listList A/B experiments for the tenant.noavailable
ab.promotePromote a winning variant of a running A/B experiment.yesavailable
ab.resultsPer-variant impression / click / CTR rollup for an experiment.noavailable

Learning-to-rank

ToolDescriptionMutatesStatus
ltr.config.setPatch per-tenant LTR settings (management, mode, ab_ramp_pct, etc).yesavailable
ltr.diagnosticsSnapshot of LTR pipeline health: scorer reachability, linked-click coverage, filter diversity, AGREE-rate, arm CTR.noavailable
ltr.model.rollbackOperator action: roll the tenant back to a previously trained LTR model. Requires a free-text reason.yesavailable
ltr.retrainForce-retrain the LTR model now. Returns the new model summary.yesavailable
ltr.shadow_deltasList recent shadow-mode disagreements between LambdaMART and the served top-1 for operator gut-check.noavailable
ltr.shadow_feedbackRecord operator gut-check (thumbs up/down) on a shadow-mode LambdaMART disagreement.yesavailable
ltr.statusRead LTR settings, the active model summary, and recent training runs.noavailable
ltr.toggleToggle Learning-to-Rank on or off for the tenant.yesavailable

Bot defence

ToolDescriptionMutatesStatus
bot_check.statusPer-tenant bot-check status: enrollment, last activity, and 24-hour bot-blocked counts.noavailable
bot.classifyClassify a request triple (UA + IP + session) as bot or human; returns bot_score 0..100 + reasons + signal breakdown.noavailable
bot.healthBot-check inline classifier health: 5-min classify volume (inline vs http), nonce issue/verify rates, 24h shadow AGREE-rate.noavailable
nonce.issueIssue an HMAC nonce for the SERP click-beacon flow.noavailable
nonce.verifyVerify an HMAC nonce for the SERP click-beacon flow; returns valid bool + age + reason.noavailable

Shopper UX

ToolDescriptionMutatesStatus
chatConversational shopper assistant. Runs an LLM-driven loop that issues sub-tool calls (search, suggest, recommend) and returns a cited natural-language answer.noavailable

Fitment & vehicles

ToolDescriptionMutatesStatus
fitment.assignments.bulk_upsertBulk-upsert per-tenant product fitment assignments against central seekmodo_vehicle_id values.yesavailable
fitment.assignments.changesReturn per-tenant fitment assignment rows changed since updated_since (ISO-8601).noavailable
fitment.coverageCoverage aggregates over numinix_mcp_vehicle_taxonomy for the tenant.noavailable
fitment.import.csvImport fitment assignments from CSV text. Resolves YMM to central catalog (auto-creates merchant_import vehicles when missing).yesavailable
fitment.orphansVehicles with zero fitted products (product_count=0) for the tenant.noavailable
fitment.overrides.listPaginated list of per-tenant fitment overrides (operator-set add/remove rules layered on top of the AutoPro fitment graph).noavailable
fitment.resolveResolve a (year, make, model) triple against the per-tenant vehicle taxonomy projection into a concrete vehicle_id + canonical label. Returns null when no row matches.noavailable
vehicle_taxonomy.bulk_upsertBulk-upsert vehicle taxonomy rows (year/make/model + pre-computed VLP slug + product_count) into the per-tenant projection. Up to 1000 rows per call. Called by the connector's seekmodo:vlp-project artisan command.yesavailable
vehicle_taxonomy.pruneDelete vehicle taxonomy rows whose last_seen_at is older than the supplied UTC cutoff (ISO 8601). Called after a successful seekmodo:vlp-project run so vehicles that disappear from the connector's projection stop appearing in the gateway sitemap.yesavailable
vehicle.taxonomy.lookupResolve a per-tenant vehicle taxonomy row by VLP slug (e.g. "keys-for-2019-honda-civic") or by vehicle_id. Returns the canonical row used by the BC Worker VLP renderer.noavailable
vehicle.taxonomy.neighboursReturn the two AKS-canonical neighbour lanes (same make+model different year; same year+make different model) for a given vehicle_id in the per-tenant projection.noavailable
vehicles.catalog.changesReturn central vehicle catalog rows changed since updated_since (ISO-8601). Supports cursor pagination.noavailable
vehicles.catalog.lookupResolve year/make/model (and optional engine_trans_code) against the central Seekmodo vehicle catalog.noavailable
vehicles.picker.optionsReturn cascading YMM picker options for vehicles that have at least one product assignment for this tenant.noavailable

ESP integrations

ToolDescriptionMutatesStatus
esp.dlq_recentRecent ESP DLQ rows for the admin failure-visibility surface.noavailable
esp.test_eventFire a synthetic event at the configured ESP and return the provider verdict synchronously.yesavailable

Commerce

ToolDescriptionMutatesStatus
commerce.boost_by_stockSet stock_ranking_policy=demote_all_oos via tenant.config.set.yesavailable
commerce.exclude_out_of_stockSet stock_ranking_policy=exclude_all_oos via tenant.config.set.yesavailable
commerce.promotions.listList active commerce promotions.nopreview

Other

ToolDescriptionMutatesStatus
askSingle-turn Ask AI over the tenant catalog and policy docs. Bounded search + catalog.get loop with cited answers.noavailable
resolve_redirectResolve a shopper query to a merchandising redirect URL, if any.noavailable