npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@voyantjs/catalog-mcp

v0.53.0

Published

Phase 2.x — MCP (Model Context Protocol) server scaffolding for the catalog plane. Wraps the catalog plane's APIs as agent-callable tools so AI assistants (Claude, ChatGPT plugins, custom agents) connect with tenant-scoped credentials and call tools rathe

Readme

@voyantjs/catalog-mcp

Phase 2.x — MCP (Model Context Protocol) server scaffolding for the catalog plane. Wraps the catalog plane's APIs as agent-callable tools so AI assistants (Claude, ChatGPT plugins, custom agents) connect with tenant-scoped credentials and call tools rather than crafting REST calls.

See docs/architecture/catalog-rag-architecture.md §3 + §12 (Open question 1).

Architectural commitment

AI agents query the API, not the vector database directly.

The MCP tools wrap getResolvedXById, executeSemanticSearch, federateAudienceSearch, and the source adapter live-resolve / quote paths — never the vector DB. Visibility filtering, overlay resolution, audit, and rate limiting all happen at the API layer where they normally do. The MCP server is a thin transport.

Install

pnpm add @voyantjs/catalog-mcp

What's in the box

  • ./contractMcpToolDefinition, McpToolHandler, McpToolContext types. Transport-agnostic: define the tool surface here, wire it into your MCP transport of choice (the @modelcontextprotocol/sdk, your own HTTP layer, an SSE handler, etc.).
  • ./registrycreateMcpToolRegistry + dispatchTool helpers. Templates register all tools at startup and the registry exposes a unified dispatch entry point for the transport layer.
  • ./tools/* — Five canonical tools per the architecture doc:
    • search_catalog — keyword / hybrid / semantic search across a vertical
    • get_entity — fetch a single resolved CatalogEntry view
    • suggest_alternatives — semantic similarity for "more like this"
    • check_availability — calls the source adapter's volatile-live path
    • get_quote — calls the source adapter to lock a price proposition

Tool isolation guarantees

  • All tools enforce visibility filtering through the catalog plane's resolver. A customer-actor agent never receives staff-only fields, regardless of how cleverly the agent crafts the search query.
  • search_catalog uses executeSemanticSearch — the agent's audience pool is enforced server-side; cross-audience federation requires a staff-actor context.
  • check_availability and get_quote route through the source adapter — volatile-live values are always live, never cached, never embedded.

Wiring into an MCP transport

Templates wire the registry into their MCP SDK transport of choice:

import { createMcpToolRegistry } from "@voyantjs/catalog-mcp/registry"
import { searchCatalogTool } from "@voyantjs/catalog-mcp/tools/search-catalog"
import { getEntityTool } from "@voyantjs/catalog-mcp/tools/get-entity"
// ... and so on

const registry = createMcpToolRegistry({
  context: {
    actor: "staff",
    tenantId: "operator_xyz",
    catalog: { /* injected services */ },
  },
})

registry.register(searchCatalogTool)
registry.register(getEntityTool)
// ... wire registry.dispatchTool into your MCP server's CallTool handler.

The @modelcontextprotocol/sdk is not a dependency of this package — the catalog-mcp surface is the tool definitions; the transport is the operator's choice (stdio for local dev, HTTP+SSE for hosted, custom for templates).