mcp-scraper 0.21.5 → 0.22.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/bin/api-server.cjs +36 -15
- package/dist/bin/api-server.cjs.map +1 -1
- package/dist/bin/api-server.js +1 -1
- package/dist/bin/mcp-scraper-cli.cjs +1 -1
- package/dist/bin/mcp-scraper-cli.cjs.map +1 -1
- package/dist/bin/mcp-scraper-cli.js +1 -1
- package/dist/bin/mcp-scraper-install.cjs +1 -1
- package/dist/bin/mcp-scraper-install.cjs.map +1 -1
- package/dist/bin/mcp-scraper-install.js +1 -1
- package/dist/bin/mcp-stdio-server.cjs +12 -8
- package/dist/bin/mcp-stdio-server.cjs.map +1 -1
- package/dist/bin/mcp-stdio-server.js +2 -2
- package/dist/{chunk-QO7HX67W.js → chunk-3SQTNNGK.js} +13 -9
- package/dist/chunk-3SQTNNGK.js.map +1 -0
- package/dist/chunk-Q6GSQEE4.js +7 -0
- package/dist/chunk-Q6GSQEE4.js.map +1 -0
- package/dist/{server-POMKHEXJ.js → server-K6C7W7ED.js} +27 -10
- package/dist/server-K6C7W7ED.js.map +1 -0
- package/docs/mcp-tool-manifest.generated.json +40 -10
- package/package.json +1 -1
- package/dist/chunk-QO7HX67W.js.map +0 -1
- package/dist/chunk-YLX3SKJN.js +0 -7
- package/dist/chunk-YLX3SKJN.js.map +0 -1
- package/dist/server-POMKHEXJ.js.map +0 -1
package/README.md
CHANGED
|
@@ -88,7 +88,7 @@ Build the branded one-click bundle:
|
|
|
88
88
|
npm run build:mcpb
|
|
89
89
|
```
|
|
90
90
|
|
|
91
|
-
The generated bundle is written to `build/mcpb/mcp-scraper-<version>.mcpb` and copied to `public/downloads/` for the hosted download. The current public bundle is `https://mcpscraper.dev/downloads/mcp-scraper.mcpb` (`0.
|
|
91
|
+
The generated bundle is written to `build/mcpb/mcp-scraper-<version>.mcpb` and copied to `public/downloads/` for the hosted download. The current public bundle is `https://mcpscraper.dev/downloads/mcp-scraper.mcpb` (`0.22.0`, SHA-256 `6c897da09abb3583c4d98d6effddc713f823114af85a929bdd6f3475032d1bed`). Install it by opening or dragging it into Claude Desktop. Claude displays the `MCP Scraper` install card, icon, and API-key configuration field from the bundle manifest.
|
|
92
92
|
|
|
93
93
|
The MCPB install exposes every tool — web-intelligence plus all `browser_*` tools — through the one `mcp-scraper` server.
|
|
94
94
|
|
package/dist/bin/api-server.cjs
CHANGED
|
@@ -29200,7 +29200,7 @@ var PACKAGE_VERSION;
|
|
|
29200
29200
|
var init_version = __esm({
|
|
29201
29201
|
"src/version.ts"() {
|
|
29202
29202
|
"use strict";
|
|
29203
|
-
PACKAGE_VERSION = "0.
|
|
29203
|
+
PACKAGE_VERSION = "0.22.0";
|
|
29204
29204
|
}
|
|
29205
29205
|
});
|
|
29206
29206
|
|
|
@@ -30927,11 +30927,15 @@ var init_mcp_tool_schemas = __esm({
|
|
|
30927
30927
|
connectionId: import_zod34.z.string().min(1).describe("A Google Calendar connectionId from list_service_connections, with actionsEnabled true."),
|
|
30928
30928
|
calendarId: import_zod34.z.string().min(1).default("primary").describe('Calendar to create the event in. Default "primary".'),
|
|
30929
30929
|
summary: import_zod34.z.string().min(1).max(500).describe("Event title."),
|
|
30930
|
-
description: import_zod34.z.string().
|
|
30930
|
+
description: import_zod34.z.string().min(1).max(5e3).describe("Required event context. Include the purpose or agenda supplied by the user and the Zoom join link when one was created."),
|
|
30931
30931
|
location: import_zod34.z.string().max(500).optional().describe("Event location."),
|
|
30932
30932
|
startDateTime: import_zod34.z.string().min(1).describe('Start time, ISO 8601, e.g. "2026-07-15T09:00:00-06:00".'),
|
|
30933
30933
|
endDateTime: import_zod34.z.string().min(1).describe('End time, ISO 8601, e.g. "2026-07-15T10:00:00-06:00".'),
|
|
30934
|
-
timeZone: import_zod34.z.string().max(100).optional().describe('IANA timezone, e.g. "America/Denver". Applies to both start and end.')
|
|
30934
|
+
timeZone: import_zod34.z.string().max(100).optional().describe('IANA timezone, e.g. "America/Denver". Applies to both start and end.'),
|
|
30935
|
+
attendees: import_zod34.z.array(import_zod34.z.object({
|
|
30936
|
+
email: import_zod34.z.string().email().describe("Invitee email address."),
|
|
30937
|
+
displayName: import_zod34.z.string().min(1).max(200).optional().describe("Invitee name when known.")
|
|
30938
|
+
}).strict()).max(100).describe("Required attendee list. Include every person the user asked to invite; use an empty array only when no invitee was identified.")
|
|
30935
30939
|
};
|
|
30936
30940
|
GoogleCalendarCreateEventOutputSchema = {
|
|
30937
30941
|
ok: import_zod34.z.boolean(),
|
|
@@ -30944,7 +30948,7 @@ var init_mcp_tool_schemas = __esm({
|
|
|
30944
30948
|
startDateTime: import_zod34.z.string().min(1).describe('Start time, ISO 8601, e.g. "2026-07-15T09:00:00-06:00".'),
|
|
30945
30949
|
durationMinutes: import_zod34.z.number().int().min(1).max(1440).default(30).describe("Meeting duration in minutes. Default 30."),
|
|
30946
30950
|
timezone: import_zod34.z.string().max(100).optional().describe('IANA timezone, e.g. "America/Denver".'),
|
|
30947
|
-
agenda: import_zod34.z.string().
|
|
30951
|
+
agenda: import_zod34.z.string().min(1).max(2e3).describe("Required meeting description or agenda. Preserve the purpose and context supplied by the user.")
|
|
30948
30952
|
};
|
|
30949
30953
|
ZoomCreateMeetingOutputSchema = {
|
|
30950
30954
|
ok: import_zod34.z.boolean(),
|
|
@@ -31653,21 +31657,21 @@ function registerPaaExtractorMcpTools(server, executor, options = {}) {
|
|
|
31653
31657
|
}, async (input) => executor.slackSendMessage(input));
|
|
31654
31658
|
server.registerTool("gmail_send_message", {
|
|
31655
31659
|
title: "Send Gmail Message",
|
|
31656
|
-
description: "
|
|
31660
|
+
description: "Preferred path for sending a simple plain-text email through a connected, action-enabled Gmail connection. Provide only connectionId, to, subject, and body; MCP Scraper constructs the MIME message and base64url encoding server-side. Never construct raw MIME or base64 yourself, and do not use call_service_connection_action for Gmail send-message. Requires a connectionId from list_service_connections with actionsEnabled true.",
|
|
31657
31661
|
inputSchema: GmailSendMessageInputSchema,
|
|
31658
31662
|
outputSchema: recordOutputSchema("gmail_send_message", GmailSendMessageOutputSchema),
|
|
31659
31663
|
annotations: { title: "Send Gmail Message", readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true }
|
|
31660
31664
|
}, async (input) => executor.gmailSendMessage(input));
|
|
31661
31665
|
server.registerTool("google_calendar_create_event", {
|
|
31662
31666
|
title: "Create Calendar Event",
|
|
31663
|
-
description: "Create
|
|
31667
|
+
description: "Create a complete event on a connected, action-enabled Google Calendar connection. Always preserve the supplied purpose in description, include the Zoom join link when available, and include every explicitly named invitee in attendees. Do not create a bare meeting event. Requires a connectionId from list_service_connections with actionsEnabled true.",
|
|
31664
31668
|
inputSchema: GoogleCalendarCreateEventInputSchema,
|
|
31665
31669
|
outputSchema: recordOutputSchema("google_calendar_create_event", GoogleCalendarCreateEventOutputSchema),
|
|
31666
31670
|
annotations: { title: "Create Calendar Event", readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true }
|
|
31667
31671
|
}, async (input) => executor.googleCalendarCreateEvent(input));
|
|
31668
31672
|
server.registerTool("zoom_create_meeting", {
|
|
31669
31673
|
title: "Create Zoom Meeting",
|
|
31670
|
-
description: "Create a meeting on a connected, action-enabled Zoom connection
|
|
31674
|
+
description: "Create a meeting on a connected, action-enabled Zoom connection and preserve the user-supplied purpose in the required agenda. Zoom creates the join link; invitees must then be added through google_calendar_create_event attendees. Requires a connectionId from list_service_connections with actionsEnabled true.",
|
|
31671
31675
|
inputSchema: ZoomCreateMeetingInputSchema,
|
|
31672
31676
|
outputSchema: recordOutputSchema("zoom_create_meeting", ZoomCreateMeetingOutputSchema),
|
|
31673
31677
|
annotations: { title: "Create Zoom Meeting", readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true }
|
|
@@ -31716,7 +31720,7 @@ function registerPaaExtractorMcpTools(server, executor, options = {}) {
|
|
|
31716
31720
|
}, async (input) => executor.renewConnectedDataDownload(input));
|
|
31717
31721
|
server.registerTool("call_service_connection_action", {
|
|
31718
31722
|
title: "Run Connected Service Action",
|
|
31719
|
-
description: "Run one explicitly allowlisted write or mutation on a tenant-owned OAuth or remote MCP connection.
|
|
31723
|
+
description: "Run one explicitly allowlisted write or mutation on a tenant-owned OAuth or remote MCP connection. For Gmail send-message, use gmail_send_message instead and never construct raw MIME or base64. For other providers, first call list_service_connections, use a connection with actionsEnabled true, describe the exact actionTools entry to obtain its live schema, and supply only that action's arguments. The server rejects arbitrary action names, inactive or foreign connections, disabled actions, and every adminBlockedTools entry. This can include Google Drive folder creation or file copies, Resend delivery, and GitHub mutations only when those exact actions are live and approved. Sends, deletes, merges, workflow execution, and content changes are high impact.",
|
|
31720
31724
|
inputSchema: CallServiceConnectionActionInputSchema,
|
|
31721
31725
|
outputSchema: recordOutputSchema("call_service_connection_action", CallServiceConnectionActionOutputSchema),
|
|
31722
31726
|
annotations: { title: "Run Connected Service Action", readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: true }
|
|
@@ -43285,6 +43289,21 @@ function providerConfigKeyFrom(value) {
|
|
|
43285
43289
|
const key = value.trim();
|
|
43286
43290
|
return key && key.length <= 200 ? key : null;
|
|
43287
43291
|
}
|
|
43292
|
+
function calendarAttendeesFrom(value) {
|
|
43293
|
+
if (!Array.isArray(value) || value.length > 100) return null;
|
|
43294
|
+
const attendees = [];
|
|
43295
|
+
for (const item of value) {
|
|
43296
|
+
if (!item || typeof item !== "object" || Array.isArray(item)) return null;
|
|
43297
|
+
const attendee = item;
|
|
43298
|
+
if (typeof attendee.email !== "string" || !attendee.email.trim()) return null;
|
|
43299
|
+
if (attendee.displayName !== void 0 && typeof attendee.displayName !== "string") return null;
|
|
43300
|
+
attendees.push({
|
|
43301
|
+
email: attendee.email.trim(),
|
|
43302
|
+
...typeof attendee.displayName === "string" && attendee.displayName.trim() ? { displayName: attendee.displayName.trim() } : {}
|
|
43303
|
+
});
|
|
43304
|
+
}
|
|
43305
|
+
return attendees;
|
|
43306
|
+
}
|
|
43288
43307
|
function bindingsForSchedule(bindings, scheduleActionId) {
|
|
43289
43308
|
return bindings.filter((binding) => binding.scheduleActionId === scheduleActionId);
|
|
43290
43309
|
}
|
|
@@ -44130,18 +44149,20 @@ var init_server = __esm({
|
|
|
44130
44149
|
const user = c.get("user");
|
|
44131
44150
|
const body = await c.req.json().catch(() => ({}));
|
|
44132
44151
|
const connectionId = providerConfigKeyFrom(body.connectionId);
|
|
44133
|
-
|
|
44134
|
-
|
|
44152
|
+
const attendees = calendarAttendeesFrom(body.attendees);
|
|
44153
|
+
if (!connectionId || typeof body.summary !== "string" || typeof body.description !== "string" || typeof body.startDateTime !== "string" || typeof body.endDateTime !== "string" || !attendees) {
|
|
44154
|
+
return c.json({ ok: false, error: "connectionId, summary, description, startDateTime, endDateTime, and attendees are required." }, 400);
|
|
44135
44155
|
}
|
|
44136
44156
|
const timeZone = typeof body.timeZone === "string" ? body.timeZone : void 0;
|
|
44137
44157
|
try {
|
|
44138
44158
|
const result = await callScheduleConnectionAction(user.email, connectionId, {
|
|
44139
44159
|
calendarId: typeof body.calendarId === "string" ? body.calendarId : "primary",
|
|
44140
44160
|
summary: body.summary,
|
|
44141
|
-
description:
|
|
44161
|
+
description: body.description,
|
|
44142
44162
|
location: typeof body.location === "string" ? body.location : void 0,
|
|
44143
44163
|
start: { dateTime: body.startDateTime, timeZone },
|
|
44144
|
-
end: { dateTime: body.endDateTime, timeZone }
|
|
44164
|
+
end: { dateTime: body.endDateTime, timeZone },
|
|
44165
|
+
attendees
|
|
44145
44166
|
});
|
|
44146
44167
|
return c.json({ ok: true, result });
|
|
44147
44168
|
} catch (err) {
|
|
@@ -44152,8 +44173,8 @@ var init_server = __esm({
|
|
|
44152
44173
|
const user = c.get("user");
|
|
44153
44174
|
const body = await c.req.json().catch(() => ({}));
|
|
44154
44175
|
const connectionId = providerConfigKeyFrom(body.connectionId);
|
|
44155
|
-
if (!connectionId || typeof body.topic !== "string" || typeof body.startDateTime !== "string") {
|
|
44156
|
-
return c.json({ ok: false, error: "connectionId, topic, and
|
|
44176
|
+
if (!connectionId || typeof body.topic !== "string" || typeof body.startDateTime !== "string" || typeof body.agenda !== "string") {
|
|
44177
|
+
return c.json({ ok: false, error: "connectionId, topic, startDateTime, and agenda are required." }, 400);
|
|
44157
44178
|
}
|
|
44158
44179
|
try {
|
|
44159
44180
|
const result = await callScheduleConnectionAction(user.email, connectionId, {
|
|
@@ -44161,7 +44182,7 @@ var init_server = __esm({
|
|
|
44161
44182
|
startDateTime: body.startDateTime,
|
|
44162
44183
|
durationMinutes: typeof body.durationMinutes === "number" ? body.durationMinutes : 30,
|
|
44163
44184
|
timezone: typeof body.timezone === "string" ? body.timezone : void 0,
|
|
44164
|
-
agenda:
|
|
44185
|
+
agenda: body.agenda
|
|
44165
44186
|
});
|
|
44166
44187
|
return c.json({ ok: true, result });
|
|
44167
44188
|
} catch (err) {
|