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.334

Published

Sellable MCP server for Claude Code and Codex campaign workflows

Downloads

14,148

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 are five public Sellable entrypoints shared across hosts:

  • sellable:create-campaign
  • sellable:create-ab-test
  • sellable:foundation
  • sellable:content
  • sellable:create-post

The create-campaign public wrapper at mcp/sellable/skills/create-campaign/SKILL.md handles auth/bootstrap and loads the approval-gated workflow from:

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

The create-ab-test public wrapper prepares clean A/B split lead lists and review-copy campaigns from:

  • mcp/sellable/skills/create-ab-test/SKILL.md

The foundation public wrapper loads the core identity/company memory workflow from:

  • mcp/sellable/skills/foundation/SKILL.md

The tested internal/backward-compatible memory engine remains:

  • mcp/sellable/skills/interview/SKILL.md

The content public wrapper captures transcripts and rough notes, clusters recurring ideas, extracts story/proof/question cards, and develops post seeds before drafting from:

  • mcp/sellable/skills/content/SKILL.md

The create-post public wrapper captures raw ideas, loads voice internally, researches hooks plus market beliefs, develops a premise with story/tension and reader value, validates proof/AI tells, and saves content artifacts under ~/.sellable/content/linkedin/** from:

  • mcp/sellable/skills/create-post/SKILL.md

Keep create-campaign-v2 and load-voice internal. Do not advertise either as a public command. load-voice remains a direct MCP utility for generic writing surfaces that are not posts or campaigns.

1. One-Command Agent Install

For Claude Code and Codex CLI:

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

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" | sh

Windows users can use the native PowerShell installer:

iwr "https://app.sellable.dev/api/v2/cli/install.ps1" | iex

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 curl -fsSL "https://app.sellable.dev/api/v2/cli/install" | sh when the installed runtime is behind npm.

For CI/scripted installs, set SELLABLE_TOKEN and SELLABLE_WORKSPACE_ID before running the curl installer. The public path remains:

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

Publishing @sellable/mcp

Publish from the repo root with:

npm run validate:sellable-skills
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 Fallback

The public installer should handle Claude setup. Use this manual path only for troubleshooting when Node/npm/npx are already known-good and the installer route is unavailable.

Install MCP server manually:

claude mcp add --transport stdio sellable -- npm exec --yes --package @sellable/mcp@latest -- sellable-mcp

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:

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

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

curl -fsSL "https://app.sellable.dev/api/v2/cli/install" | sh
sellable --verify-only --host codex --json

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, Sellable Create A/B Test, Sellable Foundation, Sellable Content, or Sellable Create Post; or invoke $sellable:create-campaign, $sellable:create-ab-test, $sellable:foundation, $sellable:content, or $sellable:create-post. 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
  • Claude Code command: /sellable:create-ab-test
  • Claude Code command: /sellable:foundation
  • Claude Code command: /sellable:content
  • Claude Code command: /sellable:create-post
  • Codex command: $sellable:create-campaign
  • Codex command: $sellable:create-ab-test
  • Codex command: $sellable:foundation
  • Codex command: $sellable:content
  • Codex command: $sellable:create-post
  • Codex Desktop plugin: sellable@sellable
  • Codex visible skill: Sellable Create Campaign
  • Codex visible skill: Sellable Create A/B Test
  • Codex visible skill: Sellable Foundation
  • Codex visible skill: Sellable Content
  • Codex visible skill: Sellable Create Post
  • Codex skill frontmatter name: create-campaign
  • Codex skill frontmatter name: create-ab-test
  • Codex skill frontmatter name: foundation
  • Codex skill frontmatter name: content
  • Codex skill frontmatter name: create-post
  • MCP server name: sellable
  • Internal workflow prompt: create-campaign-v2
  • Internal/backward-compatible memory prompt: interview

Never tell users to run /sellable:create-campaign-v2, $sellable:create-campaign-v2, $sellable:load-voice, or $sellable:sellable:create-campaign. create-campaign-v2 is an internal MCP subskill loaded by get_subskill_prompt({ subskillName: "create-campaign-v2" }). load-voice is an internal direct MCP utility. content is the preferred entrypoint for adding transcripts, recurring ideas, and post seeds. foundation is the preferred entrypoint for durable founder/company memory. create-post remains a supported direct drafting shortcut and loads voice silently for post drafting.

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?, host?, model?, reasoningEffort?, modelMetadataSource? })

Pass model/reasoning metadata only when it comes from active turn/runtime metadata or explicit user confirmation. For Codex, use nodeRepl.requestMeta["x-codex-turn-metadata"] and pass modelMetadataSource: "codex_turn_metadata". Config files such as ~/.codex/config.toml are fallback/cross-check evidence only and must not trigger model-switch warnings.

For Claude Code, pass model metadata only when the current host exposes active runtime model and effort for the same session, or when the user explicitly confirms current /status or /model output that includes both model and effort. If the current Claude session context explicitly states both values, use modelMetadataSource: "claude_session_context". Use modelMetadataSource: "user_confirmed" for explicit user confirmation. Do not use a nested claude -p run, ~/.claude/settings.json, or CLI defaults as active-session evidence.

Claude session-context self-report shape:

- Model (name): ...
- Model (ID): ...
- Reasoning effort: ...
- Source: active Claude Code session context

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:

  • Source work stays inline in the parent thread with active provider MCP tools. get_source_scout_registry intentionally returns no custom source-scout agents in the normal package; do not add source scouts back without an explicit source-comparison/debug requirement.
  • get_post_find_leads_scout_registry returns only the Message Drafting worker for normal create-campaign runs. After confirm_lead_list imports a non-empty review batch and rows are proven, ask the filter-choice question immediately. Do not load this registry or deep filter/message prompts before that question. Once the user answers, launch Message Drafting from the same campaign/table basis. This launch is required whether filters are chosen or skipped. If the user chooses filters, keep filter/rubric work in the parent thread: show Filter Rules, load references/filter-leads.md, save rubrics, then ask for filter approval. After approval, move to Filter Leads and show waiting copy while Message Drafting finishes or the template is approved. If filters are skipped, start Message Drafting first, then move to Messages/message review; currentStep=messages is not proof of worker kickoff. Enrichment/filtering and Generate Message cells wait for message approval.
  • Source scouts and Prospect Filters are not normal create-campaign background agents. Only Message Drafting may spawn as a background/custom agent on the normal path; if it cannot be launched and the user does not approve inline fallback, stop instead of silently drafting in the parent thread.

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 durable configs (home-level source of truth):
    • ~/.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.

/sellable:foundation

Public founder/company memory command. Builds durable core files under ~/.sellable/configs/core/**, raw archives under ~/.sellable/interviews/**, and reusable answer/proof/story/transcript/reference memory for downstream Sellable writing workflows.

The internal prompt name interview remains available for backward compatibility and as the tested foundation-memory engine.

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_subskill_prompt({ subskillName: "generate-messages" }) - Get the full message-generation prompt with references and quality gates
  • 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

Inbox Reply Tools (Approval-Gated)

These tools use the existing product /api/v3/inbox routes, the same backend surface as the Sellable UI.

  • search_inbox_threads - Search inbox threads through GET /api/v3/inbox
  • get_inbox_thread - Load one inbox thread through GET /api/v3/inbox/[threadId]
  • check_inbox_reply_eligibility - Load product reply eligibility for one thread
  • update_inbox_draft - Edit an existing draft through PATCH /api/v3/inbox/[threadId]/draft
  • send_inbox_draft - Send the approved current draft after exact body, version, thread snapshot, idempotency key, and explicit operator approval checks
  • send_inbox_manual_reply - Send one exact approved manual reply after message hash, thread snapshot, idempotency key, and explicit operator approval checks

No production send smoke may run without explicit operator approval for the workspace, sender, thread or recipient, exact body, tool, route, and expected side effect. Draft editing only edits an existing draft; new reply draft generation is not part of these inbox tools.

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?tab=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]