@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_idAgent-readable install instructions are available at:
https://app.sellable.dev/agent-install.txtThe reviewable curl installer is:
curl -fsSL "https://app.sellable.dev/api/v2/cli/install" -o /tmp/sellable-install.sh
sh /tmp/sellable-install.shPhase 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:publishThe 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
- Go to https://app.sellable.dev/settings
- Click "Generate Token"
- Copy the token (starts with
skt_live_)
3. Claude Setup
Install MCP server:
claude mcp add --transport stdio sellable -- npx -y @sellable/mcp@latestCreate 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_idIf you already have ~/.sellable/config.json, rerun/verify without rewriting
auth:
npx -y @sellable/install@latest --host codex
sellable --verify-only --host codexThe installer does the full local setup:
- writes
~/.sellable/config.json - registers the
sellableMCP server with Codex - installs the
sellable@sellableDesktop plugin so Codex Desktop loads themcp__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
- Open any campaign
- Go to the Launch tab
- Click "Open in Claude Code"
- Copy the command shown
From Claude Code
Use the create-campaign skill:
/sellable:create-campaignThen 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.comFrom Codex
Use the Codex skill entrypoint:
$sellable:create-campaignInstalled 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:
get_auth_status()get_campaign_framework({ flowVersion: "v2", includePlugins: true })- Optional resume branch with
get_campaign_context({ campaignId, refresh: true }) - Subskill discovery and load via:
list_subskill_prompts(catalog)search_subskill_prompts(lookup)get_subskill_prompt({ subskillName: "create-campaign-v2" })(load)
- 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
Tasksubagents for parallel research/crafting units. - Codex host: use
multi_tool_use.parallelfor independent tool-call batches. - If neither backend is available, run sequentially with the same output schema.
Config path resolution (in order):
SELLABLE_CONFIG_PATH~/.sellable/config.json$CODEX_HOME/sellable.json(compatibility fallback)~/.codex/sellable.json(compatibility fallback)~/.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:
- use the shared helper in
scripts/lib/vps-common.sh - rebuild with
npm run mcp:build - run the direct stdio MCP client in
scripts/mcp/sellable-tool-call.mjs - use
scripts/run-sellable-mcp-smoke.shfor 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(orSELLABLE_CONFIG_PATH; old$CODEX_HOME/sellable.json,~/.codex/sellable.json, and~/.claude/sellable.jsonfiles remain compatibility fallbacks) - Engage memory (style guide + searches + tracked people):
sellable.engage.json(orSELLABLE_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 workspacesget_active_workspace- Show active workspace selectionset_active_workspace- Set active workspace by IDcreate_workspace- Create a new workspaceadd_teammate- Invite a teammate
Campaign Tools (Free)
get_campaigns- List all campaignsget_campaign- Get campaign detailscreate_campaign- Create a campaign offerupdate_campaign- Update campaign positioning/brief/workflowget_campaign_messages_preview- Preview campaign leads for messaging (supports filters + pagination)get_table_rows- Get leads listget_rows_minimal- Get minimal lead list (fast)get_rows- Get full lead dataupdate_cell- Save message/approveget_message_prompt- Get REPLY frameworkstart_campaign/pause_campaign- Control sending
Lead Tools (Free)
search_apollo- Apollo people searchsearch_prospeo- Prospeo people searchsearch_sales_nav- Sales Navigator searchsearch_signals- Signal discovery searchload_csv_domains- Preview/confirm a CSV-on-disk company-domain file and return adomainFilterIdload_csv_linkedin_leads- Preview/confirm a CSV-on-disk LinkedIn profile file and create a lead listimport_leads- Create a lead list and start importing leadsconfirm_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 checkssave_rubrics- Persist rubrics and enable ICP filteringadd_rubric_item- Add a single rubric criterionupdate_rubric_item- Update a rubric criterion by IDdelete_rubric_item- Delete a rubric criterion by checkNamecheck_rubric- Queue enrichment + scoring samplewait_for_rubric_results- Poll pass-rate resultsupsert_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 postsfetch_linkedin_profile- Full profile datafetch_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
- Make sure token starts with
skt_ - Check token is not revoked
- 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]
