@apify/actors-mcp-server 0.1.21 → 0.1.22-beta.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 +1 -1
- package/dist/actor/const.d.ts +15 -0
- package/dist/actor/const.d.ts.map +1 -0
- package/dist/actor/const.js +20 -0
- package/dist/actor/const.js.map +1 -0
- package/dist/{input.d.ts → actor/input.d.ts} +1 -1
- package/dist/actor/input.d.ts.map +1 -0
- package/dist/{input.js → actor/input.js} +5 -1
- package/dist/actor/input.js.map +1 -0
- package/dist/actor/server.d.ts +4 -0
- package/dist/actor/server.d.ts.map +1 -0
- package/dist/actor/server.js +81 -0
- package/dist/actor/server.js.map +1 -0
- package/dist/actor/types.d.ts +30 -0
- package/dist/actor/types.d.ts.map +1 -0
- package/dist/actor/types.js +2 -0
- package/dist/actor/types.js.map +1 -0
- package/dist/actor/utils.d.ts +11 -0
- package/dist/actor/utils.d.ts.map +1 -0
- package/dist/actor/utils.js +50 -0
- package/dist/actor/utils.js.map +1 -0
- package/dist/const.d.ts +10 -20
- package/dist/const.d.ts.map +1 -1
- package/dist/const.js +17 -27
- package/dist/const.js.map +1 -1
- package/dist/examples/clientSse.d.ts +10 -1
- package/dist/examples/clientSse.d.ts.map +1 -1
- package/dist/examples/clientSse.js +7 -4
- package/dist/examples/clientSse.js.map +1 -1
- package/dist/examples/clientStdio.js +2 -2
- package/dist/examples/clientStdio.js.map +1 -1
- package/dist/examples/clientStdioChat.js +1 -1
- package/dist/index.d.ts +2 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -42
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts +4 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +21 -118
- package/dist/main.js.map +1 -1
- package/dist/mcp-server.d.ts +39 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +155 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/stdio.d.ts +15 -0
- package/dist/stdio.d.ts.map +1 -0
- package/dist/stdio.js +46 -0
- package/dist/stdio.js.map +1 -0
- package/dist/tools/actor.d.ts +37 -0
- package/dist/tools/actor.d.ts.map +1 -0
- package/dist/tools/actor.js +89 -0
- package/dist/tools/actor.js.map +1 -0
- package/dist/tools/build.d.ts +12 -0
- package/dist/tools/build.d.ts.map +1 -0
- package/dist/tools/build.js +120 -0
- package/dist/tools/build.js.map +1 -0
- package/dist/tools/helpers.d.ts +19 -0
- package/dist/tools/helpers.d.ts.map +1 -0
- package/dist/tools/helpers.js +62 -0
- package/dist/tools/helpers.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +8 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/mcp-apify-client.d.ts +6 -0
- package/dist/tools/mcp-apify-client.d.ts.map +1 -0
- package/dist/tools/mcp-apify-client.js +22 -0
- package/dist/tools/mcp-apify-client.js.map +1 -0
- package/dist/tools/store_collection.d.ts +21 -0
- package/dist/tools/store_collection.d.ts.map +1 -0
- package/dist/tools/store_collection.js +80 -0
- package/dist/tools/store_collection.js.map +1 -0
- package/dist/tools/utils.d.ts +77 -0
- package/dist/tools/utils.d.ts.map +1 -0
- package/dist/{actors.js → tools/utils.js} +112 -241
- package/dist/tools/utils.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +70 -9
- package/dist/types.d.ts.map +1 -1
- package/package.json +17 -14
- package/dist/actors.d.ts +0 -74
- package/dist/actors.d.ts.map +0 -1
- package/dist/actors.js.map +0 -1
- package/dist/input.d.ts.map +0 -1
- package/dist/input.js.map +0 -1
- package/dist/logger.d.ts +0 -3
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js +0 -4
- package/dist/logger.js.map +0 -1
- package/dist/server.d.ts +0 -43
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -178
- package/dist/server.js.map +0 -1
- package/dist/tools.d.ts +0 -46
- package/dist/tools.d.ts.map +0 -1
- package/dist/tools.js +0 -128
- package/dist/tools.js.map +0 -1
package/README.md
CHANGED
|
@@ -358,7 +358,7 @@ You can launch the MCP Inspector via [`npm`](https://docs.npmjs.com/downloading-
|
|
|
358
358
|
|
|
359
359
|
```bash
|
|
360
360
|
export APIFY_TOKEN=your-apify-token
|
|
361
|
-
npx @modelcontextprotocol/inspector node ./dist/
|
|
361
|
+
npx @modelcontextprotocol/inspector node ./dist/stdio.js
|
|
362
362
|
```
|
|
363
363
|
|
|
364
364
|
Upon launching, the Inspector will display a URL that you can access in your browser to begin debugging.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Constants for the Actor.
|
|
3
|
+
*/
|
|
4
|
+
export declare const HEADER_READINESS_PROBE = "x-apify-container-server-readiness-probe";
|
|
5
|
+
export declare const defaults: {
|
|
6
|
+
actors: string[];
|
|
7
|
+
enableActorAutoLoading: boolean;
|
|
8
|
+
maxMemoryMbytes: number;
|
|
9
|
+
};
|
|
10
|
+
export declare enum Routes {
|
|
11
|
+
ROOT = "/",
|
|
12
|
+
SSE = "/sse",
|
|
13
|
+
MESSAGE = "/message"
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=const.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../src/actor/const.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,sBAAsB,6CAA6C,CAAC;AAEjF,eAAO,MAAM,QAAQ;;;;CAQpB,CAAC;AAEF,oBAAY,MAAM;IACd,IAAI,MAAM;IACV,GAAG,SAAS;IACZ,OAAO,aAAa;CACvB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Constants for the Actor.
|
|
3
|
+
*/
|
|
4
|
+
export const HEADER_READINESS_PROBE = 'x-apify-container-server-readiness-probe';
|
|
5
|
+
export const defaults = {
|
|
6
|
+
actors: [
|
|
7
|
+
'apify/instagram-scraper',
|
|
8
|
+
'apify/rag-web-browser',
|
|
9
|
+
'lukaskrivka/google-maps-with-contact-details',
|
|
10
|
+
],
|
|
11
|
+
enableActorAutoLoading: false,
|
|
12
|
+
maxMemoryMbytes: 4096,
|
|
13
|
+
};
|
|
14
|
+
export var Routes;
|
|
15
|
+
(function (Routes) {
|
|
16
|
+
Routes["ROOT"] = "/";
|
|
17
|
+
Routes["SSE"] = "/sse";
|
|
18
|
+
Routes["MESSAGE"] = "/message";
|
|
19
|
+
})(Routes || (Routes = {}));
|
|
20
|
+
//# sourceMappingURL=const.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"const.js","sourceRoot":"","sources":["../../src/actor/const.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,0CAA0C,CAAC;AAEjF,MAAM,CAAC,MAAM,QAAQ,GAAG;IACpB,MAAM,EAAE;QACJ,yBAAyB;QACzB,uBAAuB;QACvB,8CAA8C;KACjD;IACD,sBAAsB,EAAE,KAAK;IAC7B,eAAe,EAAE,IAAI;CACxB,CAAC;AAEF,MAAM,CAAN,IAAY,MAIX;AAJD,WAAY,MAAM;IACd,oBAAU,CAAA;IACV,sBAAY,CAAA;IACZ,8BAAoB,CAAA;AACxB,CAAC,EAJW,MAAM,KAAN,MAAM,QAIjB"}
|
|
@@ -4,5 +4,5 @@ import type { Input } from './types.js';
|
|
|
4
4
|
* @param originalInput
|
|
5
5
|
* @returns input
|
|
6
6
|
*/
|
|
7
|
-
export declare function processInput(originalInput: Partial<Input>):
|
|
7
|
+
export declare function processInput(originalInput: Partial<Input>): Input;
|
|
8
8
|
//# sourceMappingURL=input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/actor/input.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAejE"}
|
|
@@ -3,12 +3,16 @@
|
|
|
3
3
|
* @param originalInput
|
|
4
4
|
* @returns input
|
|
5
5
|
*/
|
|
6
|
-
export
|
|
6
|
+
export function processInput(originalInput) {
|
|
7
7
|
const input = originalInput;
|
|
8
8
|
// actors can be a string or an array of strings
|
|
9
9
|
if (input.actors && typeof input.actors === 'string') {
|
|
10
10
|
input.actors = input.actors.split(',').map((format) => format.trim());
|
|
11
11
|
}
|
|
12
|
+
// Convert string boolean to actual boolean
|
|
13
|
+
if (input.enableActorAutoLoading && typeof input.enableActorAutoLoading === 'string') {
|
|
14
|
+
input.enableActorAutoLoading = input.enableActorAutoLoading === 'true';
|
|
15
|
+
}
|
|
12
16
|
if (!input.enableActorAutoLoading) {
|
|
13
17
|
input.enableActorAutoLoading = false;
|
|
14
18
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/actor/input.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,aAA6B;IACtD,MAAM,KAAK,GAAG,aAAsB,CAAC;IAErC,gDAAgD;IAChD,IAAI,KAAK,CAAC,MAAM,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACnD,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAa,CAAC;IAC9F,CAAC;IACD,2CAA2C;IAC3C,IAAI,KAAK,CAAC,sBAAsB,IAAI,OAAO,KAAK,CAAC,sBAAsB,KAAK,QAAQ,EAAE,CAAC;QACnF,KAAK,CAAC,sBAAsB,GAAG,KAAK,CAAC,sBAAsB,KAAK,MAAM,CAAC;IAC3E,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC;QAChC,KAAK,CAAC,sBAAsB,GAAG,KAAK,CAAC;IACzC,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/actor/server.ts"],"names":[],"mappings":"AAMA,OAAO,OAAO,MAAM,SAAS,CAAC;AAK9B,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGxD,wBAAgB,gBAAgB,CAC5B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,eAAe,GAC3B,OAAO,CAAC,OAAO,CA0EjB"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Express server implementation used for standby Actor mode.
|
|
3
|
+
*/
|
|
4
|
+
import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
|
|
5
|
+
import express from 'express';
|
|
6
|
+
import log from '@apify/log';
|
|
7
|
+
import { HEADER_READINESS_PROBE, Routes } from './const.js';
|
|
8
|
+
import { getActorRunData, processParamsGetTools } from './utils.js';
|
|
9
|
+
export function createExpressApp(host, mcpServer) {
|
|
10
|
+
const HELP_MESSAGE = `Connect to the server with GET request to ${host}/sse?token=YOUR-APIFY-TOKEN`
|
|
11
|
+
+ ` and then send POST requests to ${host}/message?token=YOUR-APIFY-TOKEN`;
|
|
12
|
+
const app = express();
|
|
13
|
+
let transport;
|
|
14
|
+
app.route(Routes.ROOT)
|
|
15
|
+
.get(async (req, res) => {
|
|
16
|
+
if (req.headers && req.get(HEADER_READINESS_PROBE) !== undefined) {
|
|
17
|
+
log.debug('Received readiness probe');
|
|
18
|
+
res.status(200).json({ message: 'Server is ready' }).end();
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
log.info(`Received GET message at: ${Routes.ROOT}`);
|
|
23
|
+
const tools = await processParamsGetTools(req.url);
|
|
24
|
+
if (tools) {
|
|
25
|
+
mcpServer.updateTools(tools);
|
|
26
|
+
}
|
|
27
|
+
res.setHeader('Content-Type', 'text/event-stream');
|
|
28
|
+
res.setHeader('Cache-Control', 'no-cache');
|
|
29
|
+
res.setHeader('Connection', 'keep-alive');
|
|
30
|
+
res.status(200).json({ message: `Actor is using Model Context Protocol. ${HELP_MESSAGE}`, data: getActorRunData() }).end();
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
log.error(`Error in GET ${Routes.ROOT} ${error}`);
|
|
34
|
+
res.status(500).json({ message: 'Internal Server Error' }).end();
|
|
35
|
+
}
|
|
36
|
+
})
|
|
37
|
+
.head((_req, res) => {
|
|
38
|
+
res.status(200).end();
|
|
39
|
+
});
|
|
40
|
+
app.route(Routes.SSE)
|
|
41
|
+
.get(async (req, res) => {
|
|
42
|
+
try {
|
|
43
|
+
log.info(`Received GET message at: ${Routes.SSE}`);
|
|
44
|
+
const tools = await processParamsGetTools(req.url);
|
|
45
|
+
if (tools) {
|
|
46
|
+
mcpServer.updateTools(tools);
|
|
47
|
+
}
|
|
48
|
+
transport = new SSEServerTransport(Routes.MESSAGE, res);
|
|
49
|
+
await mcpServer.connect(transport);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
log.error(`Error in GET ${Routes.SSE}: ${error}`);
|
|
53
|
+
res.status(500).json({ message: 'Internal Server Error' }).end();
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
app.route(Routes.MESSAGE)
|
|
57
|
+
.post(async (req, res) => {
|
|
58
|
+
try {
|
|
59
|
+
log.info(`Received POST message at: ${Routes.MESSAGE}`);
|
|
60
|
+
if (transport) {
|
|
61
|
+
await transport.handlePostMessage(req, res);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
res.status(400).json({
|
|
65
|
+
message: 'Server is not connected to the client. '
|
|
66
|
+
+ 'Connect to the server with GET request to /sse endpoint',
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
log.error(`Error in POST ${Routes.MESSAGE}: ${error}`);
|
|
72
|
+
res.status(500).json({ message: 'Internal Server Error' }).end();
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
// Catch-all for undefined routes
|
|
76
|
+
app.use((req, res) => {
|
|
77
|
+
res.status(404).json({ message: `There is nothing at route ${req.method} ${req.originalUrl}. ${HELP_MESSAGE}` }).end();
|
|
78
|
+
});
|
|
79
|
+
return app;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/actor/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export type Input = {
|
|
2
|
+
actors: string[] | string;
|
|
3
|
+
enableActorAutoLoading?: boolean;
|
|
4
|
+
maxActorMemoryBytes?: number;
|
|
5
|
+
debugActor?: string;
|
|
6
|
+
debugActorInput?: unknown;
|
|
7
|
+
};
|
|
8
|
+
export interface ActorRunData {
|
|
9
|
+
id?: string;
|
|
10
|
+
actId?: string;
|
|
11
|
+
userId?: string;
|
|
12
|
+
startedAt?: string;
|
|
13
|
+
finishedAt: null;
|
|
14
|
+
status: 'RUNNING';
|
|
15
|
+
meta: {
|
|
16
|
+
origin?: string;
|
|
17
|
+
};
|
|
18
|
+
options: {
|
|
19
|
+
build?: string;
|
|
20
|
+
memoryMbytes?: string;
|
|
21
|
+
};
|
|
22
|
+
buildId?: string;
|
|
23
|
+
defaultKeyValueStoreId?: string;
|
|
24
|
+
defaultDatasetId?: string;
|
|
25
|
+
defaultRequestQueueId?: string;
|
|
26
|
+
buildNumber?: string;
|
|
27
|
+
containerUrl?: string;
|
|
28
|
+
standbyUrl?: string;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/actor/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG;IAChB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAC1B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,MAAM,WAAW,YAAY;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,IAAI,CAAC;IACjB,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE;QACF,MAAM,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,OAAO,EAAE;QACL,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/actor/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ActorRunData, Input } from './types.js';
|
|
2
|
+
import type { ToolWrap } from '../types.js';
|
|
3
|
+
export declare function parseInputParamsFromUrl(url: string): Input;
|
|
4
|
+
/**
|
|
5
|
+
* Process input parameters and get tools
|
|
6
|
+
* If URL contains query parameter `actors`, return tools from Actors otherwise return null.
|
|
7
|
+
* @param url
|
|
8
|
+
*/
|
|
9
|
+
export declare function processParamsGetTools(url: string): Promise<ToolWrap[]>;
|
|
10
|
+
export declare function getActorRunData(): ActorRunData | null;
|
|
11
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/actor/utils.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAI1D;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,uBAUtD;AAED,wBAAgB,eAAe,IAAI,YAAY,GAAG,IAAI,CAuBrD"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { parse } from 'node:querystring';
|
|
2
|
+
import { Actor } from 'apify';
|
|
3
|
+
import { processInput } from './input.js';
|
|
4
|
+
import { addTool, getActorsAsTools, removeTool } from '../tools/index.js';
|
|
5
|
+
export function parseInputParamsFromUrl(url) {
|
|
6
|
+
const query = url.split('?')[1] || '';
|
|
7
|
+
const params = parse(query);
|
|
8
|
+
return processInput(params);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Process input parameters and get tools
|
|
12
|
+
* If URL contains query parameter `actors`, return tools from Actors otherwise return null.
|
|
13
|
+
* @param url
|
|
14
|
+
*/
|
|
15
|
+
export async function processParamsGetTools(url) {
|
|
16
|
+
const input = parseInputParamsFromUrl(url);
|
|
17
|
+
let tools = [];
|
|
18
|
+
if (input.actors) {
|
|
19
|
+
tools = await getActorsAsTools(input.actors);
|
|
20
|
+
}
|
|
21
|
+
if (input.enableActorAutoLoading) {
|
|
22
|
+
tools.push(addTool, removeTool);
|
|
23
|
+
}
|
|
24
|
+
return tools;
|
|
25
|
+
}
|
|
26
|
+
export function getActorRunData() {
|
|
27
|
+
return Actor.isAtHome() ? {
|
|
28
|
+
id: process.env.ACTOR_RUN_ID,
|
|
29
|
+
actId: process.env.ACTOR_ID,
|
|
30
|
+
userId: process.env.APIFY_USER_ID,
|
|
31
|
+
startedAt: process.env.ACTOR_STARTED_AT,
|
|
32
|
+
finishedAt: null,
|
|
33
|
+
status: 'RUNNING',
|
|
34
|
+
meta: {
|
|
35
|
+
origin: process.env.APIFY_META_ORIGIN,
|
|
36
|
+
},
|
|
37
|
+
options: {
|
|
38
|
+
build: process.env.ACTOR_BUILD_NUMBER,
|
|
39
|
+
memoryMbytes: process.env.ACTOR_MEMORY_MBYTES,
|
|
40
|
+
},
|
|
41
|
+
buildId: process.env.ACTOR_BUILD_ID,
|
|
42
|
+
defaultKeyValueStoreId: process.env.ACTOR_DEFAULT_KEY_VALUE_STORE_ID,
|
|
43
|
+
defaultDatasetId: process.env.ACTOR_DEFAULT_DATASET_ID,
|
|
44
|
+
defaultRequestQueueId: process.env.ACTOR_DEFAULT_REQUEST_QUEUE_ID,
|
|
45
|
+
buildNumber: process.env.ACTOR_BUILD_NUMBER,
|
|
46
|
+
containerUrl: process.env.ACTOR_WEB_SERVER_URL,
|
|
47
|
+
standbyUrl: process.env.ACTOR_STANDBY_URL,
|
|
48
|
+
} : null;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/actor/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG1E,MAAM,UAAU,uBAAuB,CAAC,GAAW;IAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAqB,CAAC;IAChD,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,GAAW;IACnD,MAAM,KAAK,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,KAAK,GAAe,EAAE,CAAC;IAC3B,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACf,KAAK,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,MAAkB,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,KAAK,CAAC,sBAAsB,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,eAAe;IAC3B,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACtB,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QAC5B,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;QAC3B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;QACjC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;QACvC,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,SAAS;QACjB,IAAI,EAAE;YACF,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;SACxC;QACD,OAAO,EAAE;YACL,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;YACrC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB;SAChD;QACD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;QACnC,sBAAsB,EAAE,OAAO,CAAC,GAAG,CAAC,gCAAgC;QACpE,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB;QACtD,qBAAqB,EAAE,OAAO,CAAC,GAAG,CAAC,8BAA8B;QACjE,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAC3C,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;QAC9C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;KAC5C,CAAC,CAAC,CAAC,IAAI,CAAC;AACb,CAAC"}
|
package/dist/const.d.ts
CHANGED
|
@@ -1,27 +1,17 @@
|
|
|
1
|
-
export declare const SERVER_NAME = "apify-mcp-server";
|
|
2
|
-
export declare const SERVER_VERSION = "0.1.0";
|
|
3
|
-
export declare const HEADER_READINESS_PROBE = "x-apify-container-server-readiness-probe";
|
|
4
|
-
export declare const MAX_DESCRIPTION_LENGTH = 500;
|
|
5
|
-
export declare const USER_AGENT_ORIGIN = "Origin/mcp-server";
|
|
6
|
-
export declare const defaults: {
|
|
7
|
-
actors: string[];
|
|
8
|
-
enableActorAutoLoading: boolean;
|
|
9
|
-
maxMemoryMbytes: number;
|
|
10
|
-
};
|
|
11
1
|
export declare const ACTOR_README_MAX_LENGTH = 5000;
|
|
12
2
|
export declare const ACTOR_ENUM_MAX_LENGTH = 200;
|
|
3
|
+
export declare const ACTOR_MAX_DESCRIPTION_LENGTH = 500;
|
|
13
4
|
export declare const ACTOR_OUTPUT_MAX_CHARS_PER_ITEM = 5000;
|
|
14
5
|
export declare const ACTOR_OUTPUT_TRUNCATED_MESSAGE: string;
|
|
15
6
|
export declare const ACTOR_ADDITIONAL_INSTRUCTIONS: string;
|
|
16
|
-
export declare
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
MESSAGE = "/message"
|
|
7
|
+
export declare const ACTOR_MAX_MEMORY_MBYTES = 4096;
|
|
8
|
+
export declare const SERVER_NAME = "apify-mcp-server";
|
|
9
|
+
export declare const SERVER_VERSION = "0.1.0";
|
|
10
|
+
export declare const USER_AGENT_ORIGIN = "Origin/mcp-server";
|
|
11
|
+
export declare enum HelperTools {
|
|
12
|
+
SEARCH = "search",
|
|
13
|
+
ADD_TOOL = "add-tool",
|
|
14
|
+
REMOVE_TOOL = "remove-tool",
|
|
15
|
+
GET_TOOL_DETAILS = "get-tool-details"
|
|
26
16
|
}
|
|
27
17
|
//# sourceMappingURL=const.d.ts.map
|
package/dist/const.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../src/const.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../src/const.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,uBAAuB,OAAQ,CAAC;AAC7C,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAGhD,eAAO,MAAM,+BAA+B,OAAQ,CAAC;AACrD,eAAO,MAAM,8BAA8B,QACQ,CAAC;AAEpD,eAAO,MAAM,6BAA6B,QACuB,CAAC;AAGlE,eAAO,MAAM,uBAAuB,OAAQ,CAAC;AAG7C,eAAO,MAAM,WAAW,qBAAqB,CAAC;AAC9C,eAAO,MAAM,cAAc,UAAU,CAAC;AAGtC,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;AAErD,oBAAY,WAAW;IACnB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,WAAW,gBAAgB;IAC3B,gBAAgB,qBAAqB;CACxC"}
|
package/dist/const.js
CHANGED
|
@@ -1,35 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
export const SERVER_VERSION = '0.1.0';
|
|
3
|
-
export const HEADER_READINESS_PROBE = 'x-apify-container-server-readiness-probe';
|
|
4
|
-
export const MAX_DESCRIPTION_LENGTH = 500;
|
|
5
|
-
export const USER_AGENT_ORIGIN = 'Origin/mcp-server';
|
|
6
|
-
export const defaults = {
|
|
7
|
-
actors: [
|
|
8
|
-
'apify/instagram-scraper',
|
|
9
|
-
'apify/rag-web-browser',
|
|
10
|
-
'lukaskrivka/google-maps-with-contact-details',
|
|
11
|
-
],
|
|
12
|
-
enableActorAutoLoading: false,
|
|
13
|
-
maxMemoryMbytes: 4096,
|
|
14
|
-
};
|
|
1
|
+
// Actor input const
|
|
15
2
|
export const ACTOR_README_MAX_LENGTH = 5_000;
|
|
16
3
|
export const ACTOR_ENUM_MAX_LENGTH = 200;
|
|
4
|
+
export const ACTOR_MAX_DESCRIPTION_LENGTH = 500;
|
|
5
|
+
// Actor output const
|
|
17
6
|
export const ACTOR_OUTPUT_MAX_CHARS_PER_ITEM = 5_000;
|
|
18
7
|
export const ACTOR_OUTPUT_TRUNCATED_MESSAGE = `Output was truncated because it will not fit into context.`
|
|
19
8
|
+ `There is no reason to call this tool again!`;
|
|
20
9
|
export const ACTOR_ADDITIONAL_INSTRUCTIONS = 'Never call/execute tool/Actor unless confirmed by the user. '
|
|
21
10
|
+ 'Always limit the number of results in the call arguments.';
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
export var
|
|
30
|
-
(function (
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
11
|
+
// Actor run const
|
|
12
|
+
export const ACTOR_MAX_MEMORY_MBYTES = 4_096; // If the Actor requires 8GB of memory, free users can't run actors-mcp-server and requested Actor
|
|
13
|
+
// MCP Server
|
|
14
|
+
export const SERVER_NAME = 'apify-mcp-server';
|
|
15
|
+
export const SERVER_VERSION = '0.1.0';
|
|
16
|
+
// User agent headers
|
|
17
|
+
export const USER_AGENT_ORIGIN = 'Origin/mcp-server';
|
|
18
|
+
export var HelperTools;
|
|
19
|
+
(function (HelperTools) {
|
|
20
|
+
HelperTools["SEARCH"] = "search";
|
|
21
|
+
HelperTools["ADD_TOOL"] = "add-tool";
|
|
22
|
+
HelperTools["REMOVE_TOOL"] = "remove-tool";
|
|
23
|
+
HelperTools["GET_TOOL_DETAILS"] = "get-tool-details";
|
|
24
|
+
})(HelperTools || (HelperTools = {}));
|
|
35
25
|
//# sourceMappingURL=const.js.map
|
package/dist/const.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"const.js","sourceRoot":"","sources":["../src/const.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"const.js","sourceRoot":"","sources":["../src/const.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAC7C,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AACzC,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAC;AAEhD,qBAAqB;AACrB,MAAM,CAAC,MAAM,+BAA+B,GAAG,KAAK,CAAC;AACrD,MAAM,CAAC,MAAM,8BAA8B,GAAG,4DAA4D;MACpG,6CAA6C,CAAC;AAEpD,MAAM,CAAC,MAAM,6BAA6B,GAAG,8DAA8D;MACrG,2DAA2D,CAAC;AAElE,kBAAkB;AAClB,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC,CAAC,kGAAkG;AAEhJ,aAAa;AACb,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,CAAC;AAC9C,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AAEtC,qBAAqB;AACrB,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAErD,MAAM,CAAN,IAAY,WAKX;AALD,WAAY,WAAW;IACnB,gCAAiB,CAAA;IACjB,oCAAqB,CAAA;IACrB,0CAA2B,CAAA;IAC3B,oDAAqC,CAAA;AACzC,CAAC,EALW,WAAW,KAAX,WAAW,QAKtB"}
|
|
@@ -4,5 +4,14 @@
|
|
|
4
4
|
*
|
|
5
5
|
* It requires the `APIFY_TOKEN` in the `.env` file.
|
|
6
6
|
*/
|
|
7
|
-
|
|
7
|
+
import { EventSource, EventSourceInit } from 'eventsource';
|
|
8
|
+
declare global {
|
|
9
|
+
var EventSource: {
|
|
10
|
+
new (url: string, eventSourceInitDict?: EventSourceInit): EventSource;
|
|
11
|
+
prototype: EventSource;
|
|
12
|
+
CONNECTING: 0;
|
|
13
|
+
OPEN: 1;
|
|
14
|
+
CLOSED: 2;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
8
17
|
//# sourceMappingURL=clientSse.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clientSse.d.ts","sourceRoot":"","sources":["../../src/examples/clientSse.ts"],"names":[],"mappings":"AACA;;;;;GAKG"}
|
|
1
|
+
{"version":3,"file":"clientSse.d.ts","sourceRoot":"","sources":["../../src/examples/clientSse.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AASH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAsB3D,OAAO,CAAC,MAAM,CAAC;IACX,IAAI,WAAW,EAAE;QACb,KAAI,GAAG,EAAE,MAAM,EAAE,mBAAmB,CAAC,EAAE,eAAe,GAAG,WAAW,CAAC;QACrE,SAAS,EAAE,WAAW,CAAC;QACvB,UAAU,EAAE,CAAC,CAAC;QACd,IAAI,EAAE,CAAC,CAAC;QACR,MAAM,EAAE,CAAC,CAAC;KACb,CAAC;CACL"}
|
|
@@ -12,15 +12,16 @@ import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
|
|
|
12
12
|
import { CallToolResultSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
13
13
|
import dotenv from 'dotenv';
|
|
14
14
|
import { EventSource } from 'eventsource';
|
|
15
|
-
import { actorNameToToolName } from '../
|
|
15
|
+
import { actorNameToToolName } from '../tools/utils.js';
|
|
16
16
|
const REQUEST_TIMEOUT = 120_000; // 2 minutes
|
|
17
17
|
const filename = fileURLToPath(import.meta.url);
|
|
18
18
|
const dirname = path.dirname(filename);
|
|
19
19
|
dotenv.config({ path: path.resolve(dirname, '../../.env') });
|
|
20
|
-
const SERVER_URL = 'https://actors-mcp-server.apify.actor/sse';
|
|
20
|
+
const SERVER_URL = process.env.MCP_SERVER_URL_BASE || 'https://actors-mcp-server.apify.actor/sse';
|
|
21
21
|
// We need to change forward slash / to underscore -- in the tool name as Anthropic does not allow forward slashes in the tool name
|
|
22
22
|
const SELECTED_TOOL = actorNameToToolName('apify/rag-web-browser');
|
|
23
|
-
const QUERY = 'web browser for Anthropic';
|
|
23
|
+
// const QUERY = 'web browser for Anthropic';
|
|
24
|
+
const QUERY = 'apify';
|
|
24
25
|
if (!process.env.APIFY_TOKEN) {
|
|
25
26
|
console.error('APIFY_TOKEN is required but not set in the environment variables.');
|
|
26
27
|
process.exit(1);
|
|
@@ -71,12 +72,14 @@ async function main() {
|
|
|
71
72
|
catch (error) {
|
|
72
73
|
if (error instanceof Error) {
|
|
73
74
|
console.error('Error:', error.message);
|
|
74
|
-
console.error(error.stack);
|
|
75
75
|
}
|
|
76
76
|
else {
|
|
77
77
|
console.error('An unknown error occurred:', error);
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
|
+
finally {
|
|
81
|
+
await client.close();
|
|
82
|
+
}
|
|
80
83
|
}
|
|
81
84
|
await main();
|
|
82
85
|
//# sourceMappingURL=clientSse.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clientSse.js","sourceRoot":"","sources":["../../src/examples/clientSse.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"clientSse.js","sourceRoot":"","sources":["../../src/examples/clientSse.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAmB,MAAM,aAAa,CAAC;AAE3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,eAAe,GAAG,OAAO,CAAC,CAAC,YAAY;AAC7C,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEvC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;AAE7D,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,2CAA2C,CAAC;AAClG,mIAAmI;AACnI,MAAM,aAAa,GAAG,mBAAmB,CAAC,uBAAuB,CAAC,CAAC;AACnE,6CAA6C;AAC7C,MAAM,KAAK,GAAG,OAAO,CAAC;AAEtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;IAC3B,OAAO,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAaD,IAAI,OAAO,UAAU,CAAC,WAAW,KAAK,WAAW,EAAE,CAAC;IAChD,UAAU,CAAC,WAAW,GAAG,WAAW,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,IAAI;IACf,MAAM,SAAS,GAAG,IAAI,kBAAkB,CACpC,IAAI,GAAG,CAAC,UAAU,CAAC,EACnB;QACI,WAAW,EAAE;YACT,OAAO,EAAE;gBACL,aAAa,EAAE,UAAU,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE;aACrD;SACJ;QACD,eAAe,EAAE;YACb,6EAA6E;YAC7E,sEAAsE;YACtE,2FAA2F;YAC3F,KAAK,CAAC,KAAK,CAAC,KAA6B,EAAE,IAAkB;gBACzD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;gBACjD,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;gBAClE,OAAO,KAAK,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YAC9C,CAAC;YACL,8DAA8D;SACtD,EAAE,yDAAyD;KACtE,CACJ,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,MAAM,CACrB,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,EAC5C,EAAE,YAAY,EAAE,EAAE,EAAE,CACvB,CAAC;IAEF,IAAI,CAAC;QACD,4BAA4B;QAC5B,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEhC,uBAAuB;QACvB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QAEvC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAClC,OAAO;QACX,CAAC;QAED,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;QAC7E,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,uBAAuB,YAAY,6BAA6B,CAAC,CAAC;YAChF,OAAO;QACX,CAAC;QAED,cAAc;QACd,OAAO,CAAC,GAAG,CAAC,qBAAqB,aAAa,EAAE,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAChC,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EACpD,oBAAoB,EACpB,EAAE,OAAO,EAAE,eAAe,EAAE,CAC/B,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACtB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC;IACL,CAAC;YAAS,CAAC;QACP,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;AACL,CAAC;AAED,MAAM,IAAI,EAAE,CAAC"}
|
|
@@ -12,12 +12,12 @@ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
|
12
12
|
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
|
|
13
13
|
import { CallToolResultSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
14
14
|
import dotenv from 'dotenv';
|
|
15
|
-
import { actorNameToToolName } from '../
|
|
15
|
+
import { actorNameToToolName } from '../tools/utils.js';
|
|
16
16
|
// Resolve dirname equivalent in ES module
|
|
17
17
|
const filename = fileURLToPath(import.meta.url);
|
|
18
18
|
const dirname = path.dirname(filename);
|
|
19
19
|
dotenv.config({ path: path.resolve(dirname, '../../.env') });
|
|
20
|
-
const SERVER_PATH = path.resolve(dirname, '../../dist/
|
|
20
|
+
const SERVER_PATH = path.resolve(dirname, '../../dist/stdio.js');
|
|
21
21
|
const NODE_PATH = execSync(process.platform === 'win32' ? 'where node' : 'which node').toString().trim();
|
|
22
22
|
const TOOLS = 'apify/rag-web-browser,lukaskrivka/google-maps-with-contact-details';
|
|
23
23
|
const SELECTED_TOOL = actorNameToToolName('apify/rag-web-browser');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clientStdio.js","sourceRoot":"","sources":["../../src/examples/clientStdio.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"clientStdio.js","sourceRoot":"","sources":["../../src/examples/clientStdio.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,0CAA0C;AAC1C,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEvC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;AAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;AACjE,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;AAEzG,MAAM,KAAK,GAAG,oEAAoE,CAAC;AACnF,MAAM,aAAa,GAAG,mBAAmB,CAAC,uBAAuB,CAAC,CAAC;AAEnE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;IAC3B,OAAO,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,gDAAgD;AAChD,MAAM,SAAS,GAAG,IAAI,oBAAoB,CAAC;IACvC,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,KAAK,CAAC;IACtC,GAAG,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,EAAE;CACtD,CAAC,CAAC;AAEH,+BAA+B;AAC/B,MAAM,MAAM,GAAG,IAAI,MAAM,CACrB,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,EAC5C,EAAE,YAAY,EAAE,EAAE,EAAE,CACvB,CAAC;AAEF,0CAA0C;AAC1C,KAAK,UAAU,GAAG;IACd,IAAI,CAAC;QACD,4BAA4B;QAC5B,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEhC,uBAAuB;QACvB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QAEvC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAClC,OAAO;QACX,CAAC;QAED,yCAAyC;QACzC,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;QAE7E,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,uBAAuB,YAAY,6BAA6B,CAAC,CAAC;YAChF,OAAO;QACX,CAAC;QAED,cAAc;QACd,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAChC,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,2BAA2B,EAAE,EAAE,EAC1E,oBAAoB,CACvB,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;AACL,CAAC;AAED,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAClB,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;IACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
|
|
@@ -34,7 +34,7 @@ const MAX_TOKENS = 2048; // Maximum tokens for Claude response
|
|
|
34
34
|
// const CLAUDE_MODEL = 'claude-3-5-haiku-20241022'; // a fastest model
|
|
35
35
|
const CLAUDE_MODEL = 'claude-3-haiku-20240307'; // a fastest and most compact model for near-instant responsiveness
|
|
36
36
|
const DEBUG = true;
|
|
37
|
-
const DEBUG_SERVER_PATH = path.resolve(dirname, '../../dist/
|
|
37
|
+
const DEBUG_SERVER_PATH = path.resolve(dirname, '../../dist/stdio.js');
|
|
38
38
|
const NODE_PATH = execSync('which node').toString().trim();
|
|
39
39
|
dotenv.config(); // Load environment variables from .env
|
|
40
40
|
class MCPClient {
|
package/dist/index.d.ts
CHANGED
|
@@ -1,15 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* This script initializes and starts the Apify MCP server using the Stdio transport.
|
|
4
|
-
*
|
|
5
|
-
* Usage:
|
|
6
|
-
* node <script_name> --actors=<actor1,actor2,...>
|
|
7
|
-
*
|
|
8
|
-
* Command-line arguments:
|
|
9
|
-
* --actors - A comma-separated list of actor full names to add to the server.
|
|
10
|
-
*
|
|
11
|
-
* Example:
|
|
12
|
-
* node index.js --actors=apify/google-search-scraper,apify/instagram-scraper
|
|
13
|
-
*/
|
|
14
|
-
export {};
|
|
1
|
+
import { ActorsMcpServer } from './mcp-server.js';
|
|
2
|
+
export default ActorsMcpServer;
|
|
15
3
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,eAAe,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,43 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
*
|
|
8
|
-
* Command-line arguments:
|
|
9
|
-
* --actors - A comma-separated list of actor full names to add to the server.
|
|
10
|
-
*
|
|
11
|
-
* Example:
|
|
12
|
-
* node index.js --actors=apify/google-search-scraper,apify/instagram-scraper
|
|
13
|
-
*/
|
|
14
|
-
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
15
|
-
import minimist from 'minimist';
|
|
16
|
-
import { log } from './logger.js';
|
|
17
|
-
import { ApifyMcpServer } from './server.js';
|
|
18
|
-
import { getActorDiscoveryTools, getActorAutoLoadingTools } from './tools.js';
|
|
19
|
-
log.setLevel(log.LEVELS.ERROR);
|
|
20
|
-
const argv = minimist(process.argv.slice(2));
|
|
21
|
-
const argActors = argv.actors?.split(',').map((actor) => actor.trim()) || [];
|
|
22
|
-
const argEnableActorAutoLoading = argv.enableActorAutoLoading || false;
|
|
23
|
-
if (!process.env.APIFY_TOKEN) {
|
|
24
|
-
log.error('APIFY_TOKEN is required but not set in the environment variables.');
|
|
25
|
-
process.exit(1);
|
|
26
|
-
}
|
|
27
|
-
async function main() {
|
|
28
|
-
const server = new ApifyMcpServer();
|
|
29
|
-
await (argActors.length !== 0
|
|
30
|
-
? server.addToolsFromActors(argActors)
|
|
31
|
-
: server.addToolsFromDefaultActors());
|
|
32
|
-
server.updateTools(getActorDiscoveryTools());
|
|
33
|
-
if (argEnableActorAutoLoading) {
|
|
34
|
-
server.updateTools(getActorAutoLoadingTools());
|
|
35
|
-
}
|
|
36
|
-
const transport = new StdioServerTransport();
|
|
37
|
-
await server.connect(transport);
|
|
38
|
-
}
|
|
39
|
-
main().catch((error) => {
|
|
40
|
-
console.error('Server error:', error); // eslint-disable-line no-console
|
|
41
|
-
process.exit(1);
|
|
42
|
-
});
|
|
1
|
+
/*
|
|
2
|
+
This file provides essential functions and tools for MCP servers, serving as a library.
|
|
3
|
+
The ActorsMcpServer should be the only class exported from the package
|
|
4
|
+
*/
|
|
5
|
+
import { ActorsMcpServer } from './mcp-server.js';
|
|
6
|
+
export default ActorsMcpServer;
|
|
43
7
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;EAGE;AAEF,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,eAAe,eAAe,CAAC"}
|