mcp-scraper 0.46.0 → 0.47.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.
Files changed (51) hide show
  1. package/README.md +1 -1
  2. package/dist/bin/api-server.cjs +450 -181
  3. package/dist/bin/api-server.cjs.map +1 -1
  4. package/dist/bin/api-server.js +3 -3
  5. package/dist/bin/mcp-scraper-cli.cjs +1 -1
  6. package/dist/bin/mcp-scraper-cli.cjs.map +1 -1
  7. package/dist/bin/mcp-scraper-cli.js +1 -1
  8. package/dist/bin/mcp-scraper-install.cjs +1 -1
  9. package/dist/bin/mcp-scraper-install.cjs.map +1 -1
  10. package/dist/bin/mcp-scraper-install.js +1 -1
  11. package/dist/bin/mcp-stdio-server.cjs +149 -33
  12. package/dist/bin/mcp-stdio-server.cjs.map +1 -1
  13. package/dist/bin/mcp-stdio-server.js +4 -4
  14. package/dist/bin/paa-harvest.cjs.map +1 -1
  15. package/dist/bin/paa-harvest.js +3 -3
  16. package/dist/{chunk-5X7CJEK3.js → chunk-5S6LYQQO.js} +2 -2
  17. package/dist/chunk-5S6LYQQO.js.map +1 -0
  18. package/dist/{chunk-OVD4E4AP.js → chunk-GV5EGE5M.js} +2 -2
  19. package/dist/chunk-H4NWAF5B.js +7 -0
  20. package/dist/chunk-H4NWAF5B.js.map +1 -0
  21. package/dist/{chunk-T5AFM4G5.js → chunk-IWYYZXBR.js} +2 -2
  22. package/dist/{chunk-RJMOOII7.js → chunk-JH7A4HA7.js} +2 -2
  23. package/dist/{chunk-JFOT5JEL.js → chunk-MW3ET532.js} +2 -2
  24. package/dist/{chunk-WT2UHDSE.js → chunk-TV6KPZ6J.js} +2 -2
  25. package/dist/{chunk-BP2IUIAH.js → chunk-XCGQBGDA.js} +192 -38
  26. package/dist/chunk-XCGQBGDA.js.map +1 -0
  27. package/dist/{db-4ABEYNDM.js → db-W3RPRILW.js} +2 -2
  28. package/dist/{extract-bundle-DYMQRQWG.js → extract-bundle-DXWWQER6.js} +3 -3
  29. package/dist/index.cjs.map +1 -1
  30. package/dist/index.js +3 -3
  31. package/dist/{location-data-repository-HDNCU4Z4.js → location-data-repository-2FJVMTZ2.js} +3 -3
  32. package/dist/{server-SMEHT3OU.js → server-OHMZJRSB.js} +237 -124
  33. package/dist/server-OHMZJRSB.js.map +1 -0
  34. package/dist/{site-extract-repository-G723PZIL.js → site-extract-repository-UULQAGO4.js} +3 -3
  35. package/dist/{worker-4LZGRHDA.js → worker-3QX7LG62.js} +5 -5
  36. package/package.json +2 -2
  37. package/dist/chunk-5X7CJEK3.js.map +0 -1
  38. package/dist/chunk-BP2IUIAH.js.map +0 -1
  39. package/dist/chunk-TQKQK7OV.js +0 -7
  40. package/dist/chunk-TQKQK7OV.js.map +0 -1
  41. package/dist/server-SMEHT3OU.js.map +0 -1
  42. /package/dist/{chunk-OVD4E4AP.js.map → chunk-GV5EGE5M.js.map} +0 -0
  43. /package/dist/{chunk-T5AFM4G5.js.map → chunk-IWYYZXBR.js.map} +0 -0
  44. /package/dist/{chunk-RJMOOII7.js.map → chunk-JH7A4HA7.js.map} +0 -0
  45. /package/dist/{chunk-JFOT5JEL.js.map → chunk-MW3ET532.js.map} +0 -0
  46. /package/dist/{chunk-WT2UHDSE.js.map → chunk-TV6KPZ6J.js.map} +0 -0
  47. /package/dist/{db-4ABEYNDM.js.map → db-W3RPRILW.js.map} +0 -0
  48. /package/dist/{extract-bundle-DYMQRQWG.js.map → extract-bundle-DXWWQER6.js.map} +0 -0
  49. /package/dist/{location-data-repository-HDNCU4Z4.js.map → location-data-repository-2FJVMTZ2.js.map} +0 -0
  50. /package/dist/{site-extract-repository-G723PZIL.js.map → site-extract-repository-UULQAGO4.js.map} +0 -0
  51. /package/dist/{worker-4LZGRHDA.js.map → worker-3QX7LG62.js.map} +0 -0
@@ -11,7 +11,7 @@ import "../chunk-G3P3ZDB4.js";
11
11
  import "../chunk-3ZUBQQPQ.js";
12
12
  import {
13
13
  PACKAGE_VERSION
14
- } from "../chunk-TQKQK7OV.js";
14
+ } from "../chunk-H4NWAF5B.js";
15
15
 
16
16
  // src/cli/human-cli.ts
17
17
  import { Command } from "commander";
@@ -107,7 +107,7 @@ function renderInstallTerminal(options) {
107
107
  }
108
108
 
109
109
  // src/version.ts
110
- var PACKAGE_VERSION = "0.46.0";
110
+ var PACKAGE_VERSION = "0.47.0";
111
111
 
112
112
  // bin/mcp-scraper-install.ts
113
113
  var noColor = process.argv.includes("--no-color") || process.env.NO_COLOR !== void 0 || process.env.FORCE_COLOR === "0" || !process.stdout.isTTY;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/install-terminal.ts","../../src/version.ts","../../bin/mcp-scraper-install.ts"],"sourcesContent":["export interface InstallTerminalOptions {\n color?: boolean\n version: string\n apiKeyConfigured?: boolean\n}\n\ntype Tone = 'cyan' | 'lime' | 'amber' | 'red' | 'muted' | 'bold'\n\nconst CODES: Record<Tone | 'reset', string> = {\n reset: '\\x1b[0m',\n cyan: '\\x1b[36m',\n lime: '\\x1b[32m',\n amber: '\\x1b[33m',\n red: '\\x1b[31m',\n muted: '\\x1b[90m',\n bold: '\\x1b[1m',\n}\n\nfunction colorize(value: string, tone: Tone, enabled: boolean): string {\n if (!enabled) return value\n return `${CODES[tone]}${value}${CODES.reset}`\n}\n\nfunction toolRow(label: string, tools: string[], enabled: boolean): string {\n const padded = label.padEnd(9, ' ')\n return ` ${colorize(padded, 'muted', enabled)} ${tools.join(colorize(' . ', 'muted', enabled))}`\n}\n\nexport function renderInstallTerminal(options: InstallTerminalOptions): string {\n const color = options.color ?? true\n const apiKeyValue = options.apiKeyConfigured ? '$MCP_SCRAPER_API_KEY' : 'sk_live_your_key'\n const ascii = String.raw`\n __ __ ____ ____ \n| \\/ |/ ___| _ \\\n| |\\/| | | | |_) |\n| | | | |___| __/\n|_| |_|\\____|_|\n\n ____ ____ ____ _ ____ _____ ____\n/ ___| / ___| _ \\ / \\ | _ \\| ____| _ \\\n\\___ \\| | | |_) | / _ \\ | |_) | _| | |_) |\n ___) | |___| _ < / ___ \\| __/| |___| _ <\n|____/ \\____|_| \\_\\/_/ \\_\\_| |_____|_| \\_\\\n`\n\n const claudeCommand = [\n `MCP_SCRAPER_API_KEY=${apiKeyValue} npx -y -p mcp-scraper@latest \\\\`,\n ' mcp-scraper-cli agent install claude --apply',\n ].join('\\n')\n\n const codexConfig = [\n '[mcp_servers.mcp-scraper]',\n 'command = \"npx\"',\n 'args = [\"-y\", \"-p\", \"mcp-scraper@latest\", \"mcp-scraper\"]',\n `env = { MCP_SCRAPER_API_KEY = \"${apiKeyValue}\" }`,\n ].join('\\n')\n\n return [\n colorize(`mcp-scraper v${options.version}`, 'bold', color),\n colorize('> mcp-scraper-install', 'muted', color),\n colorize(ascii, 'amber', color),\n `${colorize('MCP Scraper Agent', 'cyan', color)} . v${options.version} . mcpscraper.dev`,\n '1/1 install surfaces ready',\n colorize('Newest: any approved connection read can become an indexed Memory snapshot in one call. OAuth stays tenant-isolated and provider content is redacted and marked untrusted.', 'lime', color),\n '',\n `${colorize('Tools', 'cyan', color)} ${colorize('(220 MCP tools)', 'muted', color)}`,\n toolRow('search', ['harvest_paa', 'search_serp', 'maps_search', 'maps_place_intel'], color),\n toolRow('extract', ['extract_url', 'map_site_urls', 'extract_site', 'audit_site', 'directory_workflow'], color),\n toolRow('build', ['create_editorial_reading_room', 'rank_tracker_workflow', 'portable HTML'], color),\n toolRow('media', ['youtube_harvest', 'youtube_transcribe', 'facebook_ad_search', 'facebook_page_intel', 'facebook_ad_transcribe', 'facebook_video_transcribe', 'instagram_profile_content', 'instagram_media_download', 'reddit_thread'], color),\n toolRow('browser', ['browser_open', 'browser_profile_connect', 'browser_profile_list', 'browser_close', 'browser_screenshot', 'browser_read', 'browser_locate', 'browser_replay_mark', 'browser_replay_annotate'], color),\n toolRow('connect', ['list_service_connections', 'describe_service_connection_tool', 'import_service_connection_to_memory', 'export_connected_service_data', 'renew_connected_data_download', 'read_service_connection', 'call_service_connection_action'], color),\n toolRow('commons', ['commons_search_entities', 'commons_prepare_entity', 'commons_submit_entity', 'commons_prepare_publication', 'commons_claim_publication', 'commons_publish_editorial', 'commons_get_publication'], color),\n toolRow('account', ['credits_info', 'reports', 'MCP resources'], color),\n toolRow('memory', ['memory-put', 'memory-get', 'memory-search', 'list-vaults', 'record-fact', 'list-scheduled-actions'], color),\n `${colorize('Workflows', 'cyan', color)} ${colorize('(MCP + CLI + API)', 'muted', color)}`,\n toolRow('route', ['workflow_list', 'workflow_suggest', 'workflow_run', 'workflow_step', 'workflow_status', 'workflow_artifact_read'], color),\n toolRow('seo', ['directory', 'agent-packet', 'competitive audit', 'map/serp comparison', 'PAA/AIO briefs', 'scheduled runs'], color),\n '',\n colorize('Usage tips:', 'amber', color),\n 'Run mcp-scraper-install for this visible card. Run mcp-scraper-cli for setup utilities and subcommands.',\n 'Run mcp-scraper in a human terminal to print this card; MCP clients get the same command as a silent stdio server.',\n 'Explicit card command: npx -y -p mcp-scraper@latest mcp-scraper-install',\n 'Hosted browser sessions use direct/no-proxy egress by default.',\n 'Customer auth setup: run browser_profile_connect, send the watch_url, let the user sign in, then call browser_profile_list until AUTHENTICATED.',\n 'Connected account ranges: call export_connected_service_data once. It handles Gmail, Calendar, Zoom, and Resend pagination; do not loop read_service_connection over individual records.',\n 'Connected account RAG: call import_service_connection_to_memory for one bounded approved read. It writes a redacted, untrusted snapshot to a stable Memory path and embeds it for search.',\n 'Stack logins / reconnect: run browser_profile_connect again with the same profile name and another domain to add accounts or refresh a login.',\n 'Start with workflow_suggest for broad jobs like market analysis, ICP research, CRO audits, brand briefs, content gaps, and AI visibility.',\n 'For MCP clients, use mcp-scraper so one install can mix SERP, Maps, browser, reports, and saved MCP resources.',\n 'If you hit the concurrency limit, add an extra slot for $5/month with mcp-scraper-cli billing concurrency checkout.',\n '',\n `${colorize('Ready.', 'lime', color)} Install the combined MCP server with one command:`,\n '',\n colorize('Setup doctor', 'amber', color),\n 'npx -y -p mcp-scraper@latest mcp-scraper-cli doctor',\n '',\n colorize('Hosted profile setup', 'amber', color),\n 'In your MCP client, call browser_profile_connect with email=\"seo@example.com\" and domain=\"chatgpt.com\".',\n 'Give the returned watch_url to the user. After they sign in, call browser_profile_list, then browser_open with the returned profile. Add more logins by calling browser_profile_connect again with the same profile and a new domain.',\n '',\n colorize('Claude Code one-command setup', 'amber', color),\n claudeCommand,\n 'Then fully exit Claude Code and open a new Claude terminal. Check with: claude mcp list',\n '',\n colorize('Codex config', 'amber', color),\n codexConfig,\n '',\n colorize('Claude Desktop Extension', 'amber', color),\n 'Download: https://mcpscraper.dev/downloads/mcp-scraper.mcpb',\n '',\n colorize('Safety note:', 'muted', color),\n 'mcp-scraper prints this card only when stdin/stdout are an interactive TTY. In MCP clients it writes only JSON-RPC to stdout.',\n 'Use --stdio or MCP_SCRAPER_FORCE_STDIO=1 to force server mode from a terminal.',\n '',\n ].join('\\n')\n}\n","export const PACKAGE_VERSION = '0.46.0'\n","#!/usr/bin/env node\nimport { renderInstallTerminal } from '../src/install-terminal.js'\nimport { PACKAGE_VERSION } from '../src/version.js'\n\nconst noColor =\n process.argv.includes('--no-color') ||\n process.env.NO_COLOR !== undefined ||\n process.env.FORCE_COLOR === '0' ||\n !process.stdout.isTTY\n\nconst help = process.argv.includes('--help') || process.argv.includes('-h')\nif (help) {\n process.stdout.write([\n 'Usage: mcp-scraper-install [--no-color]',\n '',\n 'Prints the branded MCP Scraper terminal install card and copyable install commands.',\n 'mcp-scraper prints the same card in a human terminal and runs as the MCP stdio server in clients.',\n '',\n ].join('\\n'))\n process.exit(0)\n}\n\nprocess.stdout.write(renderInstallTerminal({\n version: PACKAGE_VERSION,\n color: !noColor,\n apiKeyConfigured: Boolean(process.env.MCP_SCRAPER_API_KEY?.trim()),\n}))\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/install-terminal.ts","../../src/version.ts","../../bin/mcp-scraper-install.ts"],"sourcesContent":["export interface InstallTerminalOptions {\n color?: boolean\n version: string\n apiKeyConfigured?: boolean\n}\n\ntype Tone = 'cyan' | 'lime' | 'amber' | 'red' | 'muted' | 'bold'\n\nconst CODES: Record<Tone | 'reset', string> = {\n reset: '\\x1b[0m',\n cyan: '\\x1b[36m',\n lime: '\\x1b[32m',\n amber: '\\x1b[33m',\n red: '\\x1b[31m',\n muted: '\\x1b[90m',\n bold: '\\x1b[1m',\n}\n\nfunction colorize(value: string, tone: Tone, enabled: boolean): string {\n if (!enabled) return value\n return `${CODES[tone]}${value}${CODES.reset}`\n}\n\nfunction toolRow(label: string, tools: string[], enabled: boolean): string {\n const padded = label.padEnd(9, ' ')\n return ` ${colorize(padded, 'muted', enabled)} ${tools.join(colorize(' . ', 'muted', enabled))}`\n}\n\nexport function renderInstallTerminal(options: InstallTerminalOptions): string {\n const color = options.color ?? true\n const apiKeyValue = options.apiKeyConfigured ? '$MCP_SCRAPER_API_KEY' : 'sk_live_your_key'\n const ascii = String.raw`\n __ __ ____ ____ \n| \\/ |/ ___| _ \\\n| |\\/| | | | |_) |\n| | | | |___| __/\n|_| |_|\\____|_|\n\n ____ ____ ____ _ ____ _____ ____\n/ ___| / ___| _ \\ / \\ | _ \\| ____| _ \\\n\\___ \\| | | |_) | / _ \\ | |_) | _| | |_) |\n ___) | |___| _ < / ___ \\| __/| |___| _ <\n|____/ \\____|_| \\_\\/_/ \\_\\_| |_____|_| \\_\\\n`\n\n const claudeCommand = [\n `MCP_SCRAPER_API_KEY=${apiKeyValue} npx -y -p mcp-scraper@latest \\\\`,\n ' mcp-scraper-cli agent install claude --apply',\n ].join('\\n')\n\n const codexConfig = [\n '[mcp_servers.mcp-scraper]',\n 'command = \"npx\"',\n 'args = [\"-y\", \"-p\", \"mcp-scraper@latest\", \"mcp-scraper\"]',\n `env = { MCP_SCRAPER_API_KEY = \"${apiKeyValue}\" }`,\n ].join('\\n')\n\n return [\n colorize(`mcp-scraper v${options.version}`, 'bold', color),\n colorize('> mcp-scraper-install', 'muted', color),\n colorize(ascii, 'amber', color),\n `${colorize('MCP Scraper Agent', 'cyan', color)} . v${options.version} . mcpscraper.dev`,\n '1/1 install surfaces ready',\n colorize('Newest: any approved connection read can become an indexed Memory snapshot in one call. OAuth stays tenant-isolated and provider content is redacted and marked untrusted.', 'lime', color),\n '',\n `${colorize('Tools', 'cyan', color)} ${colorize('(220 MCP tools)', 'muted', color)}`,\n toolRow('search', ['harvest_paa', 'search_serp', 'maps_search', 'maps_place_intel'], color),\n toolRow('extract', ['extract_url', 'map_site_urls', 'extract_site', 'audit_site', 'directory_workflow'], color),\n toolRow('build', ['create_editorial_reading_room', 'rank_tracker_workflow', 'portable HTML'], color),\n toolRow('media', ['youtube_harvest', 'youtube_transcribe', 'facebook_ad_search', 'facebook_page_intel', 'facebook_ad_transcribe', 'facebook_video_transcribe', 'instagram_profile_content', 'instagram_media_download', 'reddit_thread'], color),\n toolRow('browser', ['browser_open', 'browser_profile_connect', 'browser_profile_list', 'browser_close', 'browser_screenshot', 'browser_read', 'browser_locate', 'browser_replay_mark', 'browser_replay_annotate'], color),\n toolRow('connect', ['list_service_connections', 'describe_service_connection_tool', 'import_service_connection_to_memory', 'export_connected_service_data', 'renew_connected_data_download', 'read_service_connection', 'call_service_connection_action'], color),\n toolRow('commons', ['commons_search_entities', 'commons_prepare_entity', 'commons_submit_entity', 'commons_prepare_publication', 'commons_claim_publication', 'commons_publish_editorial', 'commons_get_publication'], color),\n toolRow('account', ['credits_info', 'reports', 'MCP resources'], color),\n toolRow('memory', ['memory-put', 'memory-get', 'memory-search', 'list-vaults', 'record-fact', 'list-scheduled-actions'], color),\n `${colorize('Workflows', 'cyan', color)} ${colorize('(MCP + CLI + API)', 'muted', color)}`,\n toolRow('route', ['workflow_list', 'workflow_suggest', 'workflow_run', 'workflow_step', 'workflow_status', 'workflow_artifact_read'], color),\n toolRow('seo', ['directory', 'agent-packet', 'competitive audit', 'map/serp comparison', 'PAA/AIO briefs', 'scheduled runs'], color),\n '',\n colorize('Usage tips:', 'amber', color),\n 'Run mcp-scraper-install for this visible card. Run mcp-scraper-cli for setup utilities and subcommands.',\n 'Run mcp-scraper in a human terminal to print this card; MCP clients get the same command as a silent stdio server.',\n 'Explicit card command: npx -y -p mcp-scraper@latest mcp-scraper-install',\n 'Hosted browser sessions use direct/no-proxy egress by default.',\n 'Customer auth setup: run browser_profile_connect, send the watch_url, let the user sign in, then call browser_profile_list until AUTHENTICATED.',\n 'Connected account ranges: call export_connected_service_data once. It handles Gmail, Calendar, Zoom, and Resend pagination; do not loop read_service_connection over individual records.',\n 'Connected account RAG: call import_service_connection_to_memory for one bounded approved read. It writes a redacted, untrusted snapshot to a stable Memory path and embeds it for search.',\n 'Stack logins / reconnect: run browser_profile_connect again with the same profile name and another domain to add accounts or refresh a login.',\n 'Start with workflow_suggest for broad jobs like market analysis, ICP research, CRO audits, brand briefs, content gaps, and AI visibility.',\n 'For MCP clients, use mcp-scraper so one install can mix SERP, Maps, browser, reports, and saved MCP resources.',\n 'If you hit the concurrency limit, add an extra slot for $5/month with mcp-scraper-cli billing concurrency checkout.',\n '',\n `${colorize('Ready.', 'lime', color)} Install the combined MCP server with one command:`,\n '',\n colorize('Setup doctor', 'amber', color),\n 'npx -y -p mcp-scraper@latest mcp-scraper-cli doctor',\n '',\n colorize('Hosted profile setup', 'amber', color),\n 'In your MCP client, call browser_profile_connect with email=\"seo@example.com\" and domain=\"chatgpt.com\".',\n 'Give the returned watch_url to the user. After they sign in, call browser_profile_list, then browser_open with the returned profile. Add more logins by calling browser_profile_connect again with the same profile and a new domain.',\n '',\n colorize('Claude Code one-command setup', 'amber', color),\n claudeCommand,\n 'Then fully exit Claude Code and open a new Claude terminal. Check with: claude mcp list',\n '',\n colorize('Codex config', 'amber', color),\n codexConfig,\n '',\n colorize('Claude Desktop Extension', 'amber', color),\n 'Download: https://mcpscraper.dev/downloads/mcp-scraper.mcpb',\n '',\n colorize('Safety note:', 'muted', color),\n 'mcp-scraper prints this card only when stdin/stdout are an interactive TTY. In MCP clients it writes only JSON-RPC to stdout.',\n 'Use --stdio or MCP_SCRAPER_FORCE_STDIO=1 to force server mode from a terminal.',\n '',\n ].join('\\n')\n}\n","export const PACKAGE_VERSION = '0.47.0'\n","#!/usr/bin/env node\nimport { renderInstallTerminal } from '../src/install-terminal.js'\nimport { PACKAGE_VERSION } from '../src/version.js'\n\nconst noColor =\n process.argv.includes('--no-color') ||\n process.env.NO_COLOR !== undefined ||\n process.env.FORCE_COLOR === '0' ||\n !process.stdout.isTTY\n\nconst help = process.argv.includes('--help') || process.argv.includes('-h')\nif (help) {\n process.stdout.write([\n 'Usage: mcp-scraper-install [--no-color]',\n '',\n 'Prints the branded MCP Scraper terminal install card and copyable install commands.',\n 'mcp-scraper prints the same card in a human terminal and runs as the MCP stdio server in clients.',\n '',\n ].join('\\n'))\n process.exit(0)\n}\n\nprocess.stdout.write(renderInstallTerminal({\n version: PACKAGE_VERSION,\n color: !noColor,\n apiKeyConfigured: Boolean(process.env.MCP_SCRAPER_API_KEY?.trim()),\n}))\n"],"mappings":"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","names":[]}
@@ -4,7 +4,7 @@ import {
4
4
  } from "../chunk-QSUGPYGQ.js";
5
5
  import {
6
6
  PACKAGE_VERSION
7
- } from "../chunk-TQKQK7OV.js";
7
+ } from "../chunk-H4NWAF5B.js";
8
8
 
9
9
  // bin/mcp-scraper-install.ts
10
10
  var noColor = process.argv.includes("--no-color") || process.env.NO_COLOR !== void 0 || process.env.FORCE_COLOR === "0" || !process.stdout.isTTY;
@@ -854,7 +854,7 @@ render();
854
854
  }
855
855
 
856
856
  // src/version.ts
857
- var PACKAGE_VERSION = "0.46.0";
857
+ var PACKAGE_VERSION = "0.47.0";
858
858
 
859
859
  // src/mcp/browser-agent-tool-schemas.ts
860
860
  var import_zod = require("zod");
@@ -7368,13 +7368,33 @@ var ScheduledArtifactSelectionSchema = import_zod3.z.discriminatedUnion("mode",
7368
7368
  templateVersionId: import_zod3.z.string().uuid()
7369
7369
  }).strict()
7370
7370
  ]);
7371
- var ArtifactTemplateConfigSchema = import_zod3.z.object({
7371
+ var EditorialArtifactTemplateConfigSchema = import_zod3.z.object({
7372
7372
  theme: import_zod3.z.enum(["paper", "ink", "warm"]),
7373
7373
  density: import_zod3.z.enum(["comfortable", "compact"]),
7374
7374
  showSourceRail: import_zod3.z.boolean(),
7375
7375
  showGeneratedAt: import_zod3.z.boolean(),
7376
7376
  brandName: import_zod3.z.string().trim().min(1).max(80).optional()
7377
7377
  }).strict();
7378
+ var PersonalAuthorityFeatureFlagsSchema = import_zod3.z.object({
7379
+ navigation: import_zod3.z.boolean(),
7380
+ socialLinks: import_zod3.z.boolean(),
7381
+ authority: import_zod3.z.boolean(),
7382
+ consultation: import_zod3.z.boolean(),
7383
+ learning: import_zod3.z.boolean(),
7384
+ services: import_zod3.z.boolean(),
7385
+ proof: import_zod3.z.boolean(),
7386
+ finalCta: import_zod3.z.boolean()
7387
+ }).strict();
7388
+ var PersonalAuthorityTemplateConfigSchema = import_zod3.z.object({
7389
+ theme: import_zod3.z.enum(["blue", "slate", "monochrome"]),
7390
+ showGeneratedAt: import_zod3.z.boolean(),
7391
+ brandName: import_zod3.z.string().trim().min(1).max(80).optional(),
7392
+ featureFlags: PersonalAuthorityFeatureFlagsSchema
7393
+ }).strict();
7394
+ var ArtifactTemplateConfigSchema = import_zod3.z.union([
7395
+ EditorialArtifactTemplateConfigSchema,
7396
+ PersonalAuthorityTemplateConfigSchema
7397
+ ]);
7378
7398
  var EditorialReadingRoomV1InputSchema = import_zod3.z.object({
7379
7399
  title: import_zod3.z.string().trim().min(1).max(300),
7380
7400
  dek: import_zod3.z.string().trim().max(1e3).optional(),
@@ -7407,25 +7427,104 @@ var EditorialReadingRoomV1InputSchema = import_zod3.z.object({
7407
7427
  });
7408
7428
  }
7409
7429
  });
7410
- var CreateArtifactTemplateInputSchema = import_zod3.z.object({
7411
- presetKey: import_zod3.z.literal("editorial_reading_room_v1"),
7430
+ var PersonalAuthorityActionSchema = import_zod3.z.object({
7431
+ label: import_zod3.z.string().trim().min(1).max(120),
7432
+ href: import_zod3.z.string().trim().min(1).max(2e3)
7433
+ }).strict();
7434
+ var PersonalAuthorityV1InputSchema = import_zod3.z.object({
7435
+ name: import_zod3.z.string().trim().min(1).max(160),
7436
+ professionalTitle: import_zod3.z.string().trim().min(1).max(300),
7437
+ summary: import_zod3.z.string().trim().min(1).max(1500),
7438
+ location: import_zod3.z.string().trim().max(160).optional(),
7439
+ email: import_zod3.z.string().trim().email().max(320).optional(),
7440
+ phone: import_zod3.z.string().trim().max(80).optional(),
7441
+ primaryAction: PersonalAuthorityActionSchema,
7442
+ secondaryAction: PersonalAuthorityActionSchema.optional(),
7443
+ socialLinks: import_zod3.z.array(import_zod3.z.object({
7444
+ label: import_zod3.z.string().trim().min(1).max(60),
7445
+ href: import_zod3.z.string().trim().min(1).max(2e3)
7446
+ }).strict()).max(8).default([]),
7447
+ authority: import_zod3.z.object({
7448
+ heading: import_zod3.z.string().trim().min(1).max(500),
7449
+ paragraphs: import_zod3.z.array(import_zod3.z.string().trim().min(1).max(2e3)).min(1).max(6)
7450
+ }).strict().optional(),
7451
+ consultation: import_zod3.z.object({
7452
+ eyebrow: import_zod3.z.string().trim().max(120).optional(),
7453
+ heading: import_zod3.z.string().trim().min(1).max(400),
7454
+ summary: import_zod3.z.string().trim().min(1).max(1e3),
7455
+ action: PersonalAuthorityActionSchema
7456
+ }).strict().optional(),
7457
+ learning: import_zod3.z.object({
7458
+ heading: import_zod3.z.string().trim().min(1).max(400),
7459
+ summary: import_zod3.z.string().trim().max(1e3).optional(),
7460
+ topics: import_zod3.z.array(import_zod3.z.object({
7461
+ title: import_zod3.z.string().trim().min(1).max(160),
7462
+ headline: import_zod3.z.string().trim().min(1).max(300),
7463
+ summary: import_zod3.z.string().trim().min(1).max(1500),
7464
+ href: import_zod3.z.string().trim().min(1).max(2e3).optional()
7465
+ }).strict()).min(1).max(12)
7466
+ }).strict().optional(),
7467
+ services: import_zod3.z.object({
7468
+ heading: import_zod3.z.string().trim().min(1).max(400),
7469
+ summary: import_zod3.z.string().trim().max(1e3).optional(),
7470
+ offers: import_zod3.z.array(import_zod3.z.object({
7471
+ title: import_zod3.z.string().trim().min(1).max(160),
7472
+ description: import_zod3.z.string().trim().min(1).max(1500),
7473
+ action: PersonalAuthorityActionSchema.optional()
7474
+ }).strict()).min(1).max(6)
7475
+ }).strict().optional(),
7476
+ proof: import_zod3.z.object({
7477
+ heading: import_zod3.z.string().trim().min(1).max(400),
7478
+ summary: import_zod3.z.string().trim().max(1e3).optional(),
7479
+ testimonials: import_zod3.z.array(import_zod3.z.object({
7480
+ quote: import_zod3.z.string().trim().min(1).max(1500),
7481
+ person: import_zod3.z.string().trim().min(1).max(160),
7482
+ role: import_zod3.z.string().trim().max(200).optional()
7483
+ }).strict()).min(1).max(12)
7484
+ }).strict().optional(),
7485
+ finalCta: import_zod3.z.object({
7486
+ eyebrow: import_zod3.z.string().trim().max(120).optional(),
7487
+ heading: import_zod3.z.string().trim().min(1).max(400),
7488
+ summary: import_zod3.z.string().trim().max(1e3).optional(),
7489
+ action: PersonalAuthorityActionSchema
7490
+ }).strict().optional()
7491
+ }).strict();
7492
+ var TemplateIdentityFields = {
7412
7493
  name: import_zod3.z.string().trim().min(1).max(120),
7413
7494
  description: import_zod3.z.string().trim().max(500).default(""),
7414
- config: ArtifactTemplateConfigSchema,
7415
7495
  authoringInstructions: import_zod3.z.string().trim().max(4e3)
7416
- }).strict();
7417
- var UpdateArtifactTemplateInputSchema = CreateArtifactTemplateInputSchema.omit({ presetKey: true }).partial().refine((input) => Object.keys(input).length > 0, "At least one field is required");
7418
- var ArtifactTemplateVersionSchema = import_zod3.z.object({
7496
+ };
7497
+ var CreateArtifactTemplateInputSchema = import_zod3.z.discriminatedUnion("presetKey", [
7498
+ import_zod3.z.object({
7499
+ presetKey: import_zod3.z.literal("editorial_reading_room_v1"),
7500
+ ...TemplateIdentityFields,
7501
+ config: EditorialArtifactTemplateConfigSchema
7502
+ }).strict(),
7503
+ import_zod3.z.object({
7504
+ presetKey: import_zod3.z.literal("personal_authority_v1"),
7505
+ ...TemplateIdentityFields,
7506
+ config: PersonalAuthorityTemplateConfigSchema
7507
+ }).strict()
7508
+ ]);
7509
+ var UpdateArtifactTemplateInputSchema = import_zod3.z.object({
7510
+ name: TemplateIdentityFields.name.optional(),
7511
+ description: import_zod3.z.string().trim().max(500).optional(),
7512
+ config: ArtifactTemplateConfigSchema.optional(),
7513
+ authoringInstructions: TemplateIdentityFields.authoringInstructions.optional()
7514
+ }).strict().refine((input) => Object.keys(input).length > 0, "At least one field is required");
7515
+ var ArtifactTemplateVersionBase = {
7419
7516
  templateVersionId: import_zod3.z.string().uuid(),
7420
7517
  templateId: import_zod3.z.string().uuid(),
7421
7518
  version: import_zod3.z.number().int().positive(),
7422
- rendererKey: import_zod3.z.literal("editorial_reading_room_v1"),
7423
7519
  rendererVersion: import_zod3.z.literal(1),
7424
7520
  inputContractVersion: import_zod3.z.literal(1),
7425
- config: ArtifactTemplateConfigSchema,
7426
7521
  authoringInstructions: import_zod3.z.string().max(4e3),
7427
7522
  createdAt: import_zod3.z.string().datetime()
7428
- }).strict();
7523
+ };
7524
+ var ArtifactTemplateVersionSchema = import_zod3.z.discriminatedUnion("rendererKey", [
7525
+ import_zod3.z.object({ ...ArtifactTemplateVersionBase, rendererKey: import_zod3.z.literal("editorial_reading_room_v1"), config: EditorialArtifactTemplateConfigSchema }).strict(),
7526
+ import_zod3.z.object({ ...ArtifactTemplateVersionBase, rendererKey: import_zod3.z.literal("personal_authority_v1"), config: PersonalAuthorityTemplateConfigSchema }).strict()
7527
+ ]);
7429
7528
  var ArtifactTemplateSchema = import_zod3.z.object({
7430
7529
  templateId: import_zod3.z.string().uuid(),
7431
7530
  name: import_zod3.z.string().min(1).max(120),
@@ -7440,9 +7539,15 @@ var ArtifactTemplateSchema = import_zod3.z.object({
7440
7539
  var ListArtifactTemplatesResponseSchema = import_zod3.z.object({
7441
7540
  ok: import_zod3.z.literal(true),
7442
7541
  presets: import_zod3.z.array(import_zod3.z.object({
7443
- presetKey: import_zod3.z.literal("editorial_reading_room_v1"),
7542
+ presetKey: import_zod3.z.enum(["editorial_reading_room_v1", "personal_authority_v1"]),
7444
7543
  name: import_zod3.z.string(),
7445
7544
  description: import_zod3.z.string(),
7545
+ mark: import_zod3.z.string().min(1).max(4),
7546
+ featureFlags: import_zod3.z.array(import_zod3.z.object({
7547
+ key: import_zod3.z.string().min(1),
7548
+ label: import_zod3.z.string().min(1),
7549
+ description: import_zod3.z.string().min(1)
7550
+ }).strict()),
7446
7551
  defaultConfig: ArtifactTemplateConfigSchema
7447
7552
  }).strict()),
7448
7553
  templates: import_zod3.z.array(ArtifactTemplateSchema)
@@ -7457,7 +7562,7 @@ var ScheduledRunArtifactOutputSchema = import_zod3.z.object({
7457
7562
  artifactId: import_zod3.z.string().min(1).max(1e3),
7458
7563
  templateId: import_zod3.z.string().uuid(),
7459
7564
  templateVersionId: import_zod3.z.string().uuid(),
7460
- rendererKey: import_zod3.z.literal("editorial_reading_room_v1"),
7565
+ rendererKey: import_zod3.z.enum(["editorial_reading_room_v1", "personal_authority_v1"]),
7461
7566
  rendererVersion: import_zod3.z.literal(1),
7462
7567
  mimeType: import_zod3.z.literal("text/html"),
7463
7568
  title: import_zod3.z.string().min(1).max(300),
@@ -7509,18 +7614,29 @@ var GetScheduledRunResponseSchema = import_zod3.z.object({
7509
7614
  ok: import_zod3.z.literal(true),
7510
7615
  run: ScheduledRunResultSchema
7511
7616
  }).strict();
7512
- var InternalScheduledArtifactRenderRequestSchema = import_zod3.z.object({
7617
+ var InternalScheduledArtifactRenderRequestBase = {
7513
7618
  identity: import_zod3.z.string().min(1).max(320),
7514
7619
  ownerId: import_zod3.z.string().regex(/^[a-f0-9]{24}$/),
7515
7620
  runId: import_zod3.z.string().min(1).max(200),
7516
7621
  scheduleId: import_zod3.z.string().uuid(),
7517
7622
  templateId: import_zod3.z.string().uuid(),
7518
7623
  templateVersionId: import_zod3.z.string().uuid(),
7519
- rendererKey: import_zod3.z.literal("editorial_reading_room_v1"),
7520
- rendererVersion: import_zod3.z.literal(1),
7521
- config: ArtifactTemplateConfigSchema,
7522
- input: EditorialReadingRoomV1InputSchema
7523
- }).strict();
7624
+ rendererVersion: import_zod3.z.literal(1)
7625
+ };
7626
+ var InternalScheduledArtifactRenderRequestSchema = import_zod3.z.discriminatedUnion("rendererKey", [
7627
+ import_zod3.z.object({
7628
+ ...InternalScheduledArtifactRenderRequestBase,
7629
+ rendererKey: import_zod3.z.literal("editorial_reading_room_v1"),
7630
+ config: EditorialArtifactTemplateConfigSchema,
7631
+ input: EditorialReadingRoomV1InputSchema
7632
+ }).strict(),
7633
+ import_zod3.z.object({
7634
+ ...InternalScheduledArtifactRenderRequestBase,
7635
+ rendererKey: import_zod3.z.literal("personal_authority_v1"),
7636
+ config: PersonalAuthorityTemplateConfigSchema,
7637
+ input: PersonalAuthorityV1InputSchema
7638
+ }).strict()
7639
+ ]);
7524
7640
  var CreateScheduledRunViewLinkInputSchema = import_zod3.z.object({
7525
7641
  artifactId: import_zod3.z.string().min(1).max(1e3),
7526
7642
  expiresInDays: import_zod3.z.number().int().min(1).max(30).default(7)
@@ -14231,40 +14347,40 @@ function annotations(title, readOnlyHint, destructiveHint = false, idempotentHin
14231
14347
  }
14232
14348
  function registerScheduledResultsMcpTools(server, executor) {
14233
14349
  server.registerTool("list_artifact_templates", {
14234
- title: "List Artifact Templates",
14235
- description: "List approved built-in artifact presets and saved immutable template versions. A preset must be saved before an automation can select it.",
14350
+ title: "List Templates",
14351
+ description: "List registered presentation presets and saved immutable template versions. A preset must be saved before an automation can select it.",
14236
14352
  inputSchema: import_zod10.z.object({
14237
14353
  status: import_zod10.z.enum(["active", "archived", "all"]).default("active")
14238
14354
  }).strict(),
14239
14355
  outputSchema: recordOutputSchema("list_artifact_templates", McpListArtifactTemplatesOutputSchema),
14240
- annotations: annotations("List Artifact Templates", true)
14356
+ annotations: annotations("List Templates", true)
14241
14357
  }, (input) => executor.call(
14242
14358
  `/artifact-templates?status=${encodeURIComponent(input.status)}`,
14243
14359
  ListArtifactTemplatesOutputSchema
14244
14360
  ));
14245
14361
  server.registerTool("get_artifact_template", {
14246
- title: "Get Artifact Template",
14247
- description: "Read one saved artifact template and its immutable version history.",
14362
+ title: "Get Template",
14363
+ description: "Read one saved template, its renderer family, configuration, and immutable version history.",
14248
14364
  inputSchema: import_zod10.z.object({ templateId: TemplateIdSchema }).strict(),
14249
14365
  outputSchema: recordOutputSchema("get_artifact_template", McpArtifactTemplateOutputSchema),
14250
- annotations: annotations("Get Artifact Template", true)
14366
+ annotations: annotations("Get Template", true)
14251
14367
  }, (input) => executor.call(
14252
14368
  `/artifact-templates/${encodeURIComponent(input.templateId)}`,
14253
14369
  ArtifactTemplateOutputSchema
14254
14370
  ));
14255
14371
  server.registerTool("create_artifact_template", {
14256
- title: "Save Artifact Template",
14257
- description: "Save the approved Editorial Reading Room preset as a user-owned template version 1. Arbitrary HTML, JavaScript, and executable code are not accepted.",
14372
+ title: "Create Template",
14373
+ description: "Create a user-owned template from a registered preset. Customize supported flags and presentation guidance; arbitrary executable code is not accepted.",
14258
14374
  inputSchema: CreateArtifactTemplateInputSchema,
14259
14375
  outputSchema: recordOutputSchema("create_artifact_template", McpArtifactTemplateOutputSchema),
14260
- annotations: annotations("Save Artifact Template", false)
14376
+ annotations: annotations("Create Template", false)
14261
14377
  }, (input) => executor.call("/artifact-templates", ArtifactTemplateOutputSchema, "POST", input));
14262
14378
  server.registerTool("update_artifact_template", {
14263
- title: "Create Artifact Template Version",
14264
- description: "Create the next immutable version of a saved artifact template. Existing automations remain pinned to their exact prior version until explicitly changed.",
14379
+ title: "Update Template",
14380
+ description: "Create the next immutable version of a saved template. Existing automations remain pinned to their exact prior version until explicitly changed.",
14265
14381
  inputSchema: UpdateArtifactTemplateToolInputSchema,
14266
14382
  outputSchema: recordOutputSchema("update_artifact_template", McpArtifactTemplateOutputSchema),
14267
- annotations: annotations("Create Artifact Template Version", false)
14383
+ annotations: annotations("Update Template", false)
14268
14384
  }, (input) => {
14269
14385
  const { templateId, ...body } = input;
14270
14386
  UpdateArtifactTemplateInputSchema.parse(body);
@@ -14276,14 +14392,14 @@ function registerScheduledResultsMcpTools(server, executor) {
14276
14392
  );
14277
14393
  });
14278
14394
  server.registerTool("archive_artifact_template", {
14279
- title: "Archive Artifact Template",
14395
+ title: "Archive Template",
14280
14396
  description: "Archive or restore a saved template without deleting its immutable versions. Existing pinned automations continue to work.",
14281
14397
  inputSchema: import_zod10.z.object({
14282
14398
  templateId: TemplateIdSchema,
14283
14399
  archived: import_zod10.z.boolean()
14284
14400
  }).strict(),
14285
14401
  outputSchema: recordOutputSchema("archive_artifact_template", McpArtifactTemplateOutputSchema),
14286
- annotations: annotations("Archive Artifact Template", false, false, true)
14402
+ annotations: annotations("Archive Template", false, false, true)
14287
14403
  }, (input) => executor.call(
14288
14404
  `/artifact-templates/${encodeURIComponent(input.templateId)}/${input.archived ? "archive" : "restore"}`,
14289
14405
  ArtifactTemplateOutputSchema,