@cesteral/pinterest-mcp 1.0.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/LICENSE.md +201 -0
- package/README.md +348 -0
- package/dist/auth/index.d.ts +3 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +3 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/pinterest-auth-adapter.d.ts +38 -0
- package/dist/auth/pinterest-auth-adapter.d.ts.map +1 -0
- package/dist/auth/pinterest-auth-adapter.js +117 -0
- package/dist/auth/pinterest-auth-adapter.js.map +1 -0
- package/dist/auth/pinterest-auth-strategy.d.ts +13 -0
- package/dist/auth/pinterest-auth-strategy.d.ts.map +1 -0
- package/dist/auth/pinterest-auth-strategy.js +52 -0
- package/dist/auth/pinterest-auth-strategy.js.map +1 -0
- package/dist/config/index.d.ts +120 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +55 -0
- package/dist/config/index.js.map +1 -0
- package/dist/generated/types.d.ts +18119 -0
- package/dist/generated/types.d.ts.map +1 -0
- package/dist/generated/types.js +2 -0
- package/dist/generated/types.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.js +125 -0
- package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.js +105 -0
- package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/creative-upload-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/creative-upload-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/creative-upload-workflow.prompt.js +95 -0
- package/dist/mcp-server/prompts/definitions/creative-upload-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.js +301 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.js +170 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.js +198 -0
- package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.js +188 -0
- package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/reporting-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/reporting-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/reporting-workflow.prompt.js +126 -0
- package/dist/mcp-server/prompts/definitions/reporting-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/targeting-discovery-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/targeting-discovery-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/targeting-discovery-workflow.prompt.js +197 -0
- package/dist/mcp-server/prompts/definitions/targeting-discovery-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.js +93 -0
- package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/troubleshoot-entity.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/troubleshoot-entity.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/troubleshoot-entity.prompt.js +111 -0
- package/dist/mcp-server/prompts/definitions/troubleshoot-entity.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/index.d.ts +9 -0
- package/dist/mcp-server/prompts/index.d.ts.map +1 -0
- package/dist/mcp-server/prompts/index.js +97 -0
- package/dist/mcp-server/prompts/index.js.map +1 -0
- package/dist/mcp-server/resources/definitions/entity-examples.resource.d.ts +4 -0
- package/dist/mcp-server/resources/definitions/entity-examples.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/entity-examples.resource.js +180 -0
- package/dist/mcp-server/resources/definitions/entity-examples.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.d.ts +3 -0
- package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.js +140 -0
- package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/entity-schemas.resource.d.ts +4 -0
- package/dist/mcp-server/resources/definitions/entity-schemas.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/entity-schemas.resource.js +125 -0
- package/dist/mcp-server/resources/definitions/entity-schemas.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/index.d.ts +7 -0
- package/dist/mcp-server/resources/definitions/index.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/index.js +58 -0
- package/dist/mcp-server/resources/definitions/index.js.map +1 -0
- package/dist/mcp-server/resources/definitions/reporting-reference.resource.d.ts +3 -0
- package/dist/mcp-server/resources/definitions/reporting-reference.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/reporting-reference.resource.js +148 -0
- package/dist/mcp-server/resources/definitions/reporting-reference.resource.js.map +1 -0
- package/dist/mcp-server/resources/index.d.ts +3 -0
- package/dist/mcp-server/resources/index.d.ts.map +1 -0
- package/dist/mcp-server/resources/index.js +2 -0
- package/dist/mcp-server/resources/index.js.map +1 -0
- package/dist/mcp-server/resources/types.d.ts +8 -0
- package/dist/mcp-server/resources/types.d.ts.map +1 -0
- package/dist/mcp-server/resources/types.js +2 -0
- package/dist/mcp-server/resources/types.js.map +1 -0
- package/dist/mcp-server/server.d.ts +5 -0
- package/dist/mcp-server/server.d.ts.map +1 -0
- package/dist/mcp-server/server.js +133 -0
- package/dist/mcp-server/server.js.map +1 -0
- package/dist/mcp-server/tools/definitions/adjust-bids.tool.d.ts +209 -0
- package/dist/mcp-server/tools/definitions/adjust-bids.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/adjust-bids.tool.js +141 -0
- package/dist/mcp-server/tools/definitions/adjust-bids.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.d.ts +151 -0
- package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.js +109 -0
- package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-update-entities.tool.d.ts +193 -0
- package/dist/mcp-server/tools/definitions/bulk-update-entities.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-update-entities.tool.js +127 -0
- package/dist/mcp-server/tools/definitions/bulk-update-entities.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-update-status.tool.d.ts +153 -0
- package/dist/mcp-server/tools/definitions/bulk-update-status.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-update-status.tool.js +134 -0
- package/dist/mcp-server/tools/definitions/bulk-update-status.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/check-report-status.tool.d.ts +119 -0
- package/dist/mcp-server/tools/definitions/check-report-status.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/check-report-status.tool.js +91 -0
- package/dist/mcp-server/tools/definitions/check-report-status.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/create-entity.tool.d.ts +113 -0
- package/dist/mcp-server/tools/definitions/create-entity.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/create-entity.tool.js +99 -0
- package/dist/mcp-server/tools/definitions/create-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/delete-entity.tool.d.ts +100 -0
- package/dist/mcp-server/tools/definitions/delete-entity.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/delete-entity.tool.js +110 -0
- package/dist/mcp-server/tools/definitions/delete-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/download-report.tool.d.ts +297 -0
- package/dist/mcp-server/tools/definitions/download-report.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/download-report.tool.js +110 -0
- package/dist/mcp-server/tools/definitions/download-report.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/duplicate-entity.tool.d.ts +105 -0
- package/dist/mcp-server/tools/definitions/duplicate-entity.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/duplicate-entity.tool.js +85 -0
- package/dist/mcp-server/tools/definitions/duplicate-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-ad-preview.tool.d.ts +89 -0
- package/dist/mcp-server/tools/definitions/get-ad-preview.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-ad-preview.tool.js +74 -0
- package/dist/mcp-server/tools/definitions/get-ad-preview.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-audience-estimate.tool.d.ts +85 -0
- package/dist/mcp-server/tools/definitions/get-audience-estimate.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-audience-estimate.tool.js +88 -0
- package/dist/mcp-server/tools/definitions/get-audience-estimate.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-entity.tool.d.ts +76 -0
- package/dist/mcp-server/tools/definitions/get-entity.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-entity.tool.js +71 -0
- package/dist/mcp-server/tools/definitions/get-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-report-breakdowns.tool.d.ts +319 -0
- package/dist/mcp-server/tools/definitions/get-report-breakdowns.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-report-breakdowns.tool.js +183 -0
- package/dist/mcp-server/tools/definitions/get-report-breakdowns.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-report.tool.d.ts +301 -0
- package/dist/mcp-server/tools/definitions/get-report.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-report.tool.js +176 -0
- package/dist/mcp-server/tools/definitions/get-report.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-targeting-options.tool.d.ts +75 -0
- package/dist/mcp-server/tools/definitions/get-targeting-options.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-targeting-options.tool.js +72 -0
- package/dist/mcp-server/tools/definitions/get-targeting-options.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/index.d.ts +25 -0
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/index.js +75 -0
- package/dist/mcp-server/tools/definitions/index.js.map +1 -0
- package/dist/mcp-server/tools/definitions/list-advertisers.tool.d.ts +54 -0
- package/dist/mcp-server/tools/definitions/list-advertisers.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/list-advertisers.tool.js +58 -0
- package/dist/mcp-server/tools/definitions/list-advertisers.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/list-entities.tool.d.ts +180 -0
- package/dist/mcp-server/tools/definitions/list-entities.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/list-entities.tool.js +116 -0
- package/dist/mcp-server/tools/definitions/list-entities.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/search-targeting.tool.d.ts +103 -0
- package/dist/mcp-server/tools/definitions/search-targeting.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/search-targeting.tool.js +98 -0
- package/dist/mcp-server/tools/definitions/search-targeting.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/submit-report.tool.d.ts +164 -0
- package/dist/mcp-server/tools/definitions/submit-report.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/submit-report.tool.js +118 -0
- package/dist/mcp-server/tools/definitions/submit-report.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/update-entity.tool.d.ts +111 -0
- package/dist/mcp-server/tools/definitions/update-entity.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/update-entity.tool.js +89 -0
- package/dist/mcp-server/tools/definitions/update-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/upload-image.tool.d.ts +81 -0
- package/dist/mcp-server/tools/definitions/upload-image.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/upload-image.tool.js +73 -0
- package/dist/mcp-server/tools/definitions/upload-image.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/upload-video.tool.d.ts +82 -0
- package/dist/mcp-server/tools/definitions/upload-video.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/upload-video.tool.js +100 -0
- package/dist/mcp-server/tools/definitions/upload-video.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/validate-entity.tool.d.ts +169 -0
- package/dist/mcp-server/tools/definitions/validate-entity.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/validate-entity.tool.js +154 -0
- package/dist/mcp-server/tools/definitions/validate-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/index.d.ts +2 -0
- package/dist/mcp-server/tools/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/index.js +2 -0
- package/dist/mcp-server/tools/index.js.map +1 -0
- package/dist/mcp-server/tools/utils/entity-mapping.d.ts +22 -0
- package/dist/mcp-server/tools/utils/entity-mapping.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/entity-mapping.js +105 -0
- package/dist/mcp-server/tools/utils/entity-mapping.js.map +1 -0
- package/dist/mcp-server/tools/utils/media-types.d.ts +14 -0
- package/dist/mcp-server/tools/utils/media-types.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/media-types.js +2 -0
- package/dist/mcp-server/tools/utils/media-types.js.map +1 -0
- package/dist/mcp-server/tools/utils/resolve-session.d.ts +4 -0
- package/dist/mcp-server/tools/utils/resolve-session.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/resolve-session.js +6 -0
- package/dist/mcp-server/tools/utils/resolve-session.js.map +1 -0
- package/dist/mcp-server/transports/streamable-http-transport.d.ts +59 -0
- package/dist/mcp-server/transports/streamable-http-transport.d.ts.map +1 -0
- package/dist/mcp-server/transports/streamable-http-transport.js +107 -0
- package/dist/mcp-server/transports/streamable-http-transport.js.map +1 -0
- package/dist/services/pinterest/pinterest-http-client.d.ts +22 -0
- package/dist/services/pinterest/pinterest-http-client.d.ts.map +1 -0
- package/dist/services/pinterest/pinterest-http-client.js +149 -0
- package/dist/services/pinterest/pinterest-http-client.js.map +1 -0
- package/dist/services/pinterest/pinterest-reporting-service.d.ts +60 -0
- package/dist/services/pinterest/pinterest-reporting-service.d.ts.map +1 -0
- package/dist/services/pinterest/pinterest-reporting-service.js +132 -0
- package/dist/services/pinterest/pinterest-reporting-service.js.map +1 -0
- package/dist/services/pinterest/pinterest-service.d.ts +110 -0
- package/dist/services/pinterest/pinterest-service.d.ts.map +1 -0
- package/dist/services/pinterest/pinterest-service.js +238 -0
- package/dist/services/pinterest/pinterest-service.js.map +1 -0
- package/dist/services/session-services.d.ts +21 -0
- package/dist/services/session-services.d.ts.map +1 -0
- package/dist/services/session-services.js +23 -0
- package/dist/services/session-services.js.map +1 -0
- package/dist/types-global/mcp.d.ts +2 -0
- package/dist/types-global/mcp.d.ts.map +1 -0
- package/dist/types-global/mcp.js +2 -0
- package/dist/types-global/mcp.js.map +1 -0
- package/dist/utils/errors/index.d.ts +2 -0
- package/dist/utils/errors/index.d.ts.map +1 -0
- package/dist/utils/errors/index.js +2 -0
- package/dist/utils/errors/index.js.map +1 -0
- package/dist/utils/platform.d.ts +3 -0
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/utils/platform.js +5 -0
- package/dist/utils/platform.js.map +1 -0
- package/dist/utils/security/rate-limiter.d.ts +3 -0
- package/dist/utils/security/rate-limiter.d.ts.map +1 -0
- package/dist/utils/security/rate-limiter.js +5 -0
- package/dist/utils/security/rate-limiter.js.map +1 -0
- package/dist/utils/telemetry/index.d.ts +2 -0
- package/dist/utils/telemetry/index.d.ts.map +1 -0
- package/dist/utils/telemetry/index.js +2 -0
- package/dist/utils/telemetry/index.js.map +1 -0
- package/dist/utils/telemetry/tracing.d.ts +3 -0
- package/dist/utils/telemetry/tracing.d.ts.map +1 -0
- package/dist/utils/telemetry/tracing.js +4 -0
- package/dist/utils/telemetry/tracing.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/generated/types.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { mcpConfig } from "./config/index.js";
|
|
3
|
+
import { createMcpServer, runStdioServer } from "./mcp-server/server.js";
|
|
4
|
+
import { startHttpServer } from "./mcp-server/transports/streamable-http-transport.js";
|
|
5
|
+
import { initializeOpenTelemetry, otelLogMixin } from "@cesteral/shared";
|
|
6
|
+
import { PinterestAccessTokenAdapter } from "./auth/pinterest-auth-adapter.js";
|
|
7
|
+
import { detectTransportMode, createServerLogger, bootstrapMcpServer } from "@cesteral/shared";
|
|
8
|
+
import { createSessionServices, sessionServiceStore } from "./services/session-services.js";
|
|
9
|
+
import { rateLimiter } from "./utils/platform.js";
|
|
10
|
+
const transportMode = detectTransportMode();
|
|
11
|
+
const logger = createServerLogger("pinterest-mcp", transportMode, otelLogMixin());
|
|
12
|
+
async function setupStdioCredentials(sessionId) {
|
|
13
|
+
const accessToken = mcpConfig.pinterestAccessToken;
|
|
14
|
+
const adAccountId = mcpConfig.pinterestAdAccountId;
|
|
15
|
+
if (!accessToken || !adAccountId) {
|
|
16
|
+
logger.warn("No Pinterest credentials found in env vars. " +
|
|
17
|
+
"Set PINTEREST_ACCESS_TOKEN and PINTEREST_AD_ACCOUNT_ID for stdio mode.");
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
const authAdapter = new PinterestAccessTokenAdapter(accessToken, adAccountId, mcpConfig.pinterestApiBaseUrl);
|
|
21
|
+
await authAdapter.validate();
|
|
22
|
+
const services = createSessionServices(authAdapter, {
|
|
23
|
+
baseUrl: mcpConfig.pinterestApiBaseUrl,
|
|
24
|
+
apiVersion: mcpConfig.pinterestApiVersion,
|
|
25
|
+
reportPollIntervalMs: mcpConfig.pinterestReportPollIntervalMs,
|
|
26
|
+
reportMaxPollAttempts: mcpConfig.pinterestReportMaxPollAttempts,
|
|
27
|
+
}, logger, rateLimiter);
|
|
28
|
+
sessionServiceStore.set(sessionId, services);
|
|
29
|
+
logger.info("Stdio session services created successfully");
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
bootstrapMcpServer({
|
|
33
|
+
serviceName: "pinterest-mcp",
|
|
34
|
+
config: mcpConfig,
|
|
35
|
+
logger,
|
|
36
|
+
transportMode,
|
|
37
|
+
initOtel: initializeOpenTelemetry,
|
|
38
|
+
setupStdioSession: setupStdioCredentials,
|
|
39
|
+
createMcpServer,
|
|
40
|
+
runStdio: runStdioServer,
|
|
41
|
+
startHttp: startHttpServer,
|
|
42
|
+
onShutdown: () => rateLimiter.destroy(),
|
|
43
|
+
}).catch((err) => {
|
|
44
|
+
logger.fatal({ err }, "Failed to start pinterest-mcp");
|
|
45
|
+
process.exit(1);
|
|
46
|
+
});
|
|
47
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,sDAAsD,CAAC;AACvF,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC5F,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,aAAa,GAAG,mBAAmB,EAAE,CAAC;AAC5C,MAAM,MAAM,GAAG,kBAAkB,CAAC,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC;AAMlF,KAAK,UAAU,qBAAqB,CAAC,SAAiB;IACpD,MAAM,WAAW,GAAG,SAAS,CAAC,oBAAoB,CAAC;IACnD,MAAM,WAAW,GAAG,SAAS,CAAC,oBAAoB,CAAC;IAEnD,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CACT,8CAA8C;YAC5C,wEAAwE,CAC3E,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,2BAA2B,CACjD,WAAW,EACX,WAAW,EACX,SAAS,CAAC,mBAAmB,CAC9B,CAAC;IAGF,MAAM,WAAW,CAAC,QAAQ,EAAE,CAAC;IAE7B,MAAM,QAAQ,GAAG,qBAAqB,CACpC,WAAW,EACX;QACE,OAAO,EAAE,SAAS,CAAC,mBAAmB;QACtC,UAAU,EAAE,SAAS,CAAC,mBAAmB;QACzC,oBAAoB,EAAE,SAAS,CAAC,6BAA6B;QAC7D,qBAAqB,EAAE,SAAS,CAAC,8BAA8B;KAChE,EACD,MAAM,EACN,WAAW,CACZ,CAAC;IAEF,mBAAmB,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC7C,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC3D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kBAAkB,CAAC;IACjB,WAAW,EAAE,eAAe;IAC5B,MAAM,EAAE,SAAS;IACjB,MAAM;IACN,aAAa;IACb,QAAQ,EAAE,uBAAuB;IACjC,iBAAiB,EAAE,qBAAqB;IACxC,eAAe;IACf,QAAQ,EAAE,cAAc;IACxB,SAAS,EAAE,eAAe;IAC1B,UAAU,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE;CACxC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACf,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,+BAA+B,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Prompt } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
export declare const bulkOperationsWorkflowPrompt: Prompt;
|
|
3
|
+
export declare function getBulkOperationsWorkflowMessage(args?: Record<string, string>): string;
|
|
4
|
+
//# sourceMappingURL=bulk-operations-workflow.prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulk-operations-workflow.prompt.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAEjE,eAAO,MAAM,4BAA4B,EAAE,MAgB1C,CAAC;AAEF,wBAAgB,gCAAgC,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CA4GtF"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
export const bulkOperationsWorkflowPrompt = {
|
|
2
|
+
name: "pinterest_bulk_operations_workflow",
|
|
3
|
+
description: "Guide for performing bulk create, update, and status operations on Pinterest Ads entities",
|
|
4
|
+
arguments: [
|
|
5
|
+
{
|
|
6
|
+
name: "adAccountId",
|
|
7
|
+
description: "Pinterest Advertiser ID",
|
|
8
|
+
required: true,
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
name: "entityType",
|
|
12
|
+
description: "Entity type to operate on (campaign, adGroup, ad)",
|
|
13
|
+
required: false,
|
|
14
|
+
},
|
|
15
|
+
],
|
|
16
|
+
};
|
|
17
|
+
export function getBulkOperationsWorkflowMessage(args) {
|
|
18
|
+
const adAccountId = args?.adAccountId || "{adAccountId}";
|
|
19
|
+
const entityType = args?.entityType || "campaign";
|
|
20
|
+
return `# Pinterest Bulk Operations Workflow
|
|
21
|
+
|
|
22
|
+
## Advertiser ID: \`${adAccountId}\`
|
|
23
|
+
## Entity Type: \`${entityType}\`
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Option 1: Bulk Status Update (most common)
|
|
28
|
+
|
|
29
|
+
Pause, enable, or delete multiple entities in one call:
|
|
30
|
+
|
|
31
|
+
\`\`\`json
|
|
32
|
+
pinterest_bulk_update_status({
|
|
33
|
+
"entityType": "${entityType}",
|
|
34
|
+
"adAccountId": "${adAccountId}",
|
|
35
|
+
"entityIds": ["ID_1", "ID_2", "ID_3"],
|
|
36
|
+
"operationStatus": "PAUSED"
|
|
37
|
+
})
|
|
38
|
+
\`\`\`
|
|
39
|
+
|
|
40
|
+
**Operation status values:**
|
|
41
|
+
- \`ACTIVE\` — Activate entities
|
|
42
|
+
- \`PAUSED\` — Pause entities
|
|
43
|
+
- \`DELETE\` — Permanently delete (irreversible!)
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Option 2: Bulk Create Entities (up to 50)
|
|
48
|
+
|
|
49
|
+
Create multiple entities of the same type in one call:
|
|
50
|
+
|
|
51
|
+
\`\`\`json
|
|
52
|
+
pinterest_bulk_create_entities({
|
|
53
|
+
"entityType": "${entityType}",
|
|
54
|
+
"adAccountId": "${adAccountId}",
|
|
55
|
+
"items": [
|
|
56
|
+
{
|
|
57
|
+
"name": "Campaign A",
|
|
58
|
+
"objective_type": "AWARENESS",
|
|
59
|
+
"daily_spend_cap": 50000000
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"name": "Campaign B",
|
|
63
|
+
"objective_type": "CONVERSIONS",
|
|
64
|
+
"daily_spend_cap": 100000000
|
|
65
|
+
}
|
|
66
|
+
]
|
|
67
|
+
})
|
|
68
|
+
\`\`\`
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Option 3: Bulk Update Entities (up to 50)
|
|
73
|
+
|
|
74
|
+
Update specific fields on multiple entities:
|
|
75
|
+
|
|
76
|
+
\`\`\`json
|
|
77
|
+
pinterest_bulk_update_entities({
|
|
78
|
+
"entityType": "${entityType}",
|
|
79
|
+
"adAccountId": "${adAccountId}",
|
|
80
|
+
"items": [
|
|
81
|
+
{ "entityId": "ID_1", "data": { "budget": 150 } },
|
|
82
|
+
{ "entityId": "ID_2", "data": { "budget": 250 } }
|
|
83
|
+
]
|
|
84
|
+
})
|
|
85
|
+
\`\`\`
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Option 4: Bulk Bid Adjustment (ad groups only)
|
|
90
|
+
|
|
91
|
+
Safe read-modify-write bid adjustment:
|
|
92
|
+
|
|
93
|
+
\`\`\`json
|
|
94
|
+
pinterest_adjust_bids({
|
|
95
|
+
"adAccountId": "${adAccountId}",
|
|
96
|
+
"adjustments": [
|
|
97
|
+
{ "adGroupId": "ADGROUP_ID_1", "bidPrice": 1.5 },
|
|
98
|
+
{ "adGroupId": "ADGROUP_ID_2", "bidPrice": 2.0 }
|
|
99
|
+
],
|
|
100
|
+
"reason": "Increase bids to improve delivery"
|
|
101
|
+
})
|
|
102
|
+
\`\`\`
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Tips for Bulk Operations
|
|
107
|
+
|
|
108
|
+
1. **List first**: Use \`pinterest_list_entities\` to get entity IDs before bulk operations
|
|
109
|
+
2. **Validate first**: Use \`pinterest_validate_entity\` to check payloads before bulk create
|
|
110
|
+
3. **Status update is batched**: Pinterest accepts IDs array in one API call
|
|
111
|
+
4. **Create/Update is sequential**: Processed concurrently (5 at a time) by the MCP tool
|
|
112
|
+
5. **Max 50 items**: Per bulk create/update call (more = multiple calls)
|
|
113
|
+
6. **Error handling**: Partial failures are reported — some may succeed while others fail
|
|
114
|
+
|
|
115
|
+
## Workflow: Pause all campaigns → Adjust → Re-enable
|
|
116
|
+
|
|
117
|
+
\`\`\`
|
|
118
|
+
1. pinterest_list_entities (get campaign IDs)
|
|
119
|
+
2. pinterest_bulk_update_status (PAUSED all)
|
|
120
|
+
3. pinterest_bulk_update_entities (adjust budgets/settings)
|
|
121
|
+
4. pinterest_bulk_update_status (ACTIVE selected)
|
|
122
|
+
\`\`\`
|
|
123
|
+
`;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=bulk-operations-workflow.prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulk-operations-workflow.prompt.js","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,4BAA4B,GAAW;IAClD,IAAI,EAAE,oCAAoC;IAC1C,WAAW,EACT,2FAA2F;IAC7F,SAAS,EAAE;QACT;YACE,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,yBAAyB;YACtC,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,mDAAmD;YAChE,QAAQ,EAAE,KAAK;SAChB;KACF;CACF,CAAC;AAEF,MAAM,UAAU,gCAAgC,CAAC,IAA6B;IAC5E,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,eAAe,CAAC;IACzD,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,UAAU,CAAC;IAElD,OAAO;;sBAEa,WAAW;oBACb,UAAU;;;;;;;;;;mBAUX,UAAU;oBACT,WAAW;;;;;;;;;;;;;;;;;;;mBAmBZ,UAAU;oBACT,WAAW;;;;;;;;;;;;;;;;;;;;;;;;mBAwBZ,UAAU;oBACT,WAAW;;;;;;;;;;;;;;;;oBAgBX,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4B9B,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Prompt } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
export declare const campaignSetupWorkflowPrompt: Prompt;
|
|
3
|
+
export declare function getCampaignSetupWorkflowMessage(args?: Record<string, string>): string;
|
|
4
|
+
//# sourceMappingURL=campaign-setup-workflow.prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaign-setup-workflow.prompt.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAEjE,eAAO,MAAM,2BAA2B,EAAE,MAiBzC,CAAC;AAEF,wBAAgB,+BAA+B,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAwFrF"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
export const campaignSetupWorkflowPrompt = {
|
|
2
|
+
name: "pinterest_campaign_setup_workflow",
|
|
3
|
+
description: "Step-by-step guide for creating a complete Pinterest Ads campaign structure (Campaign > Ad Group > Ad)",
|
|
4
|
+
arguments: [
|
|
5
|
+
{
|
|
6
|
+
name: "adAccountId",
|
|
7
|
+
description: "Pinterest Ad Account ID (e.g., 549755885175)",
|
|
8
|
+
required: true,
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
name: "objective",
|
|
12
|
+
description: "Campaign objective (e.g., AWARENESS, CONSIDERATION, VIDEO_VIEW, CATALOG_SALES, CONVERSIONS, APP_INSTALL, SHOPPING)",
|
|
13
|
+
required: false,
|
|
14
|
+
},
|
|
15
|
+
],
|
|
16
|
+
};
|
|
17
|
+
export function getCampaignSetupWorkflowMessage(args) {
|
|
18
|
+
const adAccountId = args?.adAccountId || "{adAccountId}";
|
|
19
|
+
const objective = args?.objective || "AWARENESS";
|
|
20
|
+
return `# Pinterest Campaign Setup Workflow
|
|
21
|
+
|
|
22
|
+
## Prerequisites
|
|
23
|
+
- Ad Account ID: \`${adAccountId}\`
|
|
24
|
+
- Verify access: \`pinterest_list_advertisers\`
|
|
25
|
+
|
|
26
|
+
## Step 1: Create Campaign
|
|
27
|
+
|
|
28
|
+
\`\`\`json
|
|
29
|
+
pinterest_create_entity({
|
|
30
|
+
"entityType": "campaign",
|
|
31
|
+
"adAccountId": "${adAccountId}",
|
|
32
|
+
"data": {
|
|
33
|
+
"name": "Your Campaign Name",
|
|
34
|
+
"objective_type": "${objective}",
|
|
35
|
+
"status": "ACTIVE",
|
|
36
|
+
"daily_spend_cap": 50000000
|
|
37
|
+
}
|
|
38
|
+
})
|
|
39
|
+
\`\`\`
|
|
40
|
+
|
|
41
|
+
**Campaign Objectives:** AWARENESS, CONSIDERATION, VIDEO_VIEW, CATALOG_SALES, CONVERSIONS, APP_INSTALL, SHOPPING
|
|
42
|
+
|
|
43
|
+
**Status values:** ACTIVE, PAUSED, ARCHIVED
|
|
44
|
+
|
|
45
|
+
## Step 2: Create Ad Group
|
|
46
|
+
|
|
47
|
+
\`\`\`json
|
|
48
|
+
pinterest_create_entity({
|
|
49
|
+
"entityType": "adGroup",
|
|
50
|
+
"adAccountId": "${adAccountId}",
|
|
51
|
+
"data": {
|
|
52
|
+
"name": "Your Ad Group Name",
|
|
53
|
+
"campaign_id": "CAMPAIGN_ID_FROM_STEP_1",
|
|
54
|
+
"status": "ACTIVE",
|
|
55
|
+
"budget_in_micro_currency": 10000000,
|
|
56
|
+
"pacing_delivery_type": "STANDARD",
|
|
57
|
+
"bid_strategy_type": "AUTOMATIC_BID",
|
|
58
|
+
"start_time": "2026-04-01T00:00:00",
|
|
59
|
+
"targeting_spec": {
|
|
60
|
+
"age_bucket": ["35-44", "45-49"],
|
|
61
|
+
"gender": ["female"],
|
|
62
|
+
"geo": [{ "country": "US" }],
|
|
63
|
+
"interest": ["food", "fashion"]
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
})
|
|
67
|
+
\`\`\`
|
|
68
|
+
|
|
69
|
+
## Step 3: Create Ad(s)
|
|
70
|
+
|
|
71
|
+
> ⚠️ **GOTCHA:** Ads reference Pinterest Pins by pin_id — create/upload the Pin first before creating the Ad.
|
|
72
|
+
|
|
73
|
+
\`\`\`json
|
|
74
|
+
pinterest_create_entity({
|
|
75
|
+
"entityType": "ad",
|
|
76
|
+
"adAccountId": "${adAccountId}",
|
|
77
|
+
"data": {
|
|
78
|
+
"name": "Your Ad Name",
|
|
79
|
+
"ad_group_id": "ADGROUP_ID_FROM_STEP_2",
|
|
80
|
+
"creative_type": "REGULAR",
|
|
81
|
+
"pin_id": "YOUR_PIN_ID",
|
|
82
|
+
"status": "ACTIVE"
|
|
83
|
+
}
|
|
84
|
+
})
|
|
85
|
+
\`\`\`
|
|
86
|
+
|
|
87
|
+
**Creative types:** REGULAR, VIDEO, SHOPPING, CAROUSEL
|
|
88
|
+
|
|
89
|
+
## Step 4: Verify & Activate
|
|
90
|
+
|
|
91
|
+
1. Review: \`pinterest_get_entity\` for each created entity
|
|
92
|
+
2. Preview ad: \`pinterest_get_ad_preview\`
|
|
93
|
+
3. Activate: \`pinterest_bulk_update_status\` with status: "ACTIVE"
|
|
94
|
+
|
|
95
|
+
## Common Gotchas
|
|
96
|
+
|
|
97
|
+
- ⚠️ **GOTCHA: Pinterest budgets use micro-currency (1 USD = 1,000,000). $50/day → daily_spend_cap: 50000000**
|
|
98
|
+
- ⚠️ **GOTCHA: Ads reference Pinterest Pins by pin_id — create/upload the Pin first before creating the Ad**
|
|
99
|
+
- ⚠️ **GOTCHA: Status values are ACTIVE/PAUSED/ARCHIVED (not ENABLE/DISABLE)**
|
|
100
|
+
- ⚠️ Ad group budget (\`budget_in_micro_currency\`) must also be in micro-currency
|
|
101
|
+
- ⚠️ \`start_time\` and \`end_time\` use ISO 8601 datetime strings (e.g., "2026-04-01T00:00:00")
|
|
102
|
+
- ⚠️ Reporting has a 24-48h lag for finalized data
|
|
103
|
+
`;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=campaign-setup-workflow.prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaign-setup-workflow.prompt.js","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,2BAA2B,GAAW;IACjD,IAAI,EAAE,mCAAmC;IACzC,WAAW,EACT,wGAAwG;IAC1G,SAAS,EAAE;QACT;YACE,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,8CAA8C;YAC3D,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,WAAW;YACjB,WAAW,EACT,oHAAoH;YACtH,QAAQ,EAAE,KAAK;SAChB;KACF;CACF,CAAC;AAEF,MAAM,UAAU,+BAA+B,CAAC,IAA6B;IAC3E,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,eAAe,CAAC;IACzD,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,WAAW,CAAC;IAEjD,OAAO;;;qBAGY,WAAW;;;;;;;;oBAQZ,WAAW;;;yBAGN,SAAS;;;;;;;;;;;;;;;;oBAgBd,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;oBA0BX,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2B9B,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Prompt } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
export declare const pinterestCreativeUploadWorkflowPrompt: Prompt;
|
|
3
|
+
export declare function getPinterestCreativeUploadWorkflowMessage(args?: Record<string, string>): string;
|
|
4
|
+
//# sourceMappingURL=creative-upload-workflow.prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"creative-upload-workflow.prompt.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/creative-upload-workflow.prompt.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAEjE,eAAO,MAAM,qCAAqC,EAAE,MAWnD,CAAC;AAEF,wBAAgB,yCAAyC,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAmF/F"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
export const pinterestCreativeUploadWorkflowPrompt = {
|
|
2
|
+
name: "creative_upload_workflow",
|
|
3
|
+
description: "Step-by-step guide for uploading video creatives and creating Pinterest Ads. Image creatives reference a hosted image URL directly rather than uploading a file.",
|
|
4
|
+
arguments: [
|
|
5
|
+
{
|
|
6
|
+
name: "adAccountId",
|
|
7
|
+
description: "Pinterest Advertiser ID",
|
|
8
|
+
required: true,
|
|
9
|
+
},
|
|
10
|
+
],
|
|
11
|
+
};
|
|
12
|
+
export function getPinterestCreativeUploadWorkflowMessage(args) {
|
|
13
|
+
const adAccountId = args?.adAccountId || "{adAccountId}";
|
|
14
|
+
return `# Pinterest Ads Creative Upload Workflow
|
|
15
|
+
|
|
16
|
+
## Prerequisites
|
|
17
|
+
- Advertiser ID: \`${adAccountId}\`
|
|
18
|
+
- A publicly accessible URL for your video file (for image ads, a hosted image URL is used directly — Pinterest's \`/v5/media\` endpoint only accepts \`media_type="video"\`)
|
|
19
|
+
|
|
20
|
+
## Overview
|
|
21
|
+
Pinterest creative workflow: Upload video → Create Ad Group → Create Ad with creative
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Step 1: Upload Video
|
|
26
|
+
|
|
27
|
+
\`\`\`json
|
|
28
|
+
pinterest_upload_video({
|
|
29
|
+
"adAccountId": "${adAccountId}",
|
|
30
|
+
"mediaUrl": "https://example.com/your-video.mp4",
|
|
31
|
+
"videoName": "Campaign Video"
|
|
32
|
+
})
|
|
33
|
+
\`\`\`
|
|
34
|
+
|
|
35
|
+
**Returns:** \`mediaId\`
|
|
36
|
+
|
|
37
|
+
⚠️ **GOTCHA**: Video processing takes 20-120 seconds. The tool polls automatically (20s intervals, up to 10 min).
|
|
38
|
+
When \`status == "succeeded"\`, the video is ready.
|
|
39
|
+
|
|
40
|
+
**Video requirements:**
|
|
41
|
+
- Formats: MP4, MOV, AVI
|
|
42
|
+
- Max 500MB
|
|
43
|
+
- Min resolution: 540x960 (9:16), 960x540 (16:9), or 640x640 (1:1)
|
|
44
|
+
- Duration: 5-60 seconds for In-Feed ads
|
|
45
|
+
|
|
46
|
+
## Step 2: Create Ad
|
|
47
|
+
|
|
48
|
+
\`\`\`json
|
|
49
|
+
pinterest_create_entity({
|
|
50
|
+
"entityType": "ad",
|
|
51
|
+
"adAccountId": "${adAccountId}",
|
|
52
|
+
"data": {
|
|
53
|
+
"adgroup_id": "{your_adgroup_id}",
|
|
54
|
+
"ad_name": "Your Ad Name",
|
|
55
|
+
"ad_format": "SINGLE_VIDEO",
|
|
56
|
+
"video_id": "{mediaId_from_step_1}",
|
|
57
|
+
"ad_text": "Your ad copy here",
|
|
58
|
+
"landing_page_url": "https://yoursite.com",
|
|
59
|
+
"call_to_action": "LEARN_MORE",
|
|
60
|
+
"status": "DISABLE"
|
|
61
|
+
}
|
|
62
|
+
})
|
|
63
|
+
\`\`\`
|
|
64
|
+
|
|
65
|
+
For image ads, pass \`image_url\` (a hosted URL) in the creative payload directly — no upload step.
|
|
66
|
+
|
|
67
|
+
⚠️ **GOTCHA**: Pinterest ads go through a review process. Initial status should be DISABLE (paused) until ready to launch.
|
|
68
|
+
|
|
69
|
+
## Step 3: Preview Ad
|
|
70
|
+
|
|
71
|
+
\`\`\`json
|
|
72
|
+
pinterest_get_ad_preview({
|
|
73
|
+
"adAccountId": "${adAccountId}",
|
|
74
|
+
"adId": "{ad_id_from_step_2}",
|
|
75
|
+
"adFormat": "FEED"
|
|
76
|
+
})
|
|
77
|
+
\`\`\`
|
|
78
|
+
|
|
79
|
+
## Common Errors
|
|
80
|
+
|
|
81
|
+
| Error | Cause | Fix |
|
|
82
|
+
|-------|-------|-----|
|
|
83
|
+
| "Video processing failed" | Unsupported codec | Re-encode to H.264 MP4 |
|
|
84
|
+
| "Ad review rejected" | Policy violation | Review Pinterest ad policies |
|
|
85
|
+
| "processing timeout" | Slow processing | Re-check media status via GET /v5/media/{mediaId} |
|
|
86
|
+
|
|
87
|
+
## Success Criteria
|
|
88
|
+
- [ ] Media uploaded (mediaId obtained and status succeeded)
|
|
89
|
+
- [ ] Ad created with DISABLE status
|
|
90
|
+
- [ ] Preview reviewed
|
|
91
|
+
- [ ] Status changed to ENABLE when ready to launch
|
|
92
|
+
|
|
93
|
+
`;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=creative-upload-workflow.prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"creative-upload-workflow.prompt.js","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/creative-upload-workflow.prompt.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,qCAAqC,GAAW;IAC3D,IAAI,EAAE,0BAA0B;IAChC,WAAW,EACT,kKAAkK;IACpK,SAAS,EAAE;QACT;YACE,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,yBAAyB;YACtC,QAAQ,EAAE,IAAI;SACf;KACF;CACF,CAAC;AAEF,MAAM,UAAU,yCAAyC,CAAC,IAA6B;IACrF,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,eAAe,CAAC;IAEzD,OAAO;;;qBAGY,WAAW;;;;;;;;;;;;oBAYZ,WAAW;;;;;;;;;;;;;;;;;;;;;;oBAsBX,WAAW;;;;;;;;;;;;;;;;;;;;;;oBAsBX,WAAW;;;;;;;;;;;;;;;;;;;;CAoB9B,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Prompt } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
export declare const crossPlatformCampaignSetupPrompt: Prompt;
|
|
3
|
+
export declare function getCrossPlatformCampaignSetupMessage(args?: Record<string, string>): string;
|
|
4
|
+
//# sourceMappingURL=cross-platform-campaign-setup.prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-platform-campaign-setup.prompt.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAQjE,eAAO,MAAM,gCAAgC,EAAE,MAiB9C,CAAC;AAEF,wBAAgB,oCAAoC,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CA4R1F"}
|