← Registry

General Tools

attribura.com

Provides general-purpose tools through the Model Context Protocol.

1 endpoint58 known toolsFirst detected September 24, 2026Last detected September 24, 2026

ENDPOINT 1

https://api.attribura.com/mcp

No auth detected

MCP server metadata

Name
attribura
Version
0.4.0
Capabilities
tools.listChanged
Server instructions

Attribura measures which content drives real REVENUE and stores the project's brand + persona context. Use this server to (1) READ that context before writing any content, and (2) SEED it when it's empty. How to write converting content from this context: - Always meet a viewer where their head actually is. A persona is modeled on three axes — use all three: • DEPTH (conscious → unconscious): each level carries explicit pain + desire bullets — surface (what they say) → underlying (the real problem/goal) → core (subconscious identity driver). Most content stops at the surface; conversion is won at the core. • EMOTIONAL arc (Hawkins as a tone lens): take them from their felt state now toward desire, then the courage/willingness to act. • AWARENESS stage (Schwartz): the hook depends entirely on how aware they already are — pick the angle for the stage of the audience you're targeting. - When the output is a SCRIPT (Reel/TikTok/Shorts/VSL), write it to be SPOKEN ALOUD, not read: short clauses, contractions, breath-based punctuation, and read every line out loud — rewrite anything you stumble on. Keep the spoken voiceover separate from on-screen text; don't duplicate one in the other. - Use the brand's VOICE; never use anything in the brand's AVOID list. - Lean on the brand's PROOF for credibility. Optimize for the brand's MONEY EVENT (the conversion), not vanity metrics. Craft — how the words themselves must read: - Write at a THIRD-GRADE reading level: short, common words and short sentences. Simple is persuasive; never use a fancy word where a plain one works. - Use METAPHOR to make a feeling physical — a vivid image lands harder than the literal fact ("that stack of books is a pile of locked doors"). Pick ONE strong metaphor and thread it through; don't pile up five. - Use POWER WORDS: concrete, emotionally charged verbs and nouns (locked, trapped, slipping, wasting, free, proof, edge) — but never the banned hype words in AVOID. - Sound like ONE real person talking, not a model. Vary sentence length a lot and read it out loud. Avoid the AI tells listed in AVOID (antithesis drumbeat, fragment triads, "here's the thing" preambles). CREATIVE LIBRARY (the "make content" loop): - Finished memes/images/videos rendered locally (e.g. with Remotion from the content/ project) get pushed to the panel — the human reviews and publishes them from the dashboard's /board page. - Workflow: get_context → write the script/copy → build + render locally → PREVIEW the rendered file yourself (read the image / extract video frames) and fix what looks off → push with a strong title, the hook, and a ready-to-paste caption → mark status 'ready' (update_creative) once approved by the human, or push drafts and let them review in the panel. - Captions should follow the same craft rules as scripts (voice, avoid-list, power words) and include the call to action tied to the brand's money event. THE CONTENT BOARD (organic posts, and the loop that makes them measurable): - For a POST (Reel/TikTok/Short/carousel) rather than an ad, start with get_content_config, not get_context: it carries the brand AND what the feed has already been fed — the mechanic/topic banks, the BURNT shapes, the spent keywords. Reusing a burnt shape is the fastest way to make an account read as one note. - Before drafting from the idea bank, claim_idea. A claim only succeeds from 'open', so it is what stops two sessions writing the same idea. - check_shape the mechanic you are about to run. 'burnt' means it ran inside its cool-off; pick another. These are COUNTS of what has already gone out — nothing here predicts performance, and at a cold start there is nothing to predict. - reserve_keyword is the one call that closes content -> revenue: the word on the endcard becomes a comment, the comment fires a DM, the DM carries a tracked link that knows which post it came from. Reserve it BEFORE writing the endcard, and print exactly the word the API returned. One keyword answers for exactly one post, forever — a 409 means it is spent, so pick another rather than retrying. - mark_posted once per platform it goes out on. link_creative once the platform import shows up, so the money can find its way back to the idea. APP STORE KEYWORDS (ASO) — a different job entirely from everything above: - keyword_brief is the one call to start from: the live listing, the tracked keywords with their scores, the packed 100-character field, the candidate terms and the nightly budget, for one storefront and one locale. The other tools exist for the follow-up questions, not for the first one. - ⚠️ reserve_keyword IS NOT AN ASO TOOL. It reserves an Instagram comment-gate word and creates a DM automation on a live account. "Add some keywords" for the App Store means track_keywords. - STOREFRONT vs LOCALE is not a formality. A storefront ('us', 'fr') is a country whose search results are queried — that is where ranks, popularity and the nightly cost live. A locale ('en-US', 'fr-FR') is the language a store page is written in — that is where the title, subtitle and 100-character keywords field live. Several locales sell into one storefront, so no tool takes a single "market" argument and neither should your reasoning. - The numbers are not a verdict. Popularity is Apple's own figure and is often simply absent (it only exists for terms this account's ads served impressions on); difficulty and relevance are Attribura ESTIMATES and ship with the recipe that produced them. Read the recipe before leaning on the score, and say which is measurement and which is estimate when you report. - Tracking is a standing commitment, not a row. One (keyword, storefront) pair is one App Store check EVERY NIGHT, forever. Apple publishes no ranking API, so ranks are read out of live search results one term at a time and a night holds a finite number of checks. Read the 'budget' field before adding, add in small batches, and know that untrack_keyword removes one row per call and takes its rank history with it. - Before proposing a new title or subtitle, check 'editable' and 'lock_reason' on the listing. Those fields belong to an app version; while a version is live with no editable sibling they cannot be written, and a rewrite nobody can apply is wasted work. WHICH PROJECT A CALL IS ABOUT: - This account can hold many projects and a token belongs to one of them, which is what a call answers for unless told otherwise. When the work names an app, pass 'project' with that name — every tool takes it, posting and store edits included. When a question says "everything", "all my apps" or "the portfolio", pass scope:'all', which reads offer and writes do not. list_projects has the names. Do not guess a name — an unknown one is refused, not silently ignored. - Numbers from two projects are two answers, never one. Only add them up when the question asked for the portfolio. - Say which project you acted on when you post, reserve a keyword or write a store listing for one you were told to switch to. A write that landed on the wrong app is not something the person can see from the answer. REPUTATION — reviews, ratings, and answering them: - TWO AVERAGES EXIST AND THEY ARE DIFFERENT NUMBERS. get_store_rating returns the PUBLIC star rating the App Store shows, per storefront. get_reputation returns 'average_collected', the mean of the reviews collected here. Report each as what it is; never call the second one "your App Store rating". - 'average: null' on a storefront means nobody has rated it. It is not 0 stars, and it must never be shown as a drop. - A RATING IS NOT A REVIEW. Most feedback a young app gets is stars with no words: 'rating_only' counts those and they can never be replied to. "This app has no reviews" while the store shows five stars is that split, not a bug. - The reply backlog is list_mentions with answered:'no'. 'pending' means an answer is written and the store has not shown it yet — leave those alone. - Writing a reply is not sending one. draft_reply saves words; a person sends them. Only pass send:true, or call send_reply, when the person asking has just said to publish. It appears publicly, under their app, over their name. - The store's answer endpoint OVERWRITES. A send is refused when the store already shows an answer nobody here wrote; read that answer before even considering 'force', because forcing destroys it. - ANSWER IN THE LANGUAGE THE REVIEW IS WRITTEN IN. A reply is read by the person who wrote the review and by everyone who reads the store page in that country. Replying to a Korean review in English is a reply to nobody. - Before drafting, read the review as it stands now — 'edited: true' means the customer rewrote it, and an apology under a review that now says five stars reads as a non-sequitur. How to SEED well (when get_context shows brand:null or no personas): - First call get_context to see what already exists; do NOT overwrite good data. - save_brand REPLACES the whole brand row — include every field you want to keep. - Ground everything in the founder's REAL language and product, not generic marketing filler. Be specific. For personas, fill pains + desires at each depth level honestly (especially the subconscious 'core') and only the awareness stages the audience truly sits at. If unsure of a fact, ask rather than invent. NOTE (hosted server): push_creative and push_slideshow are not available over HTTP — they read local files. To upload a rendered creative, POST it yourself as multipart to `https://api.attribura.com/v1/creatives` (fields: file, thumb?, title, hook, caption, meta) — or, for a slideshow, to `/v1/creatives/slideshow` (repeated `slide` image parts in deck order, same text fields) — with the same `Authorization: Bearer atb_…` header, then manage it with list_creatives/update_creative here.

Known tools 58

get_context

Read the active project's full brand + persona context as one JSON bundle ({ brand, personas }).

Inferred read-only
save_brand

Upsert the project's brand (the 'Project' tab).

Inferred read-only
save_persona

Write one persona.

Potential side effects
delete_persona

Delete a persona by id.

Potential side effects
push_brief

Create a SHOOTING BRIEF in the creative library: the shot list the human should film themselves (facecam takes, POV product shots, real-location b-roll) plus the script to record.

Potential side effects
list_creatives

List the project's creative library (newest first), optionally filtered by status (draft | ready | published | archived).

Inferred read-only
update_creative

Update a creative's title/hook/caption/status by id (e.g.

Potential side effects
get_overview

Headline revenue: revenue + money-event counts over the last 30 days and all-time, broken down by source (superwall/shopify/stripe/asc).

Inferred read-only
get_performance

The money-per-post table: every distribution (post) ranked by the revenue it drove, with clicks, installs, conversions, revenue_cents, proceeds_cents and subscriptions.

Potential side effects
get_revenue_events

Itemized revenue: individual purchases/renewals, each joined back to the post that drove it (channel, hook, distribution_id) and how it was attributed (method).

Potential side effects
get_store_sales

Apple's itemized App Store sales: one line per day, storefront, product and currency, with units and the developer proceeds Apple actually paid — in the storefront's OWN currency, plus a same-day USD conversion for ranking.

Inferred read-only
get_self_report_summary

Self-reported attribution rollup (the in-app 'how did you hear about us?' answers): 30-day + all-time counts, the share we could pin to an exact post (verified) vs dark social, self-report revenue, and a per-channel breakdown.

Potential side effects
list_self_reports

Itemized 'how did you hear about us?' answers (channel, raw answer, method, confidence, the pinned post if any, the app user id), newest first.

Potential side effects
list_content

Every post a connected account posted or imported, with its latest engagement stats and ready-to-share tracked links.

Potential side effects
list_post_comments

What people actually wrote under one post: author, text, like count, when it was posted, and `auto_replied_at` — the moment an automation answered it.

Potential side effects
list_links

The project's tracked short links with their total click counts and destination + the post each is tied to.

Potential side effects
list_clicks

Individual short-link click events, newest first, with the dimensions resolved at redirect time (country, device, os, is_bot, user-agent, referer) and the post they map to (distribution_id).

Potential side effects
list_projects

Every project on this account, with its id, name and role.

Inferred read-only
get_analytics

App Store performance over time, straight from Apple's reports: installs, redownloads, proceeds (USD cents, and NEGATIVE on a refund day), paid units, impressions, the countries behind them, the discovery funnel and period-over-period change.

Potential side effects
get_revenue_breakdown

Where the money came from: totals for the window plus all-time anchors, split by cash source (Superwall/Shopify/Stripe), by attribution method with its confidence, and by channel — including the `unattributed` bucket, which is money that cannot be traced to anything.

Inferred read-only
get_store_funnel

The App Store discovery funnel per traffic source: impressions → product page views → installs, with the conversion rates Apple's own numbers support.

Inferred read-only
get_onboarding_funnel

The app's in-app onboarding funnel, step by step, SPLIT BY THE CHANNEL each run said it came from — the join no general analytics tool can make, because the Attribura SDK asks the question inside the same onboarding.

Inferred read-only
get_retention

Day 1 / Day 7 / Day 28 retention by install cohort, from the app opens the Attribura iOS SDK (0.4.0+) reports by itself — the number App Store Connect never gives, because Apple exposes no cohort and no device id.

Inferred read-only
get_coverage

Which marketing fronts a project actually covers — store listing, content, automations, revenue tracking — as facts (what is connected, what is missing, how many of each), never as a score.

Inferred read-only
get_integrations_health

Every connector's state: connected / needs_reauth / disconnected, when each last synced, and the last error with its time.

Inferred read-only
get_reputation

The reputation snapshot: how many mentions are held, how many carry WORDS vs stars only, the star histogram, and how many reviews have no answer.

Inferred read-only
list_mentions

What people wrote about the app — App Store reviews today, newest first.

Inferred read-only
get_store_rating

The app's PUBLIC star rating per storefront, as the App Store shows it, with the previous day's reading beside it so a move is visible.

Inferred read-only
draft_reply

Write a reply to one review.

Potential side effects
list_replies

Our own reply ledger: what was drafted, what was sent, what the store refused, with the review's words beside each row.

Inferred read-only
send_reply

Publish a drafted reply to the store.

Potential side effects
cancel_reply

Call off a reply.

Inferred read-only
get_content_config

Everything you need BEFORE writing a post, in one call: the brand + personas, the mechanic and topic banks with how often each has run, the BURNT shapes (ran inside their cool-off — do not reuse them), the spent comment keywords, the idea counts, and which social accounts a keyword can be reserved against.

Potential side effects
reserve_keyword

Reserve the post's comment gate ('Comment HEME for the link') and get back the tracked link the DM must carry.

Potential side effects
release_keyword

Give a reserved comment gate back, so the word can answer for a different post.

Potential side effects
mark_posted

Record that a post went out on a platform — one call per platform, because the same post on TikTok and Instagram is two different audiences and pooling them reads two experiments as one.

Potential side effects
link_creative

Close creative <-> distribution: confirm that a post imported from Instagram/YouTube (list_content) IS the creative we wrote and pushed.

Potential side effects
list_accounts

The social accounts this project can post to: each one's id, platform, handle and whether the connection is still good.

Potential side effects
get_tiktok_creator_info

A connected TikTok account's own state, read live: the creator's name and picture, the `privacy_level_options` it may use, whether comments, duets or stitches are switched off, and the longest video it may post.

Potential side effects
publish_creative

POST a reel from the library to a connected account, for real — the platform does the posting, so there is no file to hand over and no box to tick afterwards.

Potential side effects
list_publish_jobs

Where each send got to: queued, uploading, processing, published, drafted, failed or cancelled.

Potential side effects
cancel_publish

Call off a send that has not left the queue yet.

Potential side effects
list_ideas

The idea bank: what should be WRITTEN next, as opposed to what is ready to post.

Potential side effects
claim_idea

CLAIM AN IDEA BEFORE YOU DRAFT IT.

Inferred read-only
list_tracked_keywords

APP STORE ASO — the keywords this project tracks for its app.

Inferred read-only
get_keyword_history

APP STORE ASO — one tracked keyword's rank series over a window, plus the competitors that held its result slate and how many days each of them was present.

Inferred read-only
get_keywords_field

APP STORE ASO — pack this project's tracked keywords for ONE storefront into Apple's 100-character keywords field, ordered best-observed-rank first, and report which terms did not fit.

Inferred read-only
suggest_keywords

APP STORE ASO — candidate keywords mined out of the app's OWN store listing (name, subtitle, keywords field, promotional text, category) for EVERY locale the app has, with where each came from, whether Apple indexes that source for search, and whether it is already tracked.

Inferred read-only
get_listing

APP STORE ASO — one locale's App Store listing, read live from App Store Connect: name, subtitle, keywords field, description, promotional text and URLs, each with its character limit and — the part that matters before proposing any change — `editable` plus a `lock_reason` saying why a frozen field is frozen.

Inferred read-only
update_listing

APP STORE ASO — write listing text to the App Store, for ONE locale.

Potential side effects
create_app_version

APP STORE ASO — open a new App Store version, which is what unlocks the listing fields update_listing cannot otherwise write.

Potential side effects
list_notes

NOTES — what changed on this project and when, newest first: a listing field written through Attribura (kind `listing`, with its before → after per locale in `detail`), a version Apple reports ON SALE (`version`, Apple's own release date and release notes), or a change someone recorded by hand (`note`).

Inferred read-only
add_note

NOTES — record a change on its date so the charts and get_keyword_history carry it: a price change, a campaign start, a listing edit made directly in App Store Connect, a decision taken.

Potential side effects
delete_note

NOTES — remove one note by id, for a note that was wrong.

Potential side effects
keyword_brief

APP STORE ASO — START HERE.

Inferred read-only
score_listing

APP STORE ASO — score a listing (app name, subtitle, keywords field) for ONE storefront/locale pair: the same number the Keywords page shows, and the way to COMPARE VARIANTS.

Inferred read-only
track_keywords

APP STORE ASO — start tracking (keyword, storefront) pairs, so the nightly collector begins recording their rank.

Inferred read-only
untrack_keyword

APP STORE ASO — stop tracking one (keyword, storefront) pair and DELETE its recorded rank history with it.

Potential side effects

CONNECT WITH APPROVAL

Client installation

Review this server and its permissions before adding it. Secret placeholders must be set locally.

Codex

~/.codex/config.toml

[mcp_servers.attribura]
url = "https://api.attribura.com/mcp"
enabled = true
Claude Code

.mcp.json

{
  "mcpServers": {
    "attribura": {
      "type": "http",
      "url": "https://api.attribura.com/mcp"
    }
  }
}
Claude Desktop

Settings → Connectors → Add custom connector

Name: attribura
Remote MCP URL: https://api.attribura.com/mcp

Add this remote URL as a custom connector in Claude Desktop. Availability depends on the user plan and workspace policy.

Cursor

.cursor/mcp.json

{
  "mcpServers": {
    "attribura": {
      "url": "https://api.attribura.com/mcp"
    }
  }
}
Visual Studio Code

.vscode/mcp.json

Add to Visual Studio Code
{
  "servers": {
    "attribura": {
      "type": "http",
      "url": "https://api.attribura.com/mcp"
    }
  }
}
Generic MCP

Client-specific MCP configuration

{
  "name": "attribura",
  "transport": "streamable-http",
  "url": "https://api.attribura.com/mcp"
}
MCP Inspector

Run the official MCP Inspector locally and enter the indexed Streamable HTTP endpoint.

TRUST AND VERIFICATION EVIDENCE

Loading Trust v2 evidence…

Checking the associated registrable domain. The BuiltWith key remains server-side.

Indexed

Evidence is source-attributed and does not guarantee that a third-party server is safe. Risk labels are conservative metadata heuristics.