Loading data through MCP
Last reviewed against the app on 24 September 2026
An assistant connected to clariBI can add data in three ways. Pick the one that matches where the data is: already in the chat, at a public URL, or in a Google, Meta or Atlassian account.
Choose a path
| Path | Tool | Limit | Use it when |
|---|---|---|---|
| Inline file | upload_data_source | 25 MB base64 (about 18 MB of file) | The assistant already has the file, for example a CSV the user dropped into the chat. |
| Public URL | ingest_url_data_source | 100 MB | The file is at a public http(s) address, such as an export link or an open dataset. |
| OAuth handoff | request_oauth_integration_url and check_integration_status | none | The data is in Google (Ads, Analytics, Search Console, Sheets, Drive, BigQuery and more), Meta Ads, Jira or Confluence. The user approves access in the browser, so no credentials pass through the chat. |
All three need the data-sources:write scope, which MCP API keys include by default.
Inline upload
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "upload_data_source",
"arguments": {
"name": "Q3 sales export",
"format": "csv",
"data_base64": "<base64 of the file>",
"description": "Exported from the CRM on 1 October",
"wait_seconds": 30
}
}
}Formats: csv, tsv, json, xlsx, xls, txt, pdf. The file is checked and processed like an upload in the web app, and the tool returns a data_source_id. With wait_seconds above 0 (up to 60) the call waits for processing; otherwise poll get_data_source_schema until its status is active.
Plan limits apply
Each upload counts toward the plan's data sources, file uploads and storage. On the Trial that is 3 data sources, 5 file uploads and 1 GB; Starter allows 10 sources, 50 uploads and 5 GB; Professional 50, 500 and 10 GB; Enterprise 100, 5,000 and 100 GB. The error message names the limit that was reached.
Public URL
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "ingest_url_data_source",
"arguments": {
"name": "Open data: city budgets",
"url": "https://example.org/exports/budgets-2026.csv"
}
}
}format is optional; without it clariBI uses the Content-Type header and the file extension. The file is fetched once and stored; it is not fetched again later.
Network rules
The server resolves the address itself and refuses:
- private and internal networks (RFC 1918 ranges, loopback, link-local, IPv6 unique local addresses);
- cloud metadata addresses such as
169.254.169.254; - anything other than http and https.
Redirects are checked at every hop, with at most 3 redirects.
OAuth handoff
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "request_oauth_integration_url",
"arguments": { "provider": "google", "integration_type": "ga4" }
}
}The response has an authorize_url, a handoff_id and expires_in_seconds. The assistant shows the URL; the user opens it and approves. The assistant then polls:
{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": { "name": "check_integration_status", "arguments": { "handoff_id": "<id>" } }
}The status is pending, connected, failed or expired. When connected, the response includes the connection_id and, once the first sync has run, the data_source_id.
| Provider | integration_type |
|---|---|
google_ads, ga4, gsc, gsheets, gdrive, gdocs, bigquery, gcs, gcp or basic | |
| meta | ads or basic |
| jira | basic |
| confluence | basic |
After loading
When get_data_source_schema reports active, ask a question with run_analysis:
{
"jsonrpc": "2.0",
"id": 5,
"method": "tools/call",
"params": {
"name": "run_analysis",
"arguments": { "question": "Which channel brought the most revenue in Q3?", "wait_seconds": 30 }
}
}What MCP does not do
There is no tool for connecting a database or entering API keys for the API connectors, because that would put credentials into the chat transcript. Connect those from Data Sources in the web app.