autario-mcp
autario is data app infrastructure: your tools and thousands of public datasets in one normalized layer, with the data apps that run on top of it.
Connect your platforms, then let your assistant interpret the numbers. Connect your ad accounts, your shop, your web analytics, your social profiles, your CRM and your finance tools on autario once. Through this MCP server your assistant reads those tables, joins them and explains what moved: spend, revenue and ROAS per channel, the audience behind a traffic change, the posts that worked. The public catalogue (World Bank, FRED, Eurostat, OECD, WHO, IMF, SEC) sits next to your own data as context, so a sales dip can be read against inflation or market growth in the same answer.
- Brands and instances. Group connected accounts by brand, and pick which accounts (instances) a report reads, so an agency asks about one brand without another brand's numbers in the answer.
- Numbers the model does not make up. Report tools return what autario computes server-side from your own tables, and every public value cites its primary source, so the model explains figures instead of recomputing or guessing them.
- 57 tools, each marked read or write. The Access column in the Tool Reference below comes from each tool's own annotations, so a client can allow the read tools and ask before a write.
- Remote or local. Point any HTTP MCP client at
https://autario.com/mcp with no install, or run it over stdio with npx autario-mcp.
autario.com | Developer docs | Get an API Key
Why autario-mcp
- Your platforms, not just public data. Ads, shop, analytics, social, CRM and finance connectors land in tables your assistant can query, join and compare, and
marketing_report, social_360 and the other report tools return the same numbers the app shows.
- No hallucinated numbers. Every value is sourced from a known publisher and cited back to a primary URL. Use
verify_value to double-check any claim.
- Cross-dataset joins, no setup. Indicators across different datasets share
autario_time + autario_entity shadow columns, so get_entity_data(USA, [gdp, unemployment, life_expectancy]) returns one wide table, joined automatically.
- Statistical primitives built-in.
correlate, regression, find_drivers, lag_analysis, seasonality_decomposition and more, with effect sizes, p-values, and plain-language interpretations.
- Charts that persist.
publish_chart writes a Plotly spec to autario.com. The result is a permanent, embeddable URL like autario.com/chart/{slug} | the LLM builds the spec, autario pulls real rows for it, no hallucinated data path.
- LLM-agnostic. Works with Claude, GPT, Gemini, local models | anything that speaks MCP.
Quick Demo
Install the server, then ask your assistant questions like these. The model picks the right tools and answers with cited data.
Ask: "Why did ROAS drop last week for this brand? Compare Meta Ads and Google Ads
against Shopify revenue."
Tools: get_my_workspace -> marketing_report
Output: Spend, revenue and ROAS per channel against the previous period, from the
connected accounts of that brand only.
Ask: "What drives US inflation? Look at money supply, oil prices, and unemployment."
Tools: list_indicators -> find_drivers
Output: Ranked drivers with r, p-value, R squared per candidate.
Ask: "Compare life expectancy in Germany, USA and Japan from 2000 to 2023, then publish a chart."
Tools: compare_entities -> publish_chart
Output: Wide-format table joined on year, plus a permanent autario.com/chart/{slug} URL.
Ask: "Is consumer confidence a leading indicator of US retail sales?"
Tools: lag_analysis
Output: Cross-correlation peak at lag k, with interpretation in months.
Ask: "Find a dataset on unemployment, build me a small app that charts it for
Germany, publish it as unlisted and give me the link."
Tools: search_datasets -> get_dataset_schema -> create_app ->
update_app_manifest -> upload_app_bundle -> get_app_preview_url -> publish_app
Output: A live URL you own. No review queue, no waiting list, nobody to ask.
Install
Claude Desktop, Cursor, Cline (stdio)
~/.config/claude/claude_desktop_config.json on Mac/Linux, %APPDATA%\Claude\claude_desktop_config.json on Windows.
{
"mcpServers": {
"autario": {
"command": "npx",
"args": ["autario-mcp"]
}
}
}
Restart your client. The server reports tool count to stderr on launch.
Claude Web, OpenAI Custom GPTs, any HTTP MCP client
Point your client at the hosted endpoint. No install needed.
URL: https://autario.com/mcp
Transport: Streamable HTTP (POST /mcp)
The hosted endpoint also supports MCP prompts: analyze-dataset, create-chart, compare-countries.
Enable write tools (publish charts, create datasets)
Add API credentials to the stdio config or send them as x-api-key / x-api-secret headers to the HTTP endpoint.
{
"mcpServers": {
"autario": {
"command": "npx",
"args": ["autario-mcp"],
"env": {
"AUTARIO_API_KEY": "your_key",
"AUTARIO_API_SECRET": "your_secret"
}
}
}
}
Get keys at autario.com/account.
Tool Reference
57 MCP tools, organized by function.
Discovery & Query
Search the catalog, inspect schemas, pull rows.
search_datasets | read | Search the Autario data catalog by keyword | thousands of normalized public datasets from World Bank, FRED, Eurostat, OECD, WHO, IMF, ECB, US Census and SEC, plus your own uploads and connector tab... | query (string), category (string), visibility (string), limit (number), page (number), format (string) |
discover_by_topic | read | Discover the most relevant verified datasets for a given topic, across the public autario catalog (World Bank, FRED, Eurostat, OECD, IMF, WHO, ECB, US Census, SEC). Use this when starting an articl... | topic (string), depth_pref (string), recency_window (string), limit (number) |
list_indicators | read | Browse the Autario indicator registry, the semantic layer over the whole public catalog (World Bank, FRED, Eurostat, OECD, WHO, IMF, ECB, US Census, SEC). Each indicator has a topic (economy, healt... | topic (string), unit (string), frequency (string), entity_type (string), publisher (string), search (string), limit (number) |
get_entity_profile | read | Get the indicators available for one entity (country, aggregate, etc.). Returns indicator IDs with metadata + time coverage, sorted by observation count, PAGINATED (default 100 per call) with total... | entity_id (string), topic (string), limit (number), offset (number), format (string) |
get_dataset_info | read | Get full metadata for a specific dataset including title, description, publisher (World Bank, FRED, Eurostat, OECD, WHO, IMF, ECB, US Census, SEC, or your own connector), category, keywords, row co... | dataset_id (string), format (string) |
get_dataset_schema | read | Get the column names, data types, total row count, AND a machine-legible datasheet for a dataset. Always call this before query_dataset (to know the columns) and before charting (the datasheet te... | dataset_id (string), format (string) |
query_dataset | read | Query the rows of ONE dataset | a public table from World Bank, FRED, Eurostat, OECD, WHO, IMF, ECB, US Census or SEC, or one of your own uploads / connector tables (Google Search Console, GA4, Met... | dataset_id (string), limit (number), offset (number), fields (string), sort (string), filter (array), aggregate (string), groupby (string), summary_only (boolean), non_null_only (boolean), format (string) |
list_charts | read | List published chart visualizations on Autario, built on the public catalog (World Bank, FRED, Eurostat, OECD, WHO, IMF, SEC) and rendered with Plotly. Returns chart IDs, titles, insights, linked d... | q (string), limit (number), offset (number), format (string) |
get_chart | read | Get a specific chart by ID or slug. Returns a COMPACT, token-bounded summary (NOT the raw Plotly spec or full data arrays, which can be megabytes): title, insight/narration, datasets_used (with pub... | chart_id (string), format (string) |
chart_instructions | read | Get the Builder spec schema reference. Returns chart_type enum, required/optional fields per type, palette options, axis-override shape, annotation format, and concrete examples. Call this ONCE at... | none |
Cross-Dataset Joins (Ontology)
The differentiator. Join indicators across datasets via shared time + entity shadow columns. No manual relationship setup.
get_entity_data | read | Fetch data for ONE entity across MULTIPLE indicators, joined automatically on time via shadow columns, even when the indicators come from different publishers (World Bank GDP next to FRED unemploym... | entity_id (string), indicators (array), time (string), full (boolean), format (string) |
compare_entities | read | Compare ONE indicator across MULTIPLE entities (e.g. World Bank GDP of DEU vs USA vs CHN, or a FRED / Eurostat / OECD series across countries). BY DEFAULT returns a per-entity summary (first/latest... | entities (array), indicator (string), time (string), full (boolean), format (string) |
verify_value | read | Verify that a claimed value is correct against the primary source (World Bank, FRED, Eurostat, OECD, WHO, IMF, ECB, US Census, SEC). Use this when a user asks "did you hallucinate that?" or when yo... | indicator (string), entity (string), time (string), expected (number) |
Statistical Analysis
Run analyses against verified data. Outputs include effect sizes, p-values, and plain-language interpretations.
describe | read | Summary statistics for a single indicator+entity: n, mean, median, std, min/max, quartiles, skew, histogram. Use FIRST before running any test so you know what the data looks like (sample size, com... | indicator (string), entity (string), time (string) |
correlate | read | Compute Pearson + Spearman correlation between two indicators for one entity. Returns r, p-value, n, and human-readable interpretation. Use for "does X move with Y?" questions. Includes causation d... | entity (string), a (string), b (string), time (string), full (boolean) |
regression | read | Linear regression of y ~ x for one entity. Returns slope, intercept, R² and interpretation. Use for "how does X predict Y?" questions. Runs on any verified autario indicator (World Bank, FRED, Euro... | entity (string), y (string), x (string), time (string), full (boolean) |
pct_change | read | Period-over-period percentage change for an indicator. Use for growth rates (YoY, QoQ, MoM) | "how fast did German GDP grow", "what is US CPI doing month over month". Runs on any verified autario i... | entity (string), indicator (string), time (string), period (string), full (boolean) |
rolling_stats | read | Rolling window statistics (mean/std/min/max/sum) for an indicator. Smooths noise, reveals trends | use it before claiming a turning point in a monthly FRED or Eurostat series. Runs on any verified... | entity (string), indicator (string), window (number), op (string), time (string), full (boolean) |
calculate | read | Create a derived series from two indicators using an Excel-style op: ratio (A/B), ratio_pct (A/B100), diff (A-B), sum (A+B), product (AB). Returns the per-timepoint result + summary. Use for thin... | a (string), b (string), entity (string), op (string), time (string), override (boolean), reason (string), full (boolean) |
lag_analysis | read | Cross-correlation at multiple lags. Answers "does A lead or lag B?". Peak |r| at positive lag means A precedes B by that many periods. Common use: "is consumer confidence a leading indicator of ret... | a (string), b (string), entity (string), max_lag (number), time (string) |
seasonality_decomposition | read | Additive decomposition Y = trend + seasonal + residual. Use this to strip the seasonal cycle from a series and reveal the underlying trend | great for monthly or quarterly data (retail sales, unemp... | indicator (string), entity (string), period (number), time (string), full (boolean) |
find_drivers | read | Rank candidate drivers of a KPI one at a time: given a target indicator + multiple candidates, order them by correlation strength. Perfect for "what moves my KPI?" questions. Returns ranked list wi... | entity (string), target_indicator (string), candidates (array), time (string) |
decompose_drivers | read | CONFOUNDER-AWARE DRIVER ANALYSIS: fits ONE multiple regression of the target on ALL candidates jointly, so each effect is estimated holding the other candidates constant. Distinguishes "it was the... | entity (string), target_indicator (string), candidates (array), time (string), max_lag (number) |
what_matters | read | Answer "what explains this?" in one call: given an outcome metric + entity, rank which other metrics best explain the outcome. Auto-selects candidates from the ontology if candidates is omitted (... | entity (string), outcome (string), candidates (string), time (string) |
Live Markets
Current quotes for public companies. Beats stale training-data answers.
get_company_snapshot | read | Get current stock metrics for a public company, from live market data joined with its SEC filings. Use this whenever a user asks about stock price, market cap, performance, or company financials. R... | ticker (string), metrics (array) |
Connectors (requires AUTARIO_API_KEY)
Hosted, auto-refreshing REST-API tables. The account owner sets a connector up in the Autario UI; agents list and refresh them (never handle credentials).
list_connectors | read | List the platform connectors set up on this Autario account: search, web and product analytics, ads, social, commerce, payments, AI usage and developer platforms. The answer names each connected pl... | none |
refresh_connector | write, destructive | Pull the latest numbers from one connected platform right now and refresh its hosted Postgres table on Autario. Works for whatever that connector is for, whether it is Search Console, Shopify, an a... | connector_id (string) |
Charts on Demand
Browse datasets that want a chart and request one for a dataset.
list_chart_candidates | read | AUTARIO-INTERNAL chart queue (admin only): list catalog datasets (World Bank, FRED, Eurostat, OECD, WHO, IMF, SEC) that have NO published chart yet, ranked by relevance, so the content pipeline can... | limit (number) |
request_chart | write | AUTARIO-INTERNAL high-level chart request (admin only): the server builds the Plotly chart from a catalog dataset (World Bank, FRED, Eurostat, OECD, WHO, IMF, SEC), you do NOT build a spec, but you... | dataset_id (string), query (string), insight (string), chart_type (string), region (string), time (string) |
Data Apps
Run an autario data-app and get a verifiable result + the live interactive chart (shareable URL + embeddable iframe). Navigate app-first: get_my_workspace (every app YOU use, one call) -> get_app_context (one app's data map incl. its KPI catalog, agent_surface) -> get_app_artifact (the exact saved view) ground the assistant in the same data the user sees. audience_360 returns the caller's own computed audience report, section-selective.
list_apps | read | List the autario data apps (the app catalog): id, name, what each app does, its live page URL, and data_scope (private = the app works on the caller's own connected data from Google Search Console,... | format (string) |
get_my_workspace | read | YOUR data-app workspace in ONE call: every autario app the calling user has activated or connected, each with its platforms (Google Search Console, GA4, Google Ads, Meta Ads, YouTube, TikTok, Insta... | format (string) |
get_app_context | read | The data map behind ONE autario app, so you can query app-first instead of guessing across thousands of datasets. Returns the app manifest (what it consumes, which connector providers it reads | Go... | app_id (string), format (string) |
get_app_artifact | read | Load ONE saved artifact from an autario data app | the EXACT view state the user saved there (a saved SEO 360 / Audience 360 / Social 360 / AI Visibility 360 report configuration, a Plotly chart sp... | app_id (string), slug (string), format (string) |
audience_360 | read | Audience 360 | the caller's OWN audience report over their connected Google Search Console + GA4 + social (Facebook Page, Instagram, TikTok) connector data, computed deterministically server-side (... | sections (array), range (string), from (string), to (string), channel (string), countries (string), brand_term (string), brand (string), instances (string), format (string) |
seo_360 | read | SEO 360 | the caller's OWN deterministic Google Search Console ACTION report, computed server-side from their connected GSC data (the exact numbers the user sees in the app | nothing re-derived, no... | sections (array), days (integer), format (string) |
social_360 | read | Social 360 | the caller's OWN deterministic social performance report over their connected Facebook Page, Instagram, TikTok, YouTube and LinkedIn (own profile and page) data, computed server-side (... | sections (array), days (integer), sort (string), instances (string), format (string) |
ai_visibility_360 | read | AI Visibility 360 | the caller's OWN brand-visibility report across the AI assistants (ChatGPT, Claude, Gemini, Perplexity, optionally Grok/DeepSeek/Mistral), read deterministically from stored run... | brand (string), sections (array), days (integer), format (string) |
marketing_report | read | Marketing Report | the caller's OWN brand marketing report, read deterministically from the derived marketing_daily table server-side (the exact numbers the user sees in the app | nothing re-deri... | sections (array), brand (string), client (string), period (string), from (string), to (string), instances (string), format (string) |
projects | write | Projects | the caller's OWN project board with its objectives and key results, read and written deterministically (no LLM on this path): what a team agreed to achieve, what it works on, who works o... | action (string), group (string), id (string), title (string), brief (string), kind (string), stage (string), owner (string), contributors (array), country (string), function (string), resources_url (string), status (string), progress_pct (integer), key_result_id (string), objective_id (string), commitment (string), starts_on (string), ends_on (string), target (number), target_reason (string), baseline (number), unit (string), direction (string), manual_value (number), dataset_id (string), value_column (string), filter_column (string), filter_value (string), guards_id (string), guardrail_note (string), aggregation (string), country_column (string), country_values (array), sort (string), started_at (string), target_date (string), parent_id (string), budget_amount (number), budget_currency (string), spent_amount (number), effort_days (number), impact (integer), format (string) |
bubble_or_not | read | Bubble Or Not? | Check whether a public US stock's price is running ahead of (or backed by) its fundamentals. Overlays the share price against ONE SEC-reported fundamental (Revenue, Net Income, Dil... | ticker (string), metric (string), range (string), chart_type (string), scale (string) |
Build and Ship a Data App (requires AUTARIO_API_KEY)
Build an app that runs ON autario and publish it yourself, with no review queue and nobody to ask. The path is create_app -> update_app_manifest -> upload_app_bundle (or write_app_artifact) -> get_app_preview_url -> publish_app, and every response carries a next_step. Each tool is a thin wrapper over the same REST endpoint an outside developer calls directly, so an agent is exactly its owner and never more.
create_app | write | Create a data app on autario in ONE call, owned by you. You give it a name and an entry: either an https URL where the app already runs, or the app's HTML itself (a single self-contained document,... | name (string), tagline (string), entry_kind (string), entry_url (string), content (string), content_type (string), source_url (string), datasets (array) |
update_app_manifest | write | Update the manifest of an app YOU own: its name, tagline, entry URL, version, source repository and the autario datasets or operations it is allowed to read (consumed_datasets, which is what the sa... | app_id (string), name (string), tagline (string), entry_url (string), version (string), source_url (string), consumed_datasets (array), tier (integer), share (object) |
upload_app_bundle | write | Upload or replace the code of an app YOU own: one self-contained entry document (HTML or JavaScript, max 512 KB, no binary). autario stores it and serves it inside a locked sandbox with no outbound... | app_id (string), content (string), content_type (string), version (string) |
write_app_artifact | write | Save an ARTIFACT into an app: the app's own output or saved state, owned by you. An artifact is what get_app_artifact reads back later | a Plotly chart specification, a saved report configuration,... | app_id (string), artifact_id (string), type (string), title (string), spec (object), data (object), visibility (string) |
get_app_preview_url | read | The link to OPEN an app you own, plus where it stands. Returns preview_url (a private, never-indexed page where only you can run the app, reading World Bank, FRED, Eurostat or your own connector da... | app_id (string) |
publish_app | write | Publish an app YOU own. Takes effect immediately, with no review queue and nobody to ask. Two ways to publish: "public" gives it a tile in the autario app store under Community apps, next to AI Vis... | app_id (string), visibility (string) |
unpublish_app | write, destructive | Take an app YOU own back to private: it leaves the autario app store, its public URL stops working for everyone else, and only you can still open it at its preview URL, where it keeps reading World... | app_id (string) |
Write (requires AUTARIO_API_KEY)
Publish charts, create + populate datasets. Get keys at autario.com/account.
create_chart_from_spec | write | PREFERRED chart-creation path, for any autario dataset (World Bank, FRED, Eurostat, OECD, SEC, or your own upload / connector table). Send a structured Builder spec (chart_type + x_col + y_col[s] +... | builder_spec (object), title (string), insight (string), narration (string), dataset_ids (array) |
publish_chart | write | Publish a chart via freeform Plotly spec. Use create_chart_from_spec instead unless you need a Plotly feature the Builder spec doesn't cover (custom shapes, multi-axis layouts, animation frames). R... | title (string), plotly_spec (object), insight (string), narration (string), dataset_ids (array) |
update_chart | write, destructive | Update an existing chart you own. Only the API key that created the chart can update it. Use this to modify the Plotly spec, title, or insight of a previously published chart. | chart_id (string), plotly_spec (object), title (string), insight (string), narration (string) |
create_dataset | write | Create a new empty dataset on Autario, alongside the public catalog (World Bank, FRED, Eurostat, OECD, SEC) but private to you unless you set is_public. Returns a dataset_id you can populate with w... | title (string), description (string), category (string), is_public (boolean) |
write_rows | write | Append rows of data to an existing dataset you own (from create_dataset) | your own numbers, a derived table you computed, or a series you scraped together from World Bank / FRED / Eurostat results... | dataset_id (string), rows (array) |
clear_rows | write, destructive | Delete all rows from a dataset you own while keeping the schema and columns intact. Useful for refreshing your own uploaded table before re-importing. Only your own datasets are reachable | the pub... | dataset_id (string) |
delete_dataset | write, destructive | Permanently delete a dataset you own, and all its data. This action cannot be undone. Only the dataset owner can delete it | the public catalog (World Bank, FRED, Eurostat, OECD, SEC) is a permanen... | dataset_id (string) |
report_data_issue | write | Report a data-quality problem you found in an autario dataset or chart (World Bank, FRED, Eurostat, OECD, WHO, IMF, ECB, US Census, SEC or any other publisher in the catalog), so the engine can fix... | dataset_id (string), finding_type (string), severity (string), evidence (object), detail (string) |
Admin
Curator-only; invisible to other callers.
get_traction_overview | read | ADMIN/CURATOR ONLY, autario's own traction. ONE report uniting the three real signal sources: real human reach (GA4-humans), the MCP/agent channel (mcp_tool_call volume + success-rate + top tools),... | none |
get_engine_report | read | ADMIN/CURATOR ONLY, autario's own ingest engine. The machine-readable health of the pipeline that pulls World Bank, FRED, Eurostat, OECD, WHO, IMF, ECB, US Census and SEC into the catalog, in ONE s... | trends (boolean), trend_days (integer), format (string) |
autario.js: the data SDK inside every app
An app you ship with create_app or upload_app_bundle runs in a locked sandbox with no network. It reads data with autario.js, which autario inlines into every app it serves (a <script src="https://autario.com/autario.js"></script> tag is optional). Every call runs as the person looking at the app, with that person's role: the owner and the team members the owner invited (reader, editor, admin) see the datasets the app declares; a stranger sees public catalog data only. No key or token ever reaches the app.
<script src="https://autario.com/autario.js"></script>
<script>
(async () => {
const { app, user } = await autario.ready();
const [first] = await autario.datasets();
const rows = await autario.query(first.id, { limit: 10, orderBy: 'date desc' });
await autario.artifacts.set('last_view', { id: first.id });
})();
</script>
Declare the user's own tables with create_app datasets: [ids]. Full reference: autario.com/developer/docs/autario-js.
Environment Variables
AUTARIO_API_URL | https://autario.com | API base. Override only for self-hosting. |
AUTARIO_API_KEY | unset | Required for write tools. Read tools work anonymously. |
AUTARIO_API_SECRET | unset | Companion secret for the API key. |
Data Sources
World Bank, FRED, Eurostat, OECD, IMF, ECB, WHO, US Census Bureau, plus user-contributed datasets. Every dataset record includes a source_url pointing back to the primary publisher. Live catalog: autario.com/data.
Development
This package is part of the autario monorepo. Tool definitions live in tools.js (single source of truth, shared with the HTTP transport in remote.js). The Tool Reference section above is auto-generated.
npm run build-readme
npm run check-readme
Links
License
MIT.