
Research
/Security News
Two Joyfill npm Beta Releases Compromised to Deliver DEV#POPPER Remote Access Trojan
Two Joyfill npm beta releases contain an import-time implant that uses blockchain transactions to retrieve a remote-access trojan.
@cesteral/pinterest-mcp
Advanced tools
Pinterest Ads MCP Server - Campaign entity management and reporting via Pinterest Ads API v5
Pinterest Ads MCP Server - Campaign management and reporting via Pinterest Ads API v5.
Management server for Pinterest Ads. Provides full CRUD operations, async reporting, targeting discovery, bulk operations, and specialized features like entity duplication and audience estimation. Designed for AI agents to manage Pinterest Ads campaigns programmatically through the Model Context Protocol with per-session Bearer token authentication.
PinterestBearerAuthStrategy (validates tokens and extracts advertiser ID)@hono/mcpRateLimiter class (100/min default)ad_account_id injection into GET query params and POST request bodiespinterest_list_entitiesList Pinterest Ads entities with page-based pagination and optional filtering.
Parameters:
entityType (string, required): Type of entity to listadAccountId (string, required): Pinterest Advertiser IDfilters (object, optional): Filter criteria for the entity listpage (number, optional): Page number for paginationpageSize (number, optional): Results per pagepinterest_get_entityGet a single Pinterest Ads entity by ID.
Parameters:
entityType (string, required): Type of entity to retrieveadAccountId (string, required): Pinterest Advertiser IDentityId (string, required): The entity IDpinterest_create_entityCreate a new Pinterest Ads entity.
Parameters:
entityType (string, required): Type of entity to createadAccountId (string, required): Pinterest Advertiser IDdata (object, required): Entity fields as key-value pairspinterest_update_entityUpdate an existing Pinterest Ads entity.
Parameters:
entityType (string, required): Type of entity to updateadAccountId (string, required): Pinterest Advertiser IDentityId (string, required): The entity ID to updatedata (object, required): Fields to update as key-value pairspinterest_delete_entityDelete Pinterest Ads entities.
Parameters:
entityType (string, required): Type of entities to deleteadAccountId (string, required): Pinterest Advertiser IDentityIds (string[], required): Entity IDs to delete (max 20)pinterest_list_ad_accountsList advertiser accounts accessible to the authenticated user.
Parameters: (none)
All Pinterest reporting tools return data using the shared bounded report-view contract:
mode("summary"default — headers + counts + 10-row preview, or"rows"for a paginated rows page),columns(project to selected columns),offset(zero-based pagination), andmaxRows(page size; default 10 for summary, 50 for rows; hard cap 200).
pinterest_get_reportSubmit an async report and download results once complete.
Parameters:
adAccountId (string, required): Pinterest Advertiser IDdimensions (string[], required): Report dimensions (e.g., campaign_id, adgroup_id)metrics (string[], required): Metrics to include (e.g., spend, impressions, clicks)startDate (string, required): Start date (YYYY-MM-DD)endDate (string, required): End date (YYYY-MM-DD)mode, columns, offset, maxRows (optional): Bounded report-view params (see note above)pinterest_get_report_breakdownsSubmit a report with additional breakdown dimensions.
Parameters:
adAccountId (string, required): Pinterest Advertiser IDdimensions (string[], required): Primary dimensionsbreakdowns (string[], required): Breakdown dimensions (e.g., age, gender, country)metrics (string[], required): Metrics to includestartDate (string, required): Start date (YYYY-MM-DD)endDate (string, required): End date (YYYY-MM-DD)mode, columns, offset, maxRows (optional): Bounded report-view params (see note above)pinterest_submit_reportSubmit an async report without waiting for completion (non-blocking).
Parameters:
adAccountId (string, required): Pinterest Advertiser IDdimensions (string[], required): Report dimensionsmetrics (string[], required): Metrics to includestartDate (string, required): Start date (YYYY-MM-DD)endDate (string, required): End date (YYYY-MM-DD)pinterest_check_report_statusSingle status check for a submitted report.
Parameters:
adAccountId (string, required): Pinterest Advertiser IDtaskId (string, required): Report task ID from submitpinterest_download_reportDownload and parse report CSV from URL.
Parameters:
downloadUrl (string, required): Report download URLmode, columns, offset, maxRows (optional): Bounded report-view params (see note above the reporting tools)storeRawCsv (boolean, optional): When true, persist the full (redacted) CSV in the in-process report-csv store and return a report-csv://{id} resource URI alongside the bounded view. Useful when a downstream tool needs the entire CSV but the model only needs a preview. Entries expire after 30 minutes (default) or are evicted via LRU at 100 entries.pinterest_bulk_update_statusBatch enable, disable, or delete multiple entities.
Parameters:
entityType (string, required): Type of entities to updateadAccountId (string, required): Pinterest Advertiser IDentityIds (string[], required): Entity IDs to update (max 50)operationStatus (string, required): ENABLE, DISABLE, or DELETEpinterest_bulk_create_entitiesBatch create multiple entities of the same type.
Parameters:
entityType (string, required): Type of entities to createadAccountId (string, required): Pinterest Advertiser IDitems (array, required): Array of entity data objects (max 50)pinterest_bulk_update_entitiesBatch update multiple entities with individual data payloads.
Parameters:
entityType (string, required): Type of entities to updateadAccountId (string, required): Pinterest Advertiser IDitems (array, required): Array of update items (max 50), each with entity ID and datapinterest_adjust_bidsBatch adjust ad group bid prices with safe read-modify-write pattern.
Parameters:
adAccountId (string, required): Pinterest Advertiser IDadjustments (array, required): Array of bid adjustments, each with ad group ID, adjustment type, and valuepinterest_search_targetingSearch for targeting options (interest categories, behaviors, demographics) by keyword.
Parameters:
adAccountId (string, required): Pinterest Advertiser IDtargetingType (string, required): Type of targeting to searchquery (string, optional): Search keywordpinterest_get_targeting_optionsBrowse available targeting categories.
Parameters:
adAccountId (string, required): Pinterest Advertiser IDtargetingType (string, optional): Filter by targeting typepinterest_duplicate_entityDuplicate a campaign, ad group, or ad.
Parameters:
entityType (string, required): Type of entity to duplicate (campaign, adGroup, ad)adAccountId (string, required): Pinterest Advertiser IDentityId (string, required): ID of the entity to duplicateoptions (object, optional): Duplication options (e.g., rename prefix/suffix)pinterest_get_audience_estimateGet estimated audience size for a targeting configuration.
Parameters:
adAccountId (string, required): Pinterest Advertiser IDtargetingConfig (object, required): Targeting specification for estimationpinterest_get_ad_previewGet ad preview for video or image ads.
Parameters:
adAccountId (string, required): Pinterest Advertiser IDadId (string, required): Ad ID to previewadFormat (string, optional): Ad format for preview renderingpinterest_validate_entityClient-side validation of entity payloads without making API calls.
Parameters:
entityType (string, required): Type of entity to validatemode (string, required): Validation mode (create or update)data (object, required): Entity data to validate| Entity Type | API Object | Notes |
|---|---|---|
campaign | Campaign | Top-level entity under advertiser account |
adGroup | Ad Group | Targeting, budget, schedule, bidding, placement |
ad | Ad | Links creative content to ad group |
creative | Creative | Video/image creative assets |
Entity Hierarchy: Advertiser > Campaign > Ad Group > Ad (+ Creatives)
Phase: Production-Ready
All listed tools are fully implemented using Pinterest Ads API v5 with Bearer token authentication, async reporting, and targeting discovery.
# Install dependencies
pnpm install
# Run in development mode
pnpm run dev:http
# Build
pnpm run build
# Start production server
pnpm run start
# Type check
pnpm run typecheck
PINTEREST_MCP_PORT: Server port (default: 3011)PINTEREST_MCP_HOST: Server host (default: 127.0.0.1 in development, 0.0.0.0 in production)MCP_AUTH_MODE: Authentication mode - pinterest-bearer (default), jwt, or noneMCP_AUTH_SECRET_KEY: Required when MCP_AUTH_MODE=jwtPINTEREST_API_BASE_URL: Pinterest Business API base URL (default: https://business-api.pinterest.com)PINTEREST_API_VERSION: API version (default: v1.3)PINTEREST_RATE_LIMIT_PER_MINUTE: Rate limit ceiling (default: 100)PINTEREST_ACCESS_TOKEN: Access token for stdio modePINTEREST_ADVERTISER_ID: Advertiser ID for stdio modePinterestHttpClient - HTTP client for Pinterest Ads API v5PinterestService - CRUD, bulk ops, duplication, targeting, audience estimates, ad previewsPinterestReportingService - Async report submission, polling, and downloadPinterestBearerAuthStrategy - Bearer token + advertiser ID authPinterestAuthAdapter - Token + advertiser ID management for per-session API callsSessionServiceStore - Per-session service instances keyed by session IDad_account_id is automatically injected into GET query params and POST request bodiespage/page_size) not cursor-basedDISABLE status is used instead of PAUSED (Pinterest-specific terminology)Streamable HTTP via Hono + @hono/mcp. Health check at /health.
See root CLAUDE.md for development guidelines, build system details, and monorepo conventions. See the root README for full architecture context.
Self-host: Follow the deployment guide to run this server on your own infrastructure.
Cesteral Intelligence: Request access -- governed execution with credential brokering, approvals, audit, and multi-tenant access.
Book a workflow demo: See it in action with your own ad accounts.
Compare options: OSS connectors vs Cesteral Intelligence
Apache License 2.0 — see LICENSE for details. This package is part of Cesteral's open-source connector layer; managed hosting and higher-level governance features live outside this repository.
FAQs
Pinterest Ads MCP Server - Campaign entity management and reporting via Pinterest Ads API v5
The npm package @cesteral/pinterest-mcp receives a total of 99 weekly downloads. As such, @cesteral/pinterest-mcp popularity was classified as not popular.
We found that @cesteral/pinterest-mcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
/Security News
Two Joyfill npm beta releases contain an import-time implant that uses blockchain transactions to retrieve a remote-access trojan.

Security News
Socket releases free Certified Patches for high-severity Nuxt vulnerabilities, including server-side remote code execution through server island props.

Security News
An open letter signed by 50 companies, from NVIDIA and Microsoft to Mistral and Hugging Face, urges Washington not to restrict open weight AI.