mcpbeat Sign in

Fictura MCP Server

answering

Fictura is answering right now. Last checked 9 min ago. 212 installs a week from npm. It exposes 44 tools. Last commit 30 Oct 2026.

Paywalls, onboarding, subscription analytics, A/B tests, attribution and errors for mobile apps.

Installs per day peak 201 · avg 7 · +5200% w/w
a month agotoday
Uptime history 4 days of history
4 days agonow
100.0%
Uptime 24h
91 of 91 checks
44
Tools
read from the server
327 ms
Response time
average over 24h
212
Installs / week
npm and PyPI

What the code does

We read the source, 2 d ago · tools taken from the live server · rules 995398eba69f

Capabilities

What this server is able to do. For an MCP server this is often the job itself — a terminal server runs commands because that is what it is for. Listed so you know what you are plugging in, not as an accusation.

Package points at a different repository apex-byte-technologies/fictura-mcp
пакет @fictura/mcp ссылается на apex-byte-technologies/fictura_sdk

Is this your server and something here is wrong? Tell us — corrections are free and do not require a plan.

This code can reach further than it looks

We found places where it runs commands, builds paths or queries from values it is given. None of that is a flaw by itself — it becomes one when the code changes, and code changes quietly between releases. We re-read it on every one.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 9 min ago.

run in your terminal
claude mcp add mcp --transport http https://mcp.fictura.co/mcp
Settings → Connectors → Add custom connector, then paste this address
https://mcp.fictura.co/mcp
~/.codex/config.toml
[mcp_servers.mcp]
url = "https://mcp.fictura.co/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "mcp": {
      "url": "https://mcp.fictura.co/mcp"
    }
  }
}
.vscode/mcp.json
{
  "servers": {
    "mcp": {
      "type": "http",
      "url": "https://mcp.fictura.co/mcp"
    }
  }
}

Available tools 44

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

error
get_error_issue
One issue in full: the group, its 50 most recent occurrences with stack traces, release and environment, and 30 days of daily counts. This is the tool to reach for when asked to fix a production error. When the app uploaded source maps, each occurrence also has `stack_resolved` and `frames` (original file, line, column and function; `in_app` marks the app's own code) — read those instead of the minified `stack`. An occurrence with a trace_id can be opened with get_trace.
get_error_issue_brief
One issue condensed for fixing it: latest stack (resolved when source maps exist), in-app frames, breadcrumbs before it, facets (release, OS, device, screen), cause chain, and a ready-to-use fix prompt.
list_error_issues
The error feed: grouped issues with level, status, event and user counts, a 14-day sparkline, plus the app's uptime summary. Defaults to unresolved issues only. `synthetic: true` marks console lines the SDK captured, not crashes.
search_error_issues
Find issues by text in the title or culprit, platform, or release (first or last seen in). Returns the same rows as list_error_issues, filtered.
update_error_issue
Resolve, ignore or reopen an issue, assign it, set its priority, or add a note. Only works when the app allows MCP writes (Issues settings → Let MCP keys change issues).
appsflyer
get_appsflyer_attribution_summary
What the AppsFlyer import brought in about where people came from: people with an imported attribution, split by media source (organic included) and acquisition vs retargeting, plus the top campaigns. Filters on the install date. Imported verdicts never overwrite an attribution Fictura's own SDK resolved. For revenue and ROAS by source, use get_attribution_report with view=kpis.
get_appsflyer_import_status
Whether AppsFlyer is connected, the latest import run (status, progress, rows imported, duplicates skipped, people created, date range covered, error if it stopped), and whether an import has ever finished. Call before start_appsflyer_import so a finished import is not offered again as though nothing had happened.
docs
list_docs
The full documentation index — every page path, grouped by section, with a one-line description. Use it to find the right page when a search term is hard to guess. No API key required.
search_docs
Full-text search across the Fictura docs, grouped by page. Use this before answering any 'how do I…' question about the SDK, API, paywalls, entitlements, links or webhooks — the docs are the source of truth and are regenerated on every code change. Returns page paths; pass one to read_doc for the full text. No API key required.
editor
editor_get_doc
The document exactly as it is on the person's screen (unsaved changes included), which paywall it is, the screen they are on and the node they have selected, plus the document model reference. Read this before editor_set_doc and edit what you got — keep node ids, change only what was asked.
editor_set_doc
Replaces the document in the person's open editor with the one given. It is NOT saved: the person sees the change, can undo it, and saves it themselves. The document is validated first and refused with the problems if it does not parse. Needs an MCP key that can edit.
onboarding
create_onboarding_draft
Creates a draft onboarding flow from a document you wrote (see get_onboarding_doc's reference). It is never made live: going live is done in the dashboard. Needs an MCP key that can edit.
get_onboarding_doc
The JSON document a builder-made onboarding flow is made of, with its status and version, plus the reference to the document model. Read this before save_onboarding_doc, and edit the document you got rather than writing one from scratch — keep step keys and node ids, change only what was asked.
paywall
create_paywall_draft
Creates a draft paywall from a Studio template (template_key, from list_templates — the webview ones) or from a document you wrote. It is never made live: going live is done in the dashboard. Needs an MCP key that can edit.
get_paywall_doc
The JSON document a Studio (visual editor) paywall is made of, with its status and version, plus the reference to the document model. Read this before save_paywall_doc, and edit the document you got rather than writing one from scratch — keep node ids, change only what was asked. Prices are never typed: use {{ products.<slot>.price }} and the other product variables.
save
save_onboarding_doc
Replaces a draft flow's document with the one given, as a new version (the dashboard's history shows it as `mcp: <note>` and can roll it back). Refused for a live flow. Needs an MCP key that can edit. Translations, overrides and the exit setting are kept.
save_paywall_doc
Replaces a draft paywall's document with the one given, as a new version (History in the dashboard shows it as `mcp: <note>` and can roll it back). Refused for a live paywall — copy it in the dashboard first. Needs an MCP key that can edit. Products, translations and other settings are kept.
store
get_store_analytics
Store-reported numbers synced from Appfigures: downloads, re-downloads, updates, uninstalls, store revenue after the store's cut (subscriptions, in-app purchases, ads), top countries, the ratings snapshot, recent reviews with text, and category chart positions. Money is in micros of `currency`. Store revenue is a separate figure from RevenueCat revenue; never add the two. Returns connected: false when Appfigures is not set up.
list_store_products
This app's auto-renewable subscriptions in App Store Connect: product id, billing period and Apple review state. Use it to check that a paywall references a product that actually exists. Pass subscription_id to also fetch Apple's price ladder for that one product (Apple scopes price points per subscription, so there is no global list).
validate
validate_onboarding_doc
Runs a document through the same parser, step-key check and renderer a save uses and reports what is wrong, if anything. Changes nothing.
validate_paywall_doc
Runs a document through the same parser and renderer a save uses and reports what is wrong, if anything. Changes nothing.
acquisition
get_acquisition_report
`roas` gives per-campaign spend, attributed installs/trials/paying users, revenue, CPI, CAC and ROAS, plus blended totals and explicitly-unattributed revenue — always keep attributed and blended figures apart when reporting these. `spend` gives raw daily ad-spend rows. `links` lists this app's tracking links.
analytics
get_analytics
This app's real numbers. `overview` gives headline metrics (users, trials, trial→paid rate, events by name, cancel reasons, 14-day activity). `funnel` gives the ordered conversion funnel with per-step drop-off. `cohorts` compares behaviour across billing outcomes — what converted users did that cancelled users didn't. Below ~100 users in a step the sample is too small to read. `stores` splits paying users, purchases and revenue by App Store / Google Play / web and by storefront country (last 28 days).
app
get_app_setup
The real values needed to wire the Fictura SDK into a codebase: the API base URL, this app's publishable SDK key (gk_…), and the RevenueCat webhook URL. ALWAYS call this before generating integration code — never leave a placeholder API key in what you write. The SDK key is publishable and safe to commit in app source; it identifies the app, not a person.
attribution
get_attribution_report
Where installs and revenue actually came from. `summary` is the headline attribution picture (installs, organic vs non-organic, revenue). `kpis` breaks the same window down by source, campaign, link or day. `installs` lists individual installs with their attribution. Defaults to the trailing 28 days.
campaigns
list_campaigns
Campaigns read live from a connected ad platform: status, daily budget and ad sets. Returns a not_connected result rather than failing when the provider is not set up. This calls the provider's API, so prefer get_acquisition_report for historical numbers.
creators
list_creators
Creator records with a 28-day funnel per creator (clicks, installs, trials, paying users) and the tracking links tagged to each.
doc
read_doc
The complete markdown of one documentation page. Accepts a site-relative path such as '/implementation/welcome/sdk-quickstart' (a full docs.fictura.co URL works too). If the path is wrong, the closest real paths come back as suggestions. No API key required.
entitlement
check_entitlement
The authoritative paid/not-paid verdict for one user, unified across Stripe, RevenueCat, App Store and Play — the same answer GET /api/v1/entitlements/{user_id} returns to a server. Note: `environment` is SANDBOX when the verdict rests on test purchases, so always check it before granting production access; a cancellation only flips will_renew (access runs to expires_at); and an unknown user is a valid 'none' answer, not an error.
experiment
get_experiment
One experiment with its variants and full Bayesian results.
experiments
list_experiments
Every experiment with status and, for running or finished ones, full Bayesian results — exposures, conversions, and the probability each variant is best.
link
get_link_infrastructure
How links reach the app. `app_links` is the most important for integration work: it returns the iOS team id, bundle id, Android package and SHA-256 fingerprints that Fictura serves in the Universal Links / App Links association files, plus ios_ready and android_ready. Get these wrong and BOTH files fail SILENTLY — they parse, associate nothing, report no error, and links simply keep opening the browser instead of the app, so verify the ready flags rather than assuming. `domains` lists branded link domains and their DNS verification state, `web_config` the web-to-app smart banner, `esp` the email provider link setup.
pair
pair_editor
Connects to the paywall editor a person has open, using the 6-character code shown under “Pair an agent” in the Studio. Returns a pairing_id for the editor_* tools. The code works once and for 10 minutes; a pairing lasts 24 hours or until either side stops it.
push
get_push_config
Whether push is set up and who could receive it: registered-device counts per billing cohort (all / paid / trial / free) and whether OneSignal is configured. Returns counts and configuration only — never device tokens or individual recipients.
setup
get_setup_status
What is actually configured for this app: the setup checklist, every Fictura feature toggle and whether it is on, and which third-party integrations (Stripe, RevenueCat, Slack, Sentry, App Store Connect, …) are connected. Use it to check whether a feature is enabled before writing code that depends on it — a disabled tool is a server-side kill switch the SDK obeys.
start
start_appsflyer_import
Import everything AppsFlyer holds for this app: installs and the channel, campaign, adset and ad behind each one, in-app events and purchases, uninstalls, reinstalls, ad revenue and retargeting traffic. All twelve raw-data reports are walked; ones the AppsFlyer plan lacks are skipped, not failed. Runs in the background and keeps going after this call. mode 'auto' (default) only pulls the days since the last finished import when there is one, and walks the full history otherwise. 'full' re-walks everything. resume=true continues a failed or cancelled run from where it stopped. Safe to call while a run is going: it reports that run instead of starting another. Anything already imported is counted once. Check progress with get_appsflyer_import_status.
surface
get_surface
The full configuration of one paywall or onboarding flow, plus its version history. Note that configs never contain price strings — prices resolve at render time from the PurchasesAdapter's packages, so never copy a price literal out of (or into) a config.
surfaces
list_surfaces
Every paywall and onboarding flow, what is actually being served at each placement (running experiment > live > none), and the valid placement names. IMPORTANT: read `placements` before writing a placement string into code. The list is configured ∪ observed, so a name that appears only under `observed` is usually a typo in the app — and a placement that does not exist renders nothing at all, with no error.
templates
list_templates
The one-click starter templates available for paywalls or onboarding flows, with the template key and what each looks like. Use this when asked to add a paywall so you pick a real template key rather than inventing one.
trace
get_trace
Every span of one trace (app → backend → dependencies) as a tree: names, services, start offsets, durations, HTTP status and errors, plus the error events linked to the trace. Take the trace_id from an occurrence in get_error_issue. Use it to see where the time went or what failed first.
tracking
get_tracking_plan
Every event this app has ever sent, with volume, last-seen, and whether capture is switched off. Use it before adding instrumentation so you reuse the existing event name instead of introducing a near-duplicate — the name chosen here is the same string an experiment later names as its primary metric.
unpair
unpair_editor
Stops this pairing. The editor shows that the agent left.
user
get_user
One user's identity (every stitched device / account / RevenueCat id), event breakdown, churn state and recent activity. Accepts the Fictura master user id, or any identifier the app knows them by — a device id, account id or RevenueCat id.
users
list_users
The app's users, most recently active first — each with an identity label, event count, last seen, and derived churn state (in_trial, converted, cancelled, expired, billing_issue, grace_period, paused, refunded, none). Capped so a large app does not flood the context; `total` reports how many matched before the cap.

Endpoints

URLTransportStateLatencyChecked
https://mcp.fictura.co/mcp streamable-http answering 359 ms 9 min ago

Alternatives to Fictura

same job, measured the same way
PageDuel
by nichovski

Web analytics, A/B test results and revenue attribution for your sites.

answering
XCRS Mobile & TV Automation
by smbcloudxyz

MCP tools for testing mobile and TV apps on iOS simulators, Android phones, and Apple/Android TV.

local only
MCP Test Runner
by lovranran

Local test execution and coverage summaries for onboarding agents.

78 installs/wk local only
Paddle (Sandbox)
by paddle

Test Paddle Billing in sandbox: pricing, subscriptions, payments, webhooks and event simulations.

answering
Appstoreconnect MCP
by akoskomuves

App Store Connect for MCP clients: PPP pricing, subscriptions, TestFlight, reviews, reports & more

828 installs/wk local only
Mimetic — Website Growth and Analytics
by trymimetic

Website audits, analytics, ads, and A/B test results for finding revenue opportunities.

79 installs/wk answering
Bitrise
by bitrise-io

Set up & manage mobile CI/CD on Bitrise: build, test, distribute iOS, Android, Flutter, RN apps.

answering
Moltline Data Desk
by moltlinestudio

Paste-your-data analytics: CSV profiling, A/B tests, correlation, growth. 4 of 7 free.

7 tools answering

Fictura — questions

Answers built from our own checks of this server.

What can Fictura do?
It exposes 44 tools, read directly from the server on our last check. Among them: check_entitlement, create_onboarding_draft, create_paywall_draft, editor_get_doc, editor_set_doc, get_acquisition_report and 38 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
What is Fictura mostly used for?
Its tools cluster around error, docs and paywall. That is what this server is built to work with — the grouping comes from the actual tool names, not from a category we assigned.
Is Fictura working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 91 of 91 checks got a reply (100.0%), average response time 327 ms. The bar chart above shows every period we have measured.
How do I connect Fictura?
Copy the ready config from this page. We generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each in the form that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does Fictura need an API key?
No. Fictura completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 44 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is Fictura?
It answers our handshake in 327 ms on average, which is faster than 44% of all working MCP servers we measure. The comparison comes from our own checks across the whole registry, every 15 minutes.
How many people use Fictura?
The npm package @fictura/mcp was installed 212 times in the last week. Week over week that is +5200%. We show installs rather than GitHub stars on purpose: a star is a bookmark, an install is someone actually running it.
Is Fictura open source?
The code is open source: it is published under the MIT licence, written in Shell and 0 stars on GitHub. The licence covers the code in the repository, not the hosted service at mcp.fictura.co, which runs on its operator's own terms.