@apify/actors-mcp-server 0.2.8 → 0.2.10-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/dist/actor/server.d.ts +5 -2
- package/dist/actor/server.d.ts.map +1 -1
- package/dist/actor/server.js +57 -12
- package/dist/actor/server.js.map +1 -1
- package/dist/const.d.ts +5 -3
- package/dist/const.d.ts.map +1 -1
- package/dist/const.js +5 -9
- package/dist/const.js.map +1 -1
- package/dist/main.js +19 -13
- package/dist/main.js.map +1 -1
- package/dist/mcp/actors.d.ts +13 -13
- package/dist/mcp/actors.d.ts.map +1 -1
- package/dist/mcp/actors.js +33 -26
- package/dist/mcp/actors.js.map +1 -1
- package/dist/mcp/client.d.ts +2 -1
- package/dist/mcp/client.d.ts.map +1 -1
- package/dist/mcp/client.js +37 -1
- package/dist/mcp/client.js.map +1 -1
- package/dist/mcp/server.d.ts +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +27 -17
- package/dist/mcp/server.js.map +1 -1
- package/dist/state.d.ts +4 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +4 -0
- package/dist/state.js.map +1 -0
- package/dist/tools/actor.d.ts +6 -8
- package/dist/tools/actor.d.ts.map +1 -1
- package/dist/tools/actor.js +188 -83
- package/dist/tools/actor.js.map +1 -1
- package/dist/tools/build.d.ts.map +1 -1
- package/dist/tools/build.js +2 -0
- package/dist/tools/build.js.map +1 -1
- package/dist/tools/get-actor-details.d.ts +3 -0
- package/dist/tools/get-actor-details.d.ts.map +1 -0
- package/dist/tools/get-actor-details.js +74 -0
- package/dist/tools/get-actor-details.js.map +1 -0
- package/dist/tools/helpers.d.ts +3 -3
- package/dist/tools/helpers.d.ts.map +1 -1
- package/dist/tools/helpers.js +27 -55
- package/dist/tools/helpers.js.map +1 -1
- package/dist/tools/index.d.ts +2 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +22 -24
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/run_collection.js +1 -1
- package/dist/tools/store_collection.d.ts +22 -2
- package/dist/tools/store_collection.d.ts.map +1 -1
- package/dist/tools/store_collection.js +47 -43
- package/dist/tools/store_collection.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +65 -21
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/actor.d.ts +7 -0
- package/dist/utils/actor.d.ts.map +1 -0
- package/dist/utils/actor.js +24 -0
- package/dist/utils/actor.js.map +1 -0
- package/dist/utils/ajv.d.ts +3 -0
- package/dist/utils/ajv.d.ts.map +1 -0
- package/dist/utils/ajv.js +3 -0
- package/dist/utils/ajv.js.map +1 -0
- package/dist/utils/generic.d.ts +7 -0
- package/dist/utils/generic.d.ts.map +1 -0
- package/dist/utils/generic.js +27 -0
- package/dist/utils/generic.js.map +1 -0
- package/dist/utils/pricing-info.d.ts +13 -0
- package/dist/utils/pricing-info.d.ts.map +1 -0
- package/dist/utils/pricing-info.js +93 -0
- package/dist/utils/pricing-info.js.map +1 -0
- package/dist/utils/ttl-lru.d.ts +35 -0
- package/dist/utils/ttl-lru.d.ts.map +1 -0
- package/dist/utils/ttl-lru.js +69 -0
- package/dist/utils/ttl-lru.js.map +1 -0
- package/package.json +4 -4
package/dist/actor/server.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
export declare function createExpressApp(host: string, mcpServerOptions: {
|
|
3
|
+
enableAddingActors?: boolean;
|
|
4
|
+
enableDefaultActors?: boolean;
|
|
5
|
+
actors?: string[];
|
|
6
|
+
}): express.Express;
|
|
4
7
|
//# sourceMappingURL=server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/actor/server.ts"],"names":[],"mappings":"AASA,OAAO,OAAO,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/actor/server.ts"],"names":[],"mappings":"AASA,OAAO,OAAO,MAAM,SAAS,CAAC;AA0B9B,wBAAgB,gBAAgB,CAC5B,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,GACF,OAAO,CAAC,OAAO,CA8LjB"}
|
package/dist/actor/server.js
CHANGED
|
@@ -6,7 +6,9 @@ import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
|
|
|
6
6
|
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
7
7
|
import express from 'express';
|
|
8
8
|
import log from '@apify/log';
|
|
9
|
-
import {
|
|
9
|
+
import { ActorsMcpServer } from '../mcp/server.js';
|
|
10
|
+
import { parseInputParamsFromUrl } from '../mcp/utils.js';
|
|
11
|
+
import { getActorsAsTools } from '../tools/actor.js';
|
|
10
12
|
import { getHelpMessage, HEADER_READINESS_PROBE, Routes } from './const.js';
|
|
11
13
|
import { getActorRunData } from './utils.js';
|
|
12
14
|
/**
|
|
@@ -24,9 +26,10 @@ async function loadToolsAndActors(mcpServer, url, apifyToken) {
|
|
|
24
26
|
await mcpServer.loadDefaultActors(apifyToken);
|
|
25
27
|
}
|
|
26
28
|
}
|
|
27
|
-
export function createExpressApp(host,
|
|
29
|
+
export function createExpressApp(host, mcpServerOptions) {
|
|
28
30
|
const app = express();
|
|
29
|
-
|
|
31
|
+
const mcpServers = {};
|
|
32
|
+
const transportsSSE = {};
|
|
30
33
|
const transports = {};
|
|
31
34
|
function respondWithError(res, error, logMessage, statusCode = 500) {
|
|
32
35
|
log.error(`${logMessage}: ${error}`);
|
|
@@ -49,11 +52,6 @@ export function createExpressApp(host, mcpServer) {
|
|
|
49
52
|
}
|
|
50
53
|
try {
|
|
51
54
|
log.info(`Received GET message at: ${Routes.ROOT}`);
|
|
52
|
-
// TODO: I think we should remove this logic, root should return only help message
|
|
53
|
-
const tools = await processParamsGetTools(req.url, process.env.APIFY_TOKEN);
|
|
54
|
-
if (tools) {
|
|
55
|
-
mcpServer.upsertTools(tools);
|
|
56
|
-
}
|
|
57
55
|
res.setHeader('Content-Type', 'text/event-stream');
|
|
58
56
|
res.setHeader('Cache-Control', 'no-cache');
|
|
59
57
|
res.setHeader('Connection', 'keep-alive');
|
|
@@ -69,9 +67,24 @@ export function createExpressApp(host, mcpServer) {
|
|
|
69
67
|
app.get(Routes.SSE, async (req, res) => {
|
|
70
68
|
try {
|
|
71
69
|
log.info(`Received GET message at: ${Routes.SSE}`);
|
|
70
|
+
const mcpServer = new ActorsMcpServer(mcpServerOptions, false);
|
|
71
|
+
// Load tools from Actor input for backwards compatibility
|
|
72
|
+
if (mcpServerOptions.actors && mcpServerOptions.actors.length > 0) {
|
|
73
|
+
const tools = await getActorsAsTools(mcpServerOptions.actors, process.env.APIFY_TOKEN);
|
|
74
|
+
mcpServer.upsertTools(tools);
|
|
75
|
+
}
|
|
72
76
|
await loadToolsAndActors(mcpServer, req.url, process.env.APIFY_TOKEN);
|
|
73
|
-
|
|
74
|
-
|
|
77
|
+
const transport = new SSEServerTransport(Routes.MESSAGE, res);
|
|
78
|
+
transportsSSE[transport.sessionId] = transport;
|
|
79
|
+
mcpServers[transport.sessionId] = mcpServer;
|
|
80
|
+
await mcpServer.connect(transport);
|
|
81
|
+
res.on('close', () => {
|
|
82
|
+
log.info('Connection closed, cleaning up', {
|
|
83
|
+
sessionId: transport.sessionId,
|
|
84
|
+
});
|
|
85
|
+
delete transportsSSE[transport.sessionId];
|
|
86
|
+
delete mcpServers[transport.sessionId];
|
|
87
|
+
});
|
|
75
88
|
}
|
|
76
89
|
catch (error) {
|
|
77
90
|
respondWithError(res, error, `Error in GET ${Routes.SSE}`);
|
|
@@ -80,8 +93,22 @@ export function createExpressApp(host, mcpServer) {
|
|
|
80
93
|
app.post(Routes.MESSAGE, async (req, res) => {
|
|
81
94
|
try {
|
|
82
95
|
log.info(`Received POST message at: ${Routes.MESSAGE}`);
|
|
83
|
-
|
|
84
|
-
|
|
96
|
+
const sessionId = new URL(req.url, `http://${req.headers.host}`).searchParams.get('sessionId');
|
|
97
|
+
if (!sessionId) {
|
|
98
|
+
log.error('No session ID provided in POST request');
|
|
99
|
+
res.status(400).json({
|
|
100
|
+
jsonrpc: '2.0',
|
|
101
|
+
error: {
|
|
102
|
+
code: -32000,
|
|
103
|
+
message: 'Bad Request: No session ID provided',
|
|
104
|
+
},
|
|
105
|
+
id: null,
|
|
106
|
+
});
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const transport = transportsSSE[sessionId];
|
|
110
|
+
if (transport) {
|
|
111
|
+
await transport.handlePostMessage(req, res);
|
|
85
112
|
}
|
|
86
113
|
else {
|
|
87
114
|
log.error('Server is not connected to the client.');
|
|
@@ -119,6 +146,12 @@ export function createExpressApp(host, mcpServer) {
|
|
|
119
146
|
sessionIdGenerator: () => randomUUID(),
|
|
120
147
|
enableJsonResponse: false, // Use SSE response mode
|
|
121
148
|
});
|
|
149
|
+
const mcpServer = new ActorsMcpServer(mcpServerOptions, false);
|
|
150
|
+
// Load tools from Actor input for backwards compatibility
|
|
151
|
+
if (mcpServerOptions.actors && mcpServerOptions.actors.length > 0) {
|
|
152
|
+
const tools = await getActorsAsTools(mcpServerOptions.actors, process.env.APIFY_TOKEN);
|
|
153
|
+
mcpServer.upsertTools(tools);
|
|
154
|
+
}
|
|
122
155
|
// Load MCP server tools
|
|
123
156
|
await loadToolsAndActors(mcpServer, req.url, process.env.APIFY_TOKEN);
|
|
124
157
|
// Connect the transport to the MCP server BEFORE handling the request
|
|
@@ -128,6 +161,7 @@ export function createExpressApp(host, mcpServer) {
|
|
|
128
161
|
// Store the transport by session ID for future requests
|
|
129
162
|
if (transport.sessionId) {
|
|
130
163
|
transports[transport.sessionId] = transport;
|
|
164
|
+
mcpServers[transport.sessionId] = mcpServer;
|
|
131
165
|
}
|
|
132
166
|
return; // Already handled
|
|
133
167
|
}
|
|
@@ -156,6 +190,17 @@ export function createExpressApp(host, mcpServer) {
|
|
|
156
190
|
// The spec requires returning 405 Method Not Allowed in this case
|
|
157
191
|
res.status(405).set('Allow', 'POST').send('Method Not Allowed');
|
|
158
192
|
});
|
|
193
|
+
app.delete(Routes.MCP, async (req, res) => {
|
|
194
|
+
const sessionId = req.headers['mcp-session-id'];
|
|
195
|
+
const transport = transports[sessionId || ''];
|
|
196
|
+
if (transport) {
|
|
197
|
+
log.info(`Deleting MCP session with ID: ${sessionId}`);
|
|
198
|
+
await transport.handleRequest(req, res, req.body);
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
log.error('Session not found', { sessionId });
|
|
202
|
+
res.status(400).send('Bad Request: Session not found').end();
|
|
203
|
+
});
|
|
159
204
|
// Catch-all for undefined routes
|
|
160
205
|
app.use((req, res) => {
|
|
161
206
|
res.status(404).json({ message: `There is nothing at route ${req.method} ${req.originalUrl}. ${getHelpMessage(host)}` }).end();
|
package/dist/actor/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/actor/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAEnG,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,GAAG,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/actor/server.ts"],"names":[],"mappings":"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"}
|
package/dist/const.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export declare const SERVER_VERSION = "1.0.0";
|
|
|
8
8
|
export declare const USER_AGENT_ORIGIN = "Origin/mcp-server";
|
|
9
9
|
export declare enum HelperTools {
|
|
10
10
|
ACTOR_ADD = "add-actor",
|
|
11
|
+
ACTOR_CALL = "call-actor",
|
|
11
12
|
ACTOR_GET = "get-actor",
|
|
12
13
|
ACTOR_GET_DETAILS = "get-actor-details",
|
|
13
14
|
ACTOR_REMOVE = "remove-actor",
|
|
@@ -30,9 +31,9 @@ export declare const defaults: {
|
|
|
30
31
|
};
|
|
31
32
|
export declare const ACTOR_OUTPUT_MAX_CHARS_PER_ITEM = 5000;
|
|
32
33
|
export declare const ACTOR_OUTPUT_TRUNCATED_MESSAGE: string;
|
|
33
|
-
export declare const ACTOR_ADDITIONAL_INSTRUCTIONS = "Never call/execute tool/Actor unless confirmed by the user
|
|
34
|
-
export declare const
|
|
35
|
-
export declare const
|
|
34
|
+
export declare const ACTOR_ADDITIONAL_INSTRUCTIONS = "Never call/execute tool/Actor unless confirmed by the user.";
|
|
35
|
+
export declare const ACTOR_CACHE_MAX_SIZE = 500;
|
|
36
|
+
export declare const ACTOR_CACHE_TTL_SECS: number;
|
|
36
37
|
export declare const ACTOR_PRICING_MODEL: {
|
|
37
38
|
/** Rental actors */
|
|
38
39
|
readonly FLAT_PRICE_PER_MONTH: "FLAT_PRICE_PER_MONTH";
|
|
@@ -47,4 +48,5 @@ export declare const ACTOR_PRICING_MODEL: {
|
|
|
47
48
|
* so we can safely filter out rental Actors from the search and ensure we return some results.
|
|
48
49
|
*/
|
|
49
50
|
export declare const ACTOR_SEARCH_ABOVE_LIMIT = 50;
|
|
51
|
+
export declare const MCP_STREAMABLE_ENDPOINT = "/mcp";
|
|
50
52
|
//# 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":"AACA,eAAO,MAAM,uBAAuB,OAAQ,CAAC;AAC7C,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAEhD,eAAO,MAAM,kCAAkC,IAAI,CAAC;AAGpD,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,SAAS,cAAc;IACvB,SAAS,cAAc;IACvB,iBAAiB,sBAAsB;IACvC,YAAY,iBAAiB;IAC7B,gBAAgB,oBAAoB;IACpC,cAAc,kBAAkB;IAChC,cAAc,kBAAkB;IAChC,kBAAkB,uBAAuB;IACzC,WAAW,gBAAgB;IAC3B,gBAAgB,qBAAqB;IACrC,iBAAiB,sBAAsB;IACvC,wBAAwB,6BAA6B;IACrD,mBAAmB,wBAAwB;IAC3C,wBAAwB,6BAA6B;IACrD,0BAA0B,+BAA+B;IACzD,mBAAmB,0BAA0B;IAC7C,YAAY,kBAAkB;CACjC;AAED,eAAO,MAAM,QAAQ;;CAIpB,CAAC;AAGF,eAAO,MAAM,+BAA+B,OAAQ,CAAC;AACrD,eAAO,MAAM,8BAA8B,QAC8F,CAAC;AAE1I,eAAO,MAAM,6BAA6B,
|
|
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;AAEhD,eAAO,MAAM,kCAAkC,IAAI,CAAC;AAGpD,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,SAAS,cAAc;IACvB,UAAU,eAAe;IACzB,SAAS,cAAc;IACvB,iBAAiB,sBAAsB;IACvC,YAAY,iBAAiB;IAC7B,gBAAgB,oBAAoB;IACpC,cAAc,kBAAkB;IAChC,cAAc,kBAAkB;IAChC,kBAAkB,uBAAuB;IACzC,WAAW,gBAAgB;IAC3B,gBAAgB,qBAAqB;IACrC,iBAAiB,sBAAsB;IACvC,wBAAwB,6BAA6B;IACrD,mBAAmB,wBAAwB;IAC3C,wBAAwB,6BAA6B;IACrD,0BAA0B,+BAA+B;IACzD,mBAAmB,0BAA0B;IAC7C,YAAY,kBAAkB;CACjC;AAED,eAAO,MAAM,QAAQ;;CAIpB,CAAC;AAGF,eAAO,MAAM,+BAA+B,OAAQ,CAAC;AACrD,eAAO,MAAM,8BAA8B,QAC8F,CAAC;AAE1I,eAAO,MAAM,6BAA6B,gEAAgE,CAAC;AAE3G,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,eAAO,MAAM,oBAAoB,QAAU,CAAC;AAE5C,eAAO,MAAM,mBAAmB;IAC5B,oBAAoB;;;IAGpB,kCAAkC;;IAElC,iCAAiC;;CAE3B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,eAAO,MAAM,uBAAuB,SAAS,CAAC"}
|
package/dist/const.js
CHANGED
|
@@ -13,6 +13,7 @@ export const USER_AGENT_ORIGIN = 'Origin/mcp-server';
|
|
|
13
13
|
export var HelperTools;
|
|
14
14
|
(function (HelperTools) {
|
|
15
15
|
HelperTools["ACTOR_ADD"] = "add-actor";
|
|
16
|
+
HelperTools["ACTOR_CALL"] = "call-actor";
|
|
16
17
|
HelperTools["ACTOR_GET"] = "get-actor";
|
|
17
18
|
HelperTools["ACTOR_GET_DETAILS"] = "get-actor-details";
|
|
18
19
|
HelperTools["ACTOR_REMOVE"] = "remove-actor";
|
|
@@ -39,15 +40,9 @@ export const defaults = {
|
|
|
39
40
|
export const ACTOR_OUTPUT_MAX_CHARS_PER_ITEM = 5000;
|
|
40
41
|
export const ACTOR_OUTPUT_TRUNCATED_MESSAGE = `Output was truncated because it will not fit into context.`
|
|
41
42
|
+ `There is no reason to call this tool again! You can use ${HelperTools.DATASET_GET_ITEMS} tool to get more items from the dataset.`;
|
|
42
|
-
export const ACTOR_ADDITIONAL_INSTRUCTIONS =
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
Each Actor run produces a dataset ID and key-value store ID for accessing the results.
|
|
46
|
-
By default, the number of items returned from an Actor run is limited to ${ACTOR_RUN_DATASET_OUTPUT_MAX_ITEMS}.
|
|
47
|
-
You can always use ${HelperTools.DATASET_GET_ITEMS} tool to get more items from the dataset.
|
|
48
|
-
Actor run input is always stored in the key-value store, recordKey: INPUT.`;
|
|
49
|
-
export const TOOL_CACHE_MAX_SIZE = 500;
|
|
50
|
-
export const TOOL_CACHE_TTL_SECS = 30 * 60;
|
|
43
|
+
export const ACTOR_ADDITIONAL_INSTRUCTIONS = 'Never call/execute tool/Actor unless confirmed by the user.';
|
|
44
|
+
export const ACTOR_CACHE_MAX_SIZE = 500;
|
|
45
|
+
export const ACTOR_CACHE_TTL_SECS = 30 * 60; // 30 minutes
|
|
51
46
|
export const ACTOR_PRICING_MODEL = {
|
|
52
47
|
/** Rental actors */
|
|
53
48
|
FLAT_PRICE_PER_MONTH: 'FLAT_PRICE_PER_MONTH',
|
|
@@ -62,4 +57,5 @@ export const ACTOR_PRICING_MODEL = {
|
|
|
62
57
|
* so we can safely filter out rental Actors from the search and ensure we return some results.
|
|
63
58
|
*/
|
|
64
59
|
export const ACTOR_SEARCH_ABOVE_LIMIT = 50;
|
|
60
|
+
export const MCP_STREAMABLE_ENDPOINT = '/mcp';
|
|
65
61
|
//# 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,oBAAoB;AACpB,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAK,CAAC;AAC7C,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AACzC,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAC;AAEhD,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC;AAEpD,kBAAkB;AAClB,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAK,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,
|
|
1
|
+
{"version":3,"file":"const.js","sourceRoot":"","sources":["../src/const.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAK,CAAC;AAC7C,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AACzC,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAC;AAEhD,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC;AAEpD,kBAAkB;AAClB,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAK,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,WAmBX;AAnBD,WAAY,WAAW;IACnB,sCAAuB,CAAA;IACvB,wCAAyB,CAAA;IACzB,sCAAuB,CAAA;IACvB,sDAAuC,CAAA;IACvC,4CAA6B,CAAA;IAC7B,mDAAoC,CAAA;IACpC,+CAAgC,CAAA;IAChC,+CAAgC,CAAA;IAChC,wDAAyC,CAAA;IACzC,0CAA2B,CAAA;IAC3B,oDAAqC,CAAA;IACrC,sDAAuC,CAAA;IACvC,oEAAqD,CAAA;IACrD,0DAA2C,CAAA;IAC3C,oEAAqD,CAAA;IACrD,wEAAyD,CAAA;IACzD,4DAA6C,CAAA;IAC7C,6CAA8B,CAAA;AAClC,CAAC,EAnBW,WAAW,KAAX,WAAW,QAmBtB;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG;IACpB,MAAM,EAAE;QACJ,uBAAuB;KAC1B;CACJ,CAAC;AAEF,qBAAqB;AACrB,MAAM,CAAC,MAAM,+BAA+B,GAAG,IAAK,CAAC;AACrD,MAAM,CAAC,MAAM,8BAA8B,GAAG,4DAA4D;MACpG,2DAA2D,WAAW,CAAC,iBAAiB,2CAA2C,CAAC;AAE1I,MAAM,CAAC,MAAM,6BAA6B,GAAG,6DAA6D,CAAC;AAE3G,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACxC,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,aAAa;AAE1D,MAAM,CAAC,MAAM,mBAAmB,GAAG;IAC/B,oBAAoB;IACpB,oBAAoB,EAAE,sBAAsB;IAC5C,IAAI,EAAE,MAAM;IACZ,kCAAkC;IAClC,sBAAsB,EAAE,wBAAwB;IAChD,iCAAiC;IACjC,aAAa,EAAE,eAAe;CACxB,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC"}
|
package/dist/main.js
CHANGED
|
@@ -7,8 +7,7 @@ import { Actor } from 'apify';
|
|
|
7
7
|
import log from '@apify/log';
|
|
8
8
|
import { createExpressApp } from './actor/server.js';
|
|
9
9
|
import { processInput } from './input.js';
|
|
10
|
-
import {
|
|
11
|
-
import { callActorGetDataset, getActorsAsTools } from './tools/index.js';
|
|
10
|
+
import { callActorGetDataset } from './tools/index.js';
|
|
12
11
|
const STANDBY_MODE = Actor.getEnv().metaOrigin === 'STANDBY';
|
|
13
12
|
await Actor.init();
|
|
14
13
|
const HOST = Actor.isAtHome() ? process.env.ACTOR_STANDBY_URL : 'http://localhost';
|
|
@@ -20,20 +19,22 @@ if (!process.env.APIFY_TOKEN) {
|
|
|
20
19
|
const input = processInput((_a = (await Actor.getInput())) !== null && _a !== void 0 ? _a : {});
|
|
21
20
|
log.info(`Loaded input: ${JSON.stringify(input)} `);
|
|
22
21
|
if (STANDBY_MODE) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
});
|
|
27
|
-
const app = createExpressApp(HOST, mcpServer);
|
|
28
|
-
log.info('Actor is running in the STANDBY mode.');
|
|
22
|
+
let actorsToLoad = [];
|
|
23
|
+
// TODO: in standby mode the input loading does not actually work,
|
|
24
|
+
// we should remove this since we are using the URL query parameters to load Actors
|
|
29
25
|
// Load only Actors specified in the input
|
|
30
26
|
// If you wish to start without any Actor, create a task and leave the input empty
|
|
31
27
|
if (input.actors && input.actors.length > 0) {
|
|
32
28
|
const { actors } = input;
|
|
33
|
-
|
|
34
|
-
const tools = await getActorsAsTools(actorsToLoad, process.env.APIFY_TOKEN);
|
|
35
|
-
mcpServer.upsertTools(tools);
|
|
29
|
+
actorsToLoad = Array.isArray(actors) ? actors : actors.split(',');
|
|
36
30
|
}
|
|
31
|
+
// Include Actors to load in the MCP server options for backwards compatibility
|
|
32
|
+
const app = createExpressApp(HOST, {
|
|
33
|
+
enableAddingActors: Boolean(input.enableAddingActors),
|
|
34
|
+
enableDefaultActors: false,
|
|
35
|
+
actors: actorsToLoad,
|
|
36
|
+
});
|
|
37
|
+
log.info('Actor is running in the STANDBY mode.');
|
|
37
38
|
app.listen(PORT, () => {
|
|
38
39
|
log.info(`The Actor web server is listening for user requests at ${HOST}`);
|
|
39
40
|
});
|
|
@@ -44,9 +45,14 @@ else {
|
|
|
44
45
|
await Actor.fail('If you need to debug a specific Actor, please provide the debugActor and debugActorInput fields in the input');
|
|
45
46
|
}
|
|
46
47
|
const options = { memory: input.maxActorMemoryBytes };
|
|
47
|
-
const {
|
|
48
|
+
const { items } = await callActorGetDataset(input.debugActor, input.debugActorInput, process.env.APIFY_TOKEN, options);
|
|
48
49
|
await Actor.pushData(items);
|
|
49
|
-
log.info(`Pushed ${
|
|
50
|
+
log.info(`Pushed ${items.count} items to the dataset`);
|
|
50
51
|
await Actor.exit();
|
|
51
52
|
}
|
|
53
|
+
// So Ctrl+C works locally
|
|
54
|
+
process.on('SIGINT', async () => {
|
|
55
|
+
log.info('Received SIGINT, shutting down gracefully...');
|
|
56
|
+
await Actor.exit();
|
|
57
|
+
});
|
|
52
58
|
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;GAGG;;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAG9B,OAAO,GAAG,MAAM,YAAY,CAAC;AAE7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/actors.d.ts
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import type { ActorDefinition } from 'apify-client';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import type { ActorDefinitionPruned } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Returns the MCP server path for the given Actor ID.
|
|
5
|
+
* Prioritizes the streamable transport path if available.
|
|
6
|
+
* The `webServerMcpPath` is a string containing MCP endpoint or endpoints separated by commas.
|
|
7
|
+
*/
|
|
8
|
+
export declare function getActorMCPServerPath(actorDefinition: ActorDefinition | ActorDefinitionPruned): string | null;
|
|
9
|
+
/**
|
|
10
|
+
* Returns the MCP server URL for the given Actor ID.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getActorMCPServerURL(realActorId: string, mcpServerPath: string): Promise<string>;
|
|
5
13
|
/**
|
|
6
14
|
* Gets Actor ID from the Actor object.
|
|
7
|
-
*
|
|
8
|
-
* @param actorID
|
|
9
|
-
* @param apifyToken
|
|
10
15
|
*/
|
|
11
|
-
export declare function getRealActorID(
|
|
16
|
+
export declare function getRealActorID(actorIdOrName: string, apifyToken: string): Promise<string>;
|
|
12
17
|
/**
|
|
13
18
|
* Returns standby URL for given Actor ID.
|
|
14
|
-
*
|
|
15
|
-
* @param actorID
|
|
16
|
-
* @param standbyBaseUrl
|
|
17
|
-
* @param apifyToken
|
|
18
|
-
* @returns
|
|
19
19
|
*/
|
|
20
|
-
export declare function getActorStandbyURL(
|
|
20
|
+
export declare function getActorStandbyURL(realActorId: string, standbyBaseUrl?: string): Promise<string>;
|
|
21
21
|
export declare function getActorDefinition(actorID: string, apifyToken: string): Promise<ActorDefinition>;
|
|
22
22
|
//# sourceMappingURL=actors.d.ts.map
|
package/dist/mcp/actors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actors.d.ts","sourceRoot":"","sources":["../../src/mcp/actors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAIpD,
|
|
1
|
+
{"version":3,"file":"actors.d.ts","sourceRoot":"","sources":["../../src/mcp/actors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAIpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,eAAe,EAAE,eAAe,GAAG,qBAAqB,GAAG,MAAM,GAAG,IAAI,CAqB7G;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMtG;AAED;;EAEE;AACF,wBAAsB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS/F;AAED;;EAEE;AACF,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,SAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAE7G;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CActG"}
|
package/dist/mcp/actors.js
CHANGED
|
@@ -1,49 +1,56 @@
|
|
|
1
1
|
import { ApifyClient } from '../apify-client.js';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
import { MCP_STREAMABLE_ENDPOINT } from '../const.js';
|
|
3
|
+
/**
|
|
4
|
+
* Returns the MCP server path for the given Actor ID.
|
|
5
|
+
* Prioritizes the streamable transport path if available.
|
|
6
|
+
* The `webServerMcpPath` is a string containing MCP endpoint or endpoints separated by commas.
|
|
7
|
+
*/
|
|
8
|
+
export function getActorMCPServerPath(actorDefinition) {
|
|
8
9
|
if ('webServerMcpPath' in actorDefinition && typeof actorDefinition.webServerMcpPath === 'string') {
|
|
9
|
-
|
|
10
|
+
const webServerMcpPath = actorDefinition.webServerMcpPath.trim();
|
|
11
|
+
const paths = webServerMcpPath.split(',').map((path) => path.trim());
|
|
12
|
+
// If there is only one path, return it directly
|
|
13
|
+
if (paths.length === 1) {
|
|
14
|
+
return paths[0];
|
|
15
|
+
}
|
|
16
|
+
// If there are multiple paths, prioritize the streamable transport path
|
|
17
|
+
// otherwise return the first one.
|
|
18
|
+
const streamablePath = paths.find((path) => path === MCP_STREAMABLE_ENDPOINT);
|
|
19
|
+
if (streamablePath) {
|
|
20
|
+
return streamablePath;
|
|
21
|
+
}
|
|
22
|
+
// Otherwise, return the first path
|
|
23
|
+
return paths[0];
|
|
10
24
|
}
|
|
11
|
-
return
|
|
25
|
+
return null;
|
|
12
26
|
}
|
|
13
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Returns the MCP server URL for the given Actor ID.
|
|
29
|
+
*/
|
|
30
|
+
export async function getActorMCPServerURL(realActorId, mcpServerPath) {
|
|
14
31
|
// TODO: get from API instead
|
|
15
32
|
const standbyBaseUrl = process.env.HOSTNAME === 'mcp-securitybyobscurity.apify.com'
|
|
16
33
|
? 'securitybyobscurity.apify.actor' : 'apify.actor';
|
|
17
|
-
const standbyUrl = await getActorStandbyURL(
|
|
18
|
-
|
|
19
|
-
return `${standbyUrl}${mcpPath}`;
|
|
34
|
+
const standbyUrl = await getActorStandbyURL(realActorId, standbyBaseUrl);
|
|
35
|
+
return `${standbyUrl}${mcpServerPath}`;
|
|
20
36
|
}
|
|
21
37
|
/**
|
|
22
38
|
* Gets Actor ID from the Actor object.
|
|
23
|
-
*
|
|
24
|
-
* @param actorID
|
|
25
|
-
* @param apifyToken
|
|
26
39
|
*/
|
|
27
|
-
export async function getRealActorID(
|
|
40
|
+
export async function getRealActorID(actorIdOrName, apifyToken) {
|
|
28
41
|
const apifyClient = new ApifyClient({ token: apifyToken });
|
|
29
|
-
const actor = apifyClient.actor(
|
|
42
|
+
const actor = apifyClient.actor(actorIdOrName);
|
|
30
43
|
const info = await actor.get();
|
|
31
44
|
if (!info) {
|
|
32
|
-
throw new Error(`Actor ${
|
|
45
|
+
throw new Error(`Actor ${actorIdOrName} not found`);
|
|
33
46
|
}
|
|
34
47
|
return info.id;
|
|
35
48
|
}
|
|
36
49
|
/**
|
|
37
50
|
* Returns standby URL for given Actor ID.
|
|
38
|
-
*
|
|
39
|
-
* @param actorID
|
|
40
|
-
* @param standbyBaseUrl
|
|
41
|
-
* @param apifyToken
|
|
42
|
-
* @returns
|
|
43
51
|
*/
|
|
44
|
-
export async function getActorStandbyURL(
|
|
45
|
-
|
|
46
|
-
return `https://${actorRealID}.${standbyBaseUrl}`;
|
|
52
|
+
export async function getActorStandbyURL(realActorId, standbyBaseUrl = 'apify.actor') {
|
|
53
|
+
return `https://${realActorId}.${standbyBaseUrl}`;
|
|
47
54
|
}
|
|
48
55
|
export async function getActorDefinition(actorID, apifyToken) {
|
|
49
56
|
const apifyClient = new ApifyClient({ token: apifyToken });
|
package/dist/mcp/actors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actors.js","sourceRoot":"","sources":["../../src/mcp/actors.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"actors.js","sourceRoot":"","sources":["../../src/mcp/actors.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/client.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
2
2
|
/**
|
|
3
3
|
* Creates and connects a ModelContextProtocol client.
|
|
4
|
+
* First tries streamable HTTP transport, then falls back to SSE transport.
|
|
4
5
|
*/
|
|
5
|
-
export declare function
|
|
6
|
+
export declare function connectMCPClient(url: string, token: string): Promise<Client>;
|
|
6
7
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/mcp/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAQnE;;;GAGG;AACH,wBAAsB,gBAAgB,CAClC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAC3B,OAAO,CAAC,MAAM,CAAC,CAUjB"}
|
package/dist/mcp/client.js
CHANGED
|
@@ -1,10 +1,28 @@
|
|
|
1
1
|
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
2
2
|
import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
|
|
3
|
+
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
4
|
+
import log from '@apify/log';
|
|
3
5
|
import { getMCPServerID } from './utils.js';
|
|
4
6
|
/**
|
|
5
7
|
* Creates and connects a ModelContextProtocol client.
|
|
8
|
+
* First tries streamable HTTP transport, then falls back to SSE transport.
|
|
6
9
|
*/
|
|
7
|
-
export async function
|
|
10
|
+
export async function connectMCPClient(url, token) {
|
|
11
|
+
try {
|
|
12
|
+
return await createMCPStreamableClient(url, token);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
// If streamable HTTP transport fails, fall back to SSE transport
|
|
16
|
+
log.info('Streamable HTTP transport failed, falling back to SSE transport', {
|
|
17
|
+
url,
|
|
18
|
+
});
|
|
19
|
+
return await createMCPSSEClient(url, token);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Creates and connects a ModelContextProtocol client.
|
|
24
|
+
*/
|
|
25
|
+
async function createMCPSSEClient(url, token) {
|
|
8
26
|
const transport = new SSEClientTransport(new URL(url), {
|
|
9
27
|
requestInit: {
|
|
10
28
|
headers: {
|
|
@@ -30,4 +48,22 @@ export async function createMCPClient(url, token) {
|
|
|
30
48
|
await client.connect(transport);
|
|
31
49
|
return client;
|
|
32
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Creates and connects a ModelContextProtocol client using the streamable HTTP transport.
|
|
53
|
+
*/
|
|
54
|
+
async function createMCPStreamableClient(url, token) {
|
|
55
|
+
const transport = new StreamableHTTPClientTransport(new URL(url), {
|
|
56
|
+
requestInit: {
|
|
57
|
+
headers: {
|
|
58
|
+
authorization: `Bearer ${token}`,
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
const client = new Client({
|
|
63
|
+
name: getMCPServerID(url),
|
|
64
|
+
version: '1.0.0',
|
|
65
|
+
});
|
|
66
|
+
await client.connect(transport);
|
|
67
|
+
return client;
|
|
68
|
+
}
|
|
33
69
|
//# sourceMappingURL=client.js.map
|
package/dist/mcp/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAEnG,OAAO,GAAG,MAAM,YAAY,CAAC;AAE7B,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAClC,GAAW,EAAE,KAAa;IAE1B,IAAI,CAAC;QACD,OAAO,MAAM,yBAAyB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACL,iEAAiE;QACjE,GAAG,CAAC,IAAI,CAAC,iEAAiE,EAAE;YACxE,GAAG;SACN,CAAC,CAAC;QACH,OAAO,MAAM,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC;AACL,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,kBAAkB,CAC7B,GAAW,EAAE,KAAa;IAE1B,MAAM,SAAS,GAAG,IAAI,kBAAkB,CACpC,IAAI,GAAG,CAAC,GAAG,CAAC,EACZ;QACI,WAAW,EAAE;YACT,OAAO,EAAE;gBACL,aAAa,EAAE,UAAU,KAAK,EAAE;aACnC;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,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,KAAI,EAAE,CAAC,CAAC;gBACjD,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,KAAK,EAAE,CAAC,CAAC;gBAChD,OAAO,KAAK,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YAC9C,CAAC;YACL,8DAA8D;SACtD,EAAE,yDAAyD;KACtE,CAAC,CAAC;IAEP,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;QACtB,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC;QACzB,OAAO,EAAE,OAAO;KACnB,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,yBAAyB,CACpC,GAAW,EAAE,KAAa;IAE1B,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAC/C,IAAI,GAAG,CAAC,GAAG,CAAC,EACZ;QACI,WAAW,EAAE;YACT,OAAO,EAAE;gBACL,aAAa,EAAE,UAAU,KAAK,EAAE;aACnC;SACJ;KACJ,CAAC,CAAC;IAEP,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;QACtB,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC;QACzB,OAAO,EAAE,OAAO;KACnB,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,OAAO,MAAM,CAAC;AAClB,CAAC"}
|
package/dist/mcp/server.d.ts
CHANGED
|
@@ -46,7 +46,7 @@ export declare class ActorsMcpServer {
|
|
|
46
46
|
* Returns the list of all currently loaded Actor tool IDs.
|
|
47
47
|
* @returns {string[]} - Array of loaded Actor tool IDs (e.g., 'apify/rag-web-browser')
|
|
48
48
|
*/
|
|
49
|
-
|
|
49
|
+
listActorToolNames(): string[];
|
|
50
50
|
/**
|
|
51
51
|
* Returns a list of Actor IDs that are registered as MCP servers.
|
|
52
52
|
* @returns {string[]} - An array of Actor MCP server Actor IDs (e.g., 'apify/actors-mcp-server').
|
package/dist/mcp/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAqB/E,OAAO,KAAK,EAAuC,SAAS,EAAE,MAAM,aAAa,CAAC;AAKlF,KAAK,sBAAsB,GAAG;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CACjC,CAAC;AAIF;;GAEG;AACH,qBAAa,eAAe;IACxB,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC9C,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,mBAAmB,CAAkC;IAC7D,OAAO,CAAC,aAAa,CAAoC;gBAE7C,OAAO,GAAE,sBAA2B,EAAE,kBAAkB,UAAO;IAmC3E;;;OAGG;IACI,aAAa,IAAI,MAAM,EAAE;IAIhC;;;;;;;MAOE;IACK,2BAA2B,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,IAAI;IAOzE;;;MAGE;IACK,6BAA6B;IAOpC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAM7B;;;OAGG;IACI,kBAAkB,IAAI,MAAM,EAAE;IAMrC;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAQjC;;;OAGG;IACI,gBAAgB,IAAI,MAAM,EAAE;IAInC;;;;;MAKE;IACW,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM;IA6BpE;;;;MAIE;IACW,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAcnC;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMxC;;;;OAIG;IACU,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASjE;;;OAGG;IACU,gBAAgB,CAAC,UAAU,EAAE,MAAM;IAIhD;;;;;;OAMG;IACU,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAQ7D;;OAEG;IACI,uBAAuB;IAKvB,wBAAwB;IAK/B;OACG;IACI,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,+BAA+B,UAAQ,GAAG,MAAM,EAAE;IAahG;;;;;OAKG;IACI,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,+BAA+B,UAAQ;IAQ9E,OAAO,CAAC,yBAAyB;IAQjC,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,iBAAiB;IAqLnB,OAAO,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAoB/B"}
|