@apify/actors-mcp-server 0.5.5 → 0.5.8
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 +42 -5
- package/dist/actor/server.d.ts.map +1 -1
- package/dist/actor/server.js +29 -3
- package/dist/actor/server.js.map +1 -1
- package/dist/const.d.ts +11 -0
- package/dist/const.d.ts.map +1 -1
- package/dist/const.js +16 -0
- package/dist/const.js.map +1 -1
- package/dist/mcp/server.d.ts +20 -13
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +148 -45
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/utils.d.ts +3 -4
- package/dist/mcp/utils.d.ts.map +1 -1
- package/dist/mcp/utils.js +4 -4
- package/dist/mcp/utils.js.map +1 -1
- package/dist/stdio.js +77 -6
- package/dist/stdio.js.map +1 -1
- package/dist/telemetry.d.ts +25 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +71 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/tools/actor.d.ts.map +1 -1
- package/dist/tools/actor.js +26 -10
- package/dist/tools/actor.js.map +1 -1
- package/dist/tools/build.d.ts +1 -1
- package/dist/tools/build.d.ts.map +1 -1
- package/dist/tools/build.js +8 -2
- package/dist/tools/build.js.map +1 -1
- package/dist/tools/dataset.d.ts.map +1 -1
- package/dist/tools/dataset.js +19 -4
- package/dist/tools/dataset.js.map +1 -1
- package/dist/tools/dataset_collection.d.ts.map +1 -1
- package/dist/tools/dataset_collection.js +5 -0
- package/dist/tools/dataset_collection.js.map +1 -1
- package/dist/tools/fetch-actor-details.d.ts.map +1 -1
- package/dist/tools/fetch-actor-details.js +16 -8
- package/dist/tools/fetch-actor-details.js.map +1 -1
- package/dist/tools/fetch-apify-docs.d.ts.map +1 -1
- package/dist/tools/fetch-apify-docs.js +16 -25
- package/dist/tools/fetch-apify-docs.js.map +1 -1
- package/dist/tools/get-actor-output.d.ts.map +1 -1
- package/dist/tools/get-actor-output.js +6 -1
- package/dist/tools/get-actor-output.js.map +1 -1
- package/dist/tools/get-html-skeleton.d.ts.map +1 -1
- package/dist/tools/get-html-skeleton.js +9 -4
- package/dist/tools/get-html-skeleton.js.map +1 -1
- package/dist/tools/helpers.d.ts.map +1 -1
- package/dist/tools/helpers.js +4 -0
- package/dist/tools/helpers.js.map +1 -1
- package/dist/tools/key_value_store.d.ts.map +1 -1
- package/dist/tools/key_value_store.js +15 -0
- package/dist/tools/key_value_store.js.map +1 -1
- package/dist/tools/key_value_store_collection.d.ts.map +1 -1
- package/dist/tools/key_value_store_collection.js +5 -0
- package/dist/tools/key_value_store_collection.js.map +1 -1
- package/dist/tools/run.d.ts.map +1 -1
- package/dist/tools/run.js +15 -1
- package/dist/tools/run.js.map +1 -1
- package/dist/tools/run_collection.d.ts.map +1 -1
- package/dist/tools/run_collection.js +5 -0
- package/dist/tools/run_collection.js.map +1 -1
- package/dist/tools/search-apify-docs.d.ts.map +1 -1
- package/dist/tools/search-apify-docs.js +24 -26
- package/dist/tools/search-apify-docs.js.map +1 -1
- package/dist/tools/store_collection.d.ts.map +1 -1
- package/dist/tools/store_collection.js +13 -12
- package/dist/tools/store_collection.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +59 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/generic.d.ts +7 -0
- package/dist/utils/generic.d.ts.map +1 -1
- package/dist/utils/generic.js +28 -0
- package/dist/utils/generic.js.map +1 -1
- package/dist/utils/mcp.d.ts +4 -1
- package/dist/utils/mcp.d.ts.map +1 -1
- package/dist/utils/mcp.js +4 -1
- package/dist/utils/mcp.js.map +1 -1
- package/dist/utils/tools-loader.d.ts +2 -3
- package/dist/utils/tools-loader.d.ts.map +1 -1
- package/dist/utils/tools-loader.js +2 -2
- package/dist/utils/tools-loader.js.map +1 -1
- package/dist/utils/tools.d.ts +7 -0
- package/dist/utils/tools.d.ts.map +1 -1
- package/dist/utils/tools.js +1 -0
- package/dist/utils/tools.js.map +1 -1
- package/dist/utils/userid-cache.d.ts +8 -0
- package/dist/utils/userid-cache.d.ts.map +1 -0
- package/dist/utils/userid-cache.js +28 -0
- package/dist/utils/userid-cache.js.map +1 -0
- package/dist/utils/version.d.ts +6 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +11 -0
- package/dist/utils/version.js.map +1 -0
- package/manifest.json +1 -1
- package/package.json +3 -1
- package/server.json +1 -1
|
@@ -3,6 +3,7 @@ import zodToJsonSchema from 'zod-to-json-schema';
|
|
|
3
3
|
import { HelperTools } from '../const.js';
|
|
4
4
|
import { ajv } from '../utils/ajv.js';
|
|
5
5
|
import { searchApifyDocsCached } from '../utils/apify-docs.js';
|
|
6
|
+
import { buildMCPResponse } from '../utils/mcp.js';
|
|
6
7
|
const searchApifyDocsToolArgsSchema = z.object({
|
|
7
8
|
query: z.string()
|
|
8
9
|
.min(1)
|
|
@@ -24,26 +25,31 @@ export const searchApifyDocsTool = {
|
|
|
24
25
|
type: 'internal',
|
|
25
26
|
name: HelperTools.DOCS_SEARCH,
|
|
26
27
|
description: `Search Apify documentation using full-text search.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
You can use it to find relevant documentation based on keywords.
|
|
29
|
+
Apify documentation has information about Apify console, Actors (development
|
|
30
|
+
(actor.json, input schema, dataset schema, dockerfile), deployment, builds, runs),
|
|
31
|
+
schedules, storages (datasets, key-value store), Proxy, Integrations,
|
|
32
|
+
Apify Academy (crawling and webscraping with Crawlee),
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
The results will include the URL of the documentation page, a fragment identifier (if available),
|
|
35
|
+
and a limited piece of content that matches the search query.
|
|
35
36
|
|
|
36
|
-
|
|
37
|
+
Fetch the full content of the document using the ${HelperTools.DOCS_FETCH} tool by providing the URL.
|
|
37
38
|
|
|
38
|
-
|
|
39
|
-
|
|
39
|
+
USAGE:
|
|
40
|
+
- Use when user asks about Apify documentation, Actor development, Crawlee, or Apify platform.
|
|
40
41
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
USAGE EXAMPLES:
|
|
43
|
+
- query: How to use create Apify Actor?
|
|
44
|
+
- query: How to define Actor input schema?
|
|
45
|
+
- query: How scrape with Crawlee?`,
|
|
45
46
|
inputSchema: zodToJsonSchema(searchApifyDocsToolArgsSchema),
|
|
46
47
|
ajvValidate: ajv.compile(zodToJsonSchema(searchApifyDocsToolArgsSchema)),
|
|
48
|
+
annotations: {
|
|
49
|
+
title: 'Search Apify docs',
|
|
50
|
+
readOnlyHint: true,
|
|
51
|
+
openWorldHint: false,
|
|
52
|
+
},
|
|
47
53
|
call: async (toolArgs) => {
|
|
48
54
|
const { args } = toolArgs;
|
|
49
55
|
const parsed = searchApifyDocsToolArgsSchema.parse(args);
|
|
@@ -51,24 +57,16 @@ export const searchApifyDocsTool = {
|
|
|
51
57
|
const resultsRaw = await searchApifyDocsCached(query);
|
|
52
58
|
const results = resultsRaw.slice(parsed.offset, parsed.offset + parsed.limit);
|
|
53
59
|
if (results.length === 0) {
|
|
54
|
-
return {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
text: `No results found for the query "${query}" with limit ${parsed.limit} and offset ${parsed.offset}. Try a different query or adjust the limit and offset.`,
|
|
58
|
-
}],
|
|
59
|
-
};
|
|
60
|
+
return buildMCPResponse([`No results found for the query "${query}" with limit ${parsed.limit} and offset ${parsed.offset}.
|
|
61
|
+
Please try a different query with different keywords, or adjust the limit and offset parameters.
|
|
62
|
+
You can also try using more specific or alternative keywords related to your search topic.`]);
|
|
60
63
|
}
|
|
61
64
|
const textContent = `You can use the Apify docs fetch tool to retrieve the full content of a document by its URL. The document fragment refers to the section of the content containing the relevant part for the search result item.
|
|
62
65
|
Search results for "${query}":
|
|
63
66
|
|
|
64
67
|
${results.map((result) => `- Document URL: ${result.url}${result.fragment ? `\n Document fragment: ${result.fragment}` : ''}
|
|
65
68
|
Content: ${result.content}`).join('\n\n')}`;
|
|
66
|
-
return
|
|
67
|
-
content: [{
|
|
68
|
-
type: 'text',
|
|
69
|
-
text: textContent,
|
|
70
|
-
}],
|
|
71
|
-
};
|
|
69
|
+
return buildMCPResponse([textContent]);
|
|
72
70
|
},
|
|
73
71
|
};
|
|
74
72
|
//# sourceMappingURL=search-apify-docs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-apify-docs.js","sourceRoot":"","sources":["../../src/tools/search-apify-docs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,eAAe,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"search-apify-docs.js","sourceRoot":"","sources":["../../src/tools/search-apify-docs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,eAAe,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;SACZ,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACL;;2GAE+F,CAClG;IACL,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;SACZ,QAAQ,EAAE;SACV,OAAO,CAAC,CAAC,CAAC;SACV,QAAQ,CAAC;uIACqH,CAAC;IACpI,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;SACb,QAAQ,EAAE;SACV,OAAO,CAAC,CAAC,CAAC;SACV,QAAQ,CAAC;yIACuH,CAAC;CACzI,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAc;IAC1C,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,WAAW,CAAC,WAAW;IAC7B,WAAW,EAAE;;;;;;;;;;mDAUkC,WAAW,CAAC,UAAU;;;;;;;;kCAQvC;IAC9B,WAAW,EAAE,eAAe,CAAC,6BAA6B,CAAoB;IAC9E,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,6BAA6B,CAAC,CAAC;IACxE,WAAW,EAAE;QACT,KAAK,EAAE,mBAAmB;QAC1B,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,KAAK;KACvB;IACD,IAAI,EAAE,KAAK,EAAE,QAA0B,EAAE,EAAE;QACvC,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;QAE1B,MAAM,MAAM,GAAG,6BAA6B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAElC,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAE9E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,gBAAgB,CAAC,CAAC,mCAAmC,KAAK,gBAAgB,MAAM,CAAC,KAAK,eAAe,MAAM,CAAC,MAAM;;2FAE1C,CAAC,CAAC,CAAC;QACtF,CAAC;QAED,MAAM,WAAW,GAAG;sBACN,KAAK;;EAEzB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,mBAAmB,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,0BAA0B,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE;aAC/G,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,OAAO,gBAAgB,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IAC3C,CAAC;CACK,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store_collection.d.ts","sourceRoot":"","sources":["../../src/tools/store_collection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,KAAK,EAAqB,sBAAsB,EAAoB,SAAS,EAAmB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"store_collection.d.ts","sourceRoot":"","sources":["../../src/tools/store_collection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,KAAK,EAAqB,sBAAsB,EAAoB,SAAS,EAAmB,MAAM,aAAa,CAAC;AAK3H,wBAAsB,sBAAsB,CACxC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE,MAAM,GAAG,SAAqB,EACrC,MAAM,GAAE,MAAM,GAAG,SAAqB,EACtC,kBAAkB,GAAE,OAAO,GAAG,SAAqB,GACpD,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAOnC;AAED,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;EA6BjC,CAAC;AAwBH;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,SAuEjB,CAAC"}
|
|
@@ -4,6 +4,7 @@ import { ApifyClient } from '../apify-client.js';
|
|
|
4
4
|
import { ACTOR_SEARCH_ABOVE_LIMIT, HelperTools } from '../const.js';
|
|
5
5
|
import { formatActorToActorCard } from '../utils/actor-card.js';
|
|
6
6
|
import { ajv } from '../utils/ajv.js';
|
|
7
|
+
import { buildMCPResponse } from '../utils/mcp.js';
|
|
7
8
|
export async function searchActorsByKeywords(search, apifyToken, limit = undefined, offset = undefined, allowsAgenticUsers = undefined) {
|
|
8
9
|
const client = new ApifyClient({ token: apifyToken });
|
|
9
10
|
const storeClient = client.store();
|
|
@@ -95,20 +96,23 @@ Returns list of Actor cards with the following info:
|
|
|
95
96
|
`,
|
|
96
97
|
inputSchema: zodToJsonSchema(searchActorsArgsSchema),
|
|
97
98
|
ajvValidate: ajv.compile(zodToJsonSchema(searchActorsArgsSchema)),
|
|
99
|
+
annotations: {
|
|
100
|
+
title: 'Search Actors',
|
|
101
|
+
readOnlyHint: true,
|
|
102
|
+
openWorldHint: false,
|
|
103
|
+
},
|
|
98
104
|
call: async (toolArgs) => {
|
|
99
105
|
const { args, apifyToken, userRentedActorIds, apifyMcpServer } = toolArgs;
|
|
100
106
|
const parsed = searchActorsArgsSchema.parse(args);
|
|
101
107
|
let actors = await searchActorsByKeywords(parsed.keywords, apifyToken, parsed.limit + ACTOR_SEARCH_ABOVE_LIMIT, parsed.offset, apifyMcpServer.options.skyfireMode ? true : undefined);
|
|
102
108
|
actors = filterRentalActors(actors || [], userRentedActorIds || []).slice(0, parsed.limit);
|
|
103
109
|
const actorCards = actors.length === 0 ? [] : actors.map(formatActorToActorCard);
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
type: 'text',
|
|
111
|
-
text: `
|
|
110
|
+
if (actorCards.length === 0) {
|
|
111
|
+
return buildMCPResponse([`No Actors were found for the search query "${parsed.keywords}".
|
|
112
|
+
Please try different keywords or simplify your query. Consider using more specific platform names (e.g., "Instagram", "Twitter") and data types (e.g., "posts", "products") rather than generic terms like "scraper" or "crawler".`]);
|
|
113
|
+
}
|
|
114
|
+
const actorsText = actorCards.join('\n\n');
|
|
115
|
+
return buildMCPResponse([`
|
|
112
116
|
# Search results:
|
|
113
117
|
- **Search query:** ${parsed.keywords}
|
|
114
118
|
- **Number of Actors found:** ${actorCards.length}
|
|
@@ -119,10 +123,7 @@ ${actorsText}
|
|
|
119
123
|
|
|
120
124
|
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.
|
|
121
125
|
If the search did not return relevant results, consider refining your keywords, use broader terms or removing less important words from the keywords.
|
|
122
|
-
|
|
123
|
-
},
|
|
124
|
-
],
|
|
125
|
-
};
|
|
126
|
+
`]);
|
|
126
127
|
},
|
|
127
128
|
};
|
|
128
129
|
//# sourceMappingURL=store_collection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store_collection.js","sourceRoot":"","sources":["../../src/tools/store_collection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,eAAe,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"store_collection.js","sourceRoot":"","sources":["../../src/tools/store_collection.ts"],"names":[],"mappings":"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"}
|