Docs
Growth

Legacy growth MCP endpoint

The legacy endpoint at growth.layers.com/mcp was retired on 2026-08-30. Layers Growth is live at growth.layers.com and connects to https://mcp.layers.com/mcp.

View as Markdown

The legacy growth MCP endpoint at growth.layers.com/mcp was retired on 2026-08-30. The service, its database, and its OAuth authorization server are gone. gi_ keys and gat_ tokens are revoked, no growth_-prefixed tool exists anywhere, and the hostname serves no MCP protocol. Layers Growth is live at growth.layers.com, connecting to https://mcp.layers.com/mcp.

The converged Layers Growth MCP replaces it. It is one server, and moving to it is one paste into the coding agent working in your repository:

Set up Layers for this product: onboard it, install Layers measurement, then connect Meta and launch ads.
1. Install the CLI: run `npm install -g @layers/cli`.
2. Check that the README opens with a plain sentence saying what this product is, and write one if it does not. Setup sends that single line as the product brief, and it stops with exit code 1 when it cannot find one.
3. Set it up: run `layers setup` from this repository. It prints one line, "Send this to the person: <link> (code <code>)". Send me that link and code; I tap the link, check the code matches, and tap Allow. It also opens a browser on this machine when there is one, and either way finishes the sign-in. The link works for 15 minutes, and running `layers setup` again after a restart resumes the same link. It writes the `.mcp.json` entry and the Layers skill into the repo and stores the session in the OS credential store, so nothing secret lands in the repo. On a machine with no OS credential store, such as a Linux cloud computer, run `layers setup --allow-file-credentials` instead, which keeps the session in a private 0600 file. If it asks for the product's public URL, which is its website, its App Store page, or its Google Play page, pass that question to me. Setup also onboards the product: Layers saves the README line and the public URL as this product's brief.
4. Check the organization: when setup creates the project, its summary names the organization the project is in and says how to put the project in another one. Send me that organization line. If I name another organization, follow those instructions.
5. Read the skill at `.agents/skills/layers/SKILL.md`. If this session cannot load the Layers MCP server, as in a headless run, call a tool with `layers call <tool> '<json>'` and read a resource with `layers call layers://<resource>`; both reach the same tools and resources.
6. Install Layers measurement: call install_growth_measurement with action spec. For an Expo, React Native or Flutter app, send platforms with that framework, such as ["expo"]; the response lists the platforms the spec covers. When the product has a website to promote, send webDomain set to its host name, such as example.com. It returns the SDK dependency, the app id and the init snippet for this app. Add them to the app, run the app once on a simulator, a device or in a browser, then call install_growth_measurement with action verify until it answers reporting.
7. Set the daily cap before any launch: ask me "What is the most you want to spend on ads per day, in US dollars?" and set my answer with set_spend_cap. The cap is a 7-day average, so one day over it is fine.
8. Connect Meta: read layers://workspace. The meta-ads row of paidReadiness.providers carries a signed connect link. Send me that link; I open it and choose the ad account, the Facebook Page the ads run as and, for an app with a store listing, its Meta app. Every Meta ad runs as a Facebook Page. If I have none, the page links to where I create one; when I tell you the Page is ready, send me a new connect link. Wait until that row reads configured.
9. Make the ads: write the primary text and headline and make the images for each market, in that market's language and sized for Meta placements. Save each image inside this repository: launch_ads takes it as media with source local_file and the file's path, and the layers CLI uploads it. An image already at an https address goes as source image_url with that url. Show me the copy and the images before you launch.
10. Launch: call launch_ads with action launch, a dailyBudget within the cap in the ad account's currency, currency, markets and the creatives. An app with a live App Store or Google Play listing gets an App Promotion campaign for installs. A website product, such as a web app, a SaaS, a store or an info product, gets a campaign whose ads link to the website and optimize the conversion its Meta Pixel received in the last 28 days: a Sales campaign for Purchase, else a Leads campaign for a lead event such as Lead or CompleteRegistration from a waitlist or sign-up form. An app with no store listing yet launches only through its website, or waits for the listing. launch_ads returns each blocker with its fix; do the fix and call it again. While Meta reviews the ads, the launch answers status running; call launch_ads with action status and its jobId until it finishes.
Let me know when it is ready.

Paste that into Claude Code, Codex, Cursor, or any coding agent working in your repository: the agent runs the commands and the tool calls. A person taps the sign-in link, answers the daily ad cap question, and opens the Meta connect link.

layers setup signs you in, binds the repository to the Layers Growth MCP, and removes a growth entry an older setup wrote when that entry is exactly the one Layers owned. The session stays in the operating system credential store, or with --allow-file-credentials in a private 0600 file on the machine.

Manual setup, if you would rather run the commands in a shell: npm install -g @layers/cli, then layers setup.

The product contract for the converged server, including what happened to each of the 26 growth tools, is docs/specs/layers-mcp-product.md in the Layers repository. Section 15.2 names every tool and says where its outcome went. The credit prices this section used to publish are superseded by section 13.3 of that spec.