@tenpo/mcp 0.2.0 → 0.2.2
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/README.md +302 -100
- package/dist/index.js +8 -6
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,70 +1,244 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
> 229 deterministic tools across orders, ads, email, inventory, suppliers, customers, finance, and competitors —
|
|
5
|
-
> exposed as a Model Context Protocol server that plugs into Claude Code, Cursor, Claude Desktop, ChatGPT, or any MCP host.
|
|
3
|
+
# Tenpo
|
|
6
4
|
|
|
7
|
-
|
|
8
|
-
[](LICENSE)
|
|
5
|
+
**The operator that runs alongside your store.**
|
|
9
6
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
Most "AI for e-commerce" tools answer questions about your dashboard.
|
|
8
|
+
Tenpo runs your dashboards *for* you — across every platform, every minute, in plain English.
|
|
9
|
+
|
|
10
|
+
[](https://www.npmjs.com/package/@tenpo/mcp)
|
|
11
|
+
[](LICENSE)
|
|
12
|
+
|
|
13
|
+
[**Get started in 2 lines →**](#install-in-2-lines) · [**See it think →**](#how-tenpo-thinks) · [**What it covers →**](#what-tenpo-covers)
|
|
14
|
+
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## The problem every store owner has
|
|
20
|
+
|
|
21
|
+
Your orders are in Shopify. Your marketing is split across Meta, Google, and TikTok. Customer support lives in Gorgias. Email is in Klaviyo. Inventory is somewhere else. Accounting is in Xero.
|
|
22
|
+
|
|
23
|
+
You can see that revenue dropped. You can't easily see **why**. Is it a stock issue? An ad problem? A supplier delay? A churn wave? You'd need hours of cross-referencing — and most store owners don't have those hours.
|
|
24
|
+
|
|
25
|
+
Decisions get made on gut feel. Problems get spotted late. Opportunities get missed entirely.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## What Tenpo is
|
|
30
|
+
|
|
31
|
+
Not a dashboard. Not a chatbot. **An operator that runs your store next to you.**
|
|
32
|
+
|
|
33
|
+
When you ask Tenpo something, it doesn't look up a pre-calculated answer. It queries your live data across every connected platform, traces the cause back through every related signal, attaches a financial impact, and tells you exactly what to do — in one message.
|
|
13
34
|
|
|
14
|
-
|
|
35
|
+
It's like having a business partner who:
|
|
36
|
+
|
|
37
|
+
- Has memorised every order, product, customer, campaign, and supplier — once you connect them
|
|
38
|
+
- Spots problems before they become expensive
|
|
39
|
+
- Connects dots no human analyst would realistically cross-reference
|
|
40
|
+
- Knows *when to act* and *when to ask*
|
|
41
|
+
- Gets smarter about your specific business the longer you work together
|
|
42
|
+
|
|
43
|
+
You bring an AI host (Claude Desktop, Cursor, Claude Code, Codex, Hermes, OpenClaw — anything that speaks MCP). Tenpo brings the synapses. **Your AI does the thinking, Tenpo provides the truth.**
|
|
15
44
|
|
|
16
45
|
---
|
|
17
46
|
|
|
18
|
-
##
|
|
47
|
+
## How Tenpo thinks
|
|
48
|
+
|
|
49
|
+
The thing that makes Tenpo different isn't a feature. It's how it reasons.
|
|
50
|
+
|
|
51
|
+
Most tools answer the question you asked. Tenpo answers the question that **matters** — which is usually a different one.
|
|
52
|
+
|
|
53
|
+
You ask: *"Why is revenue down this week?"*
|
|
54
|
+
|
|
55
|
+
A normal tool says "revenue dropped 31% vs last week." Accurate but useless.
|
|
56
|
+
|
|
57
|
+
Tenpo runs this instead:
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
"Revenue is down 31% this week"
|
|
61
|
+
│
|
|
62
|
+
┌─────────┴──────────┐
|
|
63
|
+
▼ ▼
|
|
64
|
+
When did it drop? What drove last
|
|
65
|
+
→ Tuesday week's revenue?
|
|
66
|
+
│ │
|
|
67
|
+
▼ ▼
|
|
68
|
+
What happened Are those products
|
|
69
|
+
on Tuesday? still in stock?
|
|
70
|
+
│ │
|
|
71
|
+
▼ ▼
|
|
72
|
+
3 top SKUs went NO — all 3 went OOS
|
|
73
|
+
out of stock on Tuesday
|
|
74
|
+
│ │
|
|
75
|
+
└─────────┬──────────┘
|
|
76
|
+
▼
|
|
77
|
+
Are ads still running on those OOS products?
|
|
78
|
+
│
|
|
79
|
+
▼
|
|
80
|
+
YES — $840/week wasted
|
|
81
|
+
│
|
|
82
|
+
┌─────────┴──────────┐
|
|
83
|
+
▼ ▼
|
|
84
|
+
When's the next Are customers
|
|
85
|
+
PO arriving? churning because of this?
|
|
86
|
+
│ │
|
|
87
|
+
▼ ▼
|
|
88
|
+
14 days away Repeat purchase rate
|
|
89
|
+
$22K/day at risk dropped 68% → 51%
|
|
90
|
+
= $3.1K total risk = frustrated buyers
|
|
91
|
+
going to competitors
|
|
92
|
+
```
|
|
19
93
|
|
|
20
|
-
|
|
94
|
+
One question. Seven angles investigated. A full causal chain — from symptom to root, with dollars attached at every step.
|
|
21
95
|
|
|
22
|
-
|
|
96
|
+
This is **multi-directional thinking**. Tenpo keeps pulling threads until it finds the *full* answer, not just *an* answer. Every response follows the same four-part shape:
|
|
23
97
|
|
|
24
|
-
What
|
|
25
|
-
- **Your AI gets factual answers**: tools execute SQL against your store, hit Klaviyo's API, ping Meta Ad Manager — never hallucinate
|
|
26
|
-
- **Multi-source joins are cheap**: ask *"true ROAS after fees"* and Tenpo joins Shopify orders × Meta spend × Stripe fees deterministically — no LLM in the join path
|
|
27
|
-
- **Latency is sub-10ms p50** for the analytics tools — they're SQL helpers, not LLM calls
|
|
28
|
-
- **Privacy is default-on**: per-merchant DuckDB, no cross-tenant leakage, k-anonymous network telemetry
|
|
98
|
+
> **What I'm seeing** → **Why this is happening** → **What this means** → **What I'd do about it**
|
|
29
99
|
|
|
30
100
|
---
|
|
31
101
|
|
|
32
|
-
##
|
|
102
|
+
## The cascade effect
|
|
103
|
+
|
|
104
|
+
In real businesses, nothing happens in isolation. Tenpo knows this.
|
|
33
105
|
|
|
34
|
-
|
|
106
|
+
You say four words: *"I received PO #42."*
|
|
35
107
|
|
|
36
|
-
|
|
108
|
+
Here's what happens automatically:
|
|
109
|
+
|
|
110
|
+
| Step | Action |
|
|
37
111
|
|---|---|
|
|
38
|
-
|
|
|
39
|
-
|
|
|
40
|
-
|
|
|
41
|
-
|
|
|
112
|
+
| 1 | Marks PO #42 received, updates stock levels |
|
|
113
|
+
| 2 | Finds 3 waiting orders for those SKUs — fulfils them |
|
|
114
|
+
| 3 | Notices Meta + Google ads were paused on those SKUs (because they were OOS) — resumes them |
|
|
115
|
+
| 4 | Records the $48,000 expense in Xero |
|
|
116
|
+
| 5 | Updates the supplier's reliability score for next time |
|
|
117
|
+
| 6 | Notes: "Klaviyo not connected — back-in-stock email would have triggered for 47 customers" |
|
|
118
|
+
|
|
119
|
+
Nine things across five platforms. **Every action triggers a chain reaction.** You did nothing but say four words.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## What Tenpo covers
|
|
124
|
+
|
|
125
|
+
Eight sectors. One operator. **You don't need to know which tool to call — just describe the outcome you want.**
|
|
126
|
+
|
|
127
|
+
<table>
|
|
128
|
+
<tr>
|
|
129
|
+
<th align="left">Sector</th>
|
|
130
|
+
<th align="left">What you can ask</th>
|
|
131
|
+
</tr>
|
|
132
|
+
|
|
133
|
+
<tr><td><b>Sales & Revenue</b></td><td>
|
|
134
|
+
|
|
135
|
+
How is my store doing this week · what's driving / killing revenue · best and worst products by margin · daily business overview · forecast next month's revenue · why did Tuesday spike
|
|
136
|
+
|
|
137
|
+
</td></tr>
|
|
138
|
+
|
|
139
|
+
<tr><td><b>Inventory & Suppliers</b></td><td>
|
|
140
|
+
|
|
141
|
+
What's about to run out · what to reorder (and how much) · which products are dead stock tying up cash · supplier reliability scorecards (A/B/C/D/F) · generate a PO and email it to my supplier · read incoming supplier emails and extract quotes · compare quotes from 3 suppliers · mark PO #42 received → cascade everything
|
|
142
|
+
|
|
143
|
+
</td></tr>
|
|
144
|
+
|
|
145
|
+
<tr><td><b>Marketing & Email</b></td><td>
|
|
146
|
+
|
|
147
|
+
Draft a winback campaign for lapsed champions · send a Klaviyo campaign · design a 30-day content calendar · A/B test subject lines · build a flash-sale flow · find cross-sell opportunities · which customers haven't bought in 60 days
|
|
148
|
+
|
|
149
|
+
</td></tr>
|
|
150
|
+
|
|
151
|
+
<tr><td><b>Paid Ads</b></td><td>
|
|
152
|
+
|
|
153
|
+
What's my true ROAS after COGS + shipping + fees · which campaigns to pause right now · reallocate budget from underperformers to winners · pause ads on out-of-stock products · auto-pause if ROAS drops below 2× · generate ad copy and creative concepts · campaign performance with revenue attribution
|
|
154
|
+
|
|
155
|
+
</td></tr>
|
|
156
|
+
|
|
157
|
+
<tr><td><b>Customers</b></td><td>
|
|
158
|
+
|
|
159
|
+
Who's about to churn · predicted next order date per customer · top 1% / 10% / 25% concentration risk · cross-sell next-best-product · win-back the right customers at the right time · respond to support tickets in Gorgias / Zendesk · reply to reviews on Trustpilot / Okendo / Judge.me
|
|
160
|
+
|
|
161
|
+
</td></tr>
|
|
162
|
+
|
|
163
|
+
<tr><td><b>Finance & Operations</b></td><td>
|
|
164
|
+
|
|
165
|
+
P&L waterfall (gross → COGS → fees → ad spend → operating profit) · what's leaking at each step · process Stripe refunds · push invoices to Xero / QuickBooks · create shipping labels · track shipments · sales-tax nexus monitoring · payout holds and disputes
|
|
42
166
|
|
|
43
|
-
|
|
167
|
+
</td></tr>
|
|
44
168
|
|
|
45
|
-
|
|
169
|
+
<tr><td><b>Competitors</b></td><td>
|
|
46
170
|
|
|
47
|
-
|
|
171
|
+
What's [competitor] priced at right now · who dropped prices this week · what emails are top brands sending this month · new SKUs they launched · their promo cadence · benchmark my AOV / LTV / repurchase rate against peers in my category (anonymous, k≥3 merchants)
|
|
48
172
|
|
|
49
|
-
|
|
173
|
+
</td></tr>
|
|
50
174
|
|
|
51
|
-
|
|
175
|
+
<tr><td><b>Automation</b></td><td>
|
|
52
176
|
|
|
53
|
-
|
|
177
|
+
Every Monday morning, send me a store overview · when revenue drops 30%, ping me on WhatsApp · auto-pause ads on OOS products · trigger the win-back flow when a customer hits 60 days quiet · let me approve once and never ask again for the same pattern
|
|
178
|
+
|
|
179
|
+
</td></tr>
|
|
180
|
+
|
|
181
|
+
</table>
|
|
182
|
+
|
|
183
|
+
Eight headline sectors. Behind them: **47 platform integrations, 229 tools your AI can call, and 100+ specialist skills loaded automatically based on what you ask.**
|
|
54
184
|
|
|
55
185
|
---
|
|
56
186
|
|
|
57
|
-
##
|
|
187
|
+
## Beyond data — built-in expertise
|
|
188
|
+
|
|
189
|
+
Tenpo isn't just retrieving data. It applies deep, structured expertise to interpret it.
|
|
190
|
+
|
|
191
|
+
When you ask Tenpo to write a campaign, it doesn't just write copy — it picks the right **psychological framework** for the moment:
|
|
192
|
+
|
|
193
|
+
| You're trying to… | Tenpo reaches for… |
|
|
194
|
+
|---|---|
|
|
195
|
+
| Convert hesitant first-time visitors | Loss Aversion + Social Proof |
|
|
196
|
+
| Move slow-selling inventory | Decoy Effect + Scarcity |
|
|
197
|
+
| Bring back lapsed customers | Zeigarnik Effect + Reciprocity |
|
|
198
|
+
| Increase average order value | Anchoring + Bundling Psychology |
|
|
199
|
+
| Reduce cart abandonment | Endowment Effect + Commitment Consistency |
|
|
200
|
+
| Launch a new product | Authority Bias + Social Proof |
|
|
201
|
+
| Run a flash sale | Scarcity + Urgency + Peak-End Rule |
|
|
202
|
+
| Re-engage a cold email list | Curiosity Gap + Reciprocity |
|
|
203
|
+
|
|
204
|
+
When you ask about pricing, it thinks in a **Velocity × Margin matrix**. When you ask about churn, it knows the recovery probability decays from 25% at 30 days to <1% at 180+ days, and routes each customer to the right message at the right time. When you ask about conversion, it audits the full funnel — traffic quality → landing experience → product page → checkout → post-purchase → retention — not just the headline number.
|
|
205
|
+
|
|
206
|
+
**No human campaign manager coordinates all of this in a single pass. Tenpo does it every time, in seconds.**
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## Background watchers — for connected stores
|
|
211
|
+
|
|
212
|
+
Once you've connected at least one integration, Tenpo runs background checks on your data automatically — no tier upgrade required, no manual setup:
|
|
58
213
|
|
|
59
|
-
|
|
214
|
+
| Watcher | What it catches |
|
|
215
|
+
|---|---|
|
|
216
|
+
| **Stock risk** | Products getting dangerously close to selling out before the next supplier delivery |
|
|
217
|
+
| **Revenue cliff** | Unexplained week-over-week revenue drops |
|
|
218
|
+
| **Refund spike** | Today's refund count exceeding 3× the recent baseline |
|
|
219
|
+
| **ROAS death** | Ad campaigns running below breakeven |
|
|
220
|
+
| **Dead stock with active ads** | Ad spend on SKUs that haven't sold in 14+ days while inventory sits |
|
|
221
|
+
| **Payment failure spike** | Stripe / processor anomalies signalling card-data drift or outages |
|
|
222
|
+
| **Inventory desync** | DB stock says "available", Shopify says "out" — pipeline drift |
|
|
223
|
+
|
|
224
|
+
When a watcher fires, you get a notification on the channel you set up — Telegram, WhatsApp, Slack, or email. When the situation resolves itself, the alert closes automatically.
|
|
225
|
+
|
|
226
|
+
> **What this needs:** at least one connected store + a notification channel set up. Watchers don't run for accounts that registered but never connected anything (we don't burn cycles on empty data).
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## Install in 2 lines
|
|
60
231
|
|
|
61
232
|
```bash
|
|
62
|
-
|
|
233
|
+
npx -y @tenpo/mcp
|
|
63
234
|
```
|
|
64
235
|
|
|
65
|
-
|
|
236
|
+
That's the first line. **First run auto-issues a free API key** (500 calls/month, no expiry, no card, no signup form). The key prints once in the host's stderr — copy it into your config so it's reused next time.
|
|
237
|
+
|
|
238
|
+
The second line goes into your AI host's config:
|
|
66
239
|
|
|
67
|
-
|
|
240
|
+
<details>
|
|
241
|
+
<summary><b>Claude Desktop</b> · <code>claude_desktop_config.json</code></summary>
|
|
68
242
|
|
|
69
243
|
```json
|
|
70
244
|
{
|
|
@@ -77,7 +251,7 @@ Edit `~/Library/Application Support/Claude/claude_desktop_config.json` (Mac) or
|
|
|
77
251
|
}
|
|
78
252
|
```
|
|
79
253
|
|
|
80
|
-
Restart Claude Desktop. The first call auto-
|
|
254
|
+
Restart Claude Desktop. The first call prints your auto-generated key — paste it into `env.TENPO_API_KEY` to keep using the same one across restarts:
|
|
81
255
|
|
|
82
256
|
```json
|
|
83
257
|
{
|
|
@@ -91,7 +265,21 @@ Restart Claude Desktop. The first call auto-issues a free key and prints it to y
|
|
|
91
265
|
}
|
|
92
266
|
```
|
|
93
267
|
|
|
94
|
-
|
|
268
|
+
</details>
|
|
269
|
+
|
|
270
|
+
<details>
|
|
271
|
+
<summary><b>Claude Code</b> (CLI)</summary>
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
claude mcp add tenpo --command "npx -y @tenpo/mcp"
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
The first call auto-issues your key. Add it to the env if you want it persisted across machines.
|
|
278
|
+
|
|
279
|
+
</details>
|
|
280
|
+
|
|
281
|
+
<details>
|
|
282
|
+
<summary><b>Cursor</b></summary>
|
|
95
283
|
|
|
96
284
|
Settings → MCP → Add new global MCP server:
|
|
97
285
|
|
|
@@ -107,60 +295,78 @@ Settings → MCP → Add new global MCP server:
|
|
|
107
295
|
}
|
|
108
296
|
```
|
|
109
297
|
|
|
110
|
-
|
|
298
|
+
Leave `TENPO_API_KEY` blank on first run — it'll be auto-issued and printed. Then paste it in.
|
|
299
|
+
|
|
300
|
+
</details>
|
|
301
|
+
|
|
302
|
+
<details>
|
|
303
|
+
<summary><b>Codex · OpenClaw · Hermes · or any MCP-compatible host</b></summary>
|
|
304
|
+
|
|
305
|
+
Standard stdio transport. Point the client at `npx -y @tenpo/mcp`. The package is a small stdio↔HTTPS proxy — works in any MCP host.
|
|
111
306
|
|
|
112
|
-
|
|
307
|
+
You don't need to provide an API key on first run. The MCP package will:
|
|
308
|
+
|
|
309
|
+
1. See no `TENPO_API_KEY` in env
|
|
310
|
+
2. Call the public `/api/v1/connect/issue-key` endpoint
|
|
311
|
+
3. Print your new key to stderr in a framed banner
|
|
312
|
+
4. Use it for the rest of the session
|
|
313
|
+
|
|
314
|
+
Save the key from that banner into `env.TENPO_API_KEY` so subsequent runs reuse it (otherwise a new key is issued each time).
|
|
315
|
+
|
|
316
|
+
</details>
|
|
317
|
+
|
|
318
|
+
Once installed, just talk to your AI as you normally would. Say *"connect my store"* and Tenpo walks you through it.
|
|
113
319
|
|
|
114
320
|
---
|
|
115
321
|
|
|
116
322
|
## Connecting your store
|
|
117
323
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
> *"connect my Shopify store"*
|
|
324
|
+
Tenpo supports any storefront. Just say which one you're on:
|
|
121
325
|
|
|
122
|
-
|
|
326
|
+
| Native, paste-token (90 sec) | Native OAuth (3 min) | Custom adapters (5 min) | Anything else |
|
|
327
|
+
|---|---|---|---|
|
|
328
|
+
| Shopify, WooCommerce | Amazon, Etsy | Squarespace, Wix, BigCommerce, Magento, Adobe Commerce, Salesforce Commerce Cloud, Webflow | CSV / JSON import — accepts Shopify, Woo, and Stripe export formats as-is |
|
|
123
329
|
|
|
124
|
-
After
|
|
330
|
+
After your store connects, layer in the platforms that matter to you — Klaviyo, Mailchimp, Omnisend, Meta Ads, Google Ads, TikTok Ads, Google Analytics 4, Stripe, Gorgias, Zendesk, Xero, QuickBooks, Slack, Telegram, WhatsApp, 30+ others. Each one is a one-line ask: *"connect my Klaviyo."*
|
|
125
331
|
|
|
126
332
|
---
|
|
127
333
|
|
|
128
334
|
## Pricing
|
|
129
335
|
|
|
130
|
-
| Tier |
|
|
336
|
+
| Tier | Cap | Price | What you get |
|
|
131
337
|
|---|---|---|---|
|
|
132
|
-
| **Free** | 500 calls/
|
|
133
|
-
| **Pro Monthly** |
|
|
134
|
-
| **Pro Yearly** | Unlimited | $190/
|
|
338
|
+
| **Free** | 500 calls / **month** | $0 | Every tool. Every integration. 1 connected store. No expiry. No card. |
|
|
339
|
+
| **Pro Monthly** | **Unlimited** | $19 / month | Everything in Free with no monthly cap. |
|
|
340
|
+
| **Pro Yearly** | **Unlimited** | $190 / year | Same as Pro Monthly, save $38. |
|
|
135
341
|
|
|
136
|
-
Your same API key
|
|
342
|
+
Your same API key works across tiers — upgrade just lifts the cap server-side. When you hit the free-tier cap, every response includes a one-click upgrade link. Pay → cap lifts in seconds (Dodo Payments).
|
|
137
343
|
|
|
138
|
-
|
|
344
|
+
The monthly cap resets on the 1st (UTC). 500 calls is roughly 50–80 user messages a month — enough to evaluate, plus comfortable light use.
|
|
139
345
|
|
|
140
|
-
**You always pay for your AI's tokens
|
|
346
|
+
**You always pay for your AI's tokens. Tenpo runs no LLM in the analytical path on our side** — every analytical tool is deterministic SQL or HTTP. That's why the free tier is genuinely free.
|
|
141
347
|
|
|
142
348
|
---
|
|
143
349
|
|
|
144
|
-
##
|
|
350
|
+
## How it works under the hood
|
|
145
351
|
|
|
146
352
|
```
|
|
147
353
|
┌──────────────────────────────────────────────────────────────────┐
|
|
148
|
-
│ Claude
|
|
354
|
+
│ Claude Desktop · Cursor · Claude Code · Codex · Hermes · etc. │
|
|
149
355
|
└──────────────────────┬───────────────────────────────────────────┘
|
|
150
|
-
│
|
|
356
|
+
│ MCP protocol (stdio JSON-RPC)
|
|
151
357
|
▼
|
|
152
358
|
┌──────────────────────────────────────────────────────────────────┐
|
|
153
|
-
│ @tenpo/mcp (this package —
|
|
359
|
+
│ @tenpo/mcp (this package — small stdio↔HTTPS proxy) │
|
|
154
360
|
└──────────────────────┬───────────────────────────────────────────┘
|
|
155
|
-
│
|
|
361
|
+
│ HTTPS, Bearer tnp_live_*
|
|
156
362
|
▼
|
|
157
363
|
┌──────────────────────────────────────────────────────────────────┐
|
|
158
|
-
│
|
|
364
|
+
│ Tenpo backend │
|
|
159
365
|
│ ├─ 229 deterministic tools (SQL helpers + HTTP integrations) │
|
|
160
|
-
│ ├─ Per-merchant
|
|
161
|
-
│ ├─ Background syncs
|
|
162
|
-
│ ├─
|
|
163
|
-
│ └─
|
|
366
|
+
│ ├─ Per-merchant database (your data, isolated, encrypted) │
|
|
367
|
+
│ ├─ Background syncs every 15 min (only for connected merchants) │
|
|
368
|
+
│ ├─ Background watchers (revenue, stock, supplier, churn, ads…) │
|
|
369
|
+
│ └─ Anonymous network telemetry (peer benchmarks, k≥3 merchants) │
|
|
164
370
|
└──────────────────────────────────────────────────────────────────┘
|
|
165
371
|
```
|
|
166
372
|
|
|
@@ -170,64 +376,60 @@ Your AI does the synthesis. Tenpo provides the synapses.
|
|
|
170
376
|
|
|
171
377
|
## Privacy
|
|
172
378
|
|
|
173
|
-
- **Per-merchant
|
|
174
|
-
- **
|
|
175
|
-
- **
|
|
176
|
-
- **
|
|
177
|
-
- **Retention
|
|
178
|
-
- **No LLM in the analytical path**: your queries don't get fed to any model — Tenpo just runs SQL and returns rows.
|
|
379
|
+
- **Your data is yours.** Per-merchant database, isolated from every other merchant. No cross-tenant queries are possible.
|
|
380
|
+
- **Network telemetry is anonymous.** When Tenpo learns from cross-merchant patterns (e.g. "what most stores in your category approve"), merchant IDs are salt-hashed irreversibly. Free-text fields (email, phone, $ amounts, IDs, API tokens) are stripped to placeholders before any aggregation.
|
|
381
|
+
- **K-anonymity (k≥3).** No stat surfaces until at least 3 distinct merchants contributed to it. You're never the only data point.
|
|
382
|
+
- **No LLM on the analytical path.** Your data isn't sent to a model — Tenpo runs SQL and returns rows. Your AI host (Claude, Cursor, etc.) sees the rows and writes a sentence.
|
|
383
|
+
- **Retention.** Raw events expire after 90 days. Aggregates kept indefinitely (already anonymised).
|
|
179
384
|
|
|
180
385
|
---
|
|
181
386
|
|
|
182
|
-
## Examples
|
|
387
|
+
## Examples of what to ask
|
|
183
388
|
|
|
184
|
-
|
|
389
|
+
Plug Tenpo in. Then ask your AI host things like:
|
|
390
|
+
|
|
391
|
+
> *"How is my store doing this week?"*
|
|
185
392
|
|
|
186
393
|
> *"Why is revenue down today?"*
|
|
187
|
-
> → calls `tenpo_revenue_trend`, `tenpo_inventory_intelligence`, `tenpo_top_products`; AI synthesizes a one-paragraph answer with the actual numbers
|
|
188
394
|
|
|
189
|
-
> *"
|
|
190
|
-
> → calls `tenpo_creative_dna(mode: draft, goal: winback)` → returns 3 variants with explicit hypotheses → AI fills in the copy → optional: `tenpo_create_campaign(pattern_id: ...)` to launch it via Klaviyo
|
|
395
|
+
> *"What are the 3 highest-leverage things I should fix this week?"*
|
|
191
396
|
|
|
192
|
-
> *"
|
|
193
|
-
> → calls `tenpo_supplier_scorecard` → AI ranks D/F-graded suppliers and drafts an opening email via `tenpo_draft_supplier_email`
|
|
397
|
+
> *"Draft a winback campaign for customers who lapsed 60+ days ago."*
|
|
194
398
|
|
|
195
|
-
> *"
|
|
196
|
-
> → calls `tenpo_competitor_intel(brand: "Allbirds")` → first call scrapes live + caches 24h → returns price-change diff
|
|
399
|
+
> *"Generate a PO for my top supplier for the 5 SKUs about to run out, and email it."*
|
|
197
400
|
|
|
198
|
-
> *"
|
|
199
|
-
> → calls `tenpo_network_intelligence(section: benchmark, category: apparel, metric: aov)` → returns peer median/p20/p80 (k-anonymous, ≥3 merchants required)
|
|
401
|
+
> *"Which Meta ads should I pause right now? Show me the dollars I'd save."*
|
|
200
402
|
|
|
201
|
-
|
|
403
|
+
> *"What's my true ROAS this month after COGS, shipping, and Stripe fees?"*
|
|
202
404
|
|
|
203
|
-
|
|
405
|
+
> *"Which suppliers should I renegotiate with? Rank them with a grade."*
|
|
204
406
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
TENPO_API_URL=http://localhost:3199 TENPO_API_KEY=tnp_live_... node dist/index.js
|
|
211
|
-
```
|
|
407
|
+
> *"Who's about to churn, and what should I send each segment?"*
|
|
408
|
+
|
|
409
|
+
> *"Every Monday at 9am, send me a one-paragraph store brief on WhatsApp."*
|
|
410
|
+
|
|
411
|
+
> *"Compare my AOV to other apparel stores my size."*
|
|
212
412
|
|
|
213
|
-
|
|
413
|
+
You don't need to know which tool runs. You don't need to learn a syntax. **Just describe the outcome.** Your AI picks the tools, Tenpo runs them, and the answer comes back grounded in real numbers.
|
|
214
414
|
|
|
215
415
|
---
|
|
216
416
|
|
|
217
417
|
## Status
|
|
218
418
|
|
|
219
|
-
-
|
|
220
|
-
-
|
|
221
|
-
-
|
|
222
|
-
-
|
|
419
|
+
- 🟢 Backend live at `api.tenpo.ai`
|
|
420
|
+
- 🟢 Sub-10ms p50 latency on analytical tools (verified live)
|
|
421
|
+
- 🟢 47 platform integrations
|
|
422
|
+
- 🟢 Anonymous network intelligence with peer benchmarks
|
|
423
|
+
- 🟡 Public-facing site at tenpo.ai is in active development
|
|
223
424
|
|
|
224
|
-
|
|
425
|
+
---
|
|
426
|
+
|
|
427
|
+
## Support
|
|
225
428
|
|
|
226
|
-
|
|
429
|
+
Questions, issues, feedback → **contact@tenpo.ai**
|
|
227
430
|
|
|
228
|
-
|
|
431
|
+
---
|
|
432
|
+
|
|
433
|
+
## License
|
|
229
434
|
|
|
230
|
-
|
|
231
|
-
- **API base**: [api.tenpo.ai](https://api.tenpo.ai)
|
|
232
|
-
- **Issues**: [github.com/tenpo-ai/tenpo-mcp/issues](https://github.com/tenpo-ai/tenpo-mcp/issues)
|
|
233
|
-
- **Source**: [github.com/tenpo-ai/tenpo-mcp](https://github.com/tenpo-ai/tenpo-mcp)
|
|
435
|
+
MIT — fork freely. The MCP package is a thin client; all the intelligence lives in Tenpo's hosted backend.
|
package/dist/index.js
CHANGED
|
@@ -70,7 +70,7 @@ async function tenpoFetch(path, options = {}) {
|
|
|
70
70
|
async function ensureApiKey() {
|
|
71
71
|
if (TENPO_API_KEY)
|
|
72
72
|
return;
|
|
73
|
-
log("No TENPO_API_KEY set
|
|
73
|
+
log("No TENPO_API_KEY set — auto-issuing a free key (500 calls/month, no card, no expiry).");
|
|
74
74
|
try {
|
|
75
75
|
// /api/v1/connect/issue-key is the current name; backend also accepts the
|
|
76
76
|
// legacy /trial-key for back-compat with older MCP package versions.
|
|
@@ -80,17 +80,19 @@ async function ensureApiKey() {
|
|
|
80
80
|
}));
|
|
81
81
|
if (res.api_key) {
|
|
82
82
|
TENPO_API_KEY = res.api_key;
|
|
83
|
+
const limit = res.monthly_call_limit ?? res.daily_call_limit ?? 500;
|
|
83
84
|
log(`\n` +
|
|
84
85
|
`╔══════════════════════════════════════════════════════════════════════╗\n` +
|
|
85
|
-
`║ Tenpo
|
|
86
|
+
`║ Tenpo — Free Key Issued ║\n` +
|
|
86
87
|
`╠══════════════════════════════════════════════════════════════════════╣\n` +
|
|
87
|
-
`║
|
|
88
|
+
`║ Add this to your MCP config so the same key is reused next time: ║\n` +
|
|
88
89
|
`║ ║\n` +
|
|
89
90
|
`║ TENPO_API_KEY=${(res.api_key ?? "").padEnd(54)}║\n` +
|
|
90
91
|
`║ ║\n` +
|
|
91
|
-
`║ Free tier: ${
|
|
92
|
-
`║ Upgrade
|
|
93
|
-
`║ Connect your store:
|
|
92
|
+
`║ Free tier: ${limit.toString().padEnd(4)} calls/month · resets the 1st (UTC) · no expiry.${" ".repeat(2)}║\n` +
|
|
93
|
+
`║ Upgrade ($19/mo unlimited): ${(res.upgrade_url ?? "https://tenpo.ai").padEnd(41)}║\n` +
|
|
94
|
+
`║ Connect your store: ${(res.connect_url ?? "https://tenpo.ai").padEnd(41)}║\n` +
|
|
95
|
+
`║ Questions? contact@tenpo.ai ║\n` +
|
|
94
96
|
`╚══════════════════════════════════════════════════════════════════════╝\n`);
|
|
95
97
|
}
|
|
96
98
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tenpo/mcp",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"description": "Tenpo
|
|
3
|
+
"version": "0.2.2",
|
|
4
|
+
"description": "Tenpo — the operator that runs alongside your store. Connects to 45+ commerce platforms (Shopify, Klaviyo, Meta Ads, GA4, Stripe…) and gives any AI host (Claude Desktop, Cursor, Claude Code, ChatGPT) deterministic answers about your sales, ads, email, inventory, suppliers, customers, finance, and competitors. Free tier, no card required.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://tenpo.ai",
|
|
7
7
|
"repository": {
|