{"name":"Kuchari Agentic Data Platform","description":"Describe the data your agent needs in plain language and buy a data pipeline as a Docker image over x402. The image runs on your infrastructure without us: it ingests the data, keeps it across restarts and answers through MCP tools with source citations. Quotes are free; you pay only after the image is built and tested.","version":"8415dd8431e9","supportedInterfaces":[{"url":"https://34-179-245-189.sslip.io/a2a","protocolBinding":"JSONRPC","protocolVersion":"1.0"},{"url":"https://34-179-245-189.sslip.io/a2a","protocolBinding":"HTTP+JSON","protocolVersion":"1.0"}],"provider":{"organization":"Keboola hackathon team kuchari","url":"https://34-179-245-189.sslip.io"},"documentationUrl":"https://34-179-245-189.sslip.io/openapi.json","capabilities":{"streaming":false,"pushNotifications":false,"extendedAgentCard":false},"defaultInputModes":["text/plain","application/json"],"defaultOutputModes":["application/json","text/plain"],"skills":[{"id":"quote_data_pipeline","name":"Quote a data pipeline","description":"Send the data your agent needs in plain language (optional data part {\"hints\": {...}}); get questions (input-required) or a binding quote with price, MCP tools and configuration. Order and pay it via x402 on the REST API to receive the Docker image.","tags":["data pipeline","quote","x402","mcp","docker image","citations"],"examples":["Load our Adform DSP delivery for client 118635: impressions, clicks, cost and post-click conversions per campaign, line item and day, so I can ask which line item had the best cost per conversion last week.","Make the records of my Airtable base (tables Projects and Tasks) queryable over MCP, so I can ask which tasks are open per project.","Collect the BASIC program listings from an HTTP archive of retro computer magazines and let me query them by computer model, with a citation to the issue and page.","Every morning read the PDF and Word reports in our Azure storage account acmedocs, container reports, and let me ask what they say about outages, with citations.","Load the orders and customers tables from our BigQuery dataset sales (project acme-dwh), incrementally by updated_at, so I can ask over MCP about specific orders and customers."],"inputModes":["text/plain","application/json"],"outputModes":["application/json","text/plain"]},{"id":"source.adform","name":"Adform","description":"Programmatic display and video ad performance from Adform DSP (Adform Buyer Stats API): report rows of the…","tags":["data source","adform"]},{"id":"source.airtable","name":"Airtable","description":"Every record of the chosen tables of one Airtable base, one item per record, with provenance and revision.","tags":["data source","airtable"]},{"id":"source.archive","name":"HTTP file archives","description":"Every file of an HTTP file archive behind ARCHIVE_BASE_URL, given at launch as the archive's base URL or the…","tags":["data source","archive"]},{"id":"source.azure_blob","name":"Azure Blob Storage","description":"Files in one Azure Blob Storage container that the buyer names by blob name, prefix or glob (PDF, DOCX,…","tags":["data source","azure_blob"]},{"id":"source.bigquery","name":"Google BigQuery","description":"Rows of the BigQuery tables, views and GoogleSQL SELECT queries the buyer names, one item per row, read…","tags":["data source","bigquery"]},{"id":"source.bing_ads","name":"Microsoft Advertising (Bing Ads)","description":"Microsoft Advertising (Bing Ads) daily performance reports through the v13 REST APIs (Reporting…","tags":["data source","bing_ads"]},{"id":"source.confluence","name":"Confluence Cloud","description":"Every page and attachment of one Confluence Cloud space (REST v2, Basic auth) as items.","tags":["data source","confluence"]},{"id":"source.drive","name":"Google Drive","description":"All files under a Google Drive folder (recursive) as items with provenance and revision.","tags":["data source","drive"]},{"id":"source.exchange_rates","name":"ECB and Czech National Bank exchange rates","description":"Official exchange rates of one central bank, chosen by `provider`: `ecb` = the European Central Bank's euro…","tags":["data source","exchange_rates"]},{"id":"source.facebook_pages","name":"Facebook Pages","description":"Organic Facebook Page data (Graph API) of the Pages the buyer names, or of every Page the token manages: the…","tags":["data source","facebook_pages"]},{"id":"source.ftp","name":"FTP / FTPS","description":"Files from an FTP or FTPS server (CSV, PDF, DOCX, HTML, Markdown, text, ...) under the paths or globs the…","tags":["data source","ftp"]},{"id":"source.gcs","name":"Google Cloud Storage","description":"Files in one Google Cloud Storage bucket that the buyer names by object name, prefix or glob (PDF, DOCX,…","tags":["data source","gcs"]},{"id":"source.google_ads","name":"Google Ads","description":"Google Ads reporting rows of the named customer accounts (Google Ads API REST, googleAds:search with GAQL,…","tags":["data source","google_ads"]},{"id":"source.google_analytics","name":"Google Analytics","description":"Google Analytics 4 report data through the GA4 Data API (runReport), one item per report row = one day and…","tags":["data source","google_analytics"]},{"id":"source.google_sheets","name":"Google Sheets","description":"The rows of Google Sheets spreadsheets, one item per row, cited to spreadsheet, sheet and row.","tags":["data source","google_sheets"]},{"id":"source.http_files","name":"Files by URL","description":"Files the buyer lists by URL (CSV, JSON, PDF, DOCX, HTML, Markdown, text, ...), one item per file in the…","tags":["data source","http_files"]},{"id":"source.imap","name":"Email (IMAP)","description":"E-mail from any IMAP mailbox the buyer names (Gmail, Google Workspace, Outlook / Microsoft 365, Exchange,…","tags":["data source","imap"]},{"id":"source.jira","name":"Jira","description":"Issues of a Jira Cloud site found by a JQL search, one item per issue, with summary, description, status,…","tags":["data source","jira"]},{"id":"source.keboola","name":"Keboola","description":"Tables and files of one Keboola Connection project, read with a Storage API token (Storage API, no Keboola…","tags":["data source","keboola"]},{"id":"source.linear","name":"Linear","description":"Issues of any Linear workspace via the Linear GraphQL API, one item per issue, with all its comments,…","tags":["data source","linear"]},{"id":"source.meta_ads","name":"Meta Ads","description":"Facebook and Instagram ads of the ad accounts the buyer names (Meta Marketing API): campaigns, ad sets and…","tags":["data source","meta_ads"]},{"id":"source.mixpanel","name":"Mixpanel","description":"Mixpanel product-analytics data of one project: raw events through the Raw Event Export API (one item per…","tags":["data source","mixpanel"]},{"id":"source.mongodb","name":"MongoDB","description":"Documents of the MongoDB collections, find filters or aggregation pipelines the buyer names, one item per…","tags":["data source","mongodb"]},{"id":"source.mssql","name":"SQL Server","description":"Rows of the Microsoft SQL Server or Azure SQL Database tables or SQL SELECT queries the buyer names, one…","tags":["data source","mssql"]},{"id":"source.mysql","name":"MySQL","description":"Rows of the MySQL tables or SQL SELECT queries the buyer names, one item per row, with provenance and…","tags":["data source","mysql"]},{"id":"source.nager__collect","name":"Nager.Date","description":"Fetch GET {NAGER_API_URL}/api/v3/PublicHolidays/{current UTC year}/{CC} for each configured country and…","tags":["data source","nager__collect"]},{"id":"source.onedrive","name":"OneDrive / SharePoint","description":"Every file under a folder of a Microsoft OneDrive for Business drive or SharePoint document library…","tags":["data source","onedrive"]},{"id":"source.open_meteo_daily__collect","name":"Open-Meteo","description":"For each configured site, call the Open-Meteo forecast API (lat/lon, past_days, timezone auto, daily…","tags":["data source","open_meteo_daily__collect"]},{"id":"source.oracle","name":"Oracle Database","description":"Rows of the Oracle Database tables or SQL SELECT queries the buyer names, one item per row, with provenance…","tags":["data source","oracle"]},{"id":"source.postgres","name":"PostgreSQL","description":"Rows of the PostgreSQL tables or SQL SELECT queries the buyer names, one item per row, with provenance and…","tags":["data source","postgres"]},{"id":"source.quickbooks","name":"QuickBooks Online","description":"Accounting records of one QuickBooks Online company (Accounting API query endpoint, all pages), one item per…","tags":["data source","quickbooks"]},{"id":"source.redshift","name":"Amazon Redshift","description":"Rows of the Amazon Redshift tables, schemas or SQL SELECT queries the buyer names, one item per row, with…","tags":["data source","redshift"]},{"id":"source.rest_api","name":"Any REST API","description":"Records of any JSON REST API the buyer describes, one item per record, configured by parameters only (the…","tags":["data source","rest_api"]},{"id":"source.rss_feed","name":"RSS and Atom feeds","description":"Entries of RSS 2.0, RSS 1.0 and Atom 1.0 feeds the buyer lists by URL (blogs, news and press pages, product…","tags":["data source","rss_feed"]},{"id":"source.s3","name":"Amazon S3","description":"Files in one Amazon S3 bucket or S3-compatible bucket (MinIO, Cloudflare R2, Wasabi, DigitalOcean Spaces,…","tags":["data source","s3"]},{"id":"source.salesforce","name":"Salesforce","description":"Every record of the chosen objects of one Salesforce org (SOQL over the REST API, all pages), one item per…","tags":["data source","salesforce"]},{"id":"source.satellite","name":"Satellite imagery (Sentinel-2, Landsat)","description":"Free satellite scenes of an area and date range from a public STAC API (default Element84 Earth Search:…","tags":["data source","satellite"]},{"id":"source.sftp","name":"SFTP","description":"Files from an SFTP (SSH file transfer) server (CSV, PDF, DOCX, HTML, Markdown, text, ...) under the paths or…","tags":["data source","sftp"]},{"id":"source.shopify","name":"Shopify","description":"Shopify e-commerce data of one shop through the Admin REST API (default) or the Admin GraphQL API with bulk…","tags":["data source","shopify"]},{"id":"source.shoptet","name":"Shoptet","description":"E-shop records of one Shoptet shop (the shop the private API token belongs to; Shoptet REST API, all pages),…","tags":["data source","shoptet"]},{"id":"source.sklik","name":"Sklik","description":"Sklik (Seznam.cz pay-per-click advertising) through the Sklik API 'Drak' (JSON v5): campaigns, ad groups,…","tags":["data source","sklik"]},{"id":"source.snowflake","name":"Snowflake","description":"Rows of the Snowflake tables and SELECT queries the buyer names, one item per row, read through the…","tags":["data source","snowflake"]},{"id":"source.stripe","name":"Stripe","description":"Payments data of one Stripe account (the API key's account, or a connected account the buyer names; Stripe…","tags":["data source","stripe"]},{"id":"source.tiktok_ads","name":"TikTok Ads","description":"TikTok ads of the advertiser accounts the buyer names (TikTok API for Business v1.3): the advertisers, their…","tags":["data source","tiktok_ads"]},{"id":"source.weather","name":"Open-Meteo weather","description":"Current air temperature per city from Open-Meteo (geocoding + forecast API, no credentials).","tags":["data source","weather"]},{"id":"source.web_crawler","name":"Website crawler","description":"Crawls a website from the start URLs given at launch in WEB_CRAWLER_START_URLS and yields one item per HTML…","tags":["data source","web_crawler"]}],"documentation":{"openapi":"https://34-179-245-189.sslip.io/openapi.json","purchase_steps":["GET /.well-known/agent-card.json (free) - this document","A2A alternative for the quote steps: SendMessage to https://34-179-245-189.sslip.io/a2a (JSON-RPC or HTTP+JSON) with the intent text; the task is the quote, answers go on the same task","POST /v1/quotes {intent, hints?, previous_quote_id?} (free) - status planning | needs_input | quoted | unsupported; previous_quote_id re-plans your unpaid quoted/unsupported quote with your change as the intent (the old one becomes superseded)","GET /v1/quotes/{id} (free) - while planning, poll after next.retry_after_seconds until it settles","POST /v1/quotes/answers {quote_id, answers} (free) - answer questions by stable id (omitted = the question's default); resumes the quote","POST /v1/orders {quote_id} - 402 with x402 terms in the PAYMENT-REQUIRED header; retry with PAYMENT-SIGNATURE","202 {order_id, access_token} - payment verified, NOT settled; money moves only after a tested build","GET /v1/orders/{id} with header X-Order-Token - state and estimated_completion_at","POST /v1/orders/{id}/payment - only in state payment_required (your authorization expired before the tested build settled, e.g. a wallet that signs for 120 s); same price, no rebuild. Keep polling the order: it does not finish without this step","GET /v1/orders/{id}/artifact - manifest, test report and image download link once delivered","Then, without waiting to be asked, follow the manifest's next_steps: launch the image (run_spec for a Docker runner), first ingest, answers over MCP, and custom web dashboards at /ui built with the ui_preview / ui_set tools","POST /v1/orders/recover/challenge {order_id} + POST /v1/orders/recover {challenge_id, signature} - recover a lost token by signing with the paying wallet (EIP-191)"]},"authentication":{"purchase":"x402 payment is the only credential; there is no sign-up","order_access":"Send the order access token in the X-Order-Token header (Bearer is accepted too)"},"payment":{"protocol":"x402","x402_version":2,"scheme":"exact","network":"eip155:8453","asset":"USDC","pay_to":"0x8fBCe085c1483AF7378f46CDA8d72022e21BAB90","pricing":"cost-plus per quote: LLM tokens at the model's list price, build minutes and more for missing code with less public evidence, plus a margin, give the list price (offer.price.breakdown.list_usd); while we test, we charge 0.01 of it (offer.price.usd), at least 0.001 and at most 0.1 USD","max_timeout_seconds":300,"authorization_window":"Sign for up to max_timeout_seconds (300 s). If the tested build takes longer than your authorization, the order parks in payment_required: send a fresh authorization to POST /v1/orders/{id}/payment (same price, no rebuild)","settlement":"after the image is built and tested; failures before settlement cost nothing"},"kuchari":{"sources":["adform","airtable","archive","azure_blob","bigquery","bing_ads","confluence","drive","exchange_rates","facebook_pages","ftp","gcs","google_ads","google_analytics","google_sheets","http_files","imap","jira","keboola","linear","meta_ads","mixpanel","mongodb","mssql","mysql","nager__collect","onedrive","open_meteo_daily__collect","oracle","postgres","quickbooks","redshift","rest_api","rss_feed","s3","salesforce","satellite","sftp","shopify","shoptet","sklik","snowflake","stripe","tiktok_ads","weather","web_crawler"],"catalog":"https://34-179-245-189.sslip.io/v1/catalog","other_sources":"requests for sources outside this list may end as unsupported","storage":"optional STORAGE_URI; unset = inside the container (forms: see catalog)","outputs":["mcp"],"delivery":{"format":"docker image archive (docker load -i)","max_delivery_time_seconds":3600,"runtime_target":"linux/amd64, 4 vCPU, 8 GiB RAM, no GPU"}},"quotes":{"statuses":{"planning":"the planner is still working; poll GET /v1/quotes/{id} after next.retry_after_seconds","needs_input":"answer the questions by stable id with POST /v1/quotes/answers (same quote); an omitted answer accepts the question's default, so {} accepts all","quoted":"binding offer: plan, MCP tools, configuration, price; order it with POST /v1/orders","unsupported":"cannot be delivered as an unattended pipeline; unsupported_reason names why. Not orderable","superseded":"re-planned by a newer quote (superseded_by); not orderable, continue with that quote"},"ttl_seconds":900,"ttl_note":"counted from quote creation; answering questions does not extend it","new_capability":"work_kind new_capability means part of the pipeline is written for your order; if its build or tests fail, the order ends in failed and nothing is charged"},"order_states":[{"state":"accepted","meaning":"payment verified, not settled; the build is queued","terminal":false},{"state":"building","meaning":"the order's image is being built","terminal":false},{"state":"testing","meaning":"the built image runs its smoke test and acceptance examples","terminal":false},{"state":"ready","meaning":"the image passed its tests; settlement starts","terminal":false},{"state":"settling","meaning":"the verified payment is being settled on chain","terminal":false},{"state":"delivered","meaning":"paid; download the manifest and the image from /artifact","terminal":true},{"state":"failed","meaning":"the build or its tests failed; nothing was charged. Create a new quote to try again","terminal":true},{"state":"payment_required","meaning":"tested, but your authorization expired before settlement: send a fresh one to POST /v1/orders/{id}/payment; the order waits here until you do","terminal":false}],"order_polling":"poll GET /v1/orders/{id} every 5-10 s until a terminal state; estimated_completion_at says when to expect delivery. Re-ordering a failed quote returns the same failed order: create a new quote instead","errors":{"url":"https://34-179-245-189.sslip.io/v1/errors","note":"full catalog of error, order failure and unsupported codes"}}