@agentsearchhq/agentsearch-mcp 1.2.0 → 1.3.1

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/dist/pocket.js ADDED
@@ -0,0 +1,293 @@
1
+ /**
2
+ * Pay-per-call mode: call AgentSearch services on the Pocket Network Agentic Portal
3
+ * (https://agent.pocket.network) and pay each call over x402 v2 (exact scheme,
4
+ * EIP-3009 TransferWithAuthorization, USDC on Base).
5
+ *
6
+ * Flow: unpaid POST -> 402 with PAYMENT-REQUIRED -> every limit is checked BEFORE
7
+ * signing -> retry once with PAYMENT-SIGNATURE -> 200 with the portal envelope
8
+ * {portal, data} and the receipt in PAYMENT-RESPONSE.
9
+ *
10
+ * The private key is read from env, used only to sign, and never logged or returned.
11
+ */
12
+ import { x402Client, x402HTTPClient } from "@x402/core/client";
13
+ import { decodePaymentResponseHeader } from "@x402/core/http";
14
+ import { registerExactEvmScheme } from "@x402/evm/exact/client";
15
+ import { privateKeyToAccount } from "viem/accounts";
16
+ import { isSecureOrLocalUrl, requestTimeoutMs } from "./client.js";
17
+ export const DEFAULT_PORTAL_URL = "https://agent.pocket.network";
18
+ /** Base mainnet, CAIP-2. */
19
+ export const BASE_NETWORK = "eip155:8453";
20
+ /** Native USDC on Base. */
21
+ export const USDC_BASE = "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913";
22
+ /** The portal's payee for the AgentSearch services (services.json rails[base].payToAddress). */
23
+ export const PORTAL_PAYEE = "0xF732ea490c5766071785a2310523f7fA2CEbB829";
24
+ /** $0.005 in USDC atomic units (6 decimals). Hard ceiling: never signs more per call. */
25
+ export const MAX_PER_CALL_ATOMIC = 5000n;
26
+ /** Default session cap: $1.00. */
27
+ export const DEFAULT_SESSION_CAP_ATOMIC = 1000000n;
28
+ export const PORTAL_SERVICES = {
29
+ search: { serviceId: "agentsearch-web-search-v1", path: "/v1/search" },
30
+ extract: { serviceId: "agentsearch-web-extract-v1", path: "/v1/extract" },
31
+ render: { serviceId: "agentsearch-web-render-v1", path: "/v1/render" },
32
+ };
33
+ /** Wallet key env vars, in priority order. POCKET_PRIVATE_KEY mirrors @pocket-network/agentic-portal-mcp. */
34
+ export const KEY_ENV_VARS = ["AGENTSEARCH_WALLET_PRIVATE_KEY", "POCKET_PRIVATE_KEY"];
35
+ export const SETUP_MESSAGE = [
36
+ "agentsearch_web_search, agentsearch_extract and agentsearch_render are not configured yet.",
37
+ "Option 1 (pay per call, no account): set AGENTSEARCH_WALLET_PRIVATE_KEY (or POCKET_PRIVATE_KEY) to the 64-hex private key of a NEW wallet made only for this, in the env block of this MCP server in your client config, then restart the client.",
38
+ "Fund that wallet with a little USDC on Base (for example $1; each call costs $0.005 = 5000 atomic units). No ETH is needed: the x402 facilitator pays gas.",
39
+ "Calls are paid through the Pocket Network Agentic Portal (https://agent.pocket.network) over x402. Spending is limited to $0.005 per call and to AGENTSEARCH_MAX_TOTAL_ATOMIC per session (default 1000000 = $1.00).",
40
+ "Option 2 (self-hosted): set AGENTSEARCH_BASE_URL to your own AgentSearch-compatible API.",
41
+ "The review tools (agentsearch_review_lookup, agentsearch_review_submit) work without either.",
42
+ ].join(" ");
43
+ export class PortalError extends Error {
44
+ detail;
45
+ constructor(message, detail = {}) {
46
+ super(message);
47
+ this.detail = detail;
48
+ this.name = "PortalError";
49
+ }
50
+ }
51
+ /** Reads the wallet key without ever echoing it. Returns undefined if unset. */
52
+ export function readWalletKey() {
53
+ for (const name of KEY_ENV_VARS) {
54
+ const raw = process.env[name]?.trim();
55
+ if (!raw)
56
+ continue;
57
+ if (!/^(0x)?[0-9a-fA-F]{64}$/.test(raw)) {
58
+ throw new PortalError(`${name} is set but is not a private key (expected 64 hex characters, optional 0x prefix). The value is not shown. Nothing was signed.`);
59
+ }
60
+ return (raw.startsWith("0x") ? raw : `0x${raw}`);
61
+ }
62
+ return undefined;
63
+ }
64
+ export function hasWalletKey() {
65
+ return KEY_ENV_VARS.some((n) => Boolean(process.env[n]?.trim()));
66
+ }
67
+ function atomicEnv(names, fallback) {
68
+ for (const name of names) {
69
+ const raw = process.env[name]?.trim();
70
+ if (!raw)
71
+ continue;
72
+ if (!/^\d+$/.test(raw)) {
73
+ throw new PortalError(`${name} must be a whole number of USDC atomic units (1000000 = $1.00). Nothing was signed.`);
74
+ }
75
+ return { value: BigInt(raw), source: name };
76
+ }
77
+ return { value: fallback };
78
+ }
79
+ export function loadPortalSettings() {
80
+ const portalUrl = (process.env.AGENTSEARCH_PORTAL_URL?.trim() || DEFAULT_PORTAL_URL).replace(/\/+$/, "");
81
+ if (!isSecureOrLocalUrl(portalUrl)) {
82
+ throw new PortalError("AGENTSEARCH_PORTAL_URL must be https:// (http only for localhost). Nothing was signed.");
83
+ }
84
+ const session = atomicEnv(["AGENTSEARCH_MAX_TOTAL_ATOMIC", "POCKET_MAX_TOTAL_ATOMIC"], DEFAULT_SESSION_CAP_ATOMIC);
85
+ const perCall = atomicEnv(["AGENTSEARCH_MAX_PER_CALL_ATOMIC", "POCKET_MAX_PER_CALL_ATOMIC"], MAX_PER_CALL_ATOMIC);
86
+ return {
87
+ portalUrl,
88
+ sessionCapAtomic: session.value,
89
+ // A per-call setting can only lower the hard $0.005 ceiling, never raise it.
90
+ perCallCapAtomic: perCall.value < MAX_PER_CALL_ATOMIC ? perCall.value : MAX_PER_CALL_ATOMIC,
91
+ };
92
+ }
93
+ /** Session budget: counted when a payment is SIGNED (a signed authorization may be settled). */
94
+ class SessionBudget {
95
+ spent = 0n;
96
+ reserved = 0n;
97
+ remaining(cap) {
98
+ const r = cap - this.spent - this.reserved;
99
+ return r > 0n ? r : 0n;
100
+ }
101
+ }
102
+ let budget = new SessionBudget();
103
+ /** Test hook. */
104
+ export function resetSessionBudget() {
105
+ budget = new SessionBudget();
106
+ }
107
+ export function sessionSpentAtomic() {
108
+ return budget.spent;
109
+ }
110
+ export function atomicToUsd(a) {
111
+ const n = BigInt(a);
112
+ const whole = n / 1000000n;
113
+ const frac = (n % 1000000n).toString().padStart(6, "0");
114
+ return `$${whole}.${frac}`;
115
+ }
116
+ const eqAddr = (a, b) => typeof a === "string" && a.toLowerCase() === b.toLowerCase();
117
+ /** Picks the one option this server is willing to sign, or explains why none qualifies. */
118
+ export function selectAccept(accepts, ceiling) {
119
+ const why = [];
120
+ for (const a of accepts ?? []) {
121
+ if (a.scheme !== "exact") {
122
+ why.push(`${a.scheme} scheme`);
123
+ continue;
124
+ }
125
+ if (a.network !== BASE_NETWORK) {
126
+ why.push(`network ${a.network}`);
127
+ continue;
128
+ }
129
+ if (!eqAddr(a.asset, USDC_BASE)) {
130
+ why.push(`asset ${a.asset} is not USDC on Base`);
131
+ continue;
132
+ }
133
+ if (!eqAddr(a.payTo, PORTAL_PAYEE)) {
134
+ why.push(`payee ${a.payTo} is not the portal's`);
135
+ continue;
136
+ }
137
+ if (!/^\d+$/.test(String(a.amount))) {
138
+ why.push(`amount ${a.amount} is not an integer`);
139
+ continue;
140
+ }
141
+ const amt = BigInt(a.amount);
142
+ if (amt <= 0n) {
143
+ why.push(`amount ${a.amount}`);
144
+ continue;
145
+ }
146
+ if (amt > ceiling) {
147
+ why.push(`amount ${a.amount} atomic (${atomicToUsd(amt)}) is above the ${ceiling} atomic (${atomicToUsd(ceiling)}) limit`);
148
+ continue;
149
+ }
150
+ return a;
151
+ }
152
+ throw new PortalError(`Refusing to pay: no acceptable payment option (${why.join("; ") || "none offered"}). Nothing was signed.`, {
153
+ offered: (accepts ?? []).map((a) => ({ scheme: a.scheme, network: a.network, amount: a.amount, asset: a.asset, payTo: a.payTo })),
154
+ });
155
+ }
156
+ async function post(url, body, extraHeaders) {
157
+ const res = await fetch(url, {
158
+ method: "POST",
159
+ headers: { "content-type": "application/json", accept: "application/json", ...extraHeaders },
160
+ body: JSON.stringify(body),
161
+ signal: AbortSignal.timeout(requestTimeoutMs()),
162
+ });
163
+ const text = await res.text();
164
+ let parsed = text;
165
+ try {
166
+ parsed = text ? JSON.parse(text) : null;
167
+ }
168
+ catch {
169
+ /* keep text */
170
+ }
171
+ return { status: res.status, headers: res.headers, body: parsed, text };
172
+ }
173
+ /** Portal errors are not enveloped: {error:{code,message,retryable}}. */
174
+ export function portalErrorInfo(r) {
175
+ const e = r.body?.error;
176
+ const code = typeof e?.code === "string" ? e.code : `HTTP_${r.status}`;
177
+ const message = typeof e?.message === "string" ? e.message : r.text.slice(0, 500);
178
+ const retryable = typeof e?.retryable === "boolean" ? e.retryable : r.status === 429 || r.status >= 500;
179
+ const retryAfter = r.headers.get("retry-after");
180
+ return { status: r.status, code, message, retryable, ...(retryAfter ? { retryAfter } : {}) };
181
+ }
182
+ export async function callPortal(op, body) {
183
+ const settings = loadPortalSettings();
184
+ const key = readWalletKey();
185
+ if (!key)
186
+ throw new PortalError(SETUP_MESSAGE);
187
+ const { serviceId, path } = PORTAL_SERVICES[op];
188
+ const url = `${settings.portalUrl}/v1/${serviceId}${path}`;
189
+ // 1) Unpaid request -> expect 402 terms.
190
+ const unpaid = await post(url, body, {});
191
+ if (unpaid.status !== 402) {
192
+ const info = portalErrorInfo(unpaid);
193
+ throw new PortalError(`The portal answered ${unpaid.status} ${info.code} before payment: ${info.message} (retryable: ${info.retryable}). Nothing was signed.`, { error: info });
194
+ }
195
+ const http = new x402HTTPClient(new x402Client());
196
+ let required;
197
+ try {
198
+ required = http.getPaymentRequiredResponse((n) => unpaid.headers.get(n), unpaid.body);
199
+ }
200
+ catch (e) {
201
+ throw new PortalError(`The portal's 402 is not valid x402 v2 (${e instanceof Error ? e.message : String(e)}). Nothing was signed.`);
202
+ }
203
+ if (required.x402Version !== 2)
204
+ throw new PortalError(`Unsupported x402Version ${required.x402Version}. Nothing was signed.`);
205
+ const resUrl = required.resource?.url ?? "";
206
+ if (!resUrl.replace(/\/+$/, "").endsWith(`/v1/${serviceId}`)) {
207
+ throw new PortalError(`The 402 is for resource ${resUrl}, not ${serviceId}. Nothing was signed.`);
208
+ }
209
+ // 2) Limits, checked before anything is signed.
210
+ const remaining = budget.remaining(settings.sessionCapAtomic);
211
+ const ceiling = settings.perCallCapAtomic < remaining ? settings.perCallCapAtomic : remaining;
212
+ if (ceiling <= 0n) {
213
+ throw new PortalError(`Session spend cap reached: ${atomicToUsd(budget.spent)} of ${atomicToUsd(settings.sessionCapAtomic)} signed. Raise AGENTSEARCH_MAX_TOTAL_ATOMIC and restart to spend more. Nothing was signed.`);
214
+ }
215
+ const chosen = selectAccept(required.accepts, ceiling);
216
+ const amount = BigInt(chosen.amount);
217
+ // 3) Sign with the reference x402 client, restricted to the option chosen above.
218
+ const account = privateKeyToAccount(key);
219
+ const selector = (_v, options) => {
220
+ const match = options.find((o) => o.scheme === chosen.scheme && o.network === chosen.network && eqAddr(o.asset, chosen.asset) && eqAddr(o.payTo, chosen.payTo) && o.amount === chosen.amount);
221
+ if (!match)
222
+ throw new PortalError("Selected option disappeared. Nothing was signed.");
223
+ return match;
224
+ };
225
+ const client = new x402Client(selector).setSpendControls(false);
226
+ registerExactEvmScheme(client, { signer: account, paymentRequirementsSelector: selector });
227
+ const payer = new x402HTTPClient(client);
228
+ budget.reserved += amount;
229
+ let signedPayload;
230
+ try {
231
+ signedPayload = (await payer.createPaymentPayload(required));
232
+ }
233
+ catch (e) {
234
+ budget.reserved -= amount;
235
+ if (e instanceof PortalError)
236
+ throw e;
237
+ throw new PortalError(`Could not build the payment (${e instanceof Error ? e.message : String(e)}). Nothing was signed.`);
238
+ }
239
+ // Belt and braces: re-check what was actually signed before it leaves this process.
240
+ const auth = signedPayload.payload?.authorization;
241
+ if (!auth || !eqAddr(auth.to, PORTAL_PAYEE) || BigInt(auth.value ?? "0") !== amount || signedPayload.accepted?.network !== BASE_NETWORK || !eqAddr(signedPayload.accepted?.asset, USDC_BASE)) {
242
+ budget.reserved -= amount;
243
+ throw new PortalError("The signed authorization does not match the approved terms; it was discarded and not sent.");
244
+ }
245
+ budget.reserved -= amount;
246
+ budget.spent += amount; // counted at signing: a signed authorization may be settled.
247
+ // 4) Retry once with PAYMENT-SIGNATURE.
248
+ let paid;
249
+ try {
250
+ paid = await post(url, body, payer.encodePaymentSignatureHeader(signedPayload));
251
+ }
252
+ catch (e) {
253
+ throw new PortalError(`A payment of ${atomicToUsd(amount)} was signed but the paid request failed (${e instanceof Error ? e.message : String(e)}). It may or may not be settled; check the wallet before retrying.`, { paymentSigned: true });
254
+ }
255
+ const spend = {
256
+ sessionSpentAtomic: budget.spent.toString(),
257
+ sessionCapAtomic: settings.sessionCapAtomic.toString(),
258
+ sessionRemainingAtomic: budget.remaining(settings.sessionCapAtomic).toString(),
259
+ };
260
+ if (paid.status < 200 || paid.status >= 300) {
261
+ const info = portalErrorInfo(paid);
262
+ throw new PortalError(`The portal answered ${paid.status} ${info.code}: ${info.message} (retryable: ${info.retryable}${info.retryAfter ? `, retry after ${info.retryAfter}s` : ""}). Per the portal, a non-2xx answer is not settled, so you should not be charged; the signed ${atomicToUsd(amount)} still counts against this session's cap.`, { error: info, paymentSigned: true, settled: false, spend });
263
+ }
264
+ let receipt;
265
+ const header = paid.headers.get("PAYMENT-RESPONSE");
266
+ if (header) {
267
+ try {
268
+ receipt = decodePaymentResponseHeader(header);
269
+ }
270
+ catch {
271
+ receipt = undefined;
272
+ }
273
+ }
274
+ const tx = receipt?.transaction || null;
275
+ const payment = {
276
+ amountAtomic: amount.toString(),
277
+ amountUsd: atomicToUsd(amount),
278
+ asset: "USDC",
279
+ assetAddress: USDC_BASE,
280
+ network: BASE_NETWORK,
281
+ payTo: PORTAL_PAYEE,
282
+ payer: account.address,
283
+ serviceId,
284
+ settled: receipt?.success ?? false,
285
+ transaction: tx,
286
+ ...(tx ? { explorer: `https://basescan.org/tx/${tx}` } : {}),
287
+ ...(receipt ? {} : { note: "No settlement receipt (PAYMENT-RESPONSE) was returned, so this payment is unconfirmed." }),
288
+ };
289
+ const data = paid.body?.data;
290
+ const upstreamError = data && typeof data === "object" && data.error ? data.error : undefined;
291
+ return { payment, spend, response: paid.body, ...(upstreamError ? { upstreamError } : {}) };
292
+ }
293
+ //# sourceMappingURL=pocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pocket.js","sourceRoot":"","sources":["../src/pocket.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@
5
5
  import { readFileSync } from "node:fs";
6
6
  import { homedir } from "node:os";
7
7
  import { join } from "node:path";
8
- import { AgentSearchHttpError } from "./client.js";
8
+ import { AgentSearchHttpError, isSecureOrLocalUrl, requestTimeoutMs } from "./client.js";
9
9
  import { SERVER_NAME, SERVER_VERSION } from "./version.js";
10
10
  export const DEFAULT_REVIEWS_URL = "https://reviews.agentsearchhq.com";
11
11
  export const REVIEW_TASKS = ["search", "extract", "render", "scrape", "llm", "data", "finance", "crypto", "other"];
@@ -24,6 +24,9 @@ export function loadReviewsConfig() {
24
24
  }
25
25
  if (key && !/^asrb_[A-Za-z0-9_-]{20,80}$/.test(key))
26
26
  key = undefined;
27
+ // Never send the review key over plain HTTP (except to localhost).
28
+ if (key && !isSecureOrLocalUrl(baseUrl))
29
+ key = undefined;
27
30
  return { baseUrl, key };
28
31
  }
29
32
  async function call(cfg, path, init, useKey = false) {
@@ -35,7 +38,9 @@ async function call(cfg, path, init, useKey = false) {
35
38
  headers["content-type"] = "application/json";
36
39
  if (useKey && cfg.key)
37
40
  headers.authorization = `Bearer ${cfg.key}`;
38
- const res = await fetch(`${cfg.baseUrl}${path}`, { ...init, headers });
41
+ if (useKey && cfg.key && !isSecureOrLocalUrl(cfg.baseUrl))
42
+ delete headers.authorization;
43
+ const res = await fetch(`${cfg.baseUrl}${path}`, { ...init, headers, signal: AbortSignal.timeout(requestTimeoutMs()) });
39
44
  const text = await res.text();
40
45
  if (!res.ok)
41
46
  throw new AgentSearchHttpError(res.status, text || res.statusText);
@@ -1 +1 @@
1
- {"version":3,"file":"reviews-client.js","sourceRoot":"","sources":["../src/reviews-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reviews-client.js","sourceRoot":"","sources":["../src/reviews-client.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,14 @@
1
1
  import { z } from "zod";
2
- import { loadConfig, renderPage } from "../client.js";
3
- import { errorContent, formatResult } from "./search.js";
2
+ import { runOperation } from "../backend.js";
3
+ import { PAYMENT_SENTENCE } from "./search.js";
4
4
  export const RENDER_DESCRIPTION = [
5
- "Render one absolute http(s) URL in headless Chromium through the AgentSearch Web Render API, so JavaScript runs before content is captured, and return the backend response as pretty-printed JSON text (a non-JSON body is wrapped as {raw: text}).",
5
+ "Render one absolute http(s) URL in headless Chromium with AgentSearch Web Render, so JavaScript runs before content is captured, and return the backend response as pretty-printed JSON text (a non-JSON body is wrapped as {raw: text}).",
6
6
  "The response includes the final url, title, status_code, meta (render_ms, chars, truncated, js, lang …), warnings, error, and the rendered page body in each requested format: markdown (default), text, html, and/or links; plus an optional base64 screenshot.",
7
- "Use this when the page is a JavaScript-heavy app (SPA, client-rendered docs or dashboards) where agentsearch_extract returns empty or partial content; for static pages prefer agentsearch_extract (cheaper and faster), and to find pages from a query use agentsearch_web_search.",
8
- "Needs AGENTSEARCH_BASE_URL (your self-hosted API; there is no default). POSTs {AGENTSEARCH_BASE_URL}/v1/render. If the variable is missing, the tool makes no network call and returns an error explaining how to set it.",
7
+ "Use this when the page is a JavaScript-heavy app (SPA, client-rendered docs or dashboards) where agentsearch_extract returns empty or partial content; for static pages prefer agentsearch_extract (faster), and to find pages from a query use agentsearch_web_search.",
8
+ PAYMENT_SENTENCE,
9
+ "Note: the free relay (AGENTSEARCH_BASE_URL=https://relay.agentsearchhq.com) serves search only; this tool needs paid mode (AGENTSEARCH_WALLET_PRIVATE_KEY) or a self-hosted API.",
9
10
  "Read-only: it loads the page like a browser visit and does not click, submit, or change anything, but it uses the network, has a hard backend deadline of about 4.2 s, and can hit rate limits (HTTP 429).",
10
- "Target-site failures (DNS, TLS, timeouts, bot walls, robots.txt) come back as a normal result with a non-null error object {code, message, retryable} and empty or partial content; invalid input or a disallowed URL (HTTP 400), an oversized request (413), rate limits (429), and backend faults (500) are MCP errors with the status and a truncated body.",
11
- "When AGENTSEARCH_API_KEY is set it is sent as a Bearer token, and HTTP 401 is retried once without the key.",
11
+ "Target-site failures (DNS, TLS, timeouts, bot walls, robots.txt) come back as a normal result with a non-null error object {code, message, retryable} and empty or partial content; invalid input or a disallowed URL (HTTP 400, e.g. UPSTREAM_REJECTED), rate limits (429) and service faults (5xx) are MCP errors with the code and whether it is retryable.",
12
12
  "Optional fields are forwarded unchanged to the API, which applies its own defaults and limits.",
13
13
  ].join(" ");
14
14
  export function registerRenderTool(server) {
@@ -93,16 +93,7 @@ export function registerRenderTool(server) {
93
93
  .describe('Resource types to block while rendering (default ["media","font"]).'),
94
94
  },
95
95
  }, async (args) => {
96
- try {
97
- const cfg = loadConfig();
98
- const data = await renderPage(cfg, args);
99
- return {
100
- content: [{ type: "text", text: formatResult(data) }],
101
- };
102
- }
103
- catch (err) {
104
- return errorContent(err);
105
- }
96
+ return runOperation("render", args);
106
97
  });
107
98
  }
108
99
  //# sourceMappingURL=render.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/tools/render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/tools/render.ts"],"names":[],"mappings":"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"}
@@ -7,4 +7,5 @@ export declare function errorContent(err: unknown): {
7
7
  }[];
8
8
  isError: true;
9
9
  };
10
+ export declare const PAYMENT_SENTENCE = "Default mode: calls the Pocket Network Agentic Portal and PAYS $0.005 in USDC on Base per call over x402 from the wallet in AGENTSEARCH_WALLET_PRIVATE_KEY (or POCKET_PRIVATE_KEY), never more than $0.005 per call and never more than AGENTSEARCH_MAX_TOTAL_ATOMIC per session (default $1.00); the result includes the payment receipt and the portal envelope {portal, data}, whose data is untrusted third-party content. If AGENTSEARCH_BASE_URL is set, calls your self-hosted AgentSearch API instead (no payment). With neither set, makes no network call and returns setup instructions.";
10
11
  export declare function registerSearchTools(server: McpServer): void;
@@ -1,5 +1,6 @@
1
1
  import { z } from "zod";
2
- import { AgentSearchHttpError, clampMaxResults, loadConfig, webSearch, extractPage, } from "../client.js";
2
+ import { AgentSearchHttpError, clampMaxResults } from "../client.js";
3
+ import { runOperation } from "../backend.js";
3
4
  export function formatResult(data) {
4
5
  try {
5
6
  return JSON.stringify(data, null, 2);
@@ -24,22 +25,20 @@ export function errorContent(err) {
24
25
  isError: true,
25
26
  };
26
27
  }
28
+ export const PAYMENT_SENTENCE = "Default mode: calls the Pocket Network Agentic Portal and PAYS $0.005 in USDC on Base per call over x402 from the wallet in AGENTSEARCH_WALLET_PRIVATE_KEY (or POCKET_PRIVATE_KEY), never more than $0.005 per call and never more than AGENTSEARCH_MAX_TOTAL_ATOMIC per session (default $1.00); the result includes the payment receipt and the portal envelope {portal, data}, whose data is untrusted third-party content. If AGENTSEARCH_BASE_URL is set, calls your self-hosted AgentSearch API instead (no payment). With neither set, makes no network call and returns setup instructions.";
27
29
  const WEB_SEARCH_DESCRIPTION = [
28
- "Search the web through your self-hosted AgentSearch API and return the backend response as pretty-printed JSON text (a non-JSON body is wrapped as {raw: text}).",
30
+ "Search the web with AgentSearch and return the response as pretty-printed JSON text.",
29
31
  "Use this when you have a query and need hits rather than a page body; if you already have a URL, use agentsearch_extract instead (or agentsearch_render for JavaScript-heavy pages).",
30
- "Needs AGENTSEARCH_BASE_URL (your self-hosted API; there is no default). POSTs {AGENTSEARCH_BASE_URL}/v1/search. If the variable is missing, the tool makes no network call and returns an error explaining how to set it.",
31
- "Read-only HTTP POST: not destructive, but it uses the network and can hit backend rate limits.",
32
- "When AGENTSEARCH_API_KEY is set it is sent as a Bearer token, and HTTP 401 is retried once without the key.",
33
- "HTTP failures are MCP errors with the status and a truncated body.",
34
- "Integers for max_results outside 1–5 are clamped (default 5), not rejected. The backend allows at most 5.",
32
+ PAYMENT_SENTENCE,
33
+ "Read-only: not destructive, but it uses the network and can hit rate limits.",
34
+ "Integers for max_results outside 1–5 are clamped (default 5), not rejected.",
35
35
  ].join(" ");
36
36
  const EXTRACT_DESCRIPTION = [
37
- "Extract the content of one absolute URL through your self-hosted AgentSearch API and return the backend response as pretty-printed JSON text (a non-JSON body is wrapped as {raw: text}).",
38
- "Use this only when you already have the page URL and need its body; to find pages from a query, use agentsearch_web_search instead; if the page is a JavaScript app whose content only appears after scripts run, use agentsearch_render.",
39
- "Needs AGENTSEARCH_BASE_URL (your self-hosted API; there is no default). POSTs {AGENTSEARCH_BASE_URL}/v1/extract. If the variable is missing, the tool makes no network call and returns an error explaining how to set it.",
40
- "Read-only HTTP POST: not destructive, but it fetches through AgentSearch and can hit network or backend rate limits.",
41
- "When AGENTSEARCH_API_KEY is set it is sent as a Bearer token, and HTTP 401 is retried once without the key; any HTTP failure includes the status and a truncated body.",
42
- 'formats, when provided, is forwarded unchanged (for example "markdown" or "text") and is not limited to an enum; max_chars, when set, is a positive integer cap sent to the API rather than applied by this server.',
37
+ "Fetch one absolute URL with AgentSearch Web Extract and return it as JSON text: title, clean markdown and/or text, links, meta (status_code, content_type, fetched_at, chars, truncated) and error (null on success).",
38
+ "Use this only when you already have the page URL and need its body; to find pages from a query, use agentsearch_web_search; for JavaScript apps whose content appears only after scripts run, use agentsearch_render.",
39
+ PAYMENT_SENTENCE,
40
+ "Note: the free relay (AGENTSEARCH_BASE_URL=https://relay.agentsearchhq.com) serves search only; this tool needs paid mode (AGENTSEARCH_WALLET_PRIVATE_KEY) or a self-hosted API.",
41
+ "Read-only: not destructive, but it fetches over the network and can hit rate limits.",
43
42
  ].join(" ");
44
43
  export function registerSearchTools(server) {
45
44
  server.registerTool("agentsearch_web_search", {
@@ -57,25 +56,7 @@ export function registerSearchTools(server) {
57
56
  .describe("How many hits to request (1–5, default 5). Values outside that range are clamped."),
58
57
  },
59
58
  }, async ({ query, max_results }) => {
60
- try {
61
- const cfg = loadConfig();
62
- const clamped = clampMaxResults(max_results);
63
- const data = await webSearch(cfg, {
64
- query,
65
- max_results: clamped,
66
- });
67
- return {
68
- content: [
69
- {
70
- type: "text",
71
- text: formatResult(data),
72
- },
73
- ],
74
- };
75
- }
76
- catch (err) {
77
- return errorContent(err);
78
- }
59
+ return runOperation("search", { query, max_results: clampMaxResults(max_results) });
79
60
  });
80
61
  server.registerTool("agentsearch_extract", {
81
62
  title: "AgentSearch Extract",
@@ -83,32 +64,19 @@ export function registerSearchTools(server) {
83
64
  inputSchema: {
84
65
  url: z.string().url().describe("Absolute URL of the page to extract."),
85
66
  formats: z
86
- .array(z.string())
67
+ .array(z.enum(["markdown", "text"]))
87
68
  .optional()
88
- .describe('Optional format names to request, e.g. ["markdown","text"].'),
69
+ .describe('Renderings to return: "markdown" and/or "text" (default: the service\'s choice).'),
89
70
  max_chars: z
90
71
  .number()
91
72
  .int()
92
- .positive()
73
+ .min(1)
74
+ .max(100000)
93
75
  .optional()
94
- .describe("Optional positive limit on extracted characters."),
76
+ .describe("Cap on returned characters (1–100000, service default 50000)."),
95
77
  },
96
78
  }, async ({ url, formats, max_chars }) => {
97
- try {
98
- const cfg = loadConfig();
99
- const data = await extractPage(cfg, { url, formats, max_chars });
100
- return {
101
- content: [
102
- {
103
- type: "text",
104
- text: formatResult(data),
105
- },
106
- ],
107
- };
108
- }
109
- catch (err) {
110
- return errorContent(err);
111
- }
79
+ return runOperation("extract", { url, formats, max_chars });
112
80
  });
113
81
  }
114
82
  //# sourceMappingURL=search.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export declare const SERVER_NAME = "agentsearch-mcp";
2
2
  /** Keep in sync with package.json, manifest.json and server.json (checked by tests). */
3
- export declare const SERVER_VERSION = "1.2.0";
3
+ export declare const SERVER_VERSION = "1.3.1";
package/dist/version.js CHANGED
@@ -1,4 +1,4 @@
1
1
  export const SERVER_NAME = "agentsearch-mcp";
2
2
  /** Keep in sync with package.json, manifest.json and server.json (checked by tests). */
3
- export const SERVER_VERSION = "1.2.0";
3
+ export const SERVER_VERSION = "1.3.1";
4
4
  //# sourceMappingURL=version.js.map