@tenpo/mcp 0.2.1 → 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 +55 -43
- package/dist/index.js +8 -6
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -9,7 +9,6 @@ Tenpo runs your dashboards *for* you — across every platform, every minute, in
|
|
|
9
9
|
|
|
10
10
|
[](https://www.npmjs.com/package/@tenpo/mcp)
|
|
11
11
|
[](LICENSE)
|
|
12
|
-
[](https://tenpo.ai)
|
|
13
12
|
|
|
14
13
|
[**Get started in 2 lines →**](#install-in-2-lines) · [**See it think →**](#how-tenpo-thinks) · [**What it covers →**](#what-tenpo-covers)
|
|
15
14
|
|
|
@@ -35,14 +34,13 @@ When you ask Tenpo something, it doesn't look up a pre-calculated answer. It que
|
|
|
35
34
|
|
|
36
35
|
It's like having a business partner who:
|
|
37
36
|
|
|
38
|
-
- Has memorised every order, product, customer, campaign, and supplier
|
|
39
|
-
- Monitors your store 24/7, even when you're asleep
|
|
37
|
+
- Has memorised every order, product, customer, campaign, and supplier — once you connect them
|
|
40
38
|
- Spots problems before they become expensive
|
|
41
39
|
- Connects dots no human analyst would realistically cross-reference
|
|
42
40
|
- Knows *when to act* and *when to ask*
|
|
43
41
|
- Gets smarter about your specific business the longer you work together
|
|
44
42
|
|
|
45
|
-
You bring an AI host (Claude, Cursor,
|
|
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.**
|
|
46
44
|
|
|
47
45
|
---
|
|
48
46
|
|
|
@@ -158,19 +156,19 @@ What's my true ROAS after COGS + shipping + fees · which campaigns to pause rig
|
|
|
158
156
|
|
|
159
157
|
<tr><td><b>Customers</b></td><td>
|
|
160
158
|
|
|
161
|
-
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
|
|
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
|
|
162
160
|
|
|
163
161
|
</td></tr>
|
|
164
162
|
|
|
165
163
|
<tr><td><b>Finance & Operations</b></td><td>
|
|
166
164
|
|
|
167
|
-
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
|
|
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
|
|
168
166
|
|
|
169
167
|
</td></tr>
|
|
170
168
|
|
|
171
169
|
<tr><td><b>Competitors</b></td><td>
|
|
172
170
|
|
|
173
|
-
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 (k
|
|
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)
|
|
174
172
|
|
|
175
173
|
</td></tr>
|
|
176
174
|
|
|
@@ -182,7 +180,7 @@ Every Monday morning, send me a store overview · when revenue drops 30%, ping m
|
|
|
182
180
|
|
|
183
181
|
</table>
|
|
184
182
|
|
|
185
|
-
Eight headline sectors. Behind them: **
|
|
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.**
|
|
186
184
|
|
|
187
185
|
---
|
|
188
186
|
|
|
@@ -209,23 +207,23 @@ When you ask about pricing, it thinks in a **Velocity × Margin matrix**. When y
|
|
|
209
207
|
|
|
210
208
|
---
|
|
211
209
|
|
|
212
|
-
##
|
|
210
|
+
## Background watchers — for connected stores
|
|
213
211
|
|
|
214
|
-
|
|
212
|
+
Once you've connected at least one integration, Tenpo runs background checks on your data automatically — no tier upgrade required, no manual setup:
|
|
215
213
|
|
|
216
|
-
|
|
|
214
|
+
| Watcher | What it catches |
|
|
217
215
|
|---|---|
|
|
218
216
|
| **Stock risk** | Products getting dangerously close to selling out before the next supplier delivery |
|
|
219
|
-
| **Revenue
|
|
220
|
-
| **
|
|
221
|
-
| **
|
|
222
|
-
| **Dead stock
|
|
223
|
-
| **
|
|
224
|
-
| **
|
|
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 |
|
|
225
223
|
|
|
226
|
-
When
|
|
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.
|
|
227
225
|
|
|
228
|
-
|
|
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).
|
|
229
227
|
|
|
230
228
|
---
|
|
231
229
|
|
|
@@ -235,7 +233,7 @@ By the time you open your phone in the morning, Tenpo has already been watching
|
|
|
235
233
|
npx -y @tenpo/mcp
|
|
236
234
|
```
|
|
237
235
|
|
|
238
|
-
That's the first line. First run auto-issues a free API key (500 calls/
|
|
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.
|
|
239
237
|
|
|
240
238
|
The second line goes into your AI host's config:
|
|
241
239
|
|
|
@@ -253,7 +251,7 @@ The second line goes into your AI host's config:
|
|
|
253
251
|
}
|
|
254
252
|
```
|
|
255
253
|
|
|
256
|
-
Restart Claude Desktop. The first call prints your key — paste it into `env.TENPO_API_KEY` to keep using the same one:
|
|
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:
|
|
257
255
|
|
|
258
256
|
```json
|
|
259
257
|
{
|
|
@@ -276,6 +274,8 @@ Restart Claude Desktop. The first call prints your key — paste it into `env.TE
|
|
|
276
274
|
claude mcp add tenpo --command "npx -y @tenpo/mcp"
|
|
277
275
|
```
|
|
278
276
|
|
|
277
|
+
The first call auto-issues your key. Add it to the env if you want it persisted across machines.
|
|
278
|
+
|
|
279
279
|
</details>
|
|
280
280
|
|
|
281
281
|
<details>
|
|
@@ -295,12 +295,23 @@ Settings → MCP → Add new global MCP server:
|
|
|
295
295
|
}
|
|
296
296
|
```
|
|
297
297
|
|
|
298
|
+
Leave `TENPO_API_KEY` blank on first run — it'll be auto-issued and printed. Then paste it in.
|
|
299
|
+
|
|
298
300
|
</details>
|
|
299
301
|
|
|
300
302
|
<details>
|
|
301
|
-
<summary><b>Codex
|
|
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.
|
|
302
306
|
|
|
303
|
-
|
|
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).
|
|
304
315
|
|
|
305
316
|
</details>
|
|
306
317
|
|
|
@@ -312,25 +323,27 @@ Once installed, just talk to your AI as you normally would. Say *"connect my sto
|
|
|
312
323
|
|
|
313
324
|
Tenpo supports any storefront. Just say which one you're on:
|
|
314
325
|
|
|
315
|
-
| Native, paste-token (90
|
|
326
|
+
| Native, paste-token (90 sec) | Native OAuth (3 min) | Custom adapters (5 min) | Anything else |
|
|
316
327
|
|---|---|---|---|
|
|
317
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 |
|
|
318
329
|
|
|
319
|
-
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,
|
|
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."*
|
|
320
331
|
|
|
321
332
|
---
|
|
322
333
|
|
|
323
334
|
## Pricing
|
|
324
335
|
|
|
325
|
-
| Tier |
|
|
336
|
+
| Tier | Cap | Price | What you get |
|
|
326
337
|
|---|---|---|---|
|
|
327
|
-
| **Free** | 500 /
|
|
328
|
-
| **Pro Monthly** |
|
|
329
|
-
| **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. |
|
|
341
|
+
|
|
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).
|
|
330
343
|
|
|
331
|
-
|
|
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.
|
|
332
345
|
|
|
333
|
-
**You always pay for your AI's tokens. Tenpo runs
|
|
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.
|
|
334
347
|
|
|
335
348
|
---
|
|
336
349
|
|
|
@@ -338,12 +351,12 @@ Your same API key works across tiers — upgrade just changes the server-side li
|
|
|
338
351
|
|
|
339
352
|
```
|
|
340
353
|
┌──────────────────────────────────────────────────────────────────┐
|
|
341
|
-
│ Claude Desktop · Cursor · Claude Code ·
|
|
354
|
+
│ Claude Desktop · Cursor · Claude Code · Codex · Hermes · etc. │
|
|
342
355
|
└──────────────────────┬───────────────────────────────────────────┘
|
|
343
356
|
│ MCP protocol (stdio JSON-RPC)
|
|
344
357
|
▼
|
|
345
358
|
┌──────────────────────────────────────────────────────────────────┐
|
|
346
|
-
│ @tenpo/mcp (this package
|
|
359
|
+
│ @tenpo/mcp (this package — small stdio↔HTTPS proxy) │
|
|
347
360
|
└──────────────────────┬───────────────────────────────────────────┘
|
|
348
361
|
│ HTTPS, Bearer tnp_live_*
|
|
349
362
|
▼
|
|
@@ -351,9 +364,9 @@ Your same API key works across tiers — upgrade just changes the server-side li
|
|
|
351
364
|
│ Tenpo backend │
|
|
352
365
|
│ ├─ 229 deterministic tools (SQL helpers + HTTP integrations) │
|
|
353
366
|
│ ├─ Per-merchant database (your data, isolated, encrypted) │
|
|
354
|
-
│ ├─ Background syncs every 15 min (
|
|
355
|
-
│ ├─
|
|
356
|
-
│ └─
|
|
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) │
|
|
357
370
|
└──────────────────────────────────────────────────────────────────┘
|
|
358
371
|
```
|
|
359
372
|
|
|
@@ -366,7 +379,7 @@ Your AI does the synthesis. Tenpo provides the synapses.
|
|
|
366
379
|
- **Your data is yours.** Per-merchant database, isolated from every other merchant. No cross-tenant queries are possible.
|
|
367
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.
|
|
368
381
|
- **K-anonymity (k≥3).** No stat surfaces until at least 3 distinct merchants contributed to it. You're never the only data point.
|
|
369
|
-
- **No LLM on the analytical path.** Your data
|
|
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.
|
|
370
383
|
- **Retention.** Raw events expire after 90 days. Aggregates kept indefinitely (already anonymised).
|
|
371
384
|
|
|
372
385
|
---
|
|
@@ -403,18 +416,17 @@ You don't need to know which tool runs. You don't need to learn a syntax. **Just
|
|
|
403
416
|
|
|
404
417
|
## Status
|
|
405
418
|
|
|
406
|
-
-
|
|
407
|
-
-
|
|
408
|
-
-
|
|
409
|
-
-
|
|
410
|
-
-
|
|
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
|
|
411
424
|
|
|
412
425
|
---
|
|
413
426
|
|
|
414
427
|
## Support
|
|
415
428
|
|
|
416
429
|
Questions, issues, feedback → **contact@tenpo.ai**
|
|
417
|
-
Website → **[tenpo.ai](https://tenpo.ai)**
|
|
418
430
|
|
|
419
431
|
---
|
|
420
432
|
|
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,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tenpo/mcp",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
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",
|