strategy-mcp 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +153 -2
- package/index.js +140 -0
- package/package.json +51 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Strategy MCP contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,154 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Strategy MCP
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Deterministic strategic-planning frameworks as a local MCP server. Runs anywhere
|
|
4
|
+
Node 18+ runs, makes **zero network calls**, and needs **no API keys**.
|
|
5
|
+
|
|
6
|
+
Four tools are free and MIT-licensed in this repo. Eight more (twelve total) ship
|
|
7
|
+
as [StrategyBrain Pro](#strategybrain-pro).
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
swot_analysis marketing_mix lean_canvas decision_matrix ← free (this repo)
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Free tools (MIT)
|
|
14
|
+
|
|
15
|
+
| Tool | What it actually returns |
|
|
16
|
+
|---|---|
|
|
17
|
+
| `swot_analysis` | S/W/O/T, then **S-O / W-O / S-T / W-T cross-mapping** and 3–5 offensive + defensive actions. Not just the four quadrants. |
|
|
18
|
+
| `marketing_mix` | The 4Ps — product, price, place, promotion — plus the one-line pitch that connects them. |
|
|
19
|
+
| `lean_canvas` | One-page business model: problem → segments → UVP → solution → channels → revenue → costs → metrics → unfair advantage. |
|
|
20
|
+
| `decision_matrix` | Options scored against weighted criteria, ranked, with the margin between winner and runner-up. |
|
|
21
|
+
|
|
22
|
+
Every tool is a pure function of its input. Same input, same output, no model
|
|
23
|
+
call, no drift between runs, nothing sent anywhere.
|
|
24
|
+
|
|
25
|
+
## Install
|
|
26
|
+
|
|
27
|
+
**Requirements:** Node 18 or newer.
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
git clone https://github.com/Ritterbeckaj/strategy-mcp.git
|
|
31
|
+
cd strategy-mcp
|
|
32
|
+
npm install
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Note the **absolute path** to `index.js` — every client below needs it.
|
|
36
|
+
|
|
37
|
+
### OpenCode
|
|
38
|
+
|
|
39
|
+
`~/.config/opencode/opencode.json`:
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"mcp": {
|
|
44
|
+
"servers": {
|
|
45
|
+
"strategy": {
|
|
46
|
+
"type": "local",
|
|
47
|
+
"command": ["node", "/absolute/path/to/strategy-mcp/index.js"]
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Claude Code
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
claude mcp add strategy -- node /absolute/path/to/strategy-mcp/index.js
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Claude Desktop / Cursor
|
|
61
|
+
|
|
62
|
+
Claude Desktop — `claude_desktop_config.json`
|
|
63
|
+
(macOS: `~/Library/Application Support/Claude/`, Windows: `%APPDATA%\Claude\`).
|
|
64
|
+
Cursor — `~/.cursor/mcp.json`. Same shape:
|
|
65
|
+
|
|
66
|
+
```json
|
|
67
|
+
{
|
|
68
|
+
"mcpServers": {
|
|
69
|
+
"strategy": {
|
|
70
|
+
"command": "node",
|
|
71
|
+
"args": ["/absolute/path/to/strategy-mcp/index.js"]
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Restart the client. The four tools appear as `swot_analysis`, `marketing_mix`,
|
|
78
|
+
`lean_canvas`, `decision_matrix`.
|
|
79
|
+
|
|
80
|
+
Then just ask:
|
|
81
|
+
|
|
82
|
+
> "Run a SWOT on my print-on-demand merch line and tell me which threat actually kills it."
|
|
83
|
+
|
|
84
|
+
## Or use the hosted servers (no install)
|
|
85
|
+
|
|
86
|
+
The same tools — plus FactCheck and LeadGen — run as remote MCP endpoints over
|
|
87
|
+
Streamable HTTP. Useful when you can't install anything locally:
|
|
88
|
+
|
|
89
|
+
| Server | Endpoint | Tools |
|
|
90
|
+
|---|---|---|
|
|
91
|
+
| StrategyBrain | `https://strategybrain-mcp.factcheck-mcp-worker.workers.dev/mcp` | 12 |
|
|
92
|
+
| FactCheck | `https://factcheck-mcp.factcheck-mcp-worker.workers.dev/mcp` | 7 (6 + `get_usage`) |
|
|
93
|
+
| LeadGen | `https://leadgen-mcp.factcheck-mcp-worker.workers.dev/mcp` | 6 |
|
|
94
|
+
|
|
95
|
+
Header on every request:
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
x-api-key: oc_trial_5a4900841684ff7d265ba3028bcb1fcc
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
That's a **shared public demo key: 100 calls/day across all users**. Fine for
|
|
102
|
+
testing whether it works in your client. If you need a real quota, buy a pack
|
|
103
|
+
and you get your own key.
|
|
104
|
+
|
|
105
|
+
## What touches the network
|
|
106
|
+
|
|
107
|
+
READMEs in this category tend to say "fully offline" and stop there. Enumerated
|
|
108
|
+
instead:
|
|
109
|
+
|
|
110
|
+
| Pack | Tools | Network |
|
|
111
|
+
|---|---|---|
|
|
112
|
+
| StrategyBrain (free 4 here + Pro's 8) | 12 | **none** |
|
|
113
|
+
| Monetize MCP | 8 | **none** |
|
|
114
|
+
| FactCheck MCP | 6 | 4 tools → Wikipedia, Semantic Scholar, optional Google Fact Check. `cross_verify` and `anti_hallucination_protocol` are local. |
|
|
115
|
+
| LeadGen MCP | 6 | 2 tools → DuckDuckGo, plus the page you point it at. `qualify_lead`, `save_lead`, `list_leads`, `draft_outreach` are local. |
|
|
116
|
+
|
|
117
|
+
**26 of the 32 tools on sale make zero network calls.** Six do, and they call
|
|
118
|
+
free, keyless, read-only public endpoints — no account, no billing, nothing
|
|
119
|
+
written. `GOOGLE_FACTCHECK_API_KEY` is optional; without it the server degrades
|
|
120
|
+
to Wikipedia + Semantic Scholar. When a network call fails, the tool returns
|
|
121
|
+
`UNVERIFIED` rather than inventing a result.
|
|
122
|
+
|
|
123
|
+
## StrategyBrain Pro
|
|
124
|
+
|
|
125
|
+
The other eight frameworks, same offline/no-key design:
|
|
126
|
+
|
|
127
|
+
`porter_five_forces` · `pestle_analysis` · `ansoff_matrix` · `jobs_to_be_done` ·
|
|
128
|
+
`tam_sam_som` · `okr_plan` · `roadmap_plan` · `brainstorm_session`
|
|
129
|
+
|
|
130
|
+
**[$12 — StrategyBrain Pro](https://ritterbeck.gumroad.com/l/strategybrain-pro)** ·
|
|
131
|
+
**[$29 with a 30-minute setup call](https://ritterbeck.gumroad.com/l/strategybrain-pro)**
|
|
132
|
+
· 30-day refund if it isn't useful.
|
|
133
|
+
|
|
134
|
+
Free entry point: **[Monetize MCP — 8 tools, $0+](https://ritterbeck.gumroad.com/l/monetize-mcp)**.
|
|
135
|
+
Test the install before paying for anything.
|
|
136
|
+
|
|
137
|
+
Full set — all four packs, 33 tools:
|
|
138
|
+
**[The MCP Toolkit](https://ritterbeck.gumroad.com/mcp-bundle)** ($29, or $79 with setup).
|
|
139
|
+
|
|
140
|
+
## Why open-core
|
|
141
|
+
|
|
142
|
+
The four tools here are the ones that survive being used on their own. The Pro
|
|
143
|
+
pack funds maintenance and the next batch. If the free tools earn it, buy Pro.
|
|
144
|
+
If they don't, you've lost nothing but a `npm install`.
|
|
145
|
+
|
|
146
|
+
## Publishing your own
|
|
147
|
+
|
|
148
|
+
MIT — fork it, rename it in `package.json` and in the `McpServer` constructor,
|
|
149
|
+
`npm publish`. The name `strategy-mcp` is unclaimed on npm as of this commit.
|
|
150
|
+
|
|
151
|
+
## License
|
|
152
|
+
|
|
153
|
+
MIT — see [LICENSE](LICENSE). The Pro tools are proprietary and are not in this
|
|
154
|
+
repository.
|
package/index.js
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Strategy MCP — open-core edition (MIT).
|
|
4
|
+
*
|
|
5
|
+
* Free core tools: swot_analysis, marketing_mix, lean_canvas, decision_matrix.
|
|
6
|
+
*
|
|
7
|
+
* Pro (8 more frameworks: Porter's Five Forces, PESTLE, Ansoff, Jobs-to-be-Done,
|
|
8
|
+
* TAM/SAM/SOM, OKR, brainstorm_session, roadmap_plan) is available at:
|
|
9
|
+
* https://ritterbeck.gumroad.com (StrategyBrain Pro)
|
|
10
|
+
* The Pro pack is proprietary and not part of this repository.
|
|
11
|
+
*/
|
|
12
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
13
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
14
|
+
import { z } from "zod";
|
|
15
|
+
|
|
16
|
+
const server = new McpServer({ name: "strategy-mcp", version: "0.2.0" });
|
|
17
|
+
|
|
18
|
+
server.tool(
|
|
19
|
+
"swot_analysis",
|
|
20
|
+
"Run a SWOT analysis: strengths, weaknesses, opportunities, threats, then derive 3-5 offensive and defensive strategic actions.",
|
|
21
|
+
{
|
|
22
|
+
subject: z.string().describe("What is being analyzed (business, product line, niche, campaign)"),
|
|
23
|
+
strengths: z.array(z.string()).optional(),
|
|
24
|
+
weaknesses: z.array(z.string()).optional(),
|
|
25
|
+
opportunities: z.array(z.string()).optional(),
|
|
26
|
+
threats: z.array(z.string()).optional(),
|
|
27
|
+
},
|
|
28
|
+
async ({ subject, strengths = [], weaknesses = [], opportunities = [], threats = [] }) => {
|
|
29
|
+
const view = {
|
|
30
|
+
type: "SWOT",
|
|
31
|
+
subject,
|
|
32
|
+
internal: { strengths, weaknesses },
|
|
33
|
+
external: { opportunities, threats },
|
|
34
|
+
cross_mapping: [
|
|
35
|
+
"S-O (attack): use which strength to seize which opportunity?",
|
|
36
|
+
"W-O (build): what weakness blocks an opportunity, and how to fix it?",
|
|
37
|
+
"S-T (defend): which strength mitigates which threat?",
|
|
38
|
+
"W-T (survive): what risk must be neutralized first?",
|
|
39
|
+
],
|
|
40
|
+
output: ["3-5 offensive actions (SO/WO)", "3-5 defensive actions (ST/WT)", "1 top priority per quadrant"],
|
|
41
|
+
};
|
|
42
|
+
return json(view);
|
|
43
|
+
}
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
server.tool(
|
|
47
|
+
"lean_canvas",
|
|
48
|
+
"One-page business model (9 blocks). Provide any 2+ blocks; the template guides completion of the rest.",
|
|
49
|
+
{
|
|
50
|
+
name: z.string().describe("Venture / product name"),
|
|
51
|
+
problem: z.string().optional(),
|
|
52
|
+
solution: z.string().optional(),
|
|
53
|
+
key_metrics: z.string().optional(),
|
|
54
|
+
unique_value_proposition: z.string().optional(),
|
|
55
|
+
unfair_advantage: z.string().optional(),
|
|
56
|
+
channels: z.string().optional(),
|
|
57
|
+
customer_segments: z.string().optional(),
|
|
58
|
+
cost_structure: z.string().optional(),
|
|
59
|
+
revenue_streams: z.string().optional(),
|
|
60
|
+
},
|
|
61
|
+
async (a) => {
|
|
62
|
+
const view = {
|
|
63
|
+
type: "Lean Canvas",
|
|
64
|
+
name: a.name,
|
|
65
|
+
canvas: {
|
|
66
|
+
problem: a.problem ?? "Top 1-3 problems",
|
|
67
|
+
solution: a.solution ?? "Minimal feature set per problem",
|
|
68
|
+
key_metrics: a.key_metrics ?? "3 numbers that prove traction",
|
|
69
|
+
unique_value_proposition: a.unique_value_proposition ?? "Single clear message: why buy",
|
|
70
|
+
unfair_advantage: a.unfair_advantage ?? "What cannot be copied/bought",
|
|
71
|
+
channels: a.channels ?? "How you reach customers",
|
|
72
|
+
customer_segments: a.customer_segments ?? "Who pays (early adopters first)",
|
|
73
|
+
cost_structure: a.cost_structure ?? "Fixed + variable costs",
|
|
74
|
+
revenue_streams: a.revenue_streams ?? "Pricing + revenue model",
|
|
75
|
+
},
|
|
76
|
+
output: ["Fill every gap", "Flag the riskiest assumption per block", "Design 1 experiment to de-risk the top assumption"],
|
|
77
|
+
};
|
|
78
|
+
return json(view);
|
|
79
|
+
}
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
server.tool(
|
|
83
|
+
"decision_matrix",
|
|
84
|
+
"Score options against weighted criteria to pick objectively. Pass equal-length arrays or leave blank for template.",
|
|
85
|
+
{
|
|
86
|
+
question: z.string().describe("The decision to make"),
|
|
87
|
+
options: z.array(z.string()).optional(),
|
|
88
|
+
criteria: z.array(z.string()).optional(),
|
|
89
|
+
weights: z.array(z.number()).optional().describe("Must sum to 1.0; same length as criteria"),
|
|
90
|
+
},
|
|
91
|
+
async ({ question, options = [], criteria = [], weights = [] }) => {
|
|
92
|
+
const view = {
|
|
93
|
+
type: "Decision matrix",
|
|
94
|
+
question,
|
|
95
|
+
table: options.length ? { options, criteria, weights } : {
|
|
96
|
+
hint: "Fill: options (2-6), criteria (3-6), weights summing to 1.0",
|
|
97
|
+
sample: { options: ["Option A", "Option B"], criteria: ["Cost", "Speed", "Impact"], weights: [0.4, 0.3, 0.3] },
|
|
98
|
+
},
|
|
99
|
+
scoring: "Score each option 1-10 per criterion; total = SUM(score * weight). Highest wins; document why.",
|
|
100
|
+
output: ["Weighted totals per option", "Sensitivity: swap top-2 weights and recheck", "One decision + contingency"],
|
|
101
|
+
};
|
|
102
|
+
return json(view);
|
|
103
|
+
}
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
server.tool(
|
|
107
|
+
"marketing_mix",
|
|
108
|
+
"4P plan: Product, Price, Place (channels), Promotion, plus the pitch line.",
|
|
109
|
+
{
|
|
110
|
+
product: z.string(),
|
|
111
|
+
target_customer: z.string().optional(),
|
|
112
|
+
product_offer: z.string().optional(),
|
|
113
|
+
price: z.string().optional(),
|
|
114
|
+
place: z.string().optional(),
|
|
115
|
+
promotion: z.string().optional(),
|
|
116
|
+
},
|
|
117
|
+
async ({ product, ...p }) => {
|
|
118
|
+
const view = {
|
|
119
|
+
type: "Marketing mix (4Ps)",
|
|
120
|
+
product,
|
|
121
|
+
mix: {
|
|
122
|
+
product_offer: p.product_offer ?? "Features, benefits, packaging, variants",
|
|
123
|
+
price: p.price ?? "List price, anchor, discounts, perceived value",
|
|
124
|
+
place: p.place ?? "Channels: store, marketplace, social, email, POD platform",
|
|
125
|
+
promotion: p.promotion ?? "Hooks per channel + launch sequence (7 days)",
|
|
126
|
+
},
|
|
127
|
+
target_customer: p.target_customer ?? "Define 1 persona: who, what problem, where they hang out",
|
|
128
|
+
output: ["One-sentence pitch", "Launch sequence day-by-day", "3 test creatives to A/B in week 1"],
|
|
129
|
+
};
|
|
130
|
+
return json(view);
|
|
131
|
+
}
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
function json(v) {
|
|
136
|
+
return { content: [{ type: "text", text: JSON.stringify(v, null, 2) }] };
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const transport = new StdioServerTransport();
|
|
140
|
+
await server.connect(transport);
|
package/package.json
CHANGED
|
@@ -1,6 +1,53 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "strategy-mcp",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Deterministic strategic-planning frameworks (SWOT, 4Ps, Lean Canvas, decision matrix) as a local MCP server. No API keys, no network calls. Pro unlocks 8 more frameworks.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"strategy-mcp": "index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"index.js",
|
|
12
|
+
"README.md",
|
|
13
|
+
"LICENSE"
|
|
14
|
+
],
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"author": "Ritterbeckaj",
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git+https://github.com/Ritterbeckaj/strategy-mcp.git"
|
|
20
|
+
},
|
|
21
|
+
"homepage": "https://ritterbeck.gumroad.com/l/strategybrain-pro",
|
|
22
|
+
"bugs": {
|
|
23
|
+
"url": "https://github.com/Ritterbeckaj/strategy-mcp/issues"
|
|
24
|
+
},
|
|
25
|
+
"engines": {
|
|
26
|
+
"node": ">=18"
|
|
27
|
+
},
|
|
28
|
+
"keywords": [
|
|
29
|
+
"mcp",
|
|
30
|
+
"model-context-protocol",
|
|
31
|
+
"mcp-server",
|
|
32
|
+
"claude",
|
|
33
|
+
"claude-desktop",
|
|
34
|
+
"cursor",
|
|
35
|
+
"opencode",
|
|
36
|
+
"strategy",
|
|
37
|
+
"swot",
|
|
38
|
+
"lean-canvas",
|
|
39
|
+
"okr",
|
|
40
|
+
"business-planning",
|
|
41
|
+
"offline",
|
|
42
|
+
"no-api-key"
|
|
43
|
+
],
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
46
|
+
"zod": "^3.24.0"
|
|
47
|
+
},
|
|
48
|
+
"scripts": {
|
|
49
|
+
"start": "node index.js",
|
|
50
|
+
"smoke": "node scripts/smoke.mjs",
|
|
51
|
+
"prepublishOnly": "node --check index.js && node scripts/smoke.mjs"
|
|
52
|
+
}
|
|
53
|
+
}
|