Layers Growth MCP

Give your agent marketing superpowers

Layers Growth MCP is the endpoint your coding agent calls to run growth for your product.

Paste this to your coding agent

Your agent runs the commands. The browser sign-in is the only step that needs a person.

Before: Marketing without a planAfter: Signals in  →  Action out

No Subscription Required. Pay as You Go.

Pay as you go $0 a month
Pro $49 a month, 5,000 credits
Ultra $199 a month, 25,000 credits

What your agent can do

Fifty-four named outcomes. One call does one job and returns one envelope with the cost, the freshness of the data behind it and the next tools worth calling.

Credits come out of your organization's balance the moment your agent calls a tool, and auto-reload keeps that balance topped up.

All fifty-four reach your agent the moment layers setup binds a project. There is no second install, no per-feature switch and no waiting list. What differs is what each one has to work with on day one, which is the table further down. Read tools/list in your own session for the answer from the server itself, and the documentation for the input and return shape of each one.

ToolWhat it doesPrice
Growth
onboard_product
Binds the product, collects the facts no source can supply, starts the social and product measurement connections, and kicks off the same six background jobs a browser onboard starts: the keyword bank, the tracked-account walk, the screenshot harvest, the end card, the first persona and the first reel. Layers never receives your source code.
Free
manage_growth_landscape
Pins, removes and rescopes the accounts your product is measured against, and requests an explicit refresh or a full rebuild. Curation is free. A rebuild is the same work as a refresh today, and priced the same, until a deeper rebuild ships.
Free, or 6 credits per forced refresh; 6 credits per rebuild
find_growth_opportunities
Returns the strongest tests to run now, each carrying the source post it came from, the effort and whether you have used it before. Reading the standing queue starts no vendor call and no model call. Ask for the creative analysis a card is missing and it is made on the call and cached, so the next read of that card is free. The queue is empty until an owned account is connected and discovery scope is set, and it says so.
Free, or 2 credits per creative preview produced
plan_content_experiment
Turns one opportunity into an editable plan with a single controlled variable, a target account, a measurement window and a success gate. Creative edits to the script, opening, caption or tags are free.
6 credits per new or restructured plan
generate_influencer
Creates one persona for the project from a gender, an age range and an optional one-line look. It returns the persona id straight away and draws the portrait in the background, usually inside a couple of minutes, and hands back a slate page showing every persona's face to give the person you work for. Free, the same as making one in the Layers app. A completed persona fronts a reaction render.
Free
render_content
Four recipes, rendered from a plan revision or straight from a brief: reaction_demo films a persona reacting and then shows the app, slideshow_builder builds a deck from the project's own screens and keyword bank, static_ad draws one still ad image from the opening as its brief, and adapt_source remixes one post, where a TikTok source can be any public post. The brief directs the reaction formula, the scene, the caption treatment, the music, the app screenshots and the persona, and a plan render carries the same directions under an overrides block. An unusable output is refunded. The finished job names an artifact at layers://artifacts/<id>, which is where the media, its dimensions and its content hash come back.
25 credits per usable image; 85 credits per usable slideshow; 200 credits per usable 10-second video; 400 credits per usable 20-second video
deliver_content_experiment
Prepares a rights cleared artifact and delivers it to a platform draft inbox, or posts it directly. TikTok is the built platform, and each further platform enters the same enum on its own. An artifact Layers rendered is deliverable from its id alone, because Layers wrote those bytes and hashes the stored object itself. Draft mode ends in the platform inbox, where you make the final public action yourself.
Free, or 5 credits per delivery target
track_growth_experiment
Registers a post you published yourself as an experiment, keeping the hypothesis, the source lineage and the result together. It records work that already happened.
Free
review_growth_results
Reads the evidence, writes the verdict against the account's own normal, and names the next controlled test. Stored results are free, and a forced read that finds nothing new charges nothing.
Free, or 1 credit per forced provider read
halt
Stops queued and running work in scope and returns a receipt for every target it touched. Six scopes: one running job, one experiment, one social account, one paid campaign, one managed account, or the whole project. On a paid campaign it pauses delivery at the provider. It never claims to delete a post that is already public.
Free
cancel_trial_auto_renewal
Previews the trial end date and what access runs to, then confirms the cancellation under the calling organization administrator and returns the subscription receipt. It starts no other offer and no checkout.
Free
send_feedback
Sends a message to the founders, who read every one. A bug, a price you think is wrong, a capability you looked for and did not find, or something that worked. Attach it to the exact render, delivery, review or onboarding a result handed you, add a one-word verdict and an email address to answer at. It works for any member of the workspace, including one whose organization has run out of credits or has billing paused. It returns an acknowledgment and nothing else.
Free
add_brand_asset
Puts one of your own product assets into the project from a public https URL: an app_screenshot a deck composites, an app_demo a reaction reel ends on, or an end_card it falls back to. Layers fetches the URL, checks the type and the size, and stores the bytes. Free, because the render that uses the asset is what costs. It returns the bas_ id layers://brand-assets lists it under, and says which render gates the asset now clears.
Free
install_growth_measurement
Hands your coding agent the exact dependency, App ID, environment variable and init snippet for this product's platform, so it installs the Layers SDK in your own repository and no bot opens a pull request. Ship the build, call it again with verify, and it reads real events back and says whether the install is reporting. Free on both actions. On the five web platforms the spec carries a prompt written for an agent to execute as written.
Free
generate_tracking_link
Mints a named link that records where every visitor came from. A label and tags are yours and stay inside Layers; campaign, source, medium, content and term ride the URL to the ad network unchanged; a payload of your own reaches the app on first launch. It lands on your store listing, or on your own address with the click id appended. Put it in a bio, a download button, an ad destination or an email. Free. Every link is a stored row, so layers://tracking-links lists what you handed out and what each one did. Without the SDK reporting it attributes a click and a store tap; with the SDK reporting the same link resolves an install and its revenue back to the exact click. A product with no store URL on file is told that instead of handed a link that 404s, and configure_growth_measurement is the call that sets one.
Free
archive_tracking_link
Takes one link out of the working inventory, or puts it back. An archived link leaves the list and stays readable by its id. Free, and it is not a brake: the URL keeps resolving, the click route keeps recording, and every count the link has already produced stays readable. A link archived by mistake is one restore away.
Free
configure_growth_measurement
Sets the four fields the click route reads for this product: the App Store URL, the Play Store URL, the fallback URL, and whether the iOS page asks for the tap that writes the click to the clipboard. Free. This is the call that clears the only refusal the tracking link has, and the result says so. Name only the fields you are changing; a field you leave out keeps the value it has.
Free
manage_bio_page
Publishes a link-in-bio page for your product at .layers.click, made of the same tracking links. Store buttons that resolve to your listing at the moment somebody taps, your own web links, and your connected social profiles with their handles and avatars. Free. The page arrives already made of your product: the icon, the name and the tagline off your own rows, an accent taken from your brand colors or out of your icon, and the store and web buttons for every address you have on file. It is rendered from those rows on every request, so an edit is live on the next visit with no publish step. Every button is a tracking link minted with all five labels a report groups by: source layers.click, medium bio, campaign the page address, and content what the button opens. A tap on the page attributes the way a tap on an ad does, and layers://bio-page reads back what each button did beside how many people opened the page.
Free
decline_next_step
Records the person's answer to an offer the next step made: no, or not before a date they name. Free. Two offers can be answered, the ad account and the managed fleet, and both stop being raised once an answer is on file. A decline is forever; a not now needs the date it lapses on, because an offer that can never come back on its own is a decline in softer words. Saying yes is calling the tool the offer named, so there is no third answer here.
Free
record_mma_shipyard
Records one playtest, survey, release or mid-test experiment change for your app in MMA's Shipyard, beside its experiments. Free. Send externalKey, your own stable key, and a repeat updates that record instead of adding one; a release updated this way dates each rollout or track change.
Free
update_mma_shipyard
Changes a playtest, a survey or a logged experiment change in MMA's Shipyard. Free. A field left out keeps its value. Releases have no update: record a new one.
Free
set_mma_prototype_gates
Replaces your app's prototype gates, the playtest bars a title clears before soft launch. Free. A signed-in person only; an agent key files an MMA decision to propose a change. Each gate is read against the newest done playtest recorded for it.
Free
create_mma_attachment_upload
Requests an upload for a screenshot, short video or PDF on an experiment or Shipyard record in MMA; your agent PUTs the bytes itself. Free. Images up to 30 MB, video 200 MB, PDF 10 MB; 20 per record. The upload URL lasts 15 minutes. An externalKey makes a repeat return the same attachment.
Free
finalize_mma_attachment
Publishes an uploaded piece of evidence after MMA checks its size and type. Free. A repeat call returns the same attachment. A key finalizes only its own uploads.
Free
exclude_mma_install
Takes a QA or test install out of your app's numbers in MMA, so installs, sessions, cohorts, retention and SDK revenue stop counting it. Free. Send the install id the SDK sent from the test device and a reason. It has no undo. A repeat returns the stored record.
Free
list_mma_reviews
Lists your app's store reviews in MMA, newest first and deduped, with filters and a cursor to page. Free. App Store reviews come from the RSS feed and App Store Connect; Google Play reviews come from the Play API. Filter by store, star range, app version and review date.
Free
get_mma_ratings
Reads your app's daily store ratings, per-version statistics and release markers in MMA. Free. App Store version statistics count ratings received while the version was current; Google Play version statistics count written reviews on the version.
Free
get_mma_studio_brief
Reads the morning MMA brief: spend against caps, proven installs, revenue, ratings, alerts, tests due, decisions and releases. Free. People and org-wide MMA API keys read the studio; an app-scoped key reads only its bound app. Every figure carries its n or source, with low-n marked below 30 observations. mmaUrl opens the Brief page.
Free
get_mma_cohorts
Reads install-day cohorts for your app in MMA: installs, proven and claimed installs, and returners on day 1, 3, 7, 14 and 30. Free. Filter by campaign, ad set, network, country, platform or app version. A day N that has not ended reads as not mature, and totals carry 95% Wilson intervals.
Free
get_mma_retention
Reads the daily retention baseline, discovered dimensions and dimension slices for your app in MMA, with D1, D3, D7, D14 and D30 returners. Free. Rates carry 95% Wilson intervals; D1 and D7 differences use Newcombe against the rest of the app, with Holm-corrected tests and a low-n flag.
Free
get_mma_insights
Reads the daily retention insight feed for your app or the apps you can access in the studio, newest day first, then score. Free. Slice findings use 95% Wilson rates, Newcombe differences against the rest of the app and Holm-corrected D1 and D7 tests. Low-n slices produce no findings.
Free
get_mma_pockets
Reads healthy acquisition pockets, weak cut candidates and behavioral product pockets for your app or the apps you can access in the studio. Free. Pockets rank by retained players per day, then cost per D7 player within each source currency. Cost is present only where the spend report carries the pocket keys; missing cost is null.
Free
list_mma_experiments
Lists the product experiments recorded for your app in MMA, the Mobile Measurement Agent, newest first, with a cursor to page. Free. The same records the MMA Experiments page shows: hypothesis, arms, primary metric, read date, status and result.
Free
get_mma_experiment
Reads one MMA experiment by its id or by the key it was registered under. Free. An experiment on another app reads as not found.
Free
register_mma_experiment
Records a product experiment your agent is about to run, so it shows on the MMA Experiments page beside the app numbers. Free. A key already on file returns that experiment unchanged, so a retried call is harmless.
Free
update_mma_experiment
Moves an MMA experiment through planned, running, paused, reading, decided or stopped, and records its result. Free. The result holds the winner, the effect on the primary metric, its confidence interval, the units per arm and a note.
Free
file_mma_decision
Asks a person in your studio a question about your app on MMA's Decisions page, such as a gate change or spend over the daily cap. Free. The same title again while your first ask waits returns that ask. The answer arrives on layers://mma/decisions and in the inbox.
Free
withdraw_mma_decision
Takes back a pending MMA decision that no longer needs an answer. Free. An answered decision keeps its answer. A repeat returns the decision unchanged.
Free
mark_mma_inbox_read
Marks your MMA inbox read up to the time of the read your agent acted on, so the next read lists only what is new. Free. The marker is your agent's own, one per app, and only moves forward.
Free
Research  ·  read the platform you are growing on, one credit a call
research_tiktok_creator
Reads one TikTok creator by handle: followers, following, post count, bio, bio link, verification, whether the account is private, avatar, public profile URL and the date the account was created. The follower and following counts are the unrounded ones. A handle nobody holds comes back with creator null and charges nothing.
1 credit a call
research_tiktok_creator_posts
Reads one creator's recent posts, newest first, up to 20 a call: caption, post URL, video or photo deck, length, views, likes, comments, shares, saves, cover, the sound it carries and the post id. nextCursor pages forward. Every post id is what render_content's adapt_source recipe takes, so a post worth copying is one call from being remixed.
1 credit a call, whatever the count
research_tiktok_search
Searches TikTok for public posts on a topic, up to 20 a call, with the numbers that decide whether one is worth copying and the handle, display name and follower count of whoever posted it. Sort by relevance or likes, and narrow to the last 1, 7, 30, 90 or 180 days. A query that matches nothing charges nothing.
1 credit a call, whatever the count
research_tiktok_hashtag
Reads one hashtag: how many posts carry it, their views between them, its average views per post, and up to 20 recent posts with their own numbers. momentum compares the posts in that answer against the tag's own history, and reads above 1 when the tag is running hotter than usual. A tag nobody has posted under comes back with hashtag null and charges nothing.
1 credit a call, whatever the count
research_tiktok_trending_sounds
Reads the TikTok sound chart as it stands right now, up to 20 tracks: title, artist, length, how many posts carry each one, whether anybody sings on it, a preview URL and cover art. Each track carries renderableTrackId. The chart and layers://music are two lists: the chart is what is climbing on TikTok, and layers://music is the curated catalog render_content scores from. A chart track becomes renderable once it is in that catalog, and renderableTrackId is the trk_ id when it already is.
1 credit a call, whatever the count
Managed distribution  ·  Layers-operated TikTok accounts, billed in dollars from your cash wallet
plan_managed_distribution
Quotes a fleet of 1 to 20 Layers-operated TikTok accounts at $150 per account per month. You say how many and, if you want, what each persona should be. The quote returns the exact monthly and first-period price in dollars, where your cash wallet stands against it, every unmet precondition with its fix, and the disclosures the accounts will carry. The fee is dollars from the cash wallet and never content credits, which meter rendering and delivery separately. Quoting reserves nothing.
Free
provision_approved_managed_accounts
Orders the exact fleet one plan quoted and reserves the fee from the cash wallet in a single transaction, returning the account ids at funds_reserved. It re-checks every precondition against live state, so a wallet spent since the quote is refused with the shortfall and a top-up link, and nothing is reserved. Free in credits, and $150 per account per month in dollars. Watch the build at layers://managed-accounts.
Free
release_managed_accounts
Gives accounts back, up to twenty at a time. The preview lists per account the queued posts release would cancel, the next renewal date, the recurring cost it removes, what money comes back and what the current period keeps, what can still be exported and what cannot be recovered. Published posts stay published and measurement stays readable. A delivered account keeps the month it was given rather than being refunded pro rata.
Free
Paid media  ·  on for every bound workspace, no provider is certified yet
plan_paid_campaign
Resolves a complete campaign plan with the source creative, geography, schedule, attribution window, native currency caps and closed stop conditions. Planning touches no ad account and reserves no spend.
Free
start_experiment
Starts an experiment from the post the Content Planner already picked. You send one number, the daily budget in whole cents of the ad account’s own currency; Layers supplies which of your own posts to spend on, on which network, and the schedule and caps around it. It returns the same plan plan_paid_campaign returns and creates nothing. The campaign is confirmed with create_approved_campaign_draft, exactly as any other plan is.
Free
resume_paid_setup
Continues the plan one setup handoff belongs to. You send back the handle the handoff carried and nothing else; Layers re-reads the provider, records what it saw, and returns the same plan. If the provider still does not show the change, you get the same setup action back with the fresh observation on it and nothing is created. Finishing setup moves no money and confirms no campaign.
Free
create_approved_campaign_draft
Creates the provider objects from the resolved plan. Every campaign starts paused and is read back before it is reported as created. Nothing spends until a campaign is launched.
10 credits per campaign drafted
launch_approved_campaign
Starts exactly one confirmed campaign. There is no bulk launch, so each campaign gets its own preview and its own call. Ad spend is billed by the platform against your own ad account and is never a credit charge.
Free, with ad spend billed separately by the platform
apply_approved_campaign_change
Previews one bounded change to a live campaign, then applies exactly the change you saw. Two kinds: move the daily total, or delete the campaign at the provider. The preview shows the configuration before and after and whether objects are paused or spending. A delete preview says what the campaign has spent so far.
Free, or 5 credits per campaign changed
configure_conversions_forwarding
Points one ad platform's conversions destination at your product, says which conversion it counts, and says which of your traffic reaches it. Meta, TikTok, LinkedIn and ChatGPT Ads. Free. It takes no access key and no tool here does: when the destination has none on file the result hands you a signed page to open and paste one, and forwarding turns on the moment you do.
Free

Twenty-five families, at forty-three addresses, all free to read

Stored state under layers://, at the forty-three addresses below: account answers two of them. Reading one starts no vendor call and no model call, and each says when its data was observed and which tool refreshes it. A client with no resource support gets the same state through read_layers_state.

  • account plan or trial, balances, the packs on sale to you, the billing link
  • account/credit-events every change to the balance, paged
  • workspace the product brief, the growth goal, connected accounts, measurement and paid readiness, posting policy
  • landscape the ranked tracked accounts with pins, exclusions, scope and freshness
  • opportunities the standing ranked queue with full source evidence
  • experiments summaries, the current projection, the append-only ledger
  • artifacts/<id> one finished render: its state, its CDN addresses, its measured dimensions and duration, its content hash
  • influencers the project's personas, each with its look, its portrait and whether it is still being drawn
  • music the curated tracks a reaction render can be scored with: title, artist, length, whether anybody sings, a preview to play
  • brand-assets the project's own screens, demo videos and end cards, each with the bas_ id a render composes it by; add_brand_asset is how one gets in
  • jobs active and recent jobs with state, progress, receipts, errors and what a finished one produced
  • next the one move this project is at, with the whole decision behind it
  • skills/v1 the seven skills the server owns and the judgment each one carries
  • campaigns paid campaigns by their Layers id
  • managed-accounts what was ordered, how far each build has travelled, whether it is posting, whether next month is funded
  • measurement spend beside the revenue Layers recognized, the frozen D7, D30 and D90 cohort figures, and installs as observed, proven and claimed, with every figure that is unknown rather than zero named
  • tracking-links every link you handed out, with its label, its tags and what it did over the last 30 days: clicks, store taps, installs and revenue
  • clicks/ one tap: when, the platform, the link behind it, its UTM fields, the install it produced and the revenue that followed
  • bio-page your hosted page: the address it serves on, its buttons in order with what each one did, and how many people opened it
  • events what your SDK reported, counted by name rather than listed: every event with its count, its distinct people, when it was first and last seen, and a country rollup
  • events/catalog the schema behind those names: every event your app sends with its property keys, their types and how often each is filled
  • revenue what your product earned from its own billing: a daily series per source, the subscription block, the trial forecast, and each source health
  • attribution which installs Layers could tie to a click and by what evidence, the resolve funnel, the SKAdNetwork postbacks, and the residual with its causes
  • funnel where a first run stops, per app: install, onboarding, paywall shown, trial and paid as one cohort passing through in order
  • sdk-health whether the SDK in your product is reporting at all: the versions in the field, the newest beacon and event, the events accepted, delivered and dropped, and whether the build is behind the release
  • conversions where your conversions are forwarded, per ad platform: whether it is on, which destination is bound, what it counts, the delivery counts and the circuit breaker
  • mma/overview your app MMA headline numbers over a window: spend, installs, CPI, revenue by store, D1 and D7 retention and cohort ROAS
  • mma/retention the install-day retention matrix from MMA, day 0 through day 30, then day 60 and day 90
  • mma/spend spend by campaign per ad network, with the installs Layers proved and the revenue they made
  • mma/recommendations what MMA asks a person to act on: the changes the ad optimizer proposes and the measurement-health problems, each with its MMA link
  • mma/cohorts install-day cohorts from MMA: installs, revenue by age, spend, for ROAS, LTV and payback
  • mma/funnels your saved MMA funnels, each computed over a window
  • mma/events every event name your app sent, with counts and where each is forwarded
  • mma/realtime your app right now: active devices, events per minute, installs and revenue today
  • mma/deliveries conversion deliveries per ad network destination, with health and the delivery log
  • mma/matches installs MMA matched to an ad click or store referrer, newest first
  • mma/activity the change log: every change to your ad accounts and campaigns, and who made it
  • mma/decisions your app decisions in MMA: what was asked, the answer and who gave it
  • mma/shipyard your app Shipyard in MMA: playtests, surveys, releases, experiment changes, prototype gates
  • mma/data-notes dated notes on changes in how MMA derives its numbers
  • mma/portfolio your app row of the MMA Portfolio: today, 7-day and 30-day figures and alerts
  • mma/inbox what changed for your app since your agent last looked: reads due, answers, spend against the cap, broken signals
  • mma/ladder your app on the MMA viability ladder: its stage, every gate against its bar, keep, iterate or kill

What a fresh install can call

All fifty-four are in tools/list the moment a project is bound. These are the runtime prerequisites underneath: what each tool has to work with before it can do anything useful. None of them is a switch somebody at Layers flips for you.

Works on a fresh install

onboard_product, manage_growth_landscape, generate_influencer, render_content, add_brand_asset, send_feedback, plan_paid_campaign, plan_managed_distribution, and halt on the whole project. Every layers:// resource is readable; several answer honestly empty until the thing they project exists.

A slideshow_builder render works from a brief with nothing else in the project: the persona and the screens each have a default, and the deck is still slides that lay no audio, so music has no default on it and a stated one is refused whichever arm it carries. A reaction_demo needs one asset of yours for the product half after the reaction. render_content refuses the call before any charge, on the quote as well as the render, when the project holds no demo video and no end card, and the refusal says to call add_brand_asset with a public URL and kind app_demo for a demo video or end_card for a still, or send appDemo {"kind":"none"} to render the reaction alone. An adapt_source remix of a public TikTok post needs nothing of yours; an Instagram source has to be a post this project owns, because Layers remixes its own stored copy.

The two free planners are the honest first calls on an unconnected workspace. plan_paid_campaign answers needs_action with connect_ad_account named, and plan_managed_distribution answers blocked with the wallet shortfall and a top-up link. Neither is an error and neither charges.

The balance is its own gate, separately from any of this. A trial starts with 1,000 credits, which covers a slideshow at 85 or a 10-second video at 200. Pay as you go starts at zero, so the first charged call comes after the first pack. Every free tool above stays free either way, and every charged tool takes quoteOnly to price the call before it runs.

Needs something connected or funded first

find_growth_opportunities returns an empty queue with connect_social_account as the next step until an owned account is connected. layers://landscape is empty until manage_growth_landscape sets a scope.

plan_content_experiment, deliver_content_experiment and track_growth_experiment all name a connected social account as the target, so all three wait on that one connection.

create_approved_campaign_draft only builds from a plan that came back ready, which is what a connected ad account produces. provision_approved_managed_accounts reserves the fee from the cash wallet and refuses with the exact shortfall when it is short.

review_growth_results needs an experiment to read, and halt on a narrower scope needs that job, experiment, account or campaign to exist. cancel_trial_auto_renewal needs an auto-renewing trial and an organization administrator to call it.

Connecting an account is browser work a person does once, and onboard_product returns the page to do it on. layers://workspace is the readout of what is connected now.

How people use it

What a founder types to their coding agent, and what happens underneath. Every example maps to one of the fifty-four tools above.

  • "What should I post tomorrow for my meditation app?"

    Layers find_growth_opportunities returns the standing ranked queue, each test carrying the post it came from and how that post beat its own account's normal.

  • "Which of our competitors' posts broke out this week?"

    Layers manage_growth_landscape keeps the tracked set and layers://landscape returns it ranked, with the source evidence and when it was observed.

  • "Plan a three-hook test for our onboarding video and send the winner to TikTok drafts."

    Layers plan_content_experiment writes the plan with one controlled variable, render_content makes the variants, and deliver_content_experiment puts the winner in the draft inbox.

  • "Track the video I posted from my own account and tell me if it beat our normal."

    Layers track_growth_experiment registers the post with its hypothesis, and review_growth_results scores it against the account's own top quartile.

  • "Review last week's experiment and tell me what to do more of."

    Layers review_growth_results reads the evidence, records the verdict with its uncertainty, and names the next controlled test to run.

  • "Stop everything on this product now."

    Layers halt stops queued and running work in the scope you named and returns a receipt for every target it touched.

  • "Make me a face for the app and put her in a reaction video."

    Layers generate_influencer creates the persona for free and hands back a slate page of every face in the project, then render_content casts the completed one in a reaction_demo at two hundred credits.

  • "That price looks wrong to me. Tell the Layers team."

    Layers send_feedback goes to the founders, who read every message. It is free and it works even when the balance is empty.

  • "Set Layers up for this repo and connect our TikTok account."

    Layers onboard_product derives the brief from the repository, the website and the store listing, then returns the connection page. It sends the brief fields and a digest. No file, path or diff leaves your machine.

Credits

One balance per organization, and the same operation costs the same on every plan. Pay as you go is $0 a month with no included credits, so the cheapest way in is to buy credits and spend them.

Packs

On pay as you go: Crawl, 1,000 credits, $20; Walk, 4,000 credits, $80; Run, 10,000 credits, $200; Scale, 20,000 credits, $400. A paid plan buys the same four sizes cheaper, at $9, $29, $69 and $129. Packs add to the same balance and do not expire.

Every price is on this page

The ledger above carries what each tool costs, and the same number rides that tool's own description, so your agent reads the price out of tools/list before it calls anything.

Credits leave the balance when a tool runs

A call debits your organization's balance as it runs. Every charged tool also takes quoteOnly, which returns the exact maximum and runs no provider call and no model call. A render that produces nothing usable is refunded.

Running short names the pack that fixes it

A refusal for want of credits says how many you are short, gives the checkout link for the pack sized to cover it, and points at layers://account when a bigger one exists. When the shortfall outruns the largest pack it says so rather than sending your agent to buy once and be refused again.

Auto-reload keeps the balance topped up

The balance and auto-reload are managed at app.layers.com. Set the trigger balance and the pack it buys, and your agent does not stop mid-run.

Ad spend and managed accounts are separate money

Paid-media spend is billed by TikTok against your own ad account. A Layers-operated account is $150 a month in dollars from your cash wallet. Neither consumes credits and neither hides inside a credit price.

Manual configuration

The paste at the top has your agent do all of this. Here are the same steps for a shell you drive yourself, and the wiring for a client you configure by hand.

The two commands, run yourself

The same work the paste asks the agent to do. Run the second one from your repository root. It opens your browser once for the sign-in and waits for you. It reads your README's first prose paragraph as the product's one-line description and stops if there is not one, so give the README a sentence saying what the product is before you run it.

npm install -g @layers/cli
layers setup

The stdio server, which is the recommended path

Your MCP client spawns layers mcp, which is the only reader of the session in your credential store. No URL, header or key lands in the repository.

{
  "mcpServers": {
    "layers": { "command": "layers", "args": ["mcp"] }
  }
}

The remote endpoint

Streamable HTTP at https://mcp.layers.com/mcp. POST one JSON-RPC message per request, and send the session layers login issues as the bearer.

POST https://mcp.layers.com/mcp
Authorization: Bearer <layers session>
Content-Type: application/json
Accept: application/json, text/event-stream