@apify/actors-mcp-server 0.9.18-beta.0 → 0.9.18-beta.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 CHANGED
@@ -23,7 +23,7 @@ The Apify Model Context Protocol (MCP) server at [**mcp.apify.com**](https://mcp
23
23
  >
24
24
  > For the best experience, connect your AI assistant to our hosted server at **[`https://mcp.apify.com`](https://mcp.apify.com)**. The hosted server supports the latest features - including output schema inference for structured Actor results - that are not available when running locally via stdio.
25
25
 
26
- 💰 The server also supports [Skyfire agentic payments](#-skyfire-agentic-payments), allowing AI agents to pay for Actor runs without an API token.
26
+ 💰 The server also supports [agentic payments](#-agentic-payments) via [x402](#-x402) and [Skyfire](#-skyfire), allowing AI agents to pay for Actor runs without an API token.
27
27
 
28
28
  Apify MCP Server is compatible with `Claude Code, Claude.ai, Cursor, VS Code` and any client that adheres to the Model Context Protocol.
29
29
  Check out the [MCP clients section](#-mcp-clients) for more details or visit the [MCP configuration page](https://mcp.apify.com).
@@ -36,11 +36,16 @@ Check out the [MCP clients section](#-mcp-clients) for more details or visit the
36
36
  - [⚠️ SSE transport deprecation](#%EF%B8%8F-sse-transport-deprecation)
37
37
  - [🤖 MCP clients](#-mcp-clients)
38
38
  - [🪄 Try Apify MCP instantly](#-try-apify-mcp-instantly)
39
- - [💰 Skyfire agentic payments](#-skyfire-agentic-payments)
39
+ - [💰 Agentic payments](#-agentic-payments)
40
+ - [How agentic payments work](#how-agentic-payments-work)
41
+ - [💸 x402](#-x402)
42
+ - [🔥 Skyfire](#-skyfire)
40
43
  - [🛠️ Tools, resources, and prompts](#%EF%B8%8F-tools-resources-and-prompts)
41
44
  - [📊 Telemetry](#-telemetry)
45
+ - [💬 Usage examples](#-usage-examples)
42
46
  - [🐛 Troubleshooting (local MCP server)](#-troubleshooting-local-mcp-server)
43
47
  - [⚙️ Development](#%EF%B8%8F-development)
48
+ - [🔒 Privacy policy](#-privacy-policy)
44
49
  - [🤝 Contributing](#-contributing)
45
50
  - [📚 Learn more](#-learn-more)
46
51
 
@@ -118,21 +123,80 @@ Want to try Apify MCP without any setup?
118
123
  Check out [Apify Tester MCP Client](https://apify.com/jiri.spilka/tester-mcp-client)
119
124
 
120
125
  This interactive, chat-like interface provides an easy way to explore the capabilities of Apify MCP without any local setup.
121
- Just sign in with your Apify account and start experimenting with web scraping, data extraction, and automation tools!
126
+ Sign in with your Apify account and start experimenting with web scraping, data extraction, and automation tools!
122
127
 
123
128
  Or use the MCP bundle file (formerly known as Anthropic Desktop extension file, or DXT) for one-click installation: [Apify MCP Server MCPB file](https://github.com/apify/apify-mcp-server/releases/latest/download/apify-mcp-server.mcpb)
124
129
 
125
- # 💰 Skyfire agentic payments
126
130
 
127
- The Apify MCP Server integrates with [Skyfire](https://www.skyfire.xyz/) to enable agentic payments - AI agents can autonomously pay for Actor runs without requiring an Apify API token. Instead of authenticating with `APIFY_TOKEN`, the agent uses Skyfire PAY tokens to cover billing for each tool call.
131
+ # 💰 Agentic payments
128
132
 
129
- **Prerequisites:**
130
- - A [Skyfire account](https://www.skyfire.xyz/) with a funded wallet
131
- - An MCP client that supports multiple servers (e.g., Claude Desktop, OpenCode, VS Code)
133
+ You can pay for Actor runs without an Apify API token using either **x402** or **Skyfire**.
132
134
 
133
- **Setup:**
135
+ - **x402** pays with USDC on [Base](https://base.org) and does not require a separate platform account. It is fully supported by [`mcpc`](https://github.com/apify/mcp-cli) (`npm install -g @apify/mcpc`). We use `mcpc` because it is one of the few MCP clients that supports the latest features and the x402 protocol natively.
136
+ - **Skyfire** pays with PAY tokens and requires a Skyfire account with a funded wallet. It does not require a special MCP client; the entire payment flow is handled directly through the MCP tool call parameters.
134
137
 
135
- Configure both the Skyfire MCP server and Apify MCP Server in your MCP client. Enable payment mode by adding the `payment=skyfire` query parameter to the Apify server URL:
138
+ ## How agentic payments work
139
+
140
+ Actor run costs vary, so both payment methods use a prepaid balance model. The payment flow happens in four steps:
141
+
142
+ 1. **Discovery**: The agent discovers Actors with `search-actors` or `fetch-actor-details`. Those calls are free.
143
+ 2. **Prepayment**: Before running a paid Actor tool, the agent funds a prepaid balance.
144
+ - **x402**: `mcpc` automatically signs a $1.00 USDC transaction.
145
+ - **Skyfire**: The agent creates a PAY token (minimum $5.00) using Skyfire's `create-pay-token` tool.
146
+ 3. **Execution**: The agent calls the Actor tool.
147
+ - **x402**: Handled automatically by `mcpc` using the prepaid balance.
148
+ - **Skyfire**: The agent explicitly passes the PAY token in the `skyfire-pay-id` input property.
149
+ 4. **Resolution**: The tool returns the Actor results. Unused funds stay available for later runs.
150
+ - **x402**: After 60 minutes of inactivity, the server refunds any unused balance to the wallet on [Base](https://base.org).
151
+ - **Skyfire**: Skyfire returns unused funds when the token expires.
152
+
153
+ ## 💸 x402
154
+
155
+ The [x402 protocol](https://www.x402.org/) enables direct, machine-to-machine payments. Your MCP client can use it to pay for Actor runs with USDC on the [Base blockchain](https://base.org/), completely bypassing the need for an Apify API token.
156
+
157
+ ### Prerequisites
158
+
159
+ - A wallet with USDC on [Base](https://base.org) mainnet.
160
+
161
+ ### Setup
162
+
163
+ Create or import a wallet:
164
+
165
+ ```bash
166
+ # Create a new wallet
167
+ mcpc x402 init
168
+
169
+ # Import an existing wallet
170
+ mcpc x402 import <private-key>
171
+
172
+ # Show the wallet address so you can fund it with USDC on Base (https://base.org)
173
+ mcpc x402 info
174
+ ```
175
+
176
+ Connect to the server with x402 enabled:
177
+
178
+ ```bash
179
+ mcpc connect "mcp.apify.com?payment=x402" @apify --x402
180
+ ```
181
+
182
+ You can now call a paid tool:
183
+
184
+ ```bash
185
+ mcpc @apify tools-call call-actor actor:="apify/rag-web-browser" input:='{"query": "latest AI news"}'
186
+ ```
187
+
188
+ ## 🔥 Skyfire
189
+
190
+ [Skyfire](https://www.skyfire.xyz/) provides managed payment infrastructure for AI agents. Instead of authenticating with an Apify API token, your agent passes a Skyfire payment token to cover the cost of each tool call using PAY tokens.
191
+
192
+ ### Prerequisites
193
+
194
+ - A [Skyfire account](https://www.skyfire.xyz/) with a funded wallet.
195
+ - An MCP client that supports multiple servers, such as Claude Desktop, OpenCode, or VS Code.
196
+
197
+ ### Setup
198
+
199
+ Configure the Skyfire MCP server and the Apify MCP Server in your client. Add `payment=skyfire` to the Apify server URL:
136
200
 
137
201
  ```json
138
202
  {
@@ -150,16 +214,7 @@ Configure both the Skyfire MCP server and Apify MCP Server in your MCP client. E
150
214
  }
151
215
  ```
152
216
 
153
- **How it works:**
154
-
155
- When Skyfire mode is enabled, the agent handles the full payment flow autonomously:
156
-
157
- 1. The agent discovers relevant Actors via `search-actors` or `fetch-actor-details` (these remain free).
158
- 2. Before executing an Actor, the agent creates a PAY token using the `create-pay-token` tool from the Skyfire MCP server (minimum $5.00 USD).
159
- 3. The agent passes the PAY token in the `skyfire-pay-id` input property when calling the Actor tool.
160
- 4. Results are returned as usual. Unused funds on the token remain available for future runs or are returned upon expiration.
161
-
162
- To learn more, see the [Skyfire integration documentation](https://docs.apify.com/platform/integrations/skyfire) and the [Agentic Payments with Skyfire](https://blog.apify.com/agentic-payments-skyfire/) blog post.
217
+ See the [Skyfire integration documentation](https://docs.apify.com/platform/integrations/skyfire) for setup details. The [Agentic Payments with Skyfire](https://blog.apify.com/agentic-payments-skyfire/) post provides additional background.
163
218
 
164
219
  # 🛠️ Tools, resources, and prompts
165
220
 
@@ -351,6 +406,34 @@ The server provides a set of predefined example prompts to help you get started
351
406
 
352
407
  The server does not yet provide any resources.
353
408
 
409
+ ## 💬 Usage examples
410
+
411
+ Below are realistic examples showing how an AI assistant uses the Apify MCP Server tools.
412
+
413
+ ### Example 1: Search the web using RAG Web Browser
414
+
415
+ **User prompt:**
416
+ > Find the latest news about autonomous AI agents and summarize the key developments.
417
+
418
+ The AI assistant calls the pre-configured `apify--rag-web-browser` Actor tool to search the web and return content from top results.
419
+ The tool returns markdown content from the top 3 search results, which the AI assistant then summarizes for the user.
420
+
421
+ ### Example 2: Discover and run an Actor from the Apify Store
422
+
423
+ **User prompt:**
424
+ > Scrape the top 10 restaurants in Prague from Google Maps with their contact details.
425
+
426
+ The AI assistant first searches for a suitable Actor, inspects its input schema, and then executes it.
427
+ The tool returns a preview of the scraped data including restaurant names, addresses, ratings, phone numbers, and websites.
428
+
429
+ ### Example 3: Retrieve and paginate through Actor run results
430
+
431
+ **User prompt:**
432
+ > Show me the next 10 results from that scraping run.
433
+
434
+ The AI assistant uses the dataset ID from the previous Actor run to fetch additional items.
435
+ Expected output: The tool returns the next page of structured data items from the Actor's output dataset.
436
+
354
437
  ## 📡 Telemetry
355
438
 
356
439
  The Apify MCP Server collects telemetry data about tool calls to help Apify understand usage patterns and improve the service.
@@ -434,7 +517,7 @@ Example: `https://mcp.apify.com?tools=search-actors`.
434
517
 
435
518
  ## 🐦 Canary PR releases
436
519
 
437
- Apify MCP is split across two repositories: this one for core MCP logic and the private `apify-mcp-server-internal` for the hosted server.
520
+ Apify MCP is split across two repositories: this repository for core MCP logic and the private `apify-mcp-server-internal` for the hosted server.
438
521
  Changes must be synchronized between both.
439
522
 
440
523
  To create a canary release, add the `beta` tag to your PR branch.
@@ -442,7 +525,7 @@ This publishes the package to [pkg.pr.new](https://pkg.pr.new/) for staging and
442
525
  See [the workflow file](.github/workflows/pre_release.yaml) for details.
443
526
 
444
527
  ## 🐋 Docker Hub integration
445
- The Apify MCP Server is also available on [Docker Hub](https://hub.docker.com/mcp/server/apify-mcp-server/overview), registered via the [mcp-registry](https://github.com/docker/mcp-registry) repository. The entry in `servers/apify-mcp-server/server.yaml` should be deployed automatically by the Docker Hub MCP registry (deployment frequency is unknown). **Before making major changes to the `stdio` server version, be sure to test it locally to ensure the Docker build passes.** To test, change the `source.branch` to your PR branch and run `task build -- apify-mcp-server`. For more details, see [CONTRIBUTING.md](https://github.com/docker/mcp-registry/blob/main/CONTRIBUTING.md).
528
+ The Apify MCP Server is also available on [Docker Hub](https://hub.docker.com/mcp/server/apify-mcp-server/overview), registered via the [mcp-registry](https://github.com/docker/mcp-registry) repository. The entry in `servers/apify-mcp-server/server.yaml` should be deployed automatically by the Docker Hub MCP registry (deployment frequency is unknown). **Before making major changes to the `stdio` server version, test it locally to ensure the Docker build passes.** To test, change the `source.branch` to your PR branch and run `task build -- apify-mcp-server`. For more details, see [CONTRIBUTING.md](https://github.com/docker/mcp-registry/blob/main/CONTRIBUTING.md).
446
529
 
447
530
  # 🐛 Troubleshooting (local MCP server)
448
531
 
@@ -510,6 +593,12 @@ The Actor input schema is processed to be compatible with most MCP clients while
510
593
  - **Enum values and examples** are added to property descriptions to ensure visibility, even if the client doesn't fully support the JSON schema.
511
594
  - **Rental Actors** are only available for use with the hosted MCP server at https://mcp.apify.com. When running the server locally via stdio, you can only access Actors that are already added to your local toolset. To dynamically search for and use any Actor from Apify Store—including rental Actors—connect to the hosted endpoint.
512
595
 
596
+ # 🔒 Privacy policy
597
+
598
+ When you use this server, your requests and Actor inputs are sent to the Apify API for execution.
599
+ Data is not shared with third parties beyond what is necessary to run the requested Actors.
600
+ For full details on data collection, usage, sharing, and retention, see [Apify Legal](https://docs.apify.com/legal).
601
+
513
602
  # 🤝 Contributing
514
603
 
515
604
  We welcome contributions to improve the Apify MCP Server! Here's how you can help:
@@ -10,7 +10,7 @@ export declare const searchActorsArgsSchema: z.ZodObject<{
10
10
  }, z.core.$strip>;
11
11
  /**
12
12
  * Shared tool metadata for search-actors — everything except the `call` handler.
13
- * Used by both default and openai variants.
13
+ * Used by both default and OpenAI variants.
14
14
  */
15
15
  export declare const searchActorsMetadata: Omit<HelperTool, 'call'>;
16
16
  //# sourceMappingURL=search_actors_common.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"search_actors_common.d.ts","sourceRoot":"","sources":["../../../src/tools/core/search_actors_common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,gBAAgB,CAAC;AAIlE;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;iBA8BjC,CAAC;AAwCH;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAkBzD,CAAC"}
1
+ {"version":3,"file":"search_actors_common.d.ts","sourceRoot":"","sources":["../../../src/tools/core/search_actors_common.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,gBAAgB,CAAC;AAIlE;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;iBA+BjC,CAAC;AAwCH;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAgBzD,CAAC"}
@@ -1,4 +1,5 @@
1
1
  var _a;
2
+ import dedent from 'dedent';
2
3
  import { z } from 'zod';
3
4
  import { HelperTools } from '../../const.js';
4
5
  import { getWidgetConfig, WIDGET_URIS } from '../../resources/widgets.js';
@@ -10,22 +11,23 @@ import { actorSearchOutputSchema } from '../structured_output_schemas.js';
10
11
  export const searchActorsArgsSchema = z.object({
11
12
  keywords: z.string()
12
13
  .default('')
13
- .describe(`Space-separated keywords used to search pre-built solutions (Actors) in the Apify Store.
14
- The search engine searches across Actor's name, description, username, and readme content.
14
+ .describe(dedent `
15
+ Space-separated keywords used to search pre-built solutions (Actors) in the Apify Store.
16
+ The search engine searches across Actor's name, description, username, and readme content.
15
17
 
16
- Follow these rules for search keywords:
17
- - Use 1-3 simple keyword terms maximum (e.g., "Instagram posts", "Twitter", "Amazon products")
18
- - Actors are named using platform or service name together with the type of data or task they perform
19
- - The most effective keywords are specific platform names (Instagram, Twitter, TikTok) and specific data types (posts, products, profiles, weather, news, reviews, comments)
20
- - Avoid generic terms like "crawler", "data extraction" as these are less effective
21
- - If a user asks about "fetching Instagram posts", use "Instagram posts" as keywords
22
- - The goal is to find Actors that specifically handle the platform and data type the user mentioned
18
+ Follow these rules for search keywords:
19
+ - Use 1-3 simple keyword terms maximum (e.g., "Instagram posts", "Twitter", "Amazon products")
20
+ - Actors are named using platform or service name together with the type of data or task they perform
21
+ - The most effective keywords are specific platform names (Instagram, Twitter, TikTok) and specific data types (posts, products, profiles, weather, news, reviews, comments)
22
+ - Avoid generic terms like "crawler", "data extraction" as these are less effective
23
+ - If a user asks about "fetching Instagram posts", use "Instagram posts" as keywords
24
+ - The goal is to find Actors that specifically handle the platform and data type the user mentioned
23
25
 
24
- Examples:
25
- ✅ Good: "Instagram posts", "Twitter", "Amazon products", "weather", "news articles"
26
- ❌ Bad: "Instagram posts profiles comments hashtags reels stories followers..." (too long, too many terms)
27
- ❌ Bad: "data extraction scraping tools" (too generic)
28
- `),
26
+ Examples:
27
+ ✅ Good: "Instagram posts", "Twitter", "Amazon products", "weather", "news articles"
28
+ ❌ Bad: "Instagram posts profiles comments hashtags reels stories followers..." (too long, too many terms)
29
+ ❌ Bad: "data extraction scraping tools" (too generic)
30
+ `),
29
31
  limit: z.number()
30
32
  .int()
31
33
  .min(1)
@@ -77,7 +79,7 @@ Returns list of Actor cards with the following info:
77
79
  `;
78
80
  /**
79
81
  * Shared tool metadata for search-actors — everything except the `call` handler.
80
- * Used by both default and openai variants.
82
+ * Used by both default and OpenAI variants.
81
83
  */
82
84
  export const searchActorsMetadata = {
83
85
  type: 'internal',
@@ -87,9 +89,7 @@ export const searchActorsMetadata = {
87
89
  outputSchema: actorSearchOutputSchema,
88
90
  ajvValidate: compileSchema(z.toJSONSchema(searchActorsArgsSchema)),
89
91
  // openai/* and ui keys are stripped in non-openai mode by stripWidgetMeta() in src/utils/tools.ts
90
- _meta: {
91
- ...(_a = getWidgetConfig(WIDGET_URIS.SEARCH_ACTORS)) === null || _a === void 0 ? void 0 : _a.meta,
92
- },
92
+ _meta: { ...(_a = getWidgetConfig(WIDGET_URIS.SEARCH_ACTORS)) === null || _a === void 0 ? void 0 : _a.meta },
93
93
  annotations: {
94
94
  title: 'Search Actors',
95
95
  readOnlyHint: true,
@@ -1 +1 @@
1
- {"version":3,"file":"search_actors_common.js","sourceRoot":"","sources":["../../../src/tools/core/search_actors_common.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE1E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAE1E;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;SACf,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC;;;;;;;;;;;;;;;CAejB,CAAC;IACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;SACZ,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,OAAO,CAAC,CAAC,CAAC;SACV,QAAQ,CAAC,sDAAsD,CAAC;IACrE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;SACb,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,OAAO,CAAC,CAAC,CAAC;SACV,QAAQ,CAAC,6DAA6D,CAAC;CAC/E,CAAC,CAAC;AAEH,MAAM,yBAAyB,GAAG;;;+EAG6C,WAAW,CAAC,qBAAqB;;;;;;;;;;;;;;;;;;;;sCAoB1E,WAAW,CAAC,iBAAiB;;;;;;;;;;;;;CAalE,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAA6B;IAC1D,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,WAAW,CAAC,YAAY;IAC9B,WAAW,EAAE,yBAAyB;IACtC,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC,sBAAsB,CAAoB;IACtE,YAAY,EAAE,uBAAuB;IACrC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC;IAClE,kGAAkG;IAClG,KAAK,EAAE;QACH,GAAG,MAAA,eAAe,CAAC,WAAW,CAAC,aAAa,CAAC,0CAAE,IAAI;KACtD;IACD,WAAW,EAAE;QACT,KAAK,EAAE,eAAe;QACtB,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,KAAK;KACvB;CACJ,CAAC"}
1
+ {"version":3,"file":"search_actors_common.js","sourceRoot":"","sources":["../../../src/tools/core/search_actors_common.ts"],"names":[],"mappings":";AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE1E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAE1E;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;SACf,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,MAAM,CAAA;;;;;;;;;;;;;;;;SAgBf,CAAC;IACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;SACZ,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,OAAO,CAAC,CAAC,CAAC;SACV,QAAQ,CAAC,sDAAsD,CAAC;IACrE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;SACb,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,OAAO,CAAC,CAAC,CAAC;SACV,QAAQ,CAAC,6DAA6D,CAAC;CAC/E,CAAC,CAAC;AAEH,MAAM,yBAAyB,GAAG;;;+EAG6C,WAAW,CAAC,qBAAqB;;;;;;;;;;;;;;;;;;;;sCAoB1E,WAAW,CAAC,iBAAiB;;;;;;;;;;;;;CAalE,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAA6B;IAC1D,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,WAAW,CAAC,YAAY;IAC9B,WAAW,EAAE,yBAAyB;IACtC,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC,sBAAsB,CAAoB;IACtE,YAAY,EAAE,uBAAuB;IACrC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC;IAClE,kGAAkG;IAClG,KAAK,EAAE,EAAE,GAAG,MAAA,eAAe,CAAC,WAAW,CAAC,aAAa,CAAC,0CAAE,IAAI,EAAE;IAC9D,WAAW,EAAE;QACT,KAAK,EAAE,eAAe;QACtB,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,KAAK;KACvB;CACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"get_actor_run.d.ts","sourceRoot":"","sources":["../../../src/tools/default/get_actor_run.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAoB,SAAS,EAAE,MAAM,gBAAgB,CAAC;AASlE;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAsCtB,CAAC"}
1
+ {"version":3,"file":"get_actor_run.d.ts","sourceRoot":"","sources":["../../../src/tools/default/get_actor_run.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAoB,SAAS,EAAE,MAAM,gBAAgB,CAAC;AASlE;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAmCtB,CAAC"}
@@ -21,9 +21,7 @@ export const defaultGetActorRun = Object.freeze({
21
21
  return fetchResult.error;
22
22
  }
23
23
  const { run, structuredContent } = fetchResult.result;
24
- const texts = [
25
- `# Actor Run Information\n\`\`\`json\n${JSON.stringify(run, null, 2)}\n\`\`\``,
26
- ];
24
+ const texts = [`# Actor Run Information\n\`\`\`json\n${JSON.stringify(run)}\n\`\`\``];
27
25
  return buildMCPResponse({
28
26
  texts,
29
27
  structuredContent,
@@ -1 +1 @@
1
- {"version":3,"file":"get_actor_run.js","sourceRoot":"","sources":["../../../src/tools/default/get_actor_run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EACH,iBAAiB,EACjB,eAAe,EACf,mBAAmB,GACtB,MAAM,iCAAiC,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAc,MAAM,CAAC,MAAM,CAAC;IACvD,GAAG,mBAAmB;IACtB,IAAI,EAAE,KAAK,EAAE,QAA0B,EAAE,EAAE;QACvC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC;QAC7D,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE3C,IAAI,CAAC;YACD,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC;gBACxC,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM;gBACN,YAAY;aACf,CAAC,CAAC;YAEH,IAAI,OAAO,IAAI,WAAW,EAAE,CAAC;gBACzB,OAAO,WAAW,CAAC,KAAK,CAAC;YAC7B,CAAC;YAED,MAAM,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC;YAEtD,MAAM,KAAK,GAAG;gBACV,wCAAwC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU;aACjF,CAAC;YAEF,OAAO,gBAAgB,CAAC;gBACpB,KAAK;gBACL,iBAAiB;gBACjB,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC;aAC7B,CAAC,CAAC;QACP,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,YAAY,CAAC,KAAK,EAAE,yBAAyB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACxE,OAAO,gBAAgB,CAAC;gBACpB,KAAK,EAAE,CAAC,4BAA4B,MAAM,CAAC,KAAK,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;yDACnE,CAAC;gBAC1C,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,SAAS,EAAE;aACnD,CAAC,CAAC;QACP,CAAC;IACL,CAAC;CACK,CAAC,CAAC"}
1
+ {"version":3,"file":"get_actor_run.js","sourceRoot":"","sources":["../../../src/tools/default/get_actor_run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EACH,iBAAiB,EACjB,eAAe,EACf,mBAAmB,GACtB,MAAM,iCAAiC,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAc,MAAM,CAAC,MAAM,CAAC;IACvD,GAAG,mBAAmB;IACtB,IAAI,EAAE,KAAK,EAAE,QAA0B,EAAE,EAAE;QACvC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC;QAC7D,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE3C,IAAI,CAAC;YACD,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC;gBACxC,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM;gBACN,YAAY;aACf,CAAC,CAAC;YAEH,IAAI,OAAO,IAAI,WAAW,EAAE,CAAC;gBACzB,OAAO,WAAW,CAAC,KAAK,CAAC;YAC7B,CAAC;YAED,MAAM,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC;YACtD,MAAM,KAAK,GAAG,CAAC,wCAAwC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAEtF,OAAO,gBAAgB,CAAC;gBACpB,KAAK;gBACL,iBAAiB;gBACjB,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC;aAC7B,CAAC,CAAC;QACP,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,YAAY,CAAC,KAAK,EAAE,yBAAyB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACxE,OAAO,gBAAgB,CAAC;gBACpB,KAAK,EAAE,CAAC,4BAA4B,MAAM,CAAC,KAAK,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;yDACnE,CAAC;gBAC1C,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,SAAS,EAAE;aACnD,CAAC,CAAC;QACP,CAAC;IACL,CAAC;CACK,CAAC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import type { ToolEntry } from '../../types.js';
2
2
  /**
3
3
  * Default mode search-actors tool.
4
- * Returns text-based actor cards without widget metadata.
4
+ * Returns text-based Actor cards without widget metadata.
5
5
  */
6
6
  export declare const defaultSearchActors: ToolEntry;
7
7
  //# sourceMappingURL=search_actors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"search_actors.d.ts","sourceRoot":"","sources":["../../../src/tools/default/search_actors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAoB,SAAS,EAAE,MAAM,gBAAgB,CAAC;AASlE;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAuDvB,CAAC"}
1
+ {"version":3,"file":"search_actors.d.ts","sourceRoot":"","sources":["../../../src/tools/default/search_actors.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAoB,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAMlE;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAgEvB,CAAC"}
@@ -1,11 +1,12 @@
1
+ import dedent from 'dedent';
1
2
  import { HelperTools } from '../../const.js';
2
3
  import { formatActorToActorCard, formatActorToStructuredCard } from '../../utils/actor_card.js';
3
4
  import { searchAndFilterActors } from '../../utils/actor_search.js';
4
5
  import { buildMCPResponse } from '../../utils/mcp.js';
5
- import { searchActorsArgsSchema, searchActorsMetadata, } from '../core/search_actors_common.js';
6
+ import { searchActorsArgsSchema, searchActorsMetadata } from '../core/search_actors_common.js';
6
7
  /**
7
8
  * Default mode search-actors tool.
8
- * Returns text-based actor cards without widget metadata.
9
+ * Returns text-based Actor cards without widget metadata.
9
10
  */
10
11
  export const defaultSearchActors = Object.freeze({
11
12
  ...searchActorsMetadata,
@@ -21,8 +22,11 @@ export const defaultSearchActors = Object.freeze({
21
22
  userRentedActorIds,
22
23
  });
23
24
  if (actors.length === 0) {
24
- const instructions = `No Actors were found for the search query "${parsed.keywords}".
25
- You MUST retry with broader, more generic keywords - use just the platform name (e.g., "TikTok" instead of "TikTok posts") before concluding no Actor exists.`;
25
+ const instructions = dedent `
26
+ No Actors were found for the search query "${parsed.keywords}".
27
+ You MUST retry with broader, more generic keywords - use just the platform name
28
+ (e.g., "TikTok" instead of "TikTok posts") before concluding no Actor exists.
29
+ `;
26
30
  const structuredContent = {
27
31
  actors: [],
28
32
  query: parsed.keywords,
@@ -36,27 +40,34 @@ You MUST retry with broader, more generic keywords - use just the platform name
36
40
  actors: structuredActorCards,
37
41
  query: parsed.keywords,
38
42
  count: actors.length,
39
- instructions: `If you need more detailed information about any of these Actors, including their input schemas and usage instructions, please use the ${HelperTools.ACTOR_GET_DETAILS} tool with the specific Actor name.
40
- IMPORTANT: You MUST always do a second search with broader, more generic keywords (e.g., just the platform name like "TikTok" instead of "TikTok posts") to make sure you haven't missed a better Actor.`,
43
+ instructions: dedent `
44
+ If you need more detailed information about any of these Actors, including their
45
+ input schemas and usage instructions, please use the ${HelperTools.ACTOR_GET_DETAILS}
46
+ tool with the specific Actor name.
47
+ IMPORTANT: You MUST always do a second search with broader, more generic keywords
48
+ (e.g., just the platform name like "TikTok" instead of "TikTok posts") to make sure
49
+ you haven't missed a better Actor.
50
+ `,
41
51
  };
42
52
  const actorCards = actors.map((actor) => formatActorToActorCard(actor));
43
53
  const actorsText = actorCards.join('\n\n');
44
- const instructions = `
45
- # Search results:
46
- - **Search query:** ${parsed.keywords}
47
- - **Number of Actors found:** ${actors.length}
54
+ const instructions = dedent `
55
+ # Search results:
56
+ - **Search query:** ${parsed.keywords}
57
+ - **Number of Actors found:** ${actors.length}
48
58
 
49
- # Actors:
59
+ # Actors:
50
60
 
51
- ${actorsText}
61
+ ${actorsText}
52
62
 
53
- If you need more detailed information about any of these Actors, including their input schemas and usage instructions, use the ${HelperTools.ACTOR_GET_DETAILS} tool with the specific Actor name.
54
- IMPORTANT: You MUST always do a second search with broader, more generic keywords (e.g., just the platform name like "TikTok" instead of "TikTok posts") to make sure you haven't missed a better Actor.
55
- `;
56
- return buildMCPResponse({
57
- texts: [instructions],
58
- structuredContent,
59
- });
63
+ If you need more detailed information about any of these Actors, including their input
64
+ schemas and usage instructions, use the ${HelperTools.ACTOR_GET_DETAILS} tool with the
65
+ specific Actor name.
66
+ IMPORTANT: You MUST always do a second search with broader, more generic keywords
67
+ (e.g., just the platform name like "TikTok" instead of "TikTok posts") to make sure
68
+ you haven't missed a better Actor.
69
+ `;
70
+ return buildMCPResponse({ texts: [instructions], structuredContent });
60
71
  },
61
72
  });
62
73
  //# sourceMappingURL=search_actors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search_actors.js","sourceRoot":"","sources":["../../../src/tools/default/search_actors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAChG,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EACH,sBAAsB,EACtB,oBAAoB,GACvB,MAAM,iCAAiC,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAc,MAAM,CAAC,MAAM,CAAC;IACxD,GAAG,oBAAoB;IACvB,IAAI,EAAE,KAAK,EAAE,QAA0B,EAAE,EAAE;QACvC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,kBAAkB,EAAE,cAAc,EAAE,GAAG,QAAQ,CAAC;QAC1E,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC;YACvC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,UAAU;YACV,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,eAAe,EAAE,cAAc,CAAC,OAAO,CAAC,eAAe;YACvD,kBAAkB;SACrB,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,YAAY,GAAG,8CAA8C,MAAM,CAAC,QAAQ;8JACgE,CAAC;YACnJ,MAAM,iBAAiB,GAAG;gBACtB,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,MAAM,CAAC,QAAQ;gBACtB,KAAK,EAAE,CAAC;gBACR,YAAY;aACf,CAAC;YACF,OAAO,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC,CAAC;QACvF,MAAM,iBAAiB,GAAG;YACtB,MAAM,EAAE,oBAAoB;YAC5B,KAAK,EAAE,MAAM,CAAC,QAAQ;YACtB,KAAK,EAAE,MAAM,CAAC,MAAM;YACpB,YAAY,EAAE,yIAAyI,WAAW,CAAC,iBAAiB;yMACS;SAChM,CAAC;QAEF,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC;QACxE,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,YAAY,GAAG;;uBAEN,MAAM,CAAC,QAAQ;iCACL,MAAM,CAAC,MAAM;;;;GAI3C,UAAU;;iIAEoH,WAAW,CAAC,iBAAiB;;EAE5J,CAAC;QAEK,OAAO,gBAAgB,CAAC;YACpB,KAAK,EAAE,CAAC,YAAY,CAAC;YACrB,iBAAiB;SACpB,CAAC,CAAC;IACP,CAAC;CACK,CAAC,CAAC"}
1
+ {"version":3,"file":"search_actors.js","sourceRoot":"","sources":["../../../src/tools/default/search_actors.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAChG,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAE/F;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAc,MAAM,CAAC,MAAM,CAAC;IACxD,GAAG,oBAAoB;IACvB,IAAI,EAAE,KAAK,EAAE,QAA0B,EAAE,EAAE;QACvC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,kBAAkB,EAAE,cAAc,EAAE,GAAG,QAAQ,CAAC;QAC1E,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC;YACvC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,UAAU;YACV,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,eAAe,EAAE,cAAc,CAAC,OAAO,CAAC,eAAe;YACvD,kBAAkB;SACrB,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,YAAY,GAAG,MAAM,CAAA;6DACsB,MAAM,CAAC,QAAQ;;;aAG/D,CAAC;YACF,MAAM,iBAAiB,GAAG;gBACtB,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,MAAM,CAAC,QAAQ;gBACtB,KAAK,EAAE,CAAC;gBACR,YAAY;aACf,CAAC;YACF,OAAO,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC,CAAC;QACvF,MAAM,iBAAiB,GAAG;YACtB,MAAM,EAAE,oBAAoB;YAC5B,KAAK,EAAE,MAAM,CAAC,QAAQ;YACtB,KAAK,EAAE,MAAM,CAAC,MAAM;YACpB,YAAY,EAAE,MAAM,CAAA;;uEAEuC,WAAW,CAAC,iBAAiB;;;;;aAKvF;SACJ,CAAC;QAEF,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC;QACxE,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,YAAY,GAAG,MAAM,CAAA;;kCAED,MAAM,CAAC,QAAQ;4CACL,MAAM,CAAC,MAAM;;;;cAI3C,UAAU;;;sDAG8B,WAAW,CAAC,iBAAiB;;;;;SAK1E,CAAC;QACF,OAAO,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC1E,CAAC;CACK,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"search_actors.d.ts","sourceRoot":"","sources":["../../../src/tools/openai/search_actors.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAoB,SAAS,EAAE,MAAM,gBAAgB,CAAC;AASlE;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,SA2EtB,CAAC"}
1
+ {"version":3,"file":"search_actors.d.ts","sourceRoot":"","sources":["../../../src/tools/openai/search_actors.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAoB,SAAS,EAAE,MAAM,gBAAgB,CAAC;AASlE;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,SA8FtB,CAAC"}
@@ -1,3 +1,4 @@
1
+ import dedent from 'dedent';
1
2
  import { HelperTools } from '../../const.js';
2
3
  import { getWidgetConfig, WIDGET_URIS } from '../../resources/widgets.js';
3
4
  import { formatActorForWidget, formatActorToActorCard, formatActorToStructuredCard } from '../../utils/actor_card.js';
@@ -22,8 +23,11 @@ export const openaiSearchActors = Object.freeze({
22
23
  userRentedActorIds,
23
24
  });
24
25
  if (actors.length === 0) {
25
- const instructions = `No Actors were found for the search query "${parsed.keywords}".
26
- You MUST retry with broader, more generic keywords - use just the platform name (e.g., "TikTok" instead of "TikTok posts") before concluding no Actor exists.`;
26
+ const instructions = dedent `
27
+ No Actors were found for the search query "${parsed.keywords}".
28
+ You MUST retry with broader, more generic keywords - use just the platform name
29
+ (e.g., "TikTok" instead of "TikTok posts") before concluding no Actor exists.
30
+ `;
27
31
  const structuredContent = {
28
32
  actors: [],
29
33
  query: parsed.keywords,
@@ -37,35 +41,51 @@ You MUST retry with broader, more generic keywords - use just the platform name
37
41
  actors: structuredActorCards,
38
42
  query: parsed.keywords,
39
43
  count: actors.length,
40
- instructions: `Choosing the right details tool: Use ${HelperTools.ACTOR_GET_DETAILS} when the user wants to browse or explore Actors (e.g., "show me", "find me"). Use ${HelperTools.ACTOR_GET_DETAILS_INTERNAL} when the user wants to execute a task and you need the input schema (e.g., "scrape", "extract").
41
- IMPORTANT: You MUST always do a second search with broader, more generic keywords (e.g., just the platform name like "TikTok" instead of "TikTok posts") to make sure you haven't missed a better Actor.`,
44
+ instructions: dedent `
45
+ Choosing the right details tool: Use ${HelperTools.ACTOR_GET_DETAILS} when the user
46
+ wants to browse or explore Actors (e.g., "show me", "find me").
47
+ Use ${HelperTools.ACTOR_GET_DETAILS_INTERNAL} when the user wants to execute a task and
48
+ you need the input schema (e.g., "scrape", "extract").
49
+ IMPORTANT: You MUST always do a second search with broader, more generic keywords
50
+ (e.g., just the platform name like "TikTok" instead of "TikTok posts") to make sure
51
+ you haven't missed a better Actor.
52
+ `,
42
53
  };
43
54
  // Add widget-formatted actors for the interactive UI
44
55
  structuredContent.widgetActors = actors.map(formatActorForWidget);
45
56
  const actorCards = actors.map((actor) => formatActorToActorCard(actor));
46
57
  const actorsText = actorCards.join('\n\n');
47
- const texts = [`
48
- # Search results:
49
- - **Search query:** ${parsed.keywords}
50
- - **Number of Actors found:** ${actors.length}
58
+ const texts = [dedent `
59
+ # Search results:
60
+ - **Search query:** ${parsed.keywords}
61
+ - **Number of Actors found:** ${actors.length}
51
62
 
52
- An interactive widget has been rendered with the search results. The user can already see the list of Actors visually in the widget, so do NOT print or summarize the Actor list in your response.
63
+ An interactive widget has been rendered with the search results. The user can already see
64
+ the list of Actors visually in the widget, so do NOT print or summarize the Actor list
65
+ in your response.
53
66
 
54
- # Actors:
67
+ # Actors:
55
68
 
56
- ${actorsText}
69
+ ${actorsText}
57
70
 
58
- ## Choosing the right details tool:
59
- - Use ${HelperTools.ACTOR_GET_DETAILS} when the user wants to **browse or explore** Actors (e.g., "show me Google Maps scrapers", "find me a TikTok scraper", "what Actors exist for LinkedIn"). This renders an interactive widget for the user.
60
- - Use ${HelperTools.ACTOR_GET_DETAILS_INTERNAL} when the user wants to **execute a task** and you need the Actor's input schema to prepare the run (e.g., "scrape Google Maps for restaurants", "extract emails from this website"). This is a silent lookup — no widget is rendered.
71
+ ## Choosing the right details tool:
72
+ - Use ${HelperTools.ACTOR_GET_DETAILS} when the user wants to **browse or explore**
73
+ Actors (e.g., "show me Google Maps scrapers", "find me a TikTok scraper", "what Actors
74
+ exist for LinkedIn"). This renders an interactive widget for the user.
75
+ - Use ${HelperTools.ACTOR_GET_DETAILS_INTERNAL} when the user wants to **execute a task**
76
+ and you need the Actor's input schema to prepare the run (e.g., "scrape Google Maps for
77
+ restaurants", "extract emails from this website"). This is a silent lookup — no widget
78
+ is rendered.
61
79
 
62
- IMPORTANT: You MUST always do a second search with broader, more generic keywords (e.g., just the platform name like "TikTok" instead of "TikTok posts") to make sure you haven't missed a better Actor.
63
- `];
80
+ IMPORTANT: You MUST always do a second search with broader, more generic keywords
81
+ (e.g., just the platform name like "TikTok" instead of "TikTok posts") to make sure
82
+ you haven't missed a better Actor.
83
+ `];
64
84
  const widgetConfig = getWidgetConfig(WIDGET_URIS.SEARCH_ACTORS);
65
85
  return buildMCPResponse({
66
86
  texts,
67
87
  structuredContent,
68
- // Response-level meta; only returned in openai mode (this handler is openai-only)
88
+ // Response-level meta; only returned in OpenAI mode (this handler is openai-only)
69
89
  _meta: {
70
90
  ...widgetConfig === null || widgetConfig === void 0 ? void 0 : widgetConfig.meta,
71
91
  'openai/widgetDescription': `Interactive actor search results showing ${actors.length} actors from Apify Store`,
@@ -1 +1 @@
1
- {"version":3,"file":"search_actors.js","sourceRoot":"","sources":["../../../src/tools/openai/search_actors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search_actors.js","sourceRoot":"","sources":["../../../src/tools/openai/search_actors.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"search_actors_internal.d.ts","sourceRoot":"","sources":["../../../src/tools/openai/search_actors_internal.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAoB,SAAS,EAAmB,MAAM,gBAAgB,CAAC;AAuBnF,eAAO,MAAM,wBAAwB,EAAE,SAwDrC,CAAC"}
1
+ {"version":3,"file":"search_actors_internal.d.ts","sourceRoot":"","sources":["../../../src/tools/openai/search_actors_internal.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAoB,SAAS,EAAmB,MAAM,gBAAgB,CAAC;AAuBnF,eAAO,MAAM,wBAAwB,EAAE,SAwDrC,CAAC"}
@@ -1,3 +1,4 @@
1
+ import dedent from 'dedent';
1
2
  import { z } from 'zod';
2
3
  import { HelperTools } from '../../const.js';
3
4
  import { searchAndFilterActors } from '../../utils/actor_search.js';
@@ -23,16 +24,18 @@ const searchActorsInternalArgsSchema = z.object({
23
24
  export const searchActorsInternalTool = Object.freeze({
24
25
  type: 'internal',
25
26
  name: HelperTools.STORE_SEARCH_INTERNAL,
26
- description: `Search Actors internally (UI mode internal tool).
27
+ description: dedent `
28
+ Search Actors internally (UI mode internal tool).
27
29
 
28
- This tool is available because the LLM is operating in UI mode. Use it for internal lookups
29
- where data presentation to the user is NOT needed - this tool does NOT render a widget.
30
+ This tool is available because the LLM is operating in UI mode. Use it for internal lookups
31
+ where data presentation to the user is NOT needed - this tool does NOT render a widget.
30
32
 
31
- Use this instead of ${HelperTools.STORE_SEARCH} when you need to find an Actor but the user
32
- did NOT explicitly ask to search Actors. For example, when user says "scrape me google maps"
33
- and you need to find the right Actor for the task, then fetch its schema and call it.
33
+ Use this instead of ${HelperTools.STORE_SEARCH} when you need to find an Actor but the user
34
+ did NOT explicitly ask to search Actors. For example, when user says "scrape me google maps"
35
+ and you need to find the right Actor for the task, then fetch its schema and call it.
34
36
 
35
- Returns only minimal fields (fullName, title, description) needed for subsequent calls.`,
37
+ Returns only minimal fields (fullName, title, description) needed for subsequent calls.
38
+ `,
36
39
  inputSchema: z.toJSONSchema(searchActorsInternalArgsSchema),
37
40
  outputSchema: actorSearchInternalOutputSchema,
38
41
  ajvValidate: compileSchema(z.toJSONSchema(searchActorsInternalArgsSchema)),
@@ -62,10 +65,8 @@ Returns only minimal fields (fullName, title, description) needed for subsequent
62
65
  return buildMCPResponse({
63
66
  texts: [
64
67
  `Found ${minimalActors.length} Actors for "${parsed.keywords}".`,
65
- '',
66
68
  `Query: ${parsed.keywords}`,
67
- '',
68
- `Actors:\n\`\`\`json\n${JSON.stringify(minimalActors, null, 2)}\n\`\`\``,
69
+ `Actors:\n\`\`\`json\n${JSON.stringify(minimalActors)}\n\`\`\``,
69
70
  ],
70
71
  structuredContent: {
71
72
  actors: minimalActors,
@@ -1 +1 @@
1
- {"version":3,"file":"search_actors_internal.js","sourceRoot":"","sources":["../../../src/tools/openai/search_actors_internal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,+BAA+B,EAAE,MAAM,iCAAiC,CAAC;AAElF,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;SACZ,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,OAAO,CAAC,CAAC,CAAC;SACV,QAAQ,CAAC,sDAAsD,CAAC;IACrE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;SACb,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,OAAO,CAAC,CAAC,CAAC;SACV,QAAQ,CAAC,6DAA6D,CAAC;IAC5E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;SACf,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,wDAAwD,CAAC;CAC1E,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAc,MAAM,CAAC,MAAM,CAAC;IAC7D,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,WAAW,CAAC,qBAAqB;IACvC,WAAW,EAAE;;;;;sBAKK,WAAW,CAAC,YAAY;;;;wFAI0C;IACpF,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC,8BAA8B,CAAoB;IAC9E,YAAY,EAAE,+BAA+B;IAC7C,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,8BAA8B,CAAC,CAAC;IAC1E,WAAW,EAAE;QACT,KAAK,EAAE,0BAA0B;QACjC,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,KAAK;KACvB;IACD,IAAI,EAAE,KAAK,EAAE,QAA0B,EAAE,EAAE;QACvC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,kBAAkB,EAAE,cAAc,EAAE,GAAG,QAAQ,CAAC;QAC1E,MAAM,MAAM,GAAG,8BAA8B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC;YACvC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,UAAU;YACV,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,eAAe,EAAE,cAAc,CAAC,OAAO,CAAC,eAAe;YACvD,kBAAkB;SACrB,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACzC,QAAQ,EAAE,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE;YAC3C,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI;YAChC,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE;SACvC,CAAC,CAAC,CAAC;QAEJ,OAAO,gBAAgB,CAAC;YACpB,KAAK,EAAE;gBACH,SAAS,aAAa,CAAC,MAAM,gBAAgB,MAAM,CAAC,QAAQ,IAAI;gBAChE,EAAE;gBACF,UAAU,MAAM,CAAC,QAAQ,EAAE;gBAC3B,EAAE;gBACF,wBAAwB,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU;aAC3E;YACD,iBAAiB,EAAE;gBACf,MAAM,EAAE,aAAa;gBACrB,KAAK,EAAE,MAAM,CAAC,QAAQ;gBACtB,KAAK,EAAE,aAAa,CAAC,MAAM;aAC9B;SACJ,CAAC,CAAC;IACP,CAAC;CACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"search_actors_internal.js","sourceRoot":"","sources":["../../../src/tools/openai/search_actors_internal.ts"],"names":[],"mappings":"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"}