AI Skills Marketplace / Sales Ops

Sales Stack Router

Decides which connected sales-engagement MCP server (Outreach, Salesloft, Apollo, or any other) should handle a given request, based on declared capabilities, scope tier, and live rate-limit usage.

The Sales Stack Router is a free Claude Skill that decides which connected sales-engagement MCP server (Outreach, Salesloft, Apollo, or any other) should handle a given request, based on declared capabilities, scope tier, and live rate-limit usage — with a fallback chain and explicit reasoning.

↗ View Source ⬇ Download Full Repo (.zip)
MIT
License
3 decisions
Decision branches
1 fallback chain
Escalation rules
Yes
Multi-tool support
Aug 12, 2026
Last updated
12/12 passing
Tests

Most teams now have more than one sales-engagement MCP server connected — Outreach, Salesloft, Apollo, plus whatever else got added along the way. Nothing decides which one should handle a given request. The two default behaviors are both bad: hardcode one tool (breaks the moment that tool is rate-limited or the account changes), or call every connected tool and let the user sort out duplicate results.

This skill is the missing decision layer. Give it a request (e.g. “enrich this contact”) and a live manifest of what’s connected — built to the MCP Capability Manifest Schema — and it returns one ranked pick, a fallback chain, and the reasoning behind the choice.

How it works

const { route } = require('./router.js');
const result = route({ capability: 'contact.enrich', min_scope: 'read' }, manifests);

if (result.decision === 'route') {
  // call result.pick.server_id; retry against result.fallback_chain[0] on failure
} else if (result.decision === 'rate_limited') {
  // every capable server is over its limit — wait result.retry_after_seconds
} else {
  // 'no_capable_server' — nothing connected can do this
}

Destructive actions require an explicit opt-in

Every capability declares a required_scope of read, write, or destructive. By default, destructive capabilities (deleting a prospect, purging a sequence) are never routed unless the caller explicitly passes allow_destructive: true. Same governance principle MV3 applies to its own MU-plugin deploys — destructive actions need an explicit opt-in, not an implicit one.

What it does NOT do

It never calls any API itself — a pure decision function, zero network calls, zero dependencies. You still own the actual MCP tool call; this tells you which server to call and why. It also holds no state between calls, so it stays safe to run inside any orchestration loop.

README.md View raw ↗

What this is (and isn’t)

Documentation + a decision function, not a hosted service or an MCP server itself. It runs entirely in your own environment against a manifest you supply.

Files

FilePurpose
SKILL.mdThe skill definition
router.jsZero-dependency routing engine — the route() function
capability-manifest.schema.jsonJSON Schema (2020-12) describing the manifest shape route() expects
example-manifest.jsonIllustrative example — placeholder rate-limit values, not verified vendor limits
test.js12-test suite

Security & validation

Verified 2026-08-12: zero dependencies (npm audit not applicable), node test.js 12/12 passing — covering priority ranking, rate-limit fallback, degraded-server exclusion, destructive-scope gating (both blocked and explicitly-allowed paths), full-rate-limit exhaustion with retry timing, and input validation.

Support

Open an issue on GitHub Issues. Want this wired into your actual connected MCP servers? Book a scoping call ($175/hr).

License

MIT

FAQ

Is this skill free to use?

Yes. Free to download and run yourself. MV3 charges $175/hr only if you want it wired into your real connected MCP servers.

What data do I need?

A live manifest array — one entry per connected sales-engagement MCP server, built to the MCP Capability Manifest Schema.

Does my sales data get sent to MV3?

No. The routing engine runs entirely in your own environment with zero outbound network calls — it only reasons over the manifest you supply.

Does it call Outreach/Salesloft/Apollo directly?

No. It decides which server should handle a request; you still make the actual MCP tool call. This keeps the skill safe to run without granting it any API credentials.

What happens with destructive actions like deleting a prospect?

Blocked by default. A capability marked required_scope: "destructive" is only routed if the caller explicitly passes allow_destructive: true on the request.

Where do I get support if something breaks?

Open a GitHub Issue for bugs or questions. For paid help wiring this into your real CRM/sales stack, book a scoping call.

JR
Jordan Reeves
ABM & Outbound Pipeline, MV3 Marketing