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

@sellable/mcp

v0.1.30

Published

Sellable MCP server for Claude Code and Codex campaign workflows

Readme

Sellable Claude Code Plugin

Craft personalized LinkedIn messages using the REPLY framework directly in Claude Code.

What It Does

  • Load your Sellable campaigns
  • Create campaigns headlessly with a realtime watch link
  • Research prospects (web search and LinkedIn API)
  • Apply the REPLY framework with 11 quality gates
  • Save and approve messages for sending

Each message gets 5+ minutes of Claude attention with deep research - no other tool does this.

Installation

Prompt Source Of Truth

There is one public create-campaign entrypoint shared across hosts:

  • sellable:create-campaign

The public wrapper loads the approval-gated workflow from:

  • mcp/sellable/skills/create-campaign-v2/SKILL.md

The older mcp/sellable/skills/create-campaign/SKILL.md prompt is kept as an internal legacy prompt for compatibility only. Do not advertise it as a public command.

1. One-Command Agent Install

For Claude Code and Codex CLI:

npx -y @sellable/install@latest --host all --token skt_live_your_token_here --workspace-id your_workspace_id

Agent-readable install instructions are available at:

https://app.sellable.dev/agent-install.txt

The reviewable curl installer is:

curl -fsSL "https://app.sellable.dev/api/v2/cli/install" -o /tmp/sellable-install.sh
sh /tmp/sellable-install.sh

Phase 112 v1 uses package stdio MCP through @sellable/mcp. Hosted HTTP MCP is a future/advanced mode until the hosted endpoint exists.

Package-mode installs launch @sellable/mcp@latest, so each fresh host MCP start resolves the newest stable npm release. The MCP server also runs a cached startup/auth update check and tells the agent to run npx -y @sellable/install@latest when the installed runtime is behind npm.

Publishing @sellable/mcp

Publish from the repo root with:

npm run mcp:publish

The script loads .env and prod.env, builds mcp/sellable, verifies npm auth, and publishes with a temporary npm config file. Prefer NPM_TOKEN=<npm token> in prod.env; NODE_AUTH_TOKEN, SELLABLE_NPM_TOKEN, and NPM_PUBLISH_TOKEN are also supported.

2. Generate API Token

  1. Go to https://app.sellable.dev/settings
  2. Click "Generate Token"
  3. Copy the token (starts with skt_live_)

3. Claude Setup

Install MCP server:

claude mcp add --transport stdio sellable -- npx -y @sellable/mcp@latest

Create auth config at ~/.sellable/config.json:

{
  "token": "skt_live_your_token_here",
  "activeWorkspaceId": "your_workspace_id"
}

The token is provided when you generate it. Use list_workspaces + set_active_workspace to choose a workspace if you don't know the ID yet.

4. Codex Setup

For customer/package installs, use the public installer:

npx -y @sellable/install@latest --host codex --token skt_live_your_token_here --workspace-id your_workspace_id

If you already have ~/.sellable/config.json, rerun/verify without rewriting auth:

npx -y @sellable/install@latest --host codex
sellable --verify-only --host codex

The installer does the full local setup:

  • writes ~/.sellable/config.json
  • registers the sellable MCP server with Codex
  • installs the sellable@sellable Desktop plugin so Codex Desktop loads the mcp__sellable__* tools into skill sessions

After the installer passes, fully quit and reopen Codex Desktop. Start a new thread and select Sellable Create Campaign, or invoke $sellable:create-campaign. If the app still says mcp__sellable__* tools are missing after the installer passes, check that ~/.codex/config.toml contains both [marketplaces.sellable] and [plugins."sellable@sellable"]. The skill being visible only proves skill discovery; the plugin is what mounts the Sellable MCP tools for Codex Desktop.

Public Names And Host Commands

Use these names consistently:

  • Claude Code command: /sellable:create-campaign
  • Codex command: $sellable:create-campaign
  • Codex Desktop plugin: sellable@sellable
  • Codex visible skill: Sellable Create Campaign
  • Codex skill frontmatter name: create-campaign
  • MCP server name: sellable
  • Internal workflow prompt: create-campaign-v2

Never tell users to run /sellable:create-campaign-v2, $sellable:create-campaign-v2, or $sellable:sellable:create-campaign. create-campaign-v2 is an internal MCP subskill loaded by get_subskill_prompt({ subskillName: "create-campaign-v2" }).

Structured Question Parity

Claude Code should ask intake and approval gates with AskUserQuestion. Codex should ask them with request_user_input when it is exposed in an interactive session. The installer enables Default mode support by writing default_mode_request_user_input = true under [features] in ~/.codex/config.toml. codex exec is non-interactive and cannot show the structured questionnaire UI, so it is only useful for smoke checks that stop before human intake/approval.

Create-Campaign Soul

The create-campaign workflow ships with a command-specific SOUL.md identity: the Sellable campaign GTM engineer. It tells Claude/Codex to translate internal workflow state into founder-friendly campaign language, use "quick question panel" for structured questions, and keep implementation details out of normal customer-facing updates. Use quick question panel in customer-facing setup blockers.

The Codex installer also writes compatibility cache aliases for recent plugin versions so stale Desktop skill links resolve to the current wrapper instead of showing file/version debugging to the user.

Usage

From Sellable UI

  1. Open any campaign
  2. Go to the Launch tab
  3. Click "Open in Claude Code"
  4. Copy the command shown

From Claude Code

Use the create-campaign skill:

/sellable:create-campaign

Then describe intent naturally, for example:

  • "Let's make a campaign with sellable"
  • "Create a campaign for acme.com"
  • "Launch a LinkedIn campaign for this company"

For local UAT-style runs against a company/domain:

npm run campaign:v2:local -- teaatshiloh.com

From Codex

Use the Codex skill entrypoint:

$sellable:create-campaign

Installed skill package path:

  • ~/.codex/plugins/cache/sellable/sellable/<version>/skills/sellable-create-campaign/SKILL.md

Host Parity Runbook (Codex + Claude)

Use the same MCP runtime preflight in both hosts:

  1. get_auth_status()
  2. get_campaign_framework({ flowVersion: "v2", includePlugins: true })
  3. Optional resume branch with get_campaign_context({ campaignId, refresh: true })
  4. Subskill discovery and load via:
    • list_subskill_prompts (catalog)
    • search_subskill_prompts (lookup)
    • get_subskill_prompt({ subskillName: "create-campaign-v2" }) (load)
  5. Net-new sender research completion gate before create:
    • get_subskill_prompt({ subskillName: "research-sender" })
    • run sender research
    • complete_sender_research(...)

Canonical shortcut:

  • bootstrap_create_campaign({ flowVersion: "v2", campaignId? })

If bootstrap returns blocking errors, fail fast and do not continue into provider search/import tools.

Provider preflight contract:

  • Call get_provider_prompt({ provider, campaignOfferId? }) before any provider action.
  • Provider actions (search_apollo, search_sales_nav, search_prospeo, search_signals, import_leads) are runtime-gated until prompt preload is done.

Parallel execution contract:

  • Claude host: use Task subagents for parallel research/crafting units.
  • Codex host: use multi_tool_use.parallel for independent tool-call batches.
  • If neither backend is available, run sequentially with the same output schema.

Config path resolution (in order):

  1. SELLABLE_CONFIG_PATH
  2. ~/.sellable/config.json
  3. $CODEX_HOME/sellable.json (compatibility fallback)
  4. ~/.codex/sellable.json (compatibility fallback)
  5. ~/.claude/sellable.json (compatibility fallback)

Hetzner Smoke / UAT

For hosted MCP verification, keep the product MCP host separate from the sellable-admin host:

  • product MCP: sellable-web-mcp
  • admin MCP: sellable-ops

The product MCP runtime reads auth from the normal sellable.json path resolution above. SELLABLE_TOKEN by itself is not the authoritative runtime contract for hosted smoke/UAT runs.

Recommended smoke/UAT flow on the VPS:

  1. use the shared helper in scripts/lib/vps-common.sh
  2. rebuild with npm run mcp:build
  3. run the direct stdio MCP client in scripts/mcp/sellable-tool-call.mjs
  4. use scripts/run-sellable-mcp-smoke.sh for the baseline host proof before feature-specific UAT

For file-path features like CSV upload, create the fixture file on the VPS itself and pass the absolute host path to the tool.

Engage Memory (Learns Over Time)

The engage skill persists user-specific, workspace-scoped memory in a separate JSON file so it can learn over time without editing repo or package files.

Default path: next to your sellable.json (same directory), named:

  • sellable.engage.json

Override path with:

  • SELLABLE_ENGAGE_MEMORY_PATH

This file stores the commenting style guide (markdown), proven search keywords with outcomes, and tracked people (LinkedIn profiles), all scoped by workspace.

Config You Can Edit (Source Of Truth)

  • Auth + active workspace: ~/.sellable/config.json (or SELLABLE_CONFIG_PATH; old $CODEX_HOME/sellable.json, ~/.codex/sellable.json, and ~/.claude/sellable.json files remain compatibility fallbacks)
  • Engage memory (style guide + searches + tracked people): sellable.engage.json (or SELLABLE_ENGAGE_MEMORY_PATH)
  • Team-editable, project-local configs (recommended to edit in git):
    • ./.sellable/configs/writing/styleguide.md
    • ./.sellable/configs/audience/icp-filters.md
    • ./.sellable/configs/proof/claims.md
    • ./.sellable/configs/discovery/influencers.md
    • ./.sellable/configs/discovery/post-filters.md

Files under mcp/sellable/skills/**/core/* are package repo files, not the intended user config surface.

Skills

/sellable:create-campaign

Primary public entrypoint for the approval-gated campaign creation flow.

interview

Self-interview skill to capture voice + ICP + boundaries into ./.sellable/configs/writing/styleguide.md and persist it into MCP memory for future sessions.

Available Tools

Workspace Tools (Free)

  • list_workspaces - List accessible workspaces
  • get_active_workspace - Show active workspace selection
  • set_active_workspace - Set active workspace by ID
  • create_workspace - Create a new workspace
  • add_teammate - Invite a teammate

Campaign Tools (Free)

  • get_campaigns - List all campaigns
  • get_campaign - Get campaign details
  • create_campaign - Create a campaign offer
  • update_campaign - Update campaign positioning/brief/workflow
  • get_campaign_messages_preview - Preview campaign leads for messaging (supports filters + pagination)
  • get_table_rows - Get leads list
  • get_rows_minimal - Get minimal lead list (fast)
  • get_rows - Get full lead data
  • update_cell - Save message/approve
  • get_message_prompt - Get REPLY framework
  • start_campaign / pause_campaign - Control sending

Lead Tools (Free)

  • search_apollo - Apollo people search
  • search_prospeo - Prospeo people search
  • search_sales_nav - Sales Navigator search
  • search_signals - Signal discovery search
  • load_csv_domains - Preview/confirm a CSV-on-disk company-domain file and return a domainFilterId
  • load_csv_linkedin_leads - Preview/confirm a CSV-on-disk LinkedIn profile file and create a lead list
  • import_leads - Create a lead list and start importing leads
  • confirm_lead_list - Import confirmed lead list into campaign table

Processing Tools (Free)

  • draft_rubrics - Draft rubric criteria (stored in MCP state)
  • select_necessary_rubrics - Keep/mark required rubric checks
  • save_rubrics - Persist rubrics and enable ICP filtering
  • add_rubric_item - Add a single rubric criterion
  • update_rubric_item - Update a rubric criterion by ID
  • delete_rubric_item - Delete a rubric criterion by checkName
  • check_rubric - Queue enrichment + scoring sample
  • wait_for_rubric_results - Poll pass-rate results
  • upsert_rubric - Save rubric to campaign (legacy)

Readiness Tools (Free)

  • wait_for_lead_list_ready - Wait for lead list import to complete (and rows)
  • wait_for_campaign_table_ready - Wait for campaign table rows to appear

LinkedIn Tools (Cost Credits)

  • fetch_linkedin_posts - Recent LinkedIn posts
  • fetch_linkedin_profile - Full profile data
  • fetch_company - Company profile data

Credits

  • Campaign tools are free (you pay Claude tokens)
  • LinkedIn tools cost Sellable credits
  • WebSearch is free (your Claude subscription)

Troubleshooting

"Sellable not configured" Error

Create ~/.sellable/config.json with your token. Get one at https://app.sellable.dev/settings/integrations.

Token Not Working

  1. Make sure token starts with skt_
  2. Check token is not revoked
  3. Verify activeWorkspaceId matches your workspace (or run list_workspaces + set_active_workspace)

Support

  • Issues: https://github.com/csreyes/sellable/issues
  • Docs: https://docs.sellable.dev
  • Email: [email protected]