Docs
MCP

Layers Growth MCP

One MCP server that runs a TikTok growth loop from your repository. Setting it up is one paste into your coding agent, which installs the Layers CLI and runs setup for you. Prices, resources, and skills are on this page.

View as Markdown

Layers Growth MCP is one MCP server that gives a coding agent a growth loop over the Layers platform. It holds a standing map of the accounts your product competes with, an evidence-ranked queue of content tests, an editable plan for the next test, delivery to a TikTok draft inbox, and a recorded result with the next test to run. It binds to one Layers organization and project through the repository you run setup in. The agent calls one named outcome per job. Every charge is quoted before it happens, and posting, spending, and billing changes each wait for a human click.

An Instagram account connects, satisfies onboarding, syncs, and is measured, and its own posts can be remixed. Discovery, delivery, and managed accounts run on TikTok today. No paid lane is certified yet: plan_paid_campaign refuses every platform until the Paid Growth lane ledger records a live-certified row for that lane.

Install

Set up Layers Growth for me so you can plan, render and deliver content for this product from here.
1. Install the CLI: run `npm install -g @layers/cli`.
2. Set it up: run `layers setup` from this repository. It opens my browser once for sign-in and waits for me; it writes the `.mcp.json` entry and the Layers skill into the repo and stores the session in my OS credential store, so nothing secret lands in the repo.
3. Read the skill at `.agents/skills/layers/SKILL.md`, then tell me what to post first.
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 both commands, and the browser sign-in is the only step that needs a person.

Setup opens a browser once for OAuth sign-in. It stores the session in the operating system credential store, so no token, key, or header is written into the repository or into your agent's configuration. layers mcp and layers call are the credential's only readers.

MCP clients read .mcp.json when they start, so the entry setup writes reaches the client on its next start or after /mcp. In the session where setup just ran, layers call <tool> calls the same tools over the same sign-in. Claude Code holds a new repository server pending until you approve that entry once; setup reports project_config_pending_approval and names the exact entry to approve.

Manual setup

If you would rather run the commands in a shell:

npm install -g @layers/cli
layers setup

What setup writes

PathContentsSecret
.layers/project.jsonpublic project ID, public organization ID, environment, issuer, setup versionNo
.mcp.json{ "command": "layers", "args": ["mcp"] } merged under server name layersNo
.agents/skills/layers/SKILL.mdthin pointer to the server-owned skill indexNo
.claude/skills/layersrelative symlink to the canonical skill where symlinks are supportedNo

Every file above is safe to commit. Setup is idempotent: running it again repairs Layers-owned entries, leaves every other MCP server entry byte for byte as it was, and creates no second project. For a client that does not read the repository .mcp.json, setup registers the server through that client's own command, such as codex mcp add layers -- layers mcp.

The tools

Twenty-seven outcomes make up the catalog. Prices are in credits and every charge is quoted before the work runs. The Credits column lists each charged action; anything not listed there is free. tools/list in your session is the authority on what your agent can call: a tool is there because it ships, and a tool Layers withdraws is deleted from the catalog by a release rather than switched off under you.

Three profiles, and a project has to have a profile enabled before its tools admit a call. Growth is the default.

Growth

ToolWhat it doesCredits
onboard_productBinds the product, collects the facts no source can supply, starts the social and measurement connections, and starts the six background jobs a new project gets0
manage_growth_landscapePins, removes, or rescopes the tracked accounts, and requests an explicit refresh6 forced incremental refresh; 6 full rebuild
find_growth_opportunitiesReturns the strongest current tests with source evidence, effort, and prior use0 read; 2 per creative preview produced
plan_content_experimentTurns one opportunity into an editable plan with one controlled variable, a target account, a measurement window, and a success gate6 new plan or structural revision
generate_influencerCreates one persona for the project from a gender, an age range, and an optional one-line look, and returns its id and a link to the portrait slate straight away while the portrait is drawn0
add_brand_assetPuts one of the project's own product assets into Layers from a public https URL, so a render has something of yours to composite0
render_contentRenders reviewable content from an approved plan revision or straight from a brief with no plan. One output per call25 static image; 85 slideshow; 200 video; 400 extended video
deliver_content_experimentPrepares a rights-cleared artifact, takes artifact-level approval, and delivers it to a TikTok draft inbox or posts it5 per delivered target
track_growth_experimentRegisters a post you published yourself as an experiment with its hypothesis and source lineage0
review_growth_resultsReads the evidence, records the verdict, and names the next controlled test1 forced provider read
install_growth_measurementPuts the Layers SDK in this product's own repository and confirms it reports, so installs and revenue resolve back to the post that produced them0
generate_tracking_linkMints a named tracking link as a stored row: a label and tags for your own reports, the five UTM fields for the ad network, a payload the app receives on first launch, and a destination that is either the app store or a web address with the click id appended0
archive_tracking_linkTakes one link out of the working inventory, and puts it back. The URL keeps resolving and the clicks keep recording either way0
configure_growth_measurementSets the App Store URL, the Play Store URL, the fallback URL and the clipboard switch on the product's measurement app, which is the fix for the tracking link's only refusal0
manage_bio_pagePublishes a link-in-bio page at <slug>.layers.click made of tracking links, states the buttons on it, edits the five tokens it renders with, or takes it down0
configure_conversions_forwardingPoints one ad platform's conversions destination at the product, says which conversion it counts and which traffic reaches it. It takes no access key: when the destination has none on file the result hands back a signed page a person opens to paste one0
decline_next_stepRecords the person's answer to an offer layers://next made: declined, or not before a date they name. One row per offer, and a later answer overwrites it0
research_tiktok_creatorReads one TikTok creator by handle: followers, posts, bio, bio link, verified and private flags, avatar, profile URL, and the date the account was created1 per call
research_tiktok_creator_postsReads one creator's recent posts, newest first, with views, likes, comments, shares, saves, length, cover and sound1 per call
research_tiktok_searchSearches TikTok for public posts on a topic, with the same numbers plus the poster's handle and follower count1 per call
research_tiktok_hashtagReads one hashtag: post count, total views, average views per post, its momentum against its own history, and recent posts1 per call
research_tiktok_trending_soundsReads the TikTok sound chart as it stands: title, artist, length, post count, whether anybody sings on it, a preview URL, and cover art1 per call
haltStops queued and running work in scope and returns a receipt per target0
cancel_trial_auto_renewalPreviews and confirms cancellation of the trial renewal0
send_feedbackSends a message to the Layers founders, who read every one. It works for a workspace that has run out of credits or has billing paused0

A creative edit changes the script, opening, caption, or tags, and it is free however many times you make it. A structural revision changes the source, hypothesis, controlled variable, format, target account, or schedule, and it costs the same 6 credits as a new plan because the server recomputes the plan. Every revision is recorded and supersedes the previous one.

One render_content call starts one generation and returns one job, so it charges one rate. Rendering more is calling again. An unusable output is refunded. Reading stored results costs nothing, and a forced refresh that causes no provider read creates no debit.

Ad spend is your own money at the provider. It never consumes credits and never hides inside a credit quote, and every campaign runs under a spend authority a human granted.

ToolWhat it doesCredits
plan_paid_campaignProduces a mutation-free campaign plan from a proven source or a bounded demand brief, echoing back the caps and stop rules you stated0
start_experimentStarts an experiment from the post the Content Planner already picked: you send the daily budget, Layers supplies the post, the network and the schedule, and it answers with the same plan0
resume_paid_setupContinues the plan a setup handoff belongs to: send the handle the handoff carried, and Layers re-reads the provider and returns the same plan0
create_approved_campaign_draftBuilds the non-delivering TikTok campaign drafts one exact plan describes10 per campaign that reads back complete
launch_approved_campaignPreviews or confirms delivery for one campaign, and is also how a paused campaign starts delivering again0; the provider bills the ad spend to your own ad account
apply_approved_campaign_changePreviews or confirms one bounded change to one campaign: move the daily total, or delete the campaign at the provider5 on confirm

set_daily_budget moves one campaign's daily total. delete_campaign removes the campaign at the provider, including one that is delivering right now, and a deleted campaign cannot be resumed. Both preview for free, both cost 5 credits on confirm, and both report success only after the provider reads the change back.

Managed distribution

A Layers-operated fleet is billed in dollars from the organization's cash wallet, at $150 per account per month. That is separate money from credits.

ToolWhat it doesCredits
plan_managed_distributionQuotes a fleet of Layers-operated TikTok accounts. Quoting reserves nothing and holds nothing0
provision_approved_managed_accountsOrders the exact fleet one plan quoted. This is the call the cash wallet is charged on, at the monthly rate above0
release_managed_accountsPreviews or confirms giving managed accounts back, with what money comes back and what the current period keeps0

What onboarding sends

Your agent reads the repository on your machine and submits a short product brief: name, one-line description, category, target users, the problem, the conversion goal, seed keywords, known social handles, and store identities. Layers never receives your source code. No file, path, diff, or excerpt is sent. The request carries the brief fields, one digest, and a closed list of evidence classes such as package_manifest and readme.

Onboarding starts what a browser onboard starts, when a browser onboard starts it. It names six jobs, and the two blocks fill at different moments. kickoffs carries the five that run as soon as the project exists, before any account is connected: the app-store or website screenshot harvest, the branded end card, the first persona, the first reel that joins the last two, and the keyword research that builds the hashtag bank. They are named on a result still waiting for a social connection, so the wait is not an idle one. landscape carries the sixth, the tracked-account discovery walk, which runs once an owned account is connected because it walks out from the account you own; it also restates the keyword job already in flight. Each id reads back at layers://jobs, and all six are free.

A project onboarded from an App Store or Google Play listing also gets its mobile app layer, its store listing record and its bundle id at the same moment, which is what lights the App Store Optimization surface in the app.

It creates no schedule, campaign, managed account, standing automation, provider mutation, or charge. Connecting a social account grants read access, and it cannot turn on posting, cadence, replies, or autopilot.

Free resources

Resources read stored state. They are free, they never trigger a provider read or a model call, and each one reports when its data was observed and which tool refreshes it.

ResourceWhat it holds
layers://nextthe one move this project is at and the rows that follow it: a tool to call now with complete arguments and its price, a link to hand a person, a purchase that funds the move already chosen, or a wait with the time to come back. Beside it, the presence tier the decision table branched on and the inputs that decided it, every row of the table with what happened to it, and the answers already given to an offer. The same step rides every tool result in the envelope's next field, without the rows that follow
layers://accountidentity, plan or trial, credit balances, reserved credits, profile availability, active offers, and a human billing link. layers://account/credit-events pages every balance change
layers://workspaceproduct brief, growth goal, connected accounts, measurement readiness, and posting policy
layers://landscaperanked tracked accounts, pins, exclusions, scope, freshness, and source evidence
layers://opportunitiesthe standing ranked queue, with full source evidence per opportunity
layers://experimentsexperiment summaries, the current projection per experiment, and the append-only event ledger
layers://influencersthe project's personas, each with the look it was generated from, its portrait, and whether it is still being drawn, plus slateUrl, a page you can hand to a person who wants to see the faces
layers://brand-assetsthe project's own product media a render composes: app screenshots, demo videos and end cards, each with a stable id render_content accepts
layers://musicthe curated tracks a render can be scored with: title, artist, length, whether anybody sings on it, and a preview URL to play a person
layers://measurementwhat the project spent beside what Layers recognized over one window: ad spend per platform with how much of it is settled, recognized revenue per channel, the frozen D7, D30 and D90 cohort figures, and installs as observed, proven and claimed, with the arbitration between them. It names every figure that is unknown rather than zero
layers://jobsactive and recent jobs with state, receipts, errors, and recovery steps
layers://artifacts/<id>one rendered artifact by the cnt_ id its job named: whether it is ready, whether it is video, slideshow or image, the addresses to look at, the measured bytes with dimensions and duration, and the job and experiment it came out of
layers://tracking-linksevery link this project has minted, newest first, with its label, its tags, its UTM fields and what it did over the last 30 days: clicks, store taps, installs attributed to one of its clicks, and the revenue that followed. Filter by tag and by the surface that minted it; read one at layers://tracking-links/<id>
layers://clicks/<click id>one tap: when it happened, the platform it routed to, the link it came from, its UTM fields, the install it produced with the match method and confidence tier, and the revenue that followed
layers://eventsthe product events the SDK reported over a window: every event name with its count, its distinct people, when it was first and last seen, and a country rollup. Never a single event row
layers://revenuewhat the product earned from its own billing: a daily series per source, the monthly and annual run rate, subscribers, trials, churn and lifetime value, the trial forecast, and each source stated as ready, degraded or unavailable
layers://attributionwhich installs Layers could tie to a click and by what evidence: installs by method and rung, the resolve funnel with its five outcomes, the SKAdNetwork postbacks received, decoded and relayed on, and the residual with its causes
layers://sdk-healthwhether the SDK in the field is reporting at all: the versions in use with the installs behind each, the newest beacon and event, the events accepted, delivered and dropped with reasons, and whether the build is behind the current release
layers://conversionswhere the product's conversions are forwarded, per ad platform: whether it is on, which destination is bound and what class it is, what it counts, the delivery counts over 30 days, and the circuit breaker. Never an access key
layers://bio-pagethe hosted page at <slug>.layers.click: whether it is published, the icon, name and tagline it leads with, the five tokens it renders with, its buttons in order with the tracking link behind each one and what that link did, and how many people and how many crawlers opened the page each day
layers://skills/v1the skill index and each skill body

A client without MCP resource support gets one extra read-only tool, read_layers_state, which returns the same data and makes the same authorization decision. It reaches every resource above except layers://campaigns, so a paid-media projection needs a resource-capable client.

Skills

The server owns the skill bodies and setup installs one thin pointer at .agents/skills/layers/SKILL.md. The pointer names the server, the project binding rule, and the pinned major version. Skills carry judgment about when to use an outcome and how to read the result. They hold no credentials, no prices, and no tool of their own.

SkillProfileJob
niche-mapgrowthBuild and curate the standing map of direct, adjacent, and inspirational accounts
what-to-postgrowthTake one opportunity through a plan, an optional render, approval, and delivery
growth-reviewgrowthRead early or final evidence, state the uncertainty, and pick the next controlled test
outcome-loggrowthRegister work you posted yourself and keep the hypothesis, result, and next decision together
paid-growthpaid mediaPromote an owned post under exact spend authority
managed-distributionmanaged distributionPlan, approve, monitor, and release a disclosed managed fleet

Pricing

Credits pay for the work the agent asks for. One organization holds one credit balance, and the same operation costs the same number of credits on every plan.

PlanPriceCredits
Pay as you go$0 per monthnone included
Pro monthly$49 per month5,000 per month
Pro annual$468 per year, $39 per month5,000 each month
Ultra monthly$199 per month25,000 per month
Ultra annual$1,908 per year, $159 per month25,000 each month

Pay as you go costs nothing a month and includes no credits. It needs a card, and credits are bought in packs at 2 cents each. It is the way in for a workspace that wants to pay for exactly the work it asks for.

The trial is the first week: 7 days, $9 today, a card required, and 1,000 credits. The first landscape build is included, so the trial can reach opportunities without spending them. The trial converts to Pro monthly at $49 unless it is cancelled first, with the $9 credited toward the first month.

Subscriptions auto-renew until a human cancels them. Your agent can cancel the trial renewal for you with cancel_trial_auto_renewal: the first call previews the trial end, the effective date, what you keep, and what you lose, and returns a link. Cancellation itself takes your click on that Layers page. No MCP tool can complete a checkout, start a plan, or change a renewal on its own.

One-time packs add credits to the same balance and do not expire. There are two sets of prices, and a workspace buys from the one its plan puts it on.

PackCreditsOn a planOn pay as you go
Crawl1,000$9$20
Walk4,000$29$80
Run10,000$69$200
Scale20,000$129$400

layers://account reports which set applies to you, at creditPacks.eligibility.observed.packAudience, and every pack price it lists is the price your card is charged. A checkout link for the other set is refused.

Ad spend and managed-account fees are separate money. They never consume credits and never hide inside a credit quote.

Available today

Verified against the server source on 2026-09-02. tools/list in your session is the authority: every tool in the tables above is in the catalog, and a bound project with that tool's profile enabled can call it.

Growth is the profile a new project starts on. Paid media and managed distribution each wait on their own explicit human enablement, and neither adds a network-prefixed or provider-prefixed tool.

A few of the growth outcomes carry detail the table has no room for.

  • manage_growth_landscape charges only for a refresh. A full rebuild costs the same six credits as a forced incremental one and runs the same discovery crawl.
  • find_growth_opportunities reads the stored queue. The default read starts no vendor call, no model call, and no charge. includeCreativePreview: "generate" makes the creative analysis for the returned cards that have none yet, at two credits for each preview actually produced and nothing for a card it could not analyze; each one is cached, so a later read of the same card is free. quoteOnly returns the same cards and that price without producing anything.
  • generate_influencer is free. layers://influencers is where the persona is read back once its portrait lands, and slateUrl on both surfaces opens a page of the project's portraits for a person to look at.
  • render_content renders one output a call. A remix reads video or slideshow off the post it adapts and charges the matching rate; layers://brand-assets and layers://music are where the screens and the track it can be directed with are read.
  • The five research_tiktok_* reads each cost one credit a call whatever the row count, charged on the call. research_tiktok_trending_sounds and layers://music answer different questions: the chart is what TikTok is playing, and the resource is what a render may legally be scored with.
  • review_growth_results reads stored evidence for nothing and pays one credit only for a forced provider sync.
  • halt covers one job, one experiment, one social account, one paid campaign, one managed account, or the whole project. On a campaign it pauses provider delivery and withdraws the approvals that campaign holds.

Two earlier surfaces were retired on 2026-08-30 with no bridge and no compatibility shim: the npm package @layers/mcp-server, including the keyless onboarding mode it started in without a key, and the growth MCP that served the protocol at growth.layers.com. Do not install or call either one. That hostname now serves the landing site for this server and no protocol. The Growth page covers the retired growth MCP. The product contract for this server, including where the outcome of every retired tool went, is docs/specs/layers-mcp-product.md in the Layers repository: section 15.2 for the 26 growth tools and section 15.3 for the 52 API-backed tools and the five keyless tools. The REST routes those tools mirrored are unchanged.

Support

Ask in the in-app chat at app.layers.com, or email support@layers.com. For a security report, email security@layers.com.

Layers also has a public REST API for building against the platform directly. See API.

On this page