Competitor Meta ads intelligence reports. List plans, create orders, Stripe checkout for humans.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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.
The May run the concepts came from.
Which concepts to build ads from. From list_creatives.
Whole dollars per day.
Whole dollars. Required unless bid_strategy is LOWEST_COST_WITHOUT_CAP.
Which conversion to optimize toward, from list_meta_assets. Needed for leads and sales.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
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.
| Argument | Type | Description |
|---|---|---|
| goal* | string | |
| run_id* | string | The May run the concepts came from. |
| bid_amount | integer | Whole dollars. Required unless bid_strategy is LOWEST_COST_WITHOUT_CAP. |
| variant_ids* | array | Which concepts to build ads from. From list_creatives. |
| bid_strategy | string | |
| daily_budget* | integer | Whole dollars per day. |
| campaign_name | string | |
| conversion_asset_id | string | Which conversion to optimize toward, from list_meta_assets. Needed for leads and sales. |
{
"type": "object",
"required": [
"run_id",
"variant_ids",
"goal",
"daily_budget"
],
"properties": {
"goal": {
"enum": [
"awareness",
"traffic",
"engagement",
"leads",
"calls",
"sales"
],
"type": "string"
},
"run_id": {
"type": "string",
"description": "The May run the concepts came from."
},
"bid_amount": {
"type": "integer",
"description": "Whole dollars. Required unless bid_strategy is LOWEST_COST_WITHOUT_CAP."
},
"variant_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Which concepts to build ads from. From list_creatives."
},
"bid_strategy": {
"enum": [
"LOWEST_COST_WITHOUT_CAP",
"COST_CAP",
"LOWEST_COST_WITH_BID_CAP"
],
"type": "string"
},
"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."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| name* | string | The client or brand name, as the customer would say it. |
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "The client or brand name, as the customer would say it."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| plan* | string | |
| email* | string | Customer work email (receipt, portal invite, and report-ready notifications). |
| notes | string | |
| competitors* | array | Brand or Meta Ad Library page names. Snapshot=1, Dominator=up to 5, Agency=up to 10. |
| company_name* | string | |
| revenue_band* | string | |
| company_website | string | |
| industry_vertical* | string |
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.
| Argument | Type | Description |
|---|---|---|
| website_url* | string | The client's homepage. |
| client_account_id* | string | From list_clients or create_client. |
{
"type": "object",
"required": [
"client_account_id",
"website_url"
],
"properties": {
"website_url": {
"type": "string",
"description": "The client's homepage."
},
"client_account_id": {
"type": "string",
"description": "From list_clients or create_client."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| client_account_id* | string | From list_clients. |
{
"type": "object",
"required": [
"client_account_id"
],
"properties": {
"client_account_id": {
"type": "string",
"description": "From list_clients."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| deliverable_id* | string | From list_deliverables. |
{
"type": "object",
"required": [
"deliverable_id"
],
"properties": {
"deliverable_id": {
"type": "string",
"description": "From list_deliverables."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| id | string | A report request id or a May run id. |
| client_account_id | string | Narrow the list to one client. |
{
"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 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.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| run_id* | string | A May run id from get_status or run_may. |
{
"type": "object",
"required": [
"run_id"
],
"properties": {
"run_id": {
"type": "string",
"description": "A May run id from get_status or run_may."
}
},
"additionalProperties": false
}List everything finished and ready to download on this account: competitor report bundles and May run artifacts. Requires an X-Mako-Key header.
| Argument | Type | Description |
|---|---|---|
| kind | string | |
| limit | integer | |
| client_account_id | string | Narrow to one client workspace. |
{
"type": "object",
"properties": {
"kind": {
"enum": [
"competitor_report",
"agent_artifact"
],
"type": "string"
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1
},
"client_account_id": {
"type": "string",
"description": "Narrow to one client workspace."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| client_account_id* | string | From list_clients. |
{
"type": "object",
"required": [
"client_account_id"
],
"properties": {
"client_account_id": {
"type": "string",
"description": "From list_clients."
}
},
"additionalProperties": false
}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.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| goal | string | What the customer wants to learn from the report. |
| notes | string | |
| title | string | |
| market | string | |
| competitor* | string | The competitor's brand name or Meta Ad Library page name. One per order. |
| facebook_page | string | The competitor's public Facebook page URL. |
| competitor_site | string | The competitor's website. |
| client_account_id | string | Which client workspace this is for. Get it from list_clients. |
{
"type": "object",
"required": [
"competitor"
],
"properties": {
"goal": {
"enum": [
"launch",
"lost_ground",
"offers",
"creative",
"new_market"
],
"type": "string",
"description": "What the customer wants to learn from the report."
},
"notes": {
"type": "string"
},
"title": {
"type": "string"
},
"market": {
"enum": [
"ALL",
"US",
"CA",
"GB",
"AU"
],
"type": "string"
},
"competitor": {
"type": "string",
"description": "The competitor's brand name or Meta Ad Library page name. One per order."
},
"facebook_page": {
"type": "string",
"description": "The competitor's public Facebook page URL."
},
"competitor_site": {
"type": "string",
"description": "The competitor's website."
},
"client_account_id": {
"type": "string",
"description": "Which client workspace this is for. Get it from list_clients."
}
},
"additionalProperties": false
}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 a few minutes. When the brand profile names a competitor May has not researched yet, it reads that competitor's website and Meta ads first, and the run shows status 'researching' for up to about 20 minutes. 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.
| Argument | Type | Description |
|---|---|---|
| avoid | string | One thing the creative must not claim or show. |
| brief* | string | What this round is for, in plain language. The campaign, the angle, the buyer. |
| feature | string | One thing the creative should lead with. |
| objective | string | |
| client_account_id* | string | Which client workspace to run for. Get it from list_clients. |
{
"type": "object",
"required": [
"client_account_id",
"brief"
],
"properties": {
"avoid": {
"type": "string",
"description": "One thing the creative must not claim or show."
},
"brief": {
"type": "string",
"description": "What this round is for, in plain language. The campaign, the angle, the buyer."
},
"feature": {
"type": "string",
"description": "One thing the creative should lead with."
},
"objective": {
"enum": [
"awareness",
"traffic",
"engagement",
"leads",
"calls",
"sales"
],
"type": "string"
},
"client_account_id": {
"type": "string",
"description": "Which client workspace to run for. Get it from list_clients."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| notes | string | |
| offer | string | The standing offer, for example 20% off the variety pack. |
| voice | string | How the brand sounds, in a sentence or two. |
| domain | string | Bare domain, for example acme.com. |
| confirm | boolean | Set true to mark the profile ready for runs. |
| category | string | |
| color_sky | string | Accent color as hex. |
| known_for | string | The problem they solve. |
| objective | string | The default campaign goal for this client. |
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.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}| client_account_name | string | Required for the agency plan: the client this batch is for. |
{
"type": "object",
"required": [
"plan",
"email",
"company_name",
"revenue_band",
"industry_vertical",
"competitors"
],
"properties": {
"plan": {
"enum": [
"snapshot",
"dominator",
"agency"
],
"type": "string"
},
"email": {
"type": "string",
"description": "Customer work email (receipt, portal invite, and report-ready notifications)."
},
"notes": {
"type": "string"
},
"competitors": {
"type": "array",
"items": {
"type": "string"
},
"description": "Brand or Meta Ad Library page names. Snapshot=1, Dominator=up to 5, Agency=up to 10."
},
"company_name": {
"type": "string"
},
"revenue_band": {
"enum": [
"under_100k",
"100k_1m",
"1m_5m",
"5m_10m",
"10m_plus",
"not_given"
],
"type": "string"
},
"company_website": {
"type": "string"
},
"industry_vertical": {
"enum": [
"ecommerce",
"software_saas",
"services_local",
"finance",
"health_wellness",
"education",
"media_publishing",
"other",
"not_given"
],
"type": "string"
},
"client_account_name": {
"type": "string",
"description": "Required for the agency plan: the client this batch is for."
}
},
"additionalProperties": false
}| color_navy |
| string |
| Primary brand color as hex, for example #1E3A8A. |
| objections | string | What stops people buying. |
| competitors | array | Up to three competitor brands May studies before writing concepts. |
| image_notes | string | Art direction for the generated images. |
| price_range | string |
| website_url | string |
| avoid_claims | string | Claims the creative must never make. |
| company_name | string |
| daily_budget | integer | Default daily budget in whole dollars. |
| phone_number | string | Only used by a calls campaign. |
| proof_points | array | Facts the copy is allowed to claim. Nothing outside this list is used. |
| support_email | string |
| signature_claim | string | The one thing this brand is known for. |
| flagship_product | string | The main thing to advertise. |
| popular_products | array |
| target_customers | array | Who buys it. One per entry. |
| client_account_id* | string | From list_clients. |
| offer_landing_page | string | Where the ads should send people. |
| competitor_websites | object | Optional website per competitor, keyed by the name in competitors. Give it for a local business or a common name, so May reads the right one. |
{
"type": "object",
"required": [
"client_account_id"
],
"properties": {
"notes": {
"type": "string"
},
"offer": {
"type": "string",
"description": "The standing offer, for example 20% off the variety pack."
},
"voice": {
"type": "string",
"description": "How the brand sounds, in a sentence or two."
},
"domain": {
"type": "string",
"description": "Bare domain, for example acme.com."
},
"confirm": {
"type": "boolean",
"description": "Set true to mark the profile ready for runs."
},
"category": {
"type": "string"
},
"color_sky": {
"type": "string",
"description": "Accent color as hex."
},
"known_for": {
"type": "string",
"description": "The problem they solve."
},
"objective": {
"enum": [
"awareness",
"traffic",
"engagement",
"leads",
"calls",
"sales"
],
"type": "string",
"description": "The default campaign goal for this client."
},
"color_navy": {
"type": "string",
"description": "Primary brand color as hex, for example #1E3A8A."
},
"objections": {
"type": "string",
"description": "What stops people buying."
},
"competitors": {
"type": "array",
"items": {
"type": "string"
},
"description": "Up to three competitor brands May studies before writing concepts."
},
"image_notes": {
"type": "string",
"description": "Art direction for the generated images."
},
"price_range": {
"type": "string"
},
"website_url": {
"type": "string"
},
"avoid_claims": {
"type": "string",
"description": "Claims the creative must never make."
},
"company_name": {
"type": "string"
},
"daily_budget": {
"type": "integer",
"description": "Default daily budget in whole dollars."
},
"phone_number": {
"type": "string",
"description": "Only used by a calls campaign."
},
"proof_points": {
"type": "array",
"items": {
"type": "string"
},
"description": "Facts the copy is allowed to claim. Nothing outside this list is used."
},
"support_email": {
"type": "string"
},
"signature_claim": {
"type": "string",
"description": "The one thing this brand is known for."
},
"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."
},
"client_account_id": {
"type": "string",
"description": "From list_clients."
},
"offer_landing_page": {
"type": "string",
"description": "Where the ads should send people."
},
"competitor_websites": {
"type": "object",
"description": "Optional website per competitor, keyed by the name in competitors. Give it for a local business or a common name, so May reads the right one.",
"additionalProperties": {
"type": "string"
}
}
},
"additionalProperties": false
}