Documentation

Native to Cursor, Claude Desktop, Claude Code, Cline.

MarketPrior is published as scale4-mcp-server on npm — add one JSON block to your IDE config and the scale4.* tools appear in your agent's tool list immediately. Free-tier assessments need no API key.

Install

One JSON block in your IDE config.

After saving the config, reload or restart your IDE. The MCP server starts on demand via npx— no global install required.

CUCursor
.cursor/mcp.json
Config snippet
{
  "mcpServers": {
    "scale4": {
      "command": "npx",
      "args": ["-y", "scale4-mcp-server"],
      "env": {
        "SCALE4_API_KEY": "sk4_your_key_here"
      }
    }
  }
}
Add to .cursor/mcp.json in your project root, then reload Cursor. Free-tier assessments work without an API key — remove the env block entirely.
CLClaude Desktop
~/Library/.../claude_desktop_config.json
Config snippet
{
  "mcpServers": {
    "scale4": {
      "command": "npx",
      "args": ["-y", "scale4-mcp-server"],
      "env": {
        "SCALE4_API_KEY": "sk4_your_key_here"
      }
    }
  }
}
macOS path: ~/Library/Application Support/Claude/claude_desktop_config.json. Windows: %APPDATA%\Claude\claude_desktop_config.json. Restart Claude Desktop after saving.
CLClaude Code
~/.claude.json
Config snippet
{
  "mcpServers": {
    "scale4": {
      "command": "npx",
      "args": ["-y", "scale4-mcp-server"]
    }
  }
}
Edit ~/.claude.json (user-level) or pass --mcp-config path/to/config.json for a project-scoped config. Add the env block with your API key for Pro features.
CLCline
VS Code settings.json
Config snippet
{
  "cline.mcpServers": {
    "scale4": {
      "command": "npx",
      "args": ["-y", "scale4-mcp-server"],
      "env": {
        "SCALE4_API_KEY": "sk4_your_key_here"
      }
    }
  }
}
Via Cline sidebar → MCP Servers → Add server, or directly in VS Code's settings.json. Reload the Cline panel after saving.

Quickstart

Your first assessment.

Four tool calls: start a session, submit signals, check progress, score. The agent collects evidence; the server validates shape and citations; the scorecard flows from the math.

1Start an assessment sessionexpand

Tool call

mcp tool
scale4.start({
  pitch: "AI-native contract review for mid-market legal teams"
})

Response

{
  "session": "srv1.eyJ2IjoiMSIsInNpZCI6IjAxSFk...<token>",
  "protocol": "7-axis@2026.06",
  "axes": 7,
  "next": "Collect signals for each axis using submit_signal.
           score() is gated — callable only when all axes
           have their minimum required signals."
}
2Submit a signal for the problem axisexpand

Tool call

mcp tool
scale4.submit_signal({
  session:  "<token from step 1>",
  axis:     "problem",
  kind:     "user_quote",
  value: {
    verbatim:    "We spend 40 hours a week on first-pass contract
                  review. Half of that is just checking standard
                  indemnification clauses.",
    source_url:  "https://news.ycombinator.com/item?id=38291234",
    source_date: "2024-11-12",
    speaker_role: "General Counsel at Series B SaaS company"
  }
})

Response

{
  "accepted": true,
  "axis": "problem",
  "kind": "user_quote",
  "progress": "2 / 3 required user_quotes submitted",
  "session": "srv1.eyJ2IjoiMSIsInNpZC...<refreshed token>"
}
3Check completeness across all axesexpand

Tool call

mcp tool
scale4.check_progress({
  session: "<token>"
})

Response

{
  "problem":      { "complete": false, "missing": ["user_quote ×1 more", "counterfactual_quote ×1"] },
  "market":       { "complete": false, "missing": ["icp_definition ×1", "named_prospect ×3", "acv_estimate ×1"] },
  "solutions":    { "complete": false, "missing": ["named_competitor ×5", "dissatisfaction_quote ×3", "pricing_row ×3"] },
  "wedge":        { "complete": false, "missing": ["wedge_statement ×1", "anti_wedge ×1", "replication_estimate ×1"] },
  "distribution": { "complete": false, "missing": ["channel_choice ×1", "cac_benchmark ×1", "founder_channel_fit ×1"] },
  "economics":    { "complete": false, "missing": ["cac ×1", "ltv ×1", "gross_margin ×1", "breakeven_customers ×1"] },
  "founder":      { "complete": false, "missing": ["domain_years ×1", "unfair_advantage ×1", "shipped_artifact ×1"] },
  "score_gated":  true
}
4Score once all axes are completeexpand

Tool call

mcp tool
scale4.score({
  session: "<token after all signals submitted>"
})

Response

{
  "axes": {
    "problem":      { "score": 7 },
    "market":       { "score": 6 },
    "solutions":    { "score": 8 },
    "wedge":        { "score": 7 },
    "distribution": { "score": 5 },
    "economics":    { "score": 6 },
    "founder":      { "score": 8 }
  },
  "total":   47,
  "verdict": "iterate",
  "summary": "Strong problem evidence and founder fit. Distribution
              channel needs a real CAC benchmark — current estimate
              is unverified. Score when you have it.",
  "session": "srv1.<refreshed token with scores>"
}

Tool reference

9 MCP tools.

Free tools need no API key. Pro tools require SCALE4_API_KEY in your MCP env block. See pricing →

scale4.startfree

Opens an assessment session. Returns the 7-axis protocol spec and a signed session token the agent round-trips on every subsequent call.

Input schema

{ pitch: string (40–8000 chars) }

Example response

{
  "session":  "srv1.<payload>.<hmac>",
  "protocol": "7-axis@2026.06",
  "axes":     7,
  "next":     "collect signals via submit_signal"
}
scale4.submit_signalfree

Submits one piece of evidence for one axis. Validates shape (URL HEAD-check, min-char, regex-block). Returns a refreshed session token with the signal appended.

Input schema

{
  session:  string,
  axis:     "problem"|"market"|"solutions"|"wedge"|"distribution"|"economics"|"founder",
  kind:     string  (e.g. "user_quote", "named_competitor"),
  value:    object  (shape defined by the axis spec),
  citation: url     (optional — required for signal kinds that need source_url)
}

Example response

{
  "accepted": true,
  "axis":     "problem",
  "kind":     "user_quote",
  "progress": "2 / 3 required",
  "session":  "srv1.<refreshed token>"
}
scale4.check_progressfree

Returns per-axis completeness summary. Shows exactly what signals are still missing before score() can be called.

Input schema

{ session: string }

Example response

{
  "problem":     { "complete": true,  "missing": [] },
  "market":      { "complete": false, "missing": ["named_prospect ×2 more"] },
  ...
  "score_gated": true
}
scale4.scorefree (gated by completeness)

Returns the 70-point scorecard once all axes have minimum signals. Gated — returns 412 with the missing signal list if called early.

Input schema

{ session: string }

Example response

{
  "axes":    { "problem": {"score": 7}, "market": {"score": 6}, ... },
  "total":   47,
  "verdict": "iterate",
  "session": "srv1.<refreshed token with scores>"
}
scale4.generate_roadmapfree

Risk-weighted milestone list generated from the scored axes. Score 8–10 needs no milestone; score 5–7 gets a "Strengthen" milestone; score 0–4 gets "Validate or kill".

Input schema

{ session: string }

Example response

{
  "milestones": [
    { "week": "1–2",  "action": "distribution: get 5 real CAC data points from comparable SaaS companies" },
    { "week": "2–4",  "action": "market: run 10 ICP calls, written notes per call" },
    { "week": "4–6",  "action": "stackforge_handoff → working scaffold deployed" }
  ]
}
scale4.exportfree (md) / Pro (pdf)

Markdown or PDF bundle of: pitch + scorecard + evidence ledger + roadmap. The closing artifact. Includes counsel-validated disclaimer footer.

Input schema

{ session: string, format: "markdown" | "pdf" }

Example response

// markdown: returns the document text inline
// pdf: returns a signed CDN URL (Pro tier)
scale4.deep_research_modePro+

Two modes, selected by request shape. (A) { session, axis }: returns the optional-signal extension spec for an axis (competitor pricing scrape, founder LinkedIn, search-volume snapshot). (B) { citations: [{verbatim, source_url}, ...] }: re-fetches each source and uses an LLM to confirm the quote actually appears with the same meaning — anti-fabrication for paid users. Max 25 citations per call.

Input schema

// Mode A — axis optional-signal discovery
{ session: string, axis: string }

// Mode B — citation verification (max 25/request)
{ citations: [{ verbatim: string, source_url: string }, ...] }

Example response

// Mode A response
{
  "axis":             "solutions",
  "optional_signals": ["competitor_pricing_scrape", "g2_sentiment"],
  "note":             "Collect with WebSearch/WebFetch, then submit
                       via submit_signal. To verify any quotes, re-POST
                       to this endpoint with { citations: [...] }."
}

// Mode B response
{
  "citations": [
    { "valid": true },
    { "valid": false, "reason": "Quote not found at source_url." }
  ]
}
scale4.stackforge_handofffree (build verdict) / Pro (any verdict)

Translates a passed assessment into a Stackforge compose_stack intent string + profile. Gated on BUILD verdict for free tier; Pro tier can fork a failed assessment.

Input schema

{ session: string }

Example response

{
  "intent":  "multi-tenant SaaS, healthcare, EU-resident",
  "profile": "healthcare",
  "hint":    "Call: stackforge.compose_stack({ intent, profile })"
}
scale4.pitchforge_handoffPro+

Emits a stable deck-generation seed JSON from the scored assessment (problem quote, ICP, wedge statement, verdict, per-axis signal counts, attribution). The Pitchforge MCP server itself is not yet published — feed the seed to any deck-generation tool (LLM prompt, slide-template script, etc.); the format will remain importable when the Pitchforge integration ships.

Input schema

{ session: string }

Example response

{
  "seed": {
    "session_id":      "01HY...",
    "protocol":        "7-axis@2026.06",
    "verdict":         "build",
    "problem_quote":   "We spend 40h/week on contract review...",
    "icp_definition":  "Mid-market legal teams, 50–500 lawyers",
    "wedge_statement": "Fine-tune on the customer's own contracts",
    "signal_summary":  { "problem": 4, "market": 5, "solutions": 11, ... },
    "__attribution":   "scale4@01HY..."
  }
}

Cross-portfolio handoff

MarketPrior → Stackforge.

When MarketPrior returns a build verdict, call scale4.stackforge_handoff to translate the assessment into a Stackforge intent string. The next call in the agent loop is stackforge.compose_stack.

// After scale4.score() returns verdict: "build"

scale4.stackforge_handoff({ session })
// → { intent: "multi-tenant SaaS, healthcare, EU-resident",
//     profile: "healthcare",
//     hint: "Call stackforge.compose_stack({ intent, profile })" }

stackforge.compose_stack({
  intent:  "multi-tenant SaaS, healthcare, EU-resident",
  profile: "healthcare"
})
// → wrangler.toml + supabase migrations + Clerk JWT
//   + HIPAA controls + BAA checklist