diff --git a/.actor/input_schema.json b/.actor/input_schema.json
index 09fb4393..e2686372 100644
--- a/.actor/input_schema.json
+++ b/.actor/input_schema.json
@@ -25,7 +25,7 @@
"title": "Enable adding Actors based on context and use-case (experimental, check if it supported by your client)",
"type": "boolean",
"description": "When enabled, the server can dynamically add Actors as tools based on user requests and context. \n\nNote: MCP client must support notification on tool updates. To try it, you can use the [Tester MCP Client](https://apify.com/jiri.spilka/tester-mcp-client). This is an experimental feature and may require client-specific support.",
- "default": false
+ "default": true
},
"maxActorMemoryBytes": {
"title": "Limit the maximum memory used by an Actor",
@@ -48,7 +48,7 @@
"description": "Specify the input for the Actor that will be used for debugging in normal mode",
"editor": "json",
"prefill": {
- "query": "hello world"
+ "query": "hello world"
}
}
}
diff --git a/src/input.ts b/src/input.ts
index 81e5d806..1fdbdeae 100644
--- a/src/input.ts
+++ b/src/input.ts
@@ -24,7 +24,7 @@ export function processInput(originalInput: Partial): Input {
log.warning('enableActorAutoLoading is deprecated, use enableAddingActors instead');
input.enableAddingActors = input.enableActorAutoLoading === true || input.enableActorAutoLoading === 'true';
} else {
- input.enableAddingActors = false;
+ input.enableAddingActors = true;
}
} else {
input.enableAddingActors = input.enableAddingActors === true || input.enableAddingActors === 'true';
diff --git a/src/mcp/server.ts b/src/mcp/server.ts
index d5b10cee..3a599238 100644
--- a/src/mcp/server.ts
+++ b/src/mcp/server.ts
@@ -50,7 +50,7 @@ export class ActorsMcpServer {
constructor(options: ActorsMcpServerOptions = {}, setupSigintHandler = true) {
this.options = {
- enableAddingActors: options.enableAddingActors ?? false,
+ enableAddingActors: options.enableAddingActors ?? true,
enableDefaultActors: options.enableDefaultActors ?? true, // Default to true for backward compatibility
};
this.server = new Server(
diff --git a/src/stdio.ts b/src/stdio.ts
index 45fe18ff..fc537260 100644
--- a/src/stdio.ts
+++ b/src/stdio.ts
@@ -33,8 +33,9 @@ import { getActorsAsTools } from './tools/index.js';
*/
interface CliArgs {
actors?: string;
- 'enable-adding-actors'?: boolean;
- enableActorAutoLoading?: boolean;
+ enableAddingActors: boolean;
+ /** @deprecated */
+ enableActorAutoLoading: boolean;
}
// Configure logging, set to ERROR
@@ -50,12 +51,12 @@ const argv = yargs(hideBin(process.argv))
})
.option('enable-adding-actors', {
type: 'boolean',
- default: false,
+ default: true,
describe: 'Enable dynamically adding Actors as tools based on user requests',
})
.option('enableActorAutoLoading', {
type: 'boolean',
- default: false,
+ default: true,
hidden: true,
describe: 'Deprecated: use enable-adding-actors instead',
})
@@ -69,7 +70,7 @@ const argv = yargs(hideBin(process.argv))
.epilogue('For more information, visit https://github.com/apify/actors-mcp-server')
.parseSync() as CliArgs;
-const enableAddingActors = argv['enable-adding-actors'] || argv.enableActorAutoLoading || false;
+const enableAddingActors = argv.enableAddingActors && argv.enableActorAutoLoading;
const actors = argv.actors as string || '';
const actorList = actors ? actors.split(',').map((a: string) => a.trim()) : [];
diff --git a/tests/helpers.ts b/tests/helpers.ts
index 45d70bf5..8ab1addb 100644
--- a/tests/helpers.ts
+++ b/tests/helpers.ts
@@ -23,8 +23,8 @@ export async function createMcpSseClient(
if (actors) {
url.searchParams.append('actors', actors.join(','));
}
- if (enableAddingActors) {
- url.searchParams.append('enableAddingActors', 'true');
+ if (enableAddingActors !== undefined) {
+ url.searchParams.append('enableAddingActors', enableAddingActors.toString());
}
const transport = new SSEClientTransport(
@@ -59,8 +59,8 @@ export async function createMcpStreamableClient(
if (actors) {
url.searchParams.append('actors', actors.join(','));
}
- if (enableAddingActors) {
- url.searchParams.append('enableAddingActors', 'true');
+ if (enableAddingActors !== undefined) {
+ url.searchParams.append('enableAddingActors', enableAddingActors.toString());
}
const transport = new StreamableHTTPClientTransport(
@@ -94,8 +94,8 @@ export async function createMcpStdioClient(
if (actors) {
args.push('--actors', actors.join(','));
}
- if (enableAddingActors) {
- args.push('--enable-adding-actors');
+ if (enableAddingActors !== undefined) {
+ args.push('--enable-adding-actors', enableAddingActors.toString());
}
const transport = new StdioClientTransport({
command: 'node',
diff --git a/tests/integration/suite.ts b/tests/integration/suite.ts
index 1a583bb8..7288676a 100644
--- a/tests/integration/suite.ts
+++ b/tests/integration/suite.ts
@@ -82,18 +82,19 @@ export function createIntegrationTestsSuite(
describe(suiteName, {
concurrent: false, // Make all tests sequential to prevent state interference
}, () => {
- it('should list all default tools and default Actors', async () => {
+ it('should list all default tools and Actors', async () => {
const client = await createClientFn();
const tools = await client.listTools();
- expect(tools.tools.length).toEqual(defaultTools.length + defaults.actors.length);
+ expect(tools.tools.length).toEqual(defaultTools.length + defaults.actors.length + addRemoveTools.length);
const names = getToolNames(tools);
expectToolNamesToContain(names, DEFAULT_TOOL_NAMES);
expectToolNamesToContain(names, DEFAULT_ACTOR_NAMES);
+ expectToolNamesToContain(names, addRemoveTools.map((tool) => tool.tool.name));
await client.close();
});
- it('should list all default tools, tools for adding/removing Actors, and default Actors', async () => {
+ it('should list all default tools and Actors, with add/remove tools', async () => {
const client = await createClientFn({ enableAddingActors: true });
const names = getToolNames(await client.listTools());
expect(names.length).toEqual(defaultTools.length + defaults.actors.length + addRemoveTools.length);
@@ -104,6 +105,16 @@ export function createIntegrationTestsSuite(
await client.close();
});
+ it('should list all default tools and Actors, without add/remove tools', async () => {
+ const client = await createClientFn({ enableAddingActors: false });
+ const names = getToolNames(await client.listTools());
+ expect(names.length).toEqual(defaultTools.length + defaults.actors.length);
+
+ expectToolNamesToContain(names, DEFAULT_TOOL_NAMES);
+ expectToolNamesToContain(names, DEFAULT_ACTOR_NAMES);
+ await client.close();
+ });
+
it('should list all default tools and two loaded Actors', async () => {
const actors = ['apify/website-content-crawler', 'apify/instagram-scraper'];
const client = await createClientFn({ actors, enableAddingActors: false });
diff --git a/tests/unit/input.test.ts b/tests/unit/input.test.ts
index 7752d0e3..643e5baa 100644
--- a/tests/unit/input.test.ts
+++ b/tests/unit/input.test.ts
@@ -39,11 +39,11 @@ describe('processInput', () => {
expect(processed.enableAddingActors).toBe(false);
});
- it('should default enableAddingActors to false when not provided', async () => {
+ it('should default enableAddingActors to true when not provided', async () => {
const input: Partial = {
actors: ['actor1'],
};
const processed = processInput(input);
- expect(processed.enableAddingActors).toBe(false);
+ expect(processed.enableAddingActors).toBe(true);
});
});