paygate-mcp 8.29.0 → 8.31.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/README.md +67 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +131 -0
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -136,6 +136,8 @@ Agent → PayGate (auth + billing) → Your MCP Server (stdio or HTTP)
|
|
|
136
136
|
- **Webhook Health** — `GET /admin/webhook-health` webhook delivery health overview with success rate, pending retries, dead letter count, pause status, and buffered events
|
|
137
137
|
- **Consumer Insights** — `GET /admin/consumer-insights` per-key behavioral analytics with top spenders, most active callers, tool diversity, and spending patterns
|
|
138
138
|
- **System Health Score** — `GET /admin/system-health` composite 0-100 health score with weighted component breakdowns for key health, error rates, and credit utilization
|
|
139
|
+
- **Tool Adoption** — `GET /admin/tool-adoption` per-tool adoption metrics with unique consumers, adoption rate, first/last seen timestamps, and usage ranking
|
|
140
|
+
- **Credit Efficiency** — `GET /admin/credit-efficiency` credit allocation efficiency with burn efficiency, waste ratio, over-provisioned and under-provisioned key detection
|
|
139
141
|
- **Config Hot Reload** — `POST /config/reload` reloads pricing, rate limits, webhooks, quotas, and behavior flags from config file without server restart
|
|
140
142
|
- **Webhook Events** — POST batched usage events to any URL for external billing/alerting
|
|
141
143
|
- **Config File Mode** — Load all settings from a JSON file (`--config`)
|
|
@@ -3157,6 +3159,71 @@ curl http://localhost:3000/admin/system-health -H "X-Admin-Key: YOUR_ADMIN_KEY"
|
|
|
3157
3159
|
|
|
3158
3160
|
Composite system health score 0-100 with weighted component breakdowns. Key health (40%): penalizes suspended/revoked/expired/low-credit keys. Error rate (35%): penalizes high denial rates. Credit utilization (25%): healthy at 10-80%, degrades at >80%. Levels: healthy (>=80), good (>=60), warning (>=40), critical (<40). Read-only.
|
|
3159
3161
|
|
|
3162
|
+
### Tool Adoption
|
|
3163
|
+
|
|
3164
|
+
```bash
|
|
3165
|
+
curl http://localhost:3000/admin/tool-adoption -H "X-Admin-Key: YOUR_ADMIN_KEY"
|
|
3166
|
+
```
|
|
3167
|
+
|
|
3168
|
+
```json
|
|
3169
|
+
{
|
|
3170
|
+
"tools": [
|
|
3171
|
+
{
|
|
3172
|
+
"tool": "search",
|
|
3173
|
+
"uniqueConsumers": 8,
|
|
3174
|
+
"adoptionRate": 80,
|
|
3175
|
+
"totalCalls": 245,
|
|
3176
|
+
"firstSeen": "2025-01-10T08:00:00Z",
|
|
3177
|
+
"lastSeen": "2025-01-15T14:30:00Z"
|
|
3178
|
+
},
|
|
3179
|
+
{
|
|
3180
|
+
"tool": "translate",
|
|
3181
|
+
"uniqueConsumers": 3,
|
|
3182
|
+
"adoptionRate": 30,
|
|
3183
|
+
"totalCalls": 42,
|
|
3184
|
+
"firstSeen": "2025-01-12T10:00:00Z",
|
|
3185
|
+
"lastSeen": "2025-01-15T12:00:00Z"
|
|
3186
|
+
}
|
|
3187
|
+
],
|
|
3188
|
+
"summary": {
|
|
3189
|
+
"totalTools": 2,
|
|
3190
|
+
"usedTools": 2,
|
|
3191
|
+
"unusedTools": 0
|
|
3192
|
+
},
|
|
3193
|
+
"generatedAt": "2025-01-15T14:30:00Z"
|
|
3194
|
+
}
|
|
3195
|
+
```
|
|
3196
|
+
|
|
3197
|
+
Per-tool adoption metrics showing which tools are being used and by how many consumers. `uniqueConsumers` counts distinct API keys that called the tool. `adoptionRate` is the percentage of active keys that have used the tool. Sorted by adoption rate descending, then by total calls. Read-only.
|
|
3198
|
+
|
|
3199
|
+
### Credit Efficiency
|
|
3200
|
+
|
|
3201
|
+
```bash
|
|
3202
|
+
curl http://localhost:3000/admin/credit-efficiency -H "X-Admin-Key: YOUR_ADMIN_KEY"
|
|
3203
|
+
```
|
|
3204
|
+
|
|
3205
|
+
```json
|
|
3206
|
+
{
|
|
3207
|
+
"summary": {
|
|
3208
|
+
"totalAllocated": 5000,
|
|
3209
|
+
"totalSpent": 1200,
|
|
3210
|
+
"totalRemaining": 3800,
|
|
3211
|
+
"burnEfficiency": 24,
|
|
3212
|
+
"wasteRatio": 76,
|
|
3213
|
+
"activeKeys": 10
|
|
3214
|
+
},
|
|
3215
|
+
"overProvisioned": [
|
|
3216
|
+
{ "name": "idle-whale", "credits": 950, "totalAllocated": 1000, "totalSpent": 50, "remainingPercent": 95 }
|
|
3217
|
+
],
|
|
3218
|
+
"underProvisioned": [
|
|
3219
|
+
{ "name": "heavy-user", "credits": 3, "totalAllocated": 500, "totalSpent": 497, "remainingPercent": 1 }
|
|
3220
|
+
],
|
|
3221
|
+
"generatedAt": "2025-01-15T14:30:00Z"
|
|
3222
|
+
}
|
|
3223
|
+
```
|
|
3224
|
+
|
|
3225
|
+
Credit allocation efficiency analysis. `burnEfficiency` is the percentage of allocated credits actually spent. `wasteRatio` is the percentage remaining unused. Over-provisioned keys have >90% remaining credits. Under-provisioned keys have <=10 credits or <=10% remaining with active usage. Top 10 in each category, sorted by urgency. Read-only.
|
|
3226
|
+
|
|
3160
3227
|
### IP Allowlisting
|
|
3161
3228
|
|
|
3162
3229
|
Restrict API keys to specific IP addresses or CIDR ranges:
|
package/dist/server.d.ts
CHANGED
|
@@ -271,6 +271,8 @@ export declare class PayGateServer {
|
|
|
271
271
|
private handleWebhookHealth;
|
|
272
272
|
private handleConsumerInsights;
|
|
273
273
|
private handleSystemHealth;
|
|
274
|
+
private handleToolAdoption;
|
|
275
|
+
private handleCreditEfficiency;
|
|
274
276
|
private handleGetNotes;
|
|
275
277
|
private handleAddNote;
|
|
276
278
|
private handleDeleteNote;
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -972,6 +972,18 @@ class PayGateServer {
|
|
|
972
972
|
res.writeHead(405, { 'Content-Type': 'application/json' });
|
|
973
973
|
res.end(JSON.stringify({ error: 'Method not allowed. Use GET.' }));
|
|
974
974
|
return;
|
|
975
|
+
case '/admin/tool-adoption':
|
|
976
|
+
if (req.method === 'GET')
|
|
977
|
+
return this.handleToolAdoption(req, res);
|
|
978
|
+
res.writeHead(405, { 'Content-Type': 'application/json' });
|
|
979
|
+
res.end(JSON.stringify({ error: 'Method not allowed. Use GET.' }));
|
|
980
|
+
return;
|
|
981
|
+
case '/admin/credit-efficiency':
|
|
982
|
+
if (req.method === 'GET')
|
|
983
|
+
return this.handleCreditEfficiency(req, res);
|
|
984
|
+
res.writeHead(405, { 'Content-Type': 'application/json' });
|
|
985
|
+
res.end(JSON.stringify({ error: 'Method not allowed. Use GET.' }));
|
|
986
|
+
return;
|
|
975
987
|
// ─── Plugin endpoints ──────────────────────────────────────────────
|
|
976
988
|
case '/plugins':
|
|
977
989
|
return this.handleListPlugins(req, res);
|
|
@@ -1541,6 +1553,8 @@ class PayGateServer {
|
|
|
1541
1553
|
webhookHealth: 'GET /admin/webhook-health — Webhook delivery health overview with success rate, retries, dead letters, and pause status (requires X-Admin-Key)',
|
|
1542
1554
|
consumerInsights: 'GET /admin/consumer-insights — Per-key behavioral analytics with top spenders, most active callers, tool diversity, and spending patterns (requires X-Admin-Key)',
|
|
1543
1555
|
systemHealth: 'GET /admin/system-health — Composite system health score 0-100 with component breakdowns for key health, error rates, and credit utilization (requires X-Admin-Key)',
|
|
1556
|
+
toolAdoption: 'GET /admin/tool-adoption — Per-tool adoption metrics with unique consumers, adoption rate, first/last seen, and never-used tool identification (requires X-Admin-Key)',
|
|
1557
|
+
creditEfficiency: 'GET /admin/credit-efficiency — Credit allocation efficiency with burn efficiency, waste ratio, over-provisioned and under-provisioned key detection (requires X-Admin-Key)',
|
|
1544
1558
|
...(this.oauth ? {
|
|
1545
1559
|
oauthMetadata: 'GET /.well-known/oauth-authorization-server — OAuth 2.1 server metadata',
|
|
1546
1560
|
oauthRegister: 'POST /oauth/register — Register OAuth client',
|
|
@@ -6953,6 +6967,123 @@ class PayGateServer {
|
|
|
6953
6967
|
generatedAt: new Date().toISOString(),
|
|
6954
6968
|
}));
|
|
6955
6969
|
}
|
|
6970
|
+
// ─── /admin/tool-adoption — Per-tool adoption metrics ─────────────────────
|
|
6971
|
+
handleToolAdoption(req, res) {
|
|
6972
|
+
if (!this.checkAdmin(req, res))
|
|
6973
|
+
return;
|
|
6974
|
+
const allRecords = this.gate.store.getAllRecords();
|
|
6975
|
+
const activeKeys = allRecords.filter(r => r.active && !r.suspended);
|
|
6976
|
+
const activeKeyCount = activeKeys.length;
|
|
6977
|
+
// Build per-tool metrics from request log
|
|
6978
|
+
const toolMap = new Map();
|
|
6979
|
+
for (const entry of this.requestLog) {
|
|
6980
|
+
if (entry.status !== 'allowed')
|
|
6981
|
+
continue;
|
|
6982
|
+
let data = toolMap.get(entry.tool);
|
|
6983
|
+
if (!data) {
|
|
6984
|
+
data = { consumers: new Set(), totalCalls: 0, firstSeen: Infinity, lastSeen: 0 };
|
|
6985
|
+
toolMap.set(entry.tool, data);
|
|
6986
|
+
}
|
|
6987
|
+
data.consumers.add(entry.key);
|
|
6988
|
+
data.totalCalls++;
|
|
6989
|
+
const ts = new Date(entry.timestamp).getTime();
|
|
6990
|
+
if (ts < data.firstSeen)
|
|
6991
|
+
data.firstSeen = ts;
|
|
6992
|
+
if (ts > data.lastSeen)
|
|
6993
|
+
data.lastSeen = ts;
|
|
6994
|
+
}
|
|
6995
|
+
// Build sorted tools array by adoption rate descending
|
|
6996
|
+
const tools = Array.from(toolMap.entries()).map(([tool, data]) => ({
|
|
6997
|
+
tool,
|
|
6998
|
+
uniqueConsumers: data.consumers.size,
|
|
6999
|
+
adoptionRate: activeKeyCount > 0
|
|
7000
|
+
? Math.round((data.consumers.size / activeKeyCount) * 100)
|
|
7001
|
+
: 0,
|
|
7002
|
+
totalCalls: data.totalCalls,
|
|
7003
|
+
firstSeen: new Date(data.firstSeen).toISOString(),
|
|
7004
|
+
lastSeen: new Date(data.lastSeen).toISOString(),
|
|
7005
|
+
})).sort((a, b) => b.adoptionRate - a.adoptionRate || b.totalCalls - a.totalCalls);
|
|
7006
|
+
const usedTools = toolMap.size;
|
|
7007
|
+
// Count total known tools from request log (we don't have access to the child process tool list)
|
|
7008
|
+
const totalTools = usedTools;
|
|
7009
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
7010
|
+
res.end(JSON.stringify({
|
|
7011
|
+
tools,
|
|
7012
|
+
summary: {
|
|
7013
|
+
totalTools,
|
|
7014
|
+
usedTools,
|
|
7015
|
+
unusedTools: totalTools - usedTools,
|
|
7016
|
+
},
|
|
7017
|
+
generatedAt: new Date().toISOString(),
|
|
7018
|
+
}));
|
|
7019
|
+
}
|
|
7020
|
+
// ─── /admin/credit-efficiency — Credit allocation efficiency ──────────────
|
|
7021
|
+
handleCreditEfficiency(req, res) {
|
|
7022
|
+
if (!this.checkAdmin(req, res))
|
|
7023
|
+
return;
|
|
7024
|
+
const allRecords = this.gate.store.getAllRecords();
|
|
7025
|
+
const activeRecords = allRecords.filter(r => r.active && !r.suspended);
|
|
7026
|
+
let totalAllocated = 0;
|
|
7027
|
+
let totalSpent = 0;
|
|
7028
|
+
let totalRemaining = 0;
|
|
7029
|
+
const overProvisioned = [];
|
|
7030
|
+
const underProvisioned = [];
|
|
7031
|
+
for (const rec of activeRecords) {
|
|
7032
|
+
const allocated = (rec.credits || 0) + (rec.totalSpent || 0);
|
|
7033
|
+
const spent = rec.totalSpent || 0;
|
|
7034
|
+
const remaining = rec.credits || 0;
|
|
7035
|
+
totalAllocated += allocated;
|
|
7036
|
+
totalSpent += spent;
|
|
7037
|
+
totalRemaining += remaining;
|
|
7038
|
+
if (allocated > 0) {
|
|
7039
|
+
const remainingPercent = Math.round((remaining / allocated) * 100);
|
|
7040
|
+
// Over-provisioned: >90% remaining with some activity or never used
|
|
7041
|
+
if (remainingPercent > 90 && allocated > 0) {
|
|
7042
|
+
overProvisioned.push({
|
|
7043
|
+
name: rec.name || 'unnamed',
|
|
7044
|
+
credits: remaining,
|
|
7045
|
+
totalAllocated: allocated,
|
|
7046
|
+
totalSpent: spent,
|
|
7047
|
+
remainingPercent,
|
|
7048
|
+
});
|
|
7049
|
+
}
|
|
7050
|
+
// Under-provisioned: <=10 credits remaining or <=10% remaining (with some usage)
|
|
7051
|
+
if (spent > 0 && (remaining <= 10 || remainingPercent <= 10)) {
|
|
7052
|
+
underProvisioned.push({
|
|
7053
|
+
name: rec.name || 'unnamed',
|
|
7054
|
+
credits: remaining,
|
|
7055
|
+
totalAllocated: allocated,
|
|
7056
|
+
totalSpent: spent,
|
|
7057
|
+
remainingPercent,
|
|
7058
|
+
});
|
|
7059
|
+
}
|
|
7060
|
+
}
|
|
7061
|
+
}
|
|
7062
|
+
// Sort over-provisioned by remaining credits descending
|
|
7063
|
+
overProvisioned.sort((a, b) => b.credits - a.credits);
|
|
7064
|
+
// Sort under-provisioned by remaining credits ascending (most urgent first)
|
|
7065
|
+
underProvisioned.sort((a, b) => a.credits - b.credits);
|
|
7066
|
+
const burnEfficiency = totalAllocated > 0
|
|
7067
|
+
? Math.round((totalSpent / totalAllocated) * 100)
|
|
7068
|
+
: 0;
|
|
7069
|
+
const wasteRatio = totalAllocated > 0
|
|
7070
|
+
? Math.round((totalRemaining / totalAllocated) * 100)
|
|
7071
|
+
: 0;
|
|
7072
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
7073
|
+
res.end(JSON.stringify({
|
|
7074
|
+
summary: {
|
|
7075
|
+
totalAllocated,
|
|
7076
|
+
totalSpent,
|
|
7077
|
+
totalRemaining,
|
|
7078
|
+
burnEfficiency,
|
|
7079
|
+
wasteRatio,
|
|
7080
|
+
activeKeys: activeRecords.length,
|
|
7081
|
+
},
|
|
7082
|
+
overProvisioned: overProvisioned.slice(0, 10),
|
|
7083
|
+
underProvisioned: underProvisioned.slice(0, 10),
|
|
7084
|
+
generatedAt: new Date().toISOString(),
|
|
7085
|
+
}));
|
|
7086
|
+
}
|
|
6956
7087
|
// ─── /keys/notes — Timestamped notes on API keys ─────────────────────────
|
|
6957
7088
|
handleGetNotes(req, res) {
|
|
6958
7089
|
if (!this.checkAdmin(req, res))
|