alterlab-mcp-server 1.7.0 → 1.9.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 +75 -33
- package/dist/auth.d.ts +30 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +423 -0
- package/dist/auth.js.map +1 -0
- package/dist/client.d.ts +23 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +61 -3
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +21 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +85 -8
- package/dist/config.js.map +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +6 -4
- package/dist/errors.js.map +1 -1
- package/dist/format.d.ts +20 -2
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +187 -9
- package/dist/format.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +66 -2
- package/dist/index.js.map +1 -1
- package/dist/tools/balance.d.ts.map +1 -1
- package/dist/tools/balance.js +4 -2
- package/dist/tools/balance.js.map +1 -1
- package/dist/tools/batch.d.ts +1221 -25
- package/dist/tools/batch.d.ts.map +1 -1
- package/dist/tools/batch.js +123 -34
- package/dist/tools/batch.js.map +1 -1
- package/dist/tools/common.d.ts +313 -0
- package/dist/tools/common.d.ts.map +1 -0
- package/dist/tools/common.js +336 -0
- package/dist/tools/common.js.map +1 -0
- package/dist/tools/crawl.d.ts +165 -10
- package/dist/tools/crawl.d.ts.map +1 -1
- package/dist/tools/crawl.js +191 -43
- package/dist/tools/crawl.js.map +1 -1
- package/dist/tools/estimate.d.ts +21 -6
- package/dist/tools/estimate.d.ts.map +1 -1
- package/dist/tools/estimate.js +28 -35
- package/dist/tools/estimate.js.map +1 -1
- package/dist/tools/extract.d.ts +5 -5
- package/dist/tools/extract.d.ts.map +1 -1
- package/dist/tools/extract.js +16 -12
- package/dist/tools/extract.js.map +1 -1
- package/dist/tools/job.d.ts +13 -0
- package/dist/tools/job.d.ts.map +1 -0
- package/dist/tools/job.js +62 -0
- package/dist/tools/job.js.map +1 -0
- package/dist/tools/map.d.ts +5 -2
- package/dist/tools/map.d.ts.map +1 -1
- package/dist/tools/map.js +16 -5
- package/dist/tools/map.js.map +1 -1
- package/dist/tools/scrape.d.ts +431 -49
- package/dist/tools/scrape.d.ts.map +1 -1
- package/dist/tools/scrape.js +267 -135
- package/dist/tools/scrape.js.map +1 -1
- package/dist/tools/screenshot.d.ts +33 -0
- package/dist/tools/screenshot.d.ts.map +1 -1
- package/dist/tools/screenshot.js +60 -10
- package/dist/tools/screenshot.js.map +1 -1
- package/dist/tools/search.d.ts +11 -5
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +22 -6
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/sessions.d.ts +180 -12
- package/dist/tools/sessions.d.ts.map +1 -1
- package/dist/tools/sessions.js +75 -21
- package/dist/tools/sessions.js.map +1 -1
- package/dist/tools/simple_batch.d.ts +28 -0
- package/dist/tools/simple_batch.d.ts.map +1 -0
- package/dist/tools/simple_batch.js +142 -0
- package/dist/tools/simple_batch.js.map +1 -0
- package/dist/tools/usage.d.ts +7 -0
- package/dist/tools/usage.d.ts.map +1 -0
- package/dist/tools/usage.js +42 -0
- package/dist/tools/usage.js.map +1 -0
- package/dist/types.d.ts +219 -21
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +5 -3
- package/server.json +40 -4
package/dist/tools/sessions.js
CHANGED
|
@@ -10,6 +10,7 @@ exports.handleRefreshSession = handleRefreshSession;
|
|
|
10
10
|
exports.handleDeleteSession = handleDeleteSession;
|
|
11
11
|
const zod_1 = require("zod");
|
|
12
12
|
const errors_js_1 = require("../errors.js");
|
|
13
|
+
const common_js_1 = require("./common.js");
|
|
13
14
|
const format_js_1 = require("../format.js");
|
|
14
15
|
// ============================================================================
|
|
15
16
|
// List Sessions
|
|
@@ -36,6 +37,24 @@ async function handleListSessions(client) {
|
|
|
36
37
|
// ============================================================================
|
|
37
38
|
// Create Session
|
|
38
39
|
// ============================================================================
|
|
40
|
+
const cookieObjectSchema = zod_1.z
|
|
41
|
+
.object({
|
|
42
|
+
name: zod_1.z.string().min(1),
|
|
43
|
+
value: zod_1.z.string(),
|
|
44
|
+
domain: zod_1.z.string().optional(),
|
|
45
|
+
path: zod_1.z.string().optional(),
|
|
46
|
+
secure: zod_1.z.boolean().optional(),
|
|
47
|
+
httpOnly: zod_1.z.boolean().optional(),
|
|
48
|
+
sameSite: zod_1.z.string().optional(),
|
|
49
|
+
expires: zod_1.z.number().optional(),
|
|
50
|
+
})
|
|
51
|
+
.passthrough();
|
|
52
|
+
const cookiesSchema = zod_1.z.union([
|
|
53
|
+
zod_1.z.record(zod_1.z.string(), zod_1.z.string()),
|
|
54
|
+
zod_1.z.array(cookieObjectSchema).max(100),
|
|
55
|
+
]);
|
|
56
|
+
const COOKIES_DESCRIPTION = 'Cookies as a {name: value} object (e.g. {"session-id": "abc123"}) or as a list (max 100) of cookie ' +
|
|
57
|
+
"objects with metadata: {name, value, domain?, path?, secure?, httpOnly?, sameSite?, expires?}.";
|
|
39
58
|
exports.createSessionSchema = zod_1.z.object({
|
|
40
59
|
name: zod_1.z
|
|
41
60
|
.string()
|
|
@@ -44,29 +63,55 @@ exports.createSessionSchema = zod_1.z.object({
|
|
|
44
63
|
.describe("Human-readable name for this session (e.g., 'My Amazon Account')"),
|
|
45
64
|
domain: zod_1.z
|
|
46
65
|
.string()
|
|
47
|
-
.min(
|
|
66
|
+
.min(3)
|
|
67
|
+
.max(255)
|
|
48
68
|
.describe("Domain this session is for (e.g., 'amazon.com')"),
|
|
49
|
-
|
|
69
|
+
consent: zod_1.z
|
|
70
|
+
.boolean()
|
|
71
|
+
.describe("Explicit GDPR consent from the account owner to store these session cookies. " +
|
|
72
|
+
"Must be true — the API rejects session creation with CONSENT_REQUIRED otherwise. " +
|
|
73
|
+
"Only set true after the user has agreed to AlterLab storing their cookies."),
|
|
74
|
+
cookies: cookiesSchema.optional().describe("Cookies for authentication. " + COOKIES_DESCRIPTION),
|
|
75
|
+
headers: zod_1.z
|
|
50
76
|
.record(zod_1.z.string(), zod_1.z.string())
|
|
51
|
-
.
|
|
52
|
-
|
|
53
|
-
|
|
77
|
+
.optional()
|
|
78
|
+
.describe("Custom headers sent with this session (e.g., a User-Agent or Authorization header)"),
|
|
79
|
+
expires_at: zod_1.z
|
|
54
80
|
.string()
|
|
55
81
|
.optional()
|
|
56
|
-
.describe("
|
|
82
|
+
.describe("Session expiry in ISO 8601 format (e.g., '2026-12-31T23:59:59Z')"),
|
|
83
|
+
notes: zod_1.z.string().max(1000).optional().describe("Free-text notes about this session"),
|
|
84
|
+
auto_refresh_enabled: zod_1.z
|
|
85
|
+
.boolean()
|
|
86
|
+
.optional()
|
|
87
|
+
.describe("Enable proactive expiry detection and health checks (API default true)"),
|
|
88
|
+
notify_before_expiry: zod_1.z
|
|
89
|
+
.boolean()
|
|
90
|
+
.optional()
|
|
91
|
+
.describe("Notify when the session is about to expire (API default true)"),
|
|
92
|
+
notify_on_failure: zod_1.z
|
|
93
|
+
.boolean()
|
|
94
|
+
.optional()
|
|
95
|
+
.describe("Notify when session validation fails (API default true)"),
|
|
96
|
+
organization_id: zod_1.z
|
|
97
|
+
.string()
|
|
98
|
+
.uuid()
|
|
99
|
+
.optional()
|
|
100
|
+
.describe("Organization to assign the session to (org admins only)"),
|
|
101
|
+
shared: zod_1.z
|
|
102
|
+
.boolean()
|
|
103
|
+
.optional()
|
|
104
|
+
.describe("Share the session with organization members immediately (API default false)"),
|
|
57
105
|
});
|
|
58
106
|
exports.createSessionDescription = "Create a new stored session for authenticated scraping. " +
|
|
59
107
|
"Provide cookies from a logged-in browser session to enable scraping " +
|
|
60
108
|
"behind login walls. The session is stored securely and can be reused " +
|
|
61
|
-
"across multiple scrape requests via session_id."
|
|
109
|
+
"across multiple scrape requests via session_id. " +
|
|
110
|
+
"Requires consent=true (explicit GDPR consent to store the cookies); optional headers, expires_at, notes, " +
|
|
111
|
+
"auto_refresh/notification flags and organization sharing are supported.";
|
|
62
112
|
async function handleCreateSession(client, params) {
|
|
63
113
|
try {
|
|
64
|
-
const response = await client.createSession(
|
|
65
|
-
name: params.name,
|
|
66
|
-
domain: params.domain,
|
|
67
|
-
cookies: params.cookies,
|
|
68
|
-
user_agent: params.user_agent,
|
|
69
|
-
});
|
|
114
|
+
const response = await client.createSession((0, common_js_1.compact)(params));
|
|
70
115
|
return {
|
|
71
116
|
content: [{ type: "text", text: (0, format_js_1.formatSessionCreateResponse)(response) }],
|
|
72
117
|
};
|
|
@@ -138,11 +183,9 @@ exports.updateSessionSchema = zod_1.z.object({
|
|
|
138
183
|
.max(100)
|
|
139
184
|
.optional()
|
|
140
185
|
.describe("New name for the session"),
|
|
141
|
-
cookies:
|
|
142
|
-
.record(zod_1.z.string(), zod_1.z.string())
|
|
186
|
+
cookies: cookiesSchema
|
|
143
187
|
.optional()
|
|
144
|
-
.describe("New
|
|
145
|
-
'(e.g., {"session-id": "new123", "session-token": "newxyz"})'),
|
|
188
|
+
.describe("New cookies — replaces ALL existing cookies. " + COOKIES_DESCRIPTION),
|
|
146
189
|
headers: zod_1.z
|
|
147
190
|
.record(zod_1.z.string(), zod_1.z.string())
|
|
148
191
|
.optional()
|
|
@@ -156,6 +199,18 @@ exports.updateSessionSchema = zod_1.z.object({
|
|
|
156
199
|
.max(1000)
|
|
157
200
|
.optional()
|
|
158
201
|
.describe("Notes or description for this session"),
|
|
202
|
+
auto_refresh_enabled: zod_1.z
|
|
203
|
+
.boolean()
|
|
204
|
+
.optional()
|
|
205
|
+
.describe("Enable or disable proactive expiry detection and health checks"),
|
|
206
|
+
notify_before_expiry: zod_1.z
|
|
207
|
+
.boolean()
|
|
208
|
+
.optional()
|
|
209
|
+
.describe("Enable or disable the before-expiry notification"),
|
|
210
|
+
notify_on_failure: zod_1.z
|
|
211
|
+
.boolean()
|
|
212
|
+
.optional()
|
|
213
|
+
.describe("Enable or disable the validation-failure notification"),
|
|
159
214
|
});
|
|
160
215
|
exports.updateSessionDescription = "Update a stored session's properties. You can change the name, rotate " +
|
|
161
216
|
"cookies, update custom headers, set a new expiration, or add notes. " +
|
|
@@ -181,11 +236,10 @@ async function handleUpdateSession(client, params) {
|
|
|
181
236
|
// ============================================================================
|
|
182
237
|
exports.refreshSessionSchema = zod_1.z.object({
|
|
183
238
|
session_id: zod_1.z.string().uuid().describe("UUID of the session to refresh"),
|
|
184
|
-
cookies:
|
|
185
|
-
.record(zod_1.z.string(), zod_1.z.string())
|
|
239
|
+
cookies: cookiesSchema
|
|
186
240
|
.optional()
|
|
187
|
-
.describe("New
|
|
188
|
-
|
|
241
|
+
.describe("New cookies to replace the old ones. If omitted, only failure counters are reset. " +
|
|
242
|
+
COOKIES_DESCRIPTION),
|
|
189
243
|
headers: zod_1.z
|
|
190
244
|
.record(zod_1.z.string(), zod_1.z.string())
|
|
191
245
|
.optional()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/tools/sessions.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/tools/sessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
|
|
3
|
+
import type { AlterLabClient } from "../client.js";
|
|
4
|
+
export declare const simpleBatchSchema: z.ZodObject<{
|
|
5
|
+
urls: z.ZodArray<z.ZodString, "many">;
|
|
6
|
+
formats: z.ZodDefault<z.ZodArray<z.ZodEnum<["text", "json", "json_v2", "html", "markdown", "rag", "content", "raw"]>, "many">>;
|
|
7
|
+
render_js: z.ZodDefault<z.ZodBoolean>;
|
|
8
|
+
use_proxy: z.ZodDefault<z.ZodBoolean>;
|
|
9
|
+
timeout: z.ZodDefault<z.ZodNumber>;
|
|
10
|
+
max_concurrent: z.ZodDefault<z.ZodNumber>;
|
|
11
|
+
}, "strip", z.ZodTypeAny, {
|
|
12
|
+
timeout: number;
|
|
13
|
+
formats: ("content" | "text" | "json" | "json_v2" | "html" | "markdown" | "rag" | "raw")[];
|
|
14
|
+
render_js: boolean;
|
|
15
|
+
use_proxy: boolean;
|
|
16
|
+
urls: string[];
|
|
17
|
+
max_concurrent: number;
|
|
18
|
+
}, {
|
|
19
|
+
urls: string[];
|
|
20
|
+
timeout?: number | undefined;
|
|
21
|
+
formats?: ("content" | "text" | "json" | "json_v2" | "html" | "markdown" | "rag" | "raw")[] | undefined;
|
|
22
|
+
render_js?: boolean | undefined;
|
|
23
|
+
use_proxy?: boolean | undefined;
|
|
24
|
+
max_concurrent?: number | undefined;
|
|
25
|
+
}>;
|
|
26
|
+
export declare const simpleBatchDescription: string;
|
|
27
|
+
export declare function handleSimpleBatch(client: AlterLabClient, params: z.infer<typeof simpleBatchSchema>): Promise<CallToolResult>;
|
|
28
|
+
//# sourceMappingURL=simple_batch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple_batch.d.ts","sourceRoot":"","sources":["../../src/tools/simple_batch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAInD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;EA4C5B,CAAC;AAEH,eAAO,MAAM,sBAAsB,QAMoE,CAAC;AAMxG,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,GACxC,OAAO,CAAC,cAAc,CAAC,CAwGzB"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.simpleBatchDescription = exports.simpleBatchSchema = void 0;
|
|
4
|
+
exports.handleSimpleBatch = handleSimpleBatch;
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const common_js_1 = require("./common.js");
|
|
7
|
+
const format_js_1 = require("../format.js");
|
|
8
|
+
exports.simpleBatchSchema = zod_1.z.object({
|
|
9
|
+
urls: zod_1.z
|
|
10
|
+
.array(zod_1.z.string().url().max(2083))
|
|
11
|
+
.min(1)
|
|
12
|
+
.max(20)
|
|
13
|
+
.describe("List of URLs to scrape (max 20). All results are returned synchronously."),
|
|
14
|
+
formats: zod_1.z
|
|
15
|
+
.array(common_js_1.allFormatEnum)
|
|
16
|
+
.default(["markdown"])
|
|
17
|
+
.describe("Output formats applied to every URL. 'markdown' is best for LLM consumption."),
|
|
18
|
+
render_js: zod_1.z
|
|
19
|
+
.boolean()
|
|
20
|
+
.default(false)
|
|
21
|
+
.describe("Render JavaScript using headless browser for all URLs. " +
|
|
22
|
+
"Required for JS-heavy sites. Forces tier 4 ($0.004/req)."),
|
|
23
|
+
use_proxy: zod_1.z
|
|
24
|
+
.boolean()
|
|
25
|
+
.default(false)
|
|
26
|
+
.describe("Route all requests through premium proxy (+$0.0002/req)."),
|
|
27
|
+
timeout: zod_1.z
|
|
28
|
+
.number()
|
|
29
|
+
.int()
|
|
30
|
+
.min(1)
|
|
31
|
+
.max(300)
|
|
32
|
+
.default(90)
|
|
33
|
+
.describe("Request timeout in seconds per URL (1-300)."),
|
|
34
|
+
max_concurrent: zod_1.z
|
|
35
|
+
.number()
|
|
36
|
+
.int()
|
|
37
|
+
.min(1)
|
|
38
|
+
.max(10)
|
|
39
|
+
.default(3)
|
|
40
|
+
.describe("Maximum number of URLs to scrape in parallel (1-10, default 3). " +
|
|
41
|
+
"Higher values finish faster but consume more concurrent connections."),
|
|
42
|
+
});
|
|
43
|
+
exports.simpleBatchDescription = "Scrape multiple URLs simultaneously and get all results back in one call — no polling required. " +
|
|
44
|
+
"Unlike alterlab_batch (async with batch_id polling), this returns all results inline when complete. " +
|
|
45
|
+
"Best for 2-20 URLs where you need results immediately. For 20+ URLs, use alterlab_batch instead. " +
|
|
46
|
+
"Uses concurrent scraping (controlled by max_concurrent) for speed. " +
|
|
47
|
+
"Shows per-URL status, content preview, and a total cost summary at the end. " +
|
|
48
|
+
"Handles partial failures gracefully — failed URLs show error details, successful ones show content.";
|
|
49
|
+
async function handleSimpleBatch(client, params) {
|
|
50
|
+
const { urls, formats, render_js, use_proxy, timeout, max_concurrent } = params;
|
|
51
|
+
// Concurrency semaphore — limits inflight scrapes to max_concurrent.
|
|
52
|
+
let inflight = 0;
|
|
53
|
+
const queue = [];
|
|
54
|
+
function acquire() {
|
|
55
|
+
if (inflight < max_concurrent) {
|
|
56
|
+
inflight++;
|
|
57
|
+
return Promise.resolve();
|
|
58
|
+
}
|
|
59
|
+
return new Promise((resolve) => queue.push(resolve));
|
|
60
|
+
}
|
|
61
|
+
function release() {
|
|
62
|
+
inflight--;
|
|
63
|
+
const next = queue.shift();
|
|
64
|
+
if (next) {
|
|
65
|
+
inflight++;
|
|
66
|
+
next();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async function scrapeOne(url) {
|
|
70
|
+
await acquire();
|
|
71
|
+
try {
|
|
72
|
+
const response = await client.scrape({
|
|
73
|
+
url,
|
|
74
|
+
mode: "auto",
|
|
75
|
+
formats,
|
|
76
|
+
sync: true,
|
|
77
|
+
timeout,
|
|
78
|
+
advanced: {
|
|
79
|
+
render_js,
|
|
80
|
+
use_proxy,
|
|
81
|
+
markdown: formats.includes("markdown"),
|
|
82
|
+
scroll_to_load: false,
|
|
83
|
+
scroll_count: 3,
|
|
84
|
+
remove_cookie_banners: true,
|
|
85
|
+
block_images: false,
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
const costMicrocents = response.billing?.final_cost_microcents ?? 0;
|
|
89
|
+
const costUsd = costMicrocents / 1_000_000;
|
|
90
|
+
return {
|
|
91
|
+
status: "fulfilled",
|
|
92
|
+
url,
|
|
93
|
+
text: (0, format_js_1.formatScrapeResponse)(response),
|
|
94
|
+
cost: costUsd,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
const errorMsg = err instanceof Error
|
|
99
|
+
? err.message
|
|
100
|
+
: typeof err === "object" && err !== null && "detail" in err
|
|
101
|
+
? String(err.detail ?? "unknown error")
|
|
102
|
+
: "unknown error";
|
|
103
|
+
return { status: "rejected", url, error: errorMsg };
|
|
104
|
+
}
|
|
105
|
+
finally {
|
|
106
|
+
release();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const outcomes = await Promise.all(urls.map((url) => scrapeOne(url)));
|
|
110
|
+
// Build response
|
|
111
|
+
const parts = [
|
|
112
|
+
`**Batch Scrape Results** — ${urls.length} URL${urls.length !== 1 ? "s" : ""}`,
|
|
113
|
+
"",
|
|
114
|
+
];
|
|
115
|
+
let totalCost = 0;
|
|
116
|
+
let successCount = 0;
|
|
117
|
+
let failCount = 0;
|
|
118
|
+
for (let i = 0; i < outcomes.length; i++) {
|
|
119
|
+
const outcome = outcomes[i];
|
|
120
|
+
parts.push(`---\n## [${i + 1}/${urls.length}] ${outcome.url}`);
|
|
121
|
+
if (outcome.status === "fulfilled") {
|
|
122
|
+
successCount++;
|
|
123
|
+
totalCost += outcome.cost;
|
|
124
|
+
parts.push(outcome.text);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
failCount++;
|
|
128
|
+
parts.push(`**Error**: ${outcome.error}`);
|
|
129
|
+
}
|
|
130
|
+
parts.push("");
|
|
131
|
+
}
|
|
132
|
+
// Summary footer
|
|
133
|
+
parts.push("---");
|
|
134
|
+
parts.push(`**Summary**: ${successCount} succeeded, ${failCount} failed` +
|
|
135
|
+
(totalCost > 0 ? ` | Total cost: $${totalCost.toFixed(6)}` : ""));
|
|
136
|
+
// Append balance warning if the last scrape left a low-balance signal
|
|
137
|
+
const balanceWarningSuffix = (0, format_js_1.formatBalanceWarning)(client.getLastBalanceWarning());
|
|
138
|
+
return {
|
|
139
|
+
content: [{ type: "text", text: parts.join("\n") + balanceWarningSuffix }],
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=simple_batch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple_batch.js","sourceRoot":"","sources":["../../src/tools/simple_batch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
|
|
3
|
+
import type { AlterLabClient } from "../client.js";
|
|
4
|
+
export declare const usageSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
5
|
+
export declare const usageDescription: string;
|
|
6
|
+
export declare function handleUsage(client: AlterLabClient): Promise<CallToolResult>;
|
|
7
|
+
//# sourceMappingURL=usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/tools/usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAInD,eAAO,MAAM,WAAW,gDAAe,CAAC;AAExC,eAAO,MAAM,gBAAgB,QAIqC,CAAC;AAEnE,wBAAsB,WAAW,CAC/B,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,cAAc,CAAC,CAYzB"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.usageDescription = exports.usageSchema = void 0;
|
|
4
|
+
exports.handleUsage = handleUsage;
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const errors_js_1 = require("../errors.js");
|
|
7
|
+
exports.usageSchema = zod_1.z.object({});
|
|
8
|
+
exports.usageDescription = "Get account usage for the current billing period — balance, credits consumed this period, " +
|
|
9
|
+
"account tier and entitlement source. " +
|
|
10
|
+
"Use this to track spend against your plan; use alterlab_check_balance for deposit and spend totals. " +
|
|
11
|
+
"No parameters required — uses your API key for identification.";
|
|
12
|
+
async function handleUsage(client) {
|
|
13
|
+
try {
|
|
14
|
+
const usage = await client.getUsage();
|
|
15
|
+
return {
|
|
16
|
+
content: [{ type: "text", text: formatUsageResponse(usage) }],
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
if (isApiError(error)) {
|
|
21
|
+
return (0, errors_js_1.formatErrorResult)(error);
|
|
22
|
+
}
|
|
23
|
+
return (0, errors_js_1.formatErrorResult)(error);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function formatUsageResponse(usage) {
|
|
27
|
+
const parts = ["**Usage**\n"];
|
|
28
|
+
parts.push(`- Balance: $${(usage.balance_microcents / 1_000_000).toFixed(4)}`);
|
|
29
|
+
parts.push(`- Credits used this period: ${usage.credits_used_month}`);
|
|
30
|
+
parts.push(`- Account tier: ${usage.account_tier}`);
|
|
31
|
+
parts.push(`- Entitlement source: ${usage.entitlement_source}`);
|
|
32
|
+
parts.push(`- Period: ${usage.period_start} to ${usage.period_end}`);
|
|
33
|
+
parts.push("\nAdd funds: https://alterlab.io/dashboard/billing");
|
|
34
|
+
return parts.join("\n");
|
|
35
|
+
}
|
|
36
|
+
function isApiError(error) {
|
|
37
|
+
return (typeof error === "object" &&
|
|
38
|
+
error !== null &&
|
|
39
|
+
"status" in error &&
|
|
40
|
+
typeof error.status === "number");
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/tools/usage.ts"],"names":[],"mappings":";;;AAcA,kCAcC;AA5BD,6BAAwB;AAGxB,4CAAgE;AAGnD,QAAA,WAAW,GAAG,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAE3B,QAAA,gBAAgB,GAC3B,4FAA4F;IAC5F,uCAAuC;IACvC,sGAAsG;IACtG,gEAAgE,CAAC;AAE5D,KAAK,UAAU,WAAW,CAC/B,MAAsB;IAEtB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;SAC9D,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,IAAA,6BAAiB,EAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,IAAA,6BAAiB,EAAC,KAAc,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAoB;IAC/C,MAAM,KAAK,GAAa,CAAC,aAAa,CAAC,CAAC;IAExC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/E,KAAK,CAAC,IAAI,CAAC,+BAA+B,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACtE,KAAK,CAAC,IAAI,CAAC,mBAAmB,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IACpD,KAAK,CAAC,IAAI,CAAC,yBAAyB,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAChE,KAAK,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,YAAY,OAAO,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IAErE,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IAEjE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,QAAQ,IAAI,KAAK;QACjB,OAAQ,KAAkB,CAAC,MAAM,KAAK,QAAQ,CAC/C,CAAC;AACJ,CAAC"}
|