Model Context Protocol

Walls.io Echo MCP Server

Read and manage the authenticated user's Echo campaigns and their analytics. All tools operate only on campaigns owned by the connected user. Reference a campaign by its numeric id or slug. Analytics tools accept an optional from/to date range (YYYY-MM-DD); omitting it returns lifetime totals (summary) or the last 30 days (timeseries/breakdown).

Connection URL

Point any MCP-compatible client at this endpoint:

POST https://mcp.echo.walls.io/mcp

Authentication is handled automatically over OAuth — no manual token needed.

1Add it to Claude

  1. In Claude Desktop or claude.ai, open Settings → Connectors.
  2. Choose Add custom connector.
  3. Paste the connection URL above and confirm.
  4. On first use, a browser window opens our authorization screen — sign in and approve the mcp:use scope.
  5. Claude can now call the tools below against your campaigns.

2How authentication works

The server speaks OAuth 2.1, so clients connect without you copying any secrets:

3What it can access

Every tool operates only on campaigns owned by the connected user — other users' data is never exposed. Reference a campaign by its numeric id or slug.

Available tools

9 tools, kept in sync with the server.

List Campaigns Tool

list-campaigns-tool

List the campaigns owned by the authenticated user, each with its id, title, slug, public URL and short link.

InputTypeRequiredDescription
limit integer no Maximum number of campaigns to return (1-100).

Get Campaign Tool

get-campaign-tool

Get the full configuration and lifetime metrics for one of the authenticated user's campaigns, identified by its numeric id or slug.

InputTypeRequiredDescription
campaign string yes The campaign id or slug.

Get Campaign Analytics Tool

get-campaign-analytics-tool

Get analytics totals (views, clicks, shares, conversions) and engagement rates for one of the user's campaigns. Omit the dates for lifetime figures, or pass from/to for a window.

InputTypeRequiredDescription
campaign string yes The campaign id or slug.
from string no Start date (YYYY-MM-DD). Optional; omit with "to" for lifetime totals.
to string no End date (YYYY-MM-DD). Optional.

Get Campaign Timeseries Tool

get-campaign-timeseries-tool

Get a daily time series for one metric (views, clicks, shares or conversions) of one of the user's campaigns. Defaults to the last 30 days; gaps are zero-filled.

InputTypeRequiredDescription
campaign string yes The campaign id or slug.
metric string no Which metric to chart.
from string no Start date (YYYY-MM-DD). Optional.
to string no End date (YYYY-MM-DD). Optional.

Get Campaign Breakdown Tool

get-campaign-breakdown-tool

Break down one of the user's campaign analytics by a dimension: "device" (works for any metric) or "platform" (share platforms). Defaults to the last 30 days.

InputTypeRequiredDescription
campaign string yes The campaign id or slug.
dimension string yes Group by device or by share platform.
metric string no Metric to break down (ignored for the platform dimension, which always uses shares).
from string no Start date (YYYY-MM-DD). Optional.
to string no End date (YYYY-MM-DD). Optional.

Get Campaign Shares Tool

get-campaign-shares-tool

List a campaign's recent shares — the same merged groups shown in the dashboard, where repeat shares from the same person are combined and their clicks and conversions summed. Newest first by default; sortable by date, clicks or conversions, and paged. Each row carries the participant's name, role, platform, device, picture, share URL, code, sharing text, clicks, conversions, merged_count and timestamps — never their email.

InputTypeRequiredDescription
campaign string yes The campaign id or slug.
sort string no Sort field: share date, total clicks, or total conversions.
direction string no Sort direction.
per_page integer no Rows per page (1-100).
page integer no Page number (1-based) for paging through results.

Create Campaign Tool

create-campaign-tool

Create a new campaign owned by the authenticated user. Only "title" is required; a unique slug is generated from the title when omitted.

InputTypeRequiredDescription
title string yes Campaign title.
slug string no URL slug. Optional; generated from the title when omitted.
sharing_url string no Destination URL appended to the sharing text.
sharing_text string no Default sharing text.
utm_source string no UTM source.
utm_medium string no UTM medium.
utm_campaign string no UTM campaign.
utm_content string no UTM content.
hide_branding boolean no Hide Echo branding.
viral_tracking boolean no Enable viral chain tracking.
conversion_tracking boolean no Enable conversion tracking.
social_proof boolean no Show recent sharers.
language_default string no Default language code.

Update Campaign Tool

update-campaign-tool

Update fields on one of the authenticated user's campaigns. Identify it by id or slug; only the provided fields are changed.

InputTypeRequiredDescription
campaign string yes The campaign id or slug to update.
title string no Campaign title.
slug string no URL slug.
sharing_url string no Destination URL appended to the sharing text.
sharing_text string no Default sharing text.
utm_source string no UTM source.
utm_medium string no UTM medium.
utm_campaign string no UTM campaign.
utm_content string no UTM content.
hide_branding boolean no Hide Echo branding.
viral_tracking boolean no Enable viral chain tracking.
conversion_tracking boolean no Enable conversion tracking.
social_proof boolean no Show recent sharers.
language_default string no Default language code.

Delete Campaign Tool

delete-campaign-tool destructive

Permanently delete one of the authenticated user's campaigns, identified by id or slug. This cannot be undone — confirm with the user first.

InputTypeRequiredDescription
campaign string yes The campaign id or slug to delete.