Mako Metrics

Competitor Meta ads intelligence reports. List plans, create orders, Stripe checkout for humans.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
82%
Naming quality
96%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,920Tokens (tool definitions)
~1.3 KBTypical response size
Significant attention impact (2.28% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "mako-metrics": {
      "url": "https://ufupdlaxddckqxbgbhwu.supabase.co/functions/v1/mcp"
    }
  }
}

Remote endpoints

https://ufupdlaxddckqxbgbhwu.supabase.co/functions/v1/mcpstreamable-http

What it can do

Tool inventory

Tools (16)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢list_plans

List Mako Metrics plans with pricing, what's included, scope limits, delivery, guarantee, and links to verify the merchant. Use this to recommend a plan before ordering. Covers the competitor report plans, which are the only products orderable through this server. May, the Meta ads agent, is a monthly engagement bought at makometrics.com/meta-ads-agent.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟡create_order(plan, email, company_name, company_website, revenue_band, ...)

Create a Mako Metrics order brief for a customer and return a Stripe checkout link for them to complete payment. After payment, we email the customer when the report is ready, typically within 24h. They download the PDF report and export ZIP (saved ad images/videos, browsable gallery, raw ad data) at makometrics.com/portal. No payment is taken by this tool. It only returns a pay link the human opens. Report plans only. For May, the Meta ads agent, send the customer to makometrics.com/meta-ads-agent.

Input Schema

{
  "type": "object",
  "properties": {
    "plan": {
      "type": "string",
      "enum": [
        "snapshot",
        "dominator",
        "agency"
      ]
    },
    "email": {
      "type": "string",
      "description": "Customer work email (receipt, portal invite, and report-ready notifications)."
    },
    "company_name": {
      "type": "string"
    },
    "company_website": {
      "type": "string"
    },
    "revenue_band": {
      "type": "string",
      "enum": [
        "under_100k",
        "100k_1m",
        "1m_5m",
        "5m_10m",
        "10m_plus",
        "not_given"
      ]
    },
    "industry_vertical": {
      "type": "string",
      "enum": [
        "ecommerce",
        "software_saas",
        "services_local",
        "finance",
        "health_wellness",
        "education",
        "media_publishing",
        "other",
        "not_given"
      ]
    },
    "competitors": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Brand or Meta Ad Library page names. Snapshot=1, Dominator=up to 5, Agency=up to 10."
    },
    "client_account_name": {
      "type": "string",
      "description": "Required for the agency plan: the client this batch is for."
    },
    "notes": {
      "type": "string"
    }
  },
  "required": [
    "plan",
    "email",
    "company_name",
    "revenue_band",
    "industry_vertical",
    "competitors"
  ],
  "additionalProperties": false
}
🟢whoami

Show which Mako Metrics account this key belongs to: the plan, how many competitor reports are left in the current period, and the client workspaces on the login. Call this first in any session that will use the customer tools. Requires an X-Mako-Key header from makometrics.com/portal.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢list_clients

List the client workspaces on this account, with the id each other tool needs and whether the client's brand profile is ready for a May run. Requires an X-Mako-Key header.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢order_report(competitor, client_account_id, facebook_page, competitor_site, market, ...)

Order a competitor Meta ads report for one competitor. On a Dominator, Agency or May plan this spends one report from the current period's allowance and queues the build. On Snapshot it returns a Stripe checkout link instead. The report is NOT generated on the spot: a person builds it and it is delivered to the portal, typically within 24 hours. Poll get_status, then list_deliverables. Requires an X-Mako-Key header.

Input Schema

{
  "type": "object",
  "properties": {
    "competitor": {
      "type": "string",
      "description": "The competitor's brand name or Meta Ad Library page name. One per order."
    },
    "client_account_id": {
      "type": "string",
      "description": "Which client workspace this is for. Get it from list_clients."
    },
    "facebook_page": {
      "type": "string",
      "description": "The competitor's public Facebook page URL."
    },
    "competitor_site": {
      "type": "string",
      "description": "The competitor's website."
    },
    "market": {
      "type": "string",
      "enum": [
        "ALL",
        "US",
        "CA",
        "GB",
        "AU"
      ]
    },
    "goal": {
      "type": "string",
      "enum": [
        "launch",
        "lost_ground",
        "offers",
        "creative",
        "new_market"
      ],
      "description": "What the customer wants to learn from the report."
    },
    "title": {
      "type": "string"
    },
    "notes": {
      "type": "string"
    }
  },
  "required": [
    "competitor"
  ],
  "additionalProperties": false
}
⚪run_may(client_account_id, brief, objective, feature, avoid)

Start a May creative run for one client: research, copy, and eight ad concepts, delivered to the portal for the customer to review and edit. Usually under a minute. May builds creative and, separately in the portal, a PAUSED campaign. It never turns anything on and never spends ad budget. The client needs a confirmed brand profile first, which is filled in at makometrics.com/portal. Needs the May plan and an X-Mako-Key header.

Input Schema

{
  "type": "object",
  "properties": {
    "client_account_id": {
      "type": "string",
      "description": "Which client workspace to run for. Get it from list_clients."
    },
    "brief": {
      "type": "string",
      "description": "What this round is for, in plain language. The campaign, the angle, the buyer."
    },
    "objective": {
      "type": "string",
      "enum": [
        "awareness",
        "traffic",
        "engagement",
        "leads",
        "calls",
        "sales"
      ]
    },
    "feature": {
      "type": "string",
      "description": "One thing the creative should lead with."
    },
    "avoid": {
      "type": "string",
      "description": "One thing the creative must not claim or show."
    }
  },
  "required": [
    "client_account_id",
    "brief"
  ],
  "additionalProperties": false
}
🟢get_status(id, client_account_id)

Check one report order or one May run by its id, or omit the id to list the most recent of both. Returns the status and, once finished, the deliverable id to pass to get_download_url. Requires an X-Mako-Key header.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "A report request id or a May run id."
    },
    "client_account_id": {
      "type": "string",
      "description": "Narrow the list to one client."
    }
  },
  "additionalProperties": false
}
🟢list_deliverables(client_account_id, kind, limit)

List everything finished and ready to download on this account: competitor report bundles and May run artifacts. Requires an X-Mako-Key header.

Input Schema

{
  "type": "object",
  "properties": {
    "client_account_id": {
      "type": "string",
      "description": "Narrow to one client workspace."
    },
    "kind": {
      "type": "string",
      "enum": [
        "competitor_report",
        "agent_artifact"
      ]
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    }
  },
  "additionalProperties": false
}
🟢get_download_url(deliverable_id)

Mint a download link for one deliverable. The link works for 10 minutes and then expires, so fetch it when the human is ready to use it rather than in advance. Requires an X-Mako-Key header.

Input Schema

{
  "type": "object",
  "properties": {
    "deliverable_id": {
      "type": "string",
      "description": "From list_deliverables."
    }
  },
  "required": [
    "deliverable_id"
  ],
  "additionalProperties": false
}
🟡create_client(name)

Add a client workspace to the account. Each workspace holds one brand's profile, runs, creatives and campaigns. Plans include a fixed number of active clients, so this fails when the roster is full. Needs the May plan and an X-Mako-Key header.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "The client or brand name, as the customer would say it."
    }
  },
  "required": [
    "name"
  ],
  "additionalProperties": false
}
🟡draft_brand_from_website(client_account_id, website_url)

Read a client's website and fill in most of their brand profile automatically. Takes up to a minute or two. The result is a DRAFT: review it with get_brand_profile, correct it with set_brand_profile, then confirm. This is the fastest way to get a new client ready for a May run. Needs the May plan and an X-Mako-Key header.

Input Schema

{
  "type": "object",
  "properties": {
    "client_account_id": {
      "type": "string",
      "description": "From list_clients or create_client."
    },
    "website_url": {
      "type": "string",
      "description": "The client's homepage."
    }
  },
  "required": [
    "client_account_id",
    "website_url"
  ],
  "additionalProperties": false
}
🟢get_brand_profile(client_account_id)

Read one client's brand profile: what they sell, who buys it, voice, colors, and the campaign defaults. Also reports whether it is confirmed and, if not, exactly which answers are still missing before May can run. Requires an X-Mako-Key header.

Input Schema

{
  "type": "object",
  "properties": {
    "client_account_id": {
      "type": "string",
      "description": "From list_clients."
    }
  },
  "required": [
    "client_account_id"
  ],
  "additionalProperties": false
}
🟡set_brand_profile(client_account_id, company_name, domain, website_url, support_email, ...)

Write or update one client's brand profile. Every field is optional and only what you pass is changed, so this is safe to call repeatedly to correct a website draft. Pass confirm: true when the answers are right, which is what run_may needs. Confirming needs company_name, domain, flagship_product, offer_landing_page, target_customers and both colors. Needs the May plan and an X-Mako-Key header.

Input Schema

{
  "type": "object",
  "properties": {
    "client_account_id": {
      "type": "string",
      "description": "From list_clients."
    },
    "company_name": {
      "type": "string"
    },
    "domain": {
      "type": "string",
      "description": "Bare domain, for example acme.com."
    },
    "website_url": {
      "type": "string"
    },
    "support_email": {
      "type": "string"
    },
    "voice": {
      "type": "string",
      "description": "How the brand sounds, in a sentence or two."
    },
    "color_navy": {
      "type": "string",
      "description": "Primary brand color as hex, for example #1E3A8A."
    },
    "color_sky": {
      "type": "string",
      "description": "Accent color as hex."
    },
    "flagship_product": {
      "type": "string",
      "description": "The main thing to advertise."
    },
    "popular_products": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "target_customers": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Who buys it. One per entry."
    },
    "category": {
      "type": "string"
    },
    "signature_claim": {
      "type": "string",
      "description": "The one thing this brand is known for."
    },
    "known_for": {
      "type": "string",
      "description": "The problem they solve."
    },
    "objections": {
      "type": "string",
      "description": "What stops people buying."
    },
    "competitors": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "price_range": {
      "type": "string"
    },
    "offer_landing_page": {
      "type": "string",
      "description": "Where the ads should send people."
    },
    "avoid_claims": {
      "type": "string",
      "description": "Claims the creative must never make."
    },
    "image_notes": {
      "type": "string",
      "description": "Art direction for the generated images."
    },
    "notes": {
      "type": "string"
    },
    "objective": {
      "type": "string",
      "enum": [
        "awareness",
        "traffic",
        "engagement",
        "leads",
        "calls",
        "sales"
      ],
      "description": "The default campaign goal for this client."
    },
    "offer": {
      "type": "string",
      "description": "The standing offer, for example 20% off the variety pack."
    },
    "proof_points": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Facts the copy is allowed to claim. Nothing outside this list is used."
    },
    "daily_budget": {
      "type": "integer",
      "description": "Default daily budget in whole dollars."
    },
    "phone_number": {
      "type": "string",
      "description": "Only used by a calls campaign."
    },
    "confirm": {
      "type": "boolean",
      "description": "Set true to mark the profile ready for runs."
    }
  },
  "required": [
    "client_account_id"
  ],
  "additionalProperties": false
}
🟢list_creatives(run_id)

List the ad concepts from a May run: headline, primary text, call to action, compliance status, and a download link for each image. Returns the newest version of each concept. Use the variant_id values with build_paused_campaign. Requires an X-Mako-Key header.

Input Schema

{
  "type": "object",
  "properties": {
    "run_id": {
      "type": "string",
      "description": "A May run id from get_status or run_may."
    }
  },
  "required": [
    "run_id"
  ],
  "additionalProperties": false
}
🟢list_meta_assets(client_account_id)

Show the client's connected Facebook ad account and the conversions available to optimize toward. Call this before build_paused_campaign on a leads or sales campaign, because those need a conversion to aim at. Connecting Facebook itself has to be done by a person in the portal. Requires an X-Mako-Key header.

Input Schema

{
  "type": "object",
  "properties": {
    "client_account_id": {
      "type": "string",
      "description": "From list_clients."
    }
  },
  "required": [
    "client_account_id"
  ],
  "additionalProperties": false
}
⚪build_paused_campaign(run_id, variant_ids, goal, daily_budget, campaign_name, ...)

Build a real Meta campaign from chosen concepts, in the client's own ad account, left PAUSED. It cannot deliver and cannot spend until a person turns it on in Ads Manager, which this tool cannot do and neither can any other. Takes a minute or two. Budget floors: $6/day for leads and sales, $1/day otherwise; the ceiling is $500/day. Needs the May plan, a connected Facebook ad account, and an X-Mako-Key header.

Input Schema

{
  "type": "object",
  "properties": {
    "run_id": {
      "type": "string",
      "description": "The May run the concepts came from."
    },
    "variant_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Which concepts to build ads from. From list_creatives."
    },
    "goal": {
      "type": "string",
      "enum": [
        "awareness",
        "traffic",
        "engagement",
        "leads",
        "calls",
        "sales"
      ]
    },
    "daily_budget": {
      "type": "integer",
      "description": "Whole dollars per day."
    },
    "campaign_name": {
      "type": "string"
    },
    "conversion_asset_id": {
      "type": "string",
      "description": "Which conversion to optimize toward, from list_meta_assets. Needed for leads and sales."
    },
    "bid_strategy": {
      "type": "string",
      "enum": [
        "LOWEST_COST_WITHOUT_CAP",
        "COST_CAP",
        "LOWEST_COST_WITH_BID_CAP"
      ]
    },
    "bid_amount": {
      "type": "integer",
      "description": "Whole dollars. Required unless bid_strategy is LOWEST_COST_WITHOUT_CAP."
    }
  },
  "required": [
    "run_id",
    "variant_ids",
    "goal",
    "daily_budget"
  ],
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded16 tools
verifiedversion not recorded16 tools