{"name":"com.rcs-campaigns/campaigns","slug":"rcs-campaigns-campaigns","title":"RCS Campaigns","description":"Send RCS & SMS campaigns: templates, audiences, surveys, inbox replies, delivery webhooks.","url":"https://mcp.market/server/rcs-campaigns-campaigns","rating":null,"grade":"C","score":58,"certified":false,"status":"active","category":"email","tags":["email"],"presence":{"score":13,"stars":null,"forks":null,"downloads_week":121,"last_push_at":null,"license":"UNLICENSED"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/RethinkLedgers/rcs-templates","website":"https://www.rcs-campaigns.com/docs","version":"0.1.10","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@rcs-campaigns/agent-toolkit","version":"0.1.10","runtimeHint":"npx","transport":{"type":"stdio"},"packageArguments":[{"description":"Run the stdio MCP server entrypoint (bin: rcs-mcp).","value":"rcs-mcp","type":"positional","valueHint":"binary"}],"environmentVariables":[{"description":"Optional. Base URL of the RCS Campaigns agent gateway; defaults to the hosted production gateway. Set it only to target dev or a local gateway — a key is tied to the environment it was minted in, so it must match the environment that issued RCS_AGENT_KEY.","name":"RCS_GATEWAY_URL"},{"description":"Scoped agent key (rcsk_live_…) created in Settings → API keys. Grants only the scopes selected at mint time. Treat it like a password.","isRequired":true,"isSecret":true,"name":"RCS_AGENT_KEY"}]}],"tools":[{"name":"assign_conversation","description":"Give a thread an owner, or release it back to the pool with `userId: null`. The assignee is a bare Clerk user id and is NOT validated against the org roster — a stale id degrades to \"assigned to someone who left\", visibly, rather than to an outage in a one-field write.","write_action":false,"price_micros":0,"input_schema":null},{"name":"capabilities","description":"Describe the gateway: tool catalog, the scopes this key holds, and pricing posture. Call first to plan what you may do.","write_action":false,"price_micros":0,"input_schema":null},{"name":"clone_survey","description":"Duplicate an org-owned survey into a fresh DRAFT (e.g. to iterate a variant). Returns the new survey.","write_action":false,"price_micros":0,"input_schema":null},{"name":"clone_template","description":"Clone a published marketplace template into your org as a fresh private draft. Returns the new template. To deliver rich RCS rather than SMS fallback, submit_template it and await provider approval before send_message.","write_action":false,"price_micros":0,"input_schema":null},{"name":"create_audience","description":"Create a saved audience (contact list) in your org, optionally seeded with contacts (e.g. leads parsed from a CSV). Every contact needs a reachable E.164-ish `number` — a contact with no valid number fails the whole create with a 400 (fix the row rather than silently dropping it). Use `attributes` for any extra CSV columns you want available as {{key}} merge fields later.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_survey","description":"Create a survey draft in your org. Provide a SurveyDefinition (intro? + questions[] of type rating/single_select/text/comment); the shared validator gates it. PICTURES: every question should carry an `imageUrl`, and the definition should carry `headerImageUrl` (start picture) and `outroImageUrl` (finish picture). If the user provided no pictures, WEB-SEARCH for suitable, relevant images first and ","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_template","description":"Create a template draft in your org. Compose a TemplateContent (text/card/carousel) with a REQUIRED non-empty smsFallback; the shared RCS validator gates it. Submit it (submit_template) and await provider approval before send_message for rich RCS; an unsubmitted template delivers as SMS fallback.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_webhook","description":"Register an HTTPS endpoint to receive signed platform events. The response carries the signing `secret` EXACTLY ONCE — store it now; every later read redacts it and there is no way to retrieve it again. Each delivery is signed `X-RCS-Signature: t=<unix>,v1=<hex HMAC-SHA256 of \"<t>.<rawBody>\">`.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_audience","description":"Delete an audience and all of its contacts (org-scoped, irreversible).","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_knowledge","description":"Delete a template's knowledge base document.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_survey","description":"Delete a survey your org owns. IRREVERSIBLE: its responses and sessions are deleted with it, so any results you have not already read are lost. Ask the user before deleting a survey that has been sent or has responses — read get_results first if in doubt.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_template","description":"Delete a template your org owns. IRREVERSIBLE, and it also removes the template from the provider (Twilio), so an approved template loses its approval and can no longer be sent. Broadcasts that already went out are unaffected. Prefer this only for drafts and abandoned iterations; ask the user before deleting anything they have submitted or sent.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_webhook","description":"Remove a webhook endpoint. Its delivery history is deleted with it; anything still queued for it stops.","write_action":true,"price_micros":0,"input_schema":null},{"name":"disable_knowledge","description":"Disable knowledge answering on a template WITHOUT deleting the doc (pause).","write_action":false,"price_micros":0,"input_schema":null},{"name":"duplicate_template","description":"Duplicate a template your org OWNS into a fresh private draft (e.g. to iterate a variant without touching the original). The copy keeps the content, channel, category, tags and knowledge base, but starts unsubmitted — it has no provider approval of its own until you submit_template it. For copying someone else's PUBLISHED marketplace listing, use clone_template instead.","write_action":false,"price_micros":0,"input_schema":null},{"name":"enable_knowledge","description":"Enable knowledge answering on a template (the doc is used again).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_audience","description":"Fetch one audience your org owns by id.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_contact","description":"Fetch one contact by its public contact id, with the audiences they belong to.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_conversation","description":"Read one thread in a single call: its meta, the most recent messages (ascending), the contact summary (marketing status, tags, audiences) and whether the WhatsApp 24h service window is open. Internal team notes are deliberately NOT included.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_knowledge","description":"Read a template's knowledge base: the grounding document text plus whether answering is enabled. Use before set_knowledge to edit a doc incrementally instead of overwriting it blind.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_results","description":"Read a survey’s aggregated results: per-question option counts / rating averages / text samples + completion totals (multi-part questions aggregate per part; free-text answers are auto-translated to English).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_survey","description":"Fetch one survey your org owns by id (its full definition).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_template","description":"Fetch one template by id (a published marketplace listing or one your org owns).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_usage","description":"Read your org’s month-to-date metered message usage.","write_action":false,"price_micros":0,"input_schema":null},{"name":"import_contacts","description":"Append contacts to an existing audience (e.g. more leads from a later CSV batch). Same reachability rule as create_audience: every contact needs a valid `number` or the whole import 400s.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_audience_contacts","description":"Paginated list of an audience's contacts. Use `q` to find someone in a large imported batch instead of paging through it — it matches on the server, over the whole audience, so it keeps working on lists too big to page.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_contacts","description":"Search the org's contact records (one person per number, across every audience). Returns consent, opt-out, number verdict, marketing status, merge fields and tags.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_conversations","description":"List the org's conversation threads (one per phone number), newest activity first. Archived threads are hidden. Filter by free text, unread, unassigned, a specific assignee, or the campaign a thread was messaged in.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_survey_sends","description":"A survey's outbound send log (live + test sends), newest first, with per-message delivery status — including failed/stubbed attempts and the reason they did not deliver.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_webhooks","description":"The org's registered outbound webhook endpoints. The signing secret is redacted — it is shown only once, by create_webhook.","write_action":false,"price_micros":0,"input_schema":null},{"name":"render_survey","description":"Preview a survey the way a respondent sees it: the text body + RCS chip titles for each question. Side-effect-free.","write_action":false,"price_micros":0,"input_schema":null},{"name":"render_template","description":"Validate a template and return the rendered RCS payload + variable-bound SMS/MMS fallback, without sending. Use to inspect before cloning/sending.","write_action":false,"price_micros":0,"input_schema":null},{"name":"reply","description":"Reply into a thread — free text (with an optional image) or an approved template. Reaches a real phone and bills your org. Every gate an operator hits applies unchanged: an opted-out number is refused (409), the org allowance is enforced, WhatsApp free text needs the 24h window open (an approved template otherwise), and an RCS send always carries its SMS fallback. When the thread has an outbound l","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_audiences","description":"List/search the audiences (saved contact lists) your org owns. Returns each audience with its name, source, and contactCount.","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_surveys","description":"List/search the surveys your org owns. Returns each survey with its recipients + responses counts.","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_templates","description":"Search the published RCS template marketplace. Returns normalized listings (id, name, rating, cloneCount, categoryKeys).","write_action":false,"price_micros":0,"input_schema":null},{"name":"send_message","description":"Send an org-owned template to a list of E.164 phone numbers (RCS-first with mandatory SMS/MMS fallback). Pass the template's blueprintId or id. The template sends as rich RCS only after submit_template + provider approval; until then it delivers as SMS fallback — the returned funnel's `fellBackToSms` count signals how many recipients got SMS instead of RCS. Bills your org. Returns the send funnel.","write_action":true,"price_micros":0,"input_schema":null},{"name":"send_survey","description":"Send a survey to explicit E.164 numbers (the CRM-triggered single-customer send) and/or saved audiences. Flips the survey ACTIVE. Bills your org. Returns { recipients, sent }.","write_action":true,"price_micros":0,"input_schema":null},{"name":"send_survey_test","description":"Send a one-off TEST of the survey to a single E.164 number (does not change status or audiences). Check list_survey_sends afterwards for the delivery outcome.","write_action":true,"price_micros":0,"input_schema":null},{"name":"set_knowledge","description":"Set/replace a template's knowledge base: the grounding document AI answers are generated from when recipients reply. Include operating instructions in the doc itself — e.g. \"Any question not answered by this document must be answered exactly: …\". Setting a doc re-enables answering.","write_action":false,"price_micros":0,"input_schema":null},{"name":"submit_survey","description":"Submit a survey for provider approval: on RCS its button-question templates, on WhatsApp its single Flow template. Returns the survey with the resulting approval state.","write_action":true,"price_micros":0,"input_schema":null},{"name":"submit_template","description":"Submit an org-owned template to the provider (Twilio) for approval. Returns the contentSid + approval status.","write_action":true,"price_micros":0,"input_schema":null},{"name":"test_webhook","description":"Fire a synthetic signed event at one endpoint to verify the receiver. Returns the delivery id and whether it was accepted.","write_action":false,"price_micros":0,"input_schema":null},{"name":"update_contact","description":"Correct a contact's names, email, merge fields (`attributes`, a whole-map replace) or tags. Consent and opt-out are deliberately NOT reachable from here — recording or clearing them is a compliance-sensitive action that stays with a human operator.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_survey","description":"Partially update a survey: name, description, definition (re-validated; editing a submitted WhatsApp survey requires resubmission), startDate/endDate, and audienceIds — setting audienceIds on a future-dated survey schedules the send to fire automatically at startDate. PICTURES: as with create_survey, keep every question's `imageUrl` plus `headerImageUrl`/`outroImageUrl` populated — web-search for ","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_template","description":"Partially update a template your org owns: name, description, category, tags, knowledgeDoc, and content (re-validated by the shared RCS validator — a non-empty smsFallback is still required). Only the fields you pass change. Editing the CONTENT of an already-approved template invalidates that approval: submit_template it again and await approval, or it delivers as SMS fallback until then. Use get_","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_webhook","description":"Update an endpoint's url, subscribed events, description, or active flag. Only the fields you pass change. The signing secret is never returned or rotated here.","write_action":true,"price_micros":0,"input_schema":null},{"name":"upload_media","description":"Store one picture on the platform GCS bucket and get its stable https URL — the only kind of URL survey/template media should use. Pass EITHER the image inline (base64 + mime) OR an https sourceUrl the server fetches and re-hosts (use this for web-searched pictures).","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":58,"grade":"C","scanned_at":"2026-10-31T05:55:13.688Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-31T05:55:13.642Z","components":{"code":{"score":25,"max":25,"notes":["15 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":3,"max":15,"notes":["repository not readable: repo not found"]},"identity":{"score":4,"max":10,"notes":["verified namespace with website, no repo"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"@rcs-campaigns/agent-toolkit","version":"0.1.10","found":true,"license":"UNLICENSED","hasInstallScripts":false,"dependencyCount":0,"publishedAt":"2026-09-29T19:10:20.406Z","repositoryUrl":"git+https://github.com/RethinkLedgers/rcs-templates.git","weeklyDownloads":121}],"repo":{"found":false,"owner":"RethinkLedgers","repo":"rcs-templates","error":"repo not found"},"icon":{"url":"https://www.rcs-campaigns.com/favicon.ico?favicon.0x3dzn~oxb6tn.ico","source":"registry","width":256,"height":256},"presence":{"stars":null,"forks":null,"downloadsWeek":121,"license":"UNLICENSED","lastPushAt":null,"score":13}}}},"grade_history":[],"reviews":[]}