Tool search 101,866 tools · 5,225 live servers
Filtersactive
- upload_asset
Upload a logo, theme PPTX, image, or document — or AI-generate an image. Purposes: • logo — company logo for chrome (PNG/JPG/SVG, max 5MB) → logo_id • image — image for the Image component (max 10MB) → asset_id • theme — company template PPTX → theme_id; slides with it render NATIVELY on the template (masters/layouts/chrome) • generate_image — AI-generate via `prompt` → asset_id ($0.05) • translate — PPTX to translate → deck job_id ($0.02/slide; requires `target_language`) • pdf — PDF → editable slides; pass `target_language` to also translate For files >3MB on purpose=pdf, purpose=translate, or purpose=theme, omit `data` — a drop-zone appears in the result card and bytes never pass through the agent.
- upload_case_file
Attach a document to a case (invoice copy, contract, correspondence, proof of delivery). Max 25 MB. Allowed extensions: .pdf, .xls, .xlsx, .csv, .txt, .jpg, .jpeg, .png, .gif. Provide the file content base64-encoded.
- get_invoice
Fetch a single invoice by id (full object incl. items, taxes, payments, permalink, pdf). Quaderno API: GET /invoices/{id}.
- create_invoice
MUTATES Quaderno data — create an invoice for a contact. Provide contact_id (or a contact via `fields`) and items; use `fields` for any other attribute (currency, issue_date, due_date, po_number, notes, tag_list, custom_metadata, payment_details). Each item = { description, quantity, unit_price, tax_1_name?, tax_1_rate?, discount_rate?, … }. Quaderno API: POST /invoices. Returns the created invoice (incl. permalink, pdf).
- extract_receipt
Extracts a structured Receipt (vendor, ABN-checked, GST-aware line items and totals) from a base64-encoded receipt or invoice image/PDF.
- get_source_url
Get a time-limited signed URL to the original source file (PDF etc.). Use this tool when: - The user wants to find a pdf URL for a specific document - The user asks about presigned URL for a pdf Parameters: - document_id (required): Document ID. Returns: - PDF URL for a specific document with document_id and pdf_url
- verify_document
Fetches a document (PDF, DOCX, or plain text) from a URL and runs the same 3-layer citation verification as verify_citation. Use this when you have a link to a brief rather than pasted text.
- validate_invoice
Validiert eine E-Rechnung (ZUGFeRD/Factur-X PDF oder XRechnung XML) gegen EN 16931 und gibt strukturierte Ergebnisse mit Korrekturvorschlägen zurück.
- extract_xml
Extrahiert die eingebettete XML-Datei aus einem ZUGFeRD/Factur-X PDF.
- check_consistency
Prüft ob die sichtbaren PDF-Daten mit den eingebetteten XML-Daten übereinstimmen.
- create_invoice
Erstellt aus strukturierten Daten eine valide E-Rechnung — entweder als ZUGFeRD-PDF (PDF/A-3 mit eingebettetem XML) oder als reines XRechnung-XML (mit Leitweg-ID für B2G). Unterstützt mehrere Positionen, alle USt-Kategorien, Rabatte/Zuschläge und Zahlungsangaben. Stateless — es wird nichts gespeichert.
- tourradar_web-tour-send-brochure
[tourradar] Use this when the user requests a tour brochure or PDF to be sent to their email. Sends a tour brochure (PDF file) to the specified email address. Before using this, ensure the user has provided their email address. If not provided, ask the user for it. Never generate or assume email addresses.
- convert_invoice
Convert an e-invoice between formats via the shared EN 16931 canonical model: parse the source document, re-serialize as the target, and validate the result before returning it — never a document that has not been checked. Format ids: "UBL_2.1" (OASIS UBL, the universal Peppol/EN16931 baseline), "UN_CEFACT_CII" (UN/CEFACT Cross Industry Invoice, required syntax for Chorus Pro/France and many ERP back-ends), "XRechnung_UBL" / "XRechnung_CII" (Germany's mandatory B2G format, XRechnung 3.0 — required for invoicing German public-sector buyers), "Factur-X" (France/Germany hybrid PDF+XML — a human-readable PDF/A-3 with the structured invoice embedded, common for French B2B). Binary formats (Factur-X) are base64 in both directions. Requires an API key on the Pro plan or above for any target beyond plain UBL_2.1 — call list_supported_formats to see current availability.
- hires_create_candidate
Create a new candidate profile. Optionally link to a job/stage and attach the candidate's resume as extracted text. Used for imports, inbound forms, and enrichment workflows. When the user provides an attached resume (PDF/DOCX/etc.), parse the file content yourself from the chat context — LLMs natively extract text from uploaded files — and pass the extracted text via resume_text. Do NOT attempt to inline binary file data: host function-call serializers truncate arguments above ~20KB.
- estimate_permit_fee
Estimate the permit fee for a residential project based on jurisdiction, project type, and project valuation. Returns numeric breakdown when the authoritative rule has fee inputs, or qualitative feeNotes (with source URL) when the city publishes fees only as PDFs/spreadsheets. Never fabricates dollar amounts.
- get_deep_reading
Get a focused reading for ONE specific divination system from the 26. Free MCP tier covers the 5 preview systems (bazi, vedic, western, ninestar, thai); the other 21 + the in-depth Cosmic Blueprint PDF are at mythsensus.com/pricing.
- fluxink-mcp-chatgpt-show-handwriting-canvas
Open the FluxInk handwriting recognition canvas. The user draws freehand strokes with a stylus, finger, or mouse. The strokes are converted by one of two model families: general recognition for handwriting, math, and chemical formulas, or structure recognition for molecular structures. Use this when the user asks to handwrite, draw, sketch, ink, scribble, or scrawl something. Use this when the user wants to draw a math equation, chemical formula, or molecular structure rather than type it. Use this when the user asks for a canvas, drawing pad, handwriting input box, or whiteboard. Use this when the user wants to convert stylus or finger drawings into recognized text or markup. Do NOT use this when the user types a question, equation, or formula in chat and just wants an answer. Do NOT use this when the user uploads or references an existing image of handwriting (call recognize_image instead). Do NOT use this when the user wants a formatted document, study sheet, or layout PDF (call create_layout instead). Do NOT use this when the user wants text rendered in a personal handwriting style (call show_style_canvas instead). Do NOT use this for conversational or informational requests that need no ink input. Do NOT re-open if a FluxInk handwriting canvas is already visible from any earlier turn. Instead instruct the user to keep drawing on the existing canvas. Only set force_new=true when the user explicitly asks for a brand new, fresh, or blank canvas. Always pass the original chat message in the prompt parameter so context is preserved after recognition. After calling, write a single short acknowledgement and do NOT describe the canvas UI.
- fluxink-mcp-chatgpt-create-layout
FluxInk document layout generator. Transform raw text content into a structured PDF using one of seven study or work templates, then preview it in an embedded PDF viewer widget. Supported layout_type values. cornell is the Cornell note taking layout with cue, notes, and summary. bullet_points is a clean bulleted summary. zettelkasten is atomic linked notes. journalism_5w1h is who, what, when, where, why, and how. meeting_add is a meeting agenda plus action items. sq3r is Survey, Question, Read, Recite, Review study notes. pso is Problem, Solution, Outcome. Use this when the user asks for a Cornell sheet, bulleted summary, Zettelkasten card, 5W1H breakdown, meeting agenda or minutes, SQ3R study sheet, or PSO writeup. Use this when the user wants to turn raw notes, lecture transcript, or source material into a printable PDF or formatted study sheet. Use this when the user asks for a downloadable PDF document of their content. Do NOT use this when the user just asks for a plain summary in chat. Give it inline. Do NOT use this when the user wants to handwrite or draw something. Call show_handwriting_canvas instead. Do NOT use this when the user wants text in a personal handwriting style. Call show_style_canvas instead. Do NOT use this for plain informational requests with no document generation intent. Always pass the source material verbatim in the content parameter. Do NOT pre summarize. The layout engine handles structuring. Pick the layout_type that best matches the stated purpose. If unclear, ask one short clarifying question instead of guessing. Do NOT re-call if a layout PDF is already visible from a previous turn unless the user explicitly asks for a different layout, different content, or a regeneration. After calling, write a single short acknowledgement and do NOT restate the PDF content.
- get_document_text
Return a bounded slice of extracted text for a document file. Supports head, tail, and range pagination; source_url always points to the official PDF.
- vivid_request_quote
Email the customer a formal QUOTATION. If the exact configuration can be priced and an email is given, this INSTANTLY emails a branded PDF-style quotation (line items, GST, total, quote number, 14-day validity, accept-online link) — status 'quoted'. For custom/unpriceable products it logs the request for the team to prepare and send (status 'received'). Never takes payment. Confirm product, quantity, size/options, name, and email before submitting.
- vivid_check_artwork
Check whether a customer's artwork PDF is print-ready BEFORE they order — powered by Vivid's own production preflight engine. Reports size vs the ordered size, bleed, RGB-vs-CMYK colour, font embedding and effective resolution, each with a plain-English fix. ADVISORY ONLY: it never blocks anything. If the customer is happy to proceed with the file as-is, that is always accepted — say so explicitly. Every order also gets a free digital proof before printing.
- vivid_upload_artwork
Upload a customer's artwork FILE through the agent (no website file picker needed). Accepts the file as base64, stores it in Vivid's Google Drive, and returns a stable shareable link plus metadata. Optionally attaches the link to a quote, order, or design session. Accepts PDF / AI / EPS / JPG / PNG. Does NOT verify print-readiness — the team checks that. Use when a customer wants to send their print file via chat.
- get_indice_liquidacion
Índice de Liquidación: participación de HEMBRAS (vacas + vaquillonas) en la hacienda operada en el Mercado Agroganadero (Cañuelas) — indicador ADELANTADO de liquidación (descarga de vientres) vs. retención (armado de rodeo). Sin args. Devuelve la lectura fresca de Cañuelas (mensual, 2026→), el ancla nacional actual (YTD, PDF mensual MAGyP) y el contexto histórico de la faena de hembras NACIONAL (1998-2025: mensual MAGyP + trimestral IPCVA). Ojo: Cañuelas corre estructuralmente por encima de la faena nacional — no comparar 1:1.
- lebenslauf_erstellen
Create a German CV as a real PDF in a professional design. Erstellt aus strukturierten Lebenslauf-Daten eine Vorschau, einen Link zum Wasserzeichen-PDF (gratis) und einen Link, um den Entwurf im LebenslaufHeld-Editor weiterzubearbeiten.
- ats_check
Deterministic ATS readability check for a resume PDF, no AI involved. Prueft ein Lebenslauf-PDF (Base64) rein technisch auf Maschinenlesbarkeit fuer Bewerbungssysteme: Text-Layer, Schriften, Datumsformate, Standard-Ueberschriften.
- query_power_interconnection_queue_ercot_v1
Query the ERCOT generator interconnection queue — ERCOT's public GIS Report (EMIL PG7-200-ER), the waiting line of generation projects that have REQUESTED to connect to the ERCOT (Texas) grid. Returns cited, project-level records with ERCOT's full published structure across four lifecycle sheets (Large Gen + Small Gen = active; Inactive Projects; Cancellation Update): the requested `capacity_mw` (ERCOT publishes ONE capacity figure — no summer/winter split), the ERCOT `fuel` and `technology` codes (e.g. SOL/PV solar, OTH/BA battery, GAS/CC combined-cycle, WIN/WT wind — HYD is HYDROGEN, hydro is WAT), the `cdr_reporting_zone` (NORTH/SOUTH/WEST/COASTAL/HOUSTON/PANHANDLE), the `interconnecting_entity`, the `poi_location`, the composite `gim_study_phase` token string, and the milestone dates (`screening_study_started`, `fis_approved`, `ia_signed`, `construction_start`/`construction_end`, `approved_for_energization`/`approved_for_synchronization`, `projected_cod`). Group or filter by `application_status`, `size_category`, `fuel`, `technology`, `cdr_reporting_zone`, `county_fips`, `state`, `gim_study_phase`, or `interconnecting_entity`; filter `projected_cod` by the `projected_cod_from` / `projected_cod_to` range. Pass each parameter as a top-level key of `params` (flat — not nested). Example: `{"application_status": "ACTIVE", "fuel": "SOL"}` for active solar requests; `{"application_status": "ACTIVE", "group_by": ["fuel"], "order_by": "capacity_mw", "top_n": 5}` for the active pipeline's biggest fuels by requested MW. The GIS Report is published MONTHLY and its full history is queryable — this is NOT a single point-in-time snapshot. Omit `as_of` for the latest month, or pass `as_of` (a date) to get the queue as it stood at a past month: `as_of` resolves to the newest monthly snapshot at or before it, with vintages back to 2018-12 (the floor; an earlier `as_of` is refused, naming the floor). Example: `{"application_status": "ACTIVE", "as_of": "2019-06-30"}` returns the active queue as of mid-2019. Each month is a full point-in-time snapshot (a project that has since withdrawn is simply absent from later months — query the earlier `as_of` to see it), so a multi-month trend is one query per month; `as_of` is the history axis, not a row filter. Returns JSON aggregates with citations and optional row-level records when `include_records` is true; every value carries `source`, `as_of`, and a `source_row` verifiable with get_source_evidence_v1. `capacity_mw` is REQUESTED capacity, not built: historically the large majority of queued megawatts withdraw before they are built. NEVER read a queue-MW total as installed or operating capacity — it is additive across distinct rows but is a REQUESTED total only. ERCOT prints NO status column, so `application_status` is derived from the sheet ERCOT files the project on: `ACTIVE` is the live pipeline (Large/Small Gen), `INACTIVE` and `CANCELLED` are projects that recently left the queue (the Inactive / Cancellation sheets list RECENT departures, NOT the full historical withdrawn set). The build-progress reading is carried SEPARATELY in `gim_study_phase` (e.g. "SS Completed, FIS Completed, IA") + the milestone dates and is never collapsed into `application_status`. For built/operating capacity use query_power_capacity_v1. ERCOT only — never summed, deduped, or compared across ISOs. For the MISO interconnection queue use query_power_interconnection_queue_v1; for PJM use query_power_interconnection_queue_pjm_v1 (or query_power_interconnection_queue_pjm_cycle_v1 for PJM's cluster/cycle grid); for the CAISO (California) queue use query_power_interconnection_queue_caiso_v1; for the NYISO (New York) queue use query_power_interconnection_queue_nyiso_v1; for the ISO-NE (New England) queue use query_power_interconnection_queue_isone_v1; for the SPP (central US) queue use query_power_interconnection_queue_spp_v1. This tool serves ERCOT's GIS Report, which is GENERATION-only; ERCOT's separate large-load / data-center interconnection queue is an unstructured source (TAC-meeting PDF slides) and is NOT served here, and this tool does not infer which projects are data-center-driven — that interpretation is the analyst's, from cited rows.
- get_pdf_link
Download links for the printable PDF. pdf_url is the merged tournament document (match sheet with write-in score boxes, player sheet, standings/results when they exist) — hand this to the organiser. results_pdf_url and plan_pdf_url are deprecated pre-merge variants kept for comparison.
- get_pdf
The printable PDF itself, returned as a base64 embedded resource — use this when the organiser wants the file handed to them and your client cannot fetch URLs. Default "sheet": the merged tournament document (match sheet with write-in score boxes, player sheet, standings/results when they exist). "results" and "plan" are deprecated pre-merge variants kept for comparison. For a lighter response, get_pdf_link returns download URLs instead.
- niche_brand_kit_ingest
Auto-populate the user's BrandKit (palette / fonts / tagline / logo / wordmark / boilerplate / voice notes) from files, a URL, or pasted text. Additive by default: fills empty fields, leaves populated ones alone. Idempotent: re-running the same inputs doesn't double-write. Overwrite rule: if the target brand kit already has an identity (a tagline/boilerplate/voice for a different brand), do not silently overwrite it. First ask the user whether to replace it. If the account supports multiple brand profiles, prefer creating a separate brand instead: pass a new `brand_id` slug plus `brand_name` rather than clobbering the existing one. Only pass `replace=true` once the user has confirmed they want this brand re-learned from the new source. Use when the agent has brand assets in scope (a working directory with logos / press-kit / brand-guide PDFs, the user's portfolio or Substack URL, pasted boilerplate copy) and wants to populate Niche's BrandKit so future signal_scan and content generation inherit the brand context. Agent-side equivalent of the Niche web app brand-kit ingest surface, same backend engine. Async, then poll: a URL or multi-file ingest runs in the background, so this call returns fast with {ingest_id, status:'ingesting'}. Then poll niche_brand_kit_ingest_status(ingest_id) until status is 'done'; that response carries the populated BrandKit, the ingest report (detected[] / skipped[] / errors[]), and a diff[] of changed fields. (Loop: ingest, then poll status until done/failed; same pattern as niche_signal_scan to niche_session_state.) Do not re-call ingest while one is running; a duplicate of the same inputs attaches to the in-flight job. URL ingest also fills voice primitives when the page has post-shaped text (Substack/blog/X). If a URL is slow or thin to scrape, the visual fields may land before the voice pass completes; when the report flags this, paste the page's About/homepage copy via `text=` to complete the brand voice.
- mu_create_product
Create a product in one of your MU stores. Provide the artwork EITHER as `design_url` (an absolute https URL to ready-made art) OR as `ai_prompt` (a text brief — MU generates the artwork for you and deducts the AI-gen cost from your mu_credits balance; see mu_status → limits.ai_gen for cost_jpy and whether it is enabled). Pass exactly one of the two. `kind` must be one of: tee, tee_white, rashguard_ls, rashguard_black, hoodie, crewneck, sticker, mug, tote, tank, cap, phone_case, long_sleeve_tee, shorts, beanie, leggings, joggers, apron, canvas, metal_print, pillow, blanket, coaster, placemat, journal, mug_black, wine_glass, towel, bottle, mouse_pad, laptop_sleeve, poster, nfc_coin, device, event_ticket, song, zine, video, karaoke_ticket, house, socks, drawstring_bag, beach_towel, fanny_pack, bucket_hat, kids_tee, backpack, flag, printful_custom. `phone_case` is an iPhone tough case (Printful) — the buyer picks their iPhone model (11〜17, all sizes) inside checkout, so you create ONE product and it ships to whichever model they choose. . Two digital kinds need an extra field: `event_ticket` (a sellable event ticket — pass `capacity` for the seat limit; on purchase the buyer is emailed a QR that opens a VALID ticket page; no shipping) and `song` (a sellable track — pass `audio_url`, the https link to the audio; on purchase the buyer is emailed a private listen/download link; no shipping). Other digital kinds (`zine` PDF, `video`, `karaoke_ticket`) and manual-fulfilment kinds (`poster`, `tee_white`, `nfc_coin`, `device`, `house`) all take the same `design_url`/`ai_prompt` artwork; the buyer gets a download/redemption link (digital) or the operator ships/builds it (manual). Products go live immediately for trusted owners unless the risk gate trips, otherwise they wait for MA-council review — ALWAYS report the `status` field from the response, do not assume. Requires `Authorization: Bearer <api_key>`.
- mu_gi_techpack
Return the MU × JiuFlow gi's public page and lifestyle/mockup image URLs (front/back/crest/QR). The dimensioned tech-pack PDF lives in the repo (docs/gi-isami-2026-05-12/). Owner-only.
- invoice_parse_text
Extract all text from a PDF invoice. Returns text per page and full combined text.
- invoice_ocr
OCR extraction for scanned or image-based PDF invoices using Tesseract (German + English).
- invoice_zugferd
Parse ZUGFeRD or XRechnung XML data embedded in PDF. Returns structured invoice data from machine-readable format.
- invoice_from_url
Download PDF from URL and run complete invoice analysis.
- invoice_batch_urls
Process multiple invoice PDFs from URLs in one call. Returns analysis for each.
- get_source
Return provenance metadata for one source by integer source_id. Sources include manufacturer manuals, product pages, firmware notes, schematics, errata, and (in v2) field notes. Source ids are surfaced wherever facts cite their origin — in get_module's reference list, in the audit page citation links, and (in v2) in the claims table. Args: - source_id (integer, required) Returns metadata only — not the document content. The audit_url field links to the audit site's per-source page where the document can be viewed. The archived_url field is a path on the worker that streams the archived bytes from R2 (e.g. /sources/123/document). Returns: { "id": number, "source_type": "manual" | "firmware_notes" | "product_page" | ..., "format": "pdf" | "html" | "text" | ..., "title": string | null, "canonical_url": string, // manufacturer-hosted URL "archived_url": string | null, // worker route to the R2-archived copy "content_hash": string | null, // sha256 of archived bytes "fetched_date": string, // when first archived "last_verified": string | null, // when canonical was last confirmed "canonical_changed_at": string | null, // null until manufacturer side changes "module_id": string | null, // owning module, if any "manufacturer_id": string | null, "audit_url": string // audit site page for this source } The pair (canonical_changed_at, last_verified) is the staleness signal: if canonical_changed_at > last_verified, the manufacturer document changed since we last checked it. Surface that to the user when relevant.
- nfe_previsualizar
Gera o DANFE em PDF como pré-visualização, sem enviar para a SEFAZ. Útil para conferência visual antes de emitir.
- arquivo_baixar
Baixa o arquivo (XML ou PDF/DANFE) de uma NF-e/NFC-e/NFS-e por chave de acesso. Retorna conteúdo em base64.
- arquivo_baixar_periodo
Exporta múltiplos arquivos (XML/PDF) de um período em um único ZIP base64. Útil para backup, contabilidade ou auditoria.
- get_screenshot_url
Return an audit-grade screenshot of the state medical board page used to verify a physician's license. The URL is signed and valid for 15 minutes. Use this when: - You need primary-source evidence for an audit, credentialing file, or insurance contract - The end user asks 'where did this come from?' - You're generating a credentialing PDF that needs proof attachments Identify the license by: NPI + state, OR by `license_id` if you already fetched it via verify_license / list_physician_licenses. Free-tier callers receive a structured tier_upgrade_required response. Paid tier (Pro / Enterprise) only.
- search_disciplinary_actions
Search for known disciplinary actions against a physician (suspension, revocation, surrender, probation). Sourced from state medical board status text. Use this when: - Pre-employment screening - Recredentialing — required by most insurance contracts - Investigating a referral source Input: NPI (preferred) OR full name. Optional state filter. Output: array of {state, action_type, date, source_url}. Action types: suspension | revocation | surrender | probation | reprimand | other. Coverage note: this surfaces board-status-level signal. Underlying PDF documents are on the roadmap. Paid tier only (Pro or Enterprise).
- rosca_research_report
Headline findings from Wiremi's public-data report, "The State of ROSCAs in the Canadian Diaspora 2026": immigrant population from rotating-savings cultures, the credit-invisibility gap measured by Statistics Canada, why ROSCA payments are invisible to credit bureaus, and the 70-year history of ROSCAs in Canada. Every figure is sourced to public data (Statistics Canada, World Bank, peer-reviewed research). Returns the canonical report URL and PDF so callers can cite the source. No personal data.
- generate_report
Generate data-driven DORA Ampel PDF report. Score, gap analysis, provider register, audit trail integrity.
- wallet_ofac_report
Run a paid OFAC screening report for one crypto wallet and return structured JSON or an inline PDF/DOCX artifact. Use wallet_ofac_screen for a quick single-address status check, or wallet_ofac_batch for multiple addresses.
- wallet_ofac_screen
Screen one crypto wallet address against OFAC SDN digital currency designations and return exact hits, sanctioned entity metadata, asset coverage, and a manual-review signal. Use this for one-off status checks; use wallet_ofac_report for PDF/DOCX output or wallet_ofac_batch for multiple addresses.
- compliance_edd_report
Build a paid enhanced due diligence memo for a wallet set using exact-match OFAC screening, sanctions evidence, and follow-up actions, returning structured JSON or an inline PDF/DOCX artifact. Use this for case handoff; use wallet_ofac_batch for screening-only results or report_pdf_generate/report_docx_generate only when the report payload already exists.
- report_pdf_generate
Return an inline PDF artifact from supplied report_meta, tables, metrics, and summary content; this read-only renderer does not persist hosted files. Use this only when a structured report payload already exists; use report_docx_generate for editable Word output or compliance_edd_report to build the memo first.
- report_docx_generate
Return an inline DOCX artifact from supplied report_meta, tables, metrics, and summary content; this read-only renderer does not persist hosted files. Use this only when a structured report payload already exists; use report_pdf_generate for fixed-layout output or compliance_edd_report to build the memo first.
- ingest_url_data_source
Create a new data source by fetching a public URL on the server side. Handles CSV, TSV, JSON, Excel, TXT, and PDF. Private networks (RFC 1918, loopback, cloud metadata) are blocked. Returns the data_source_id once preprocessing has started. Use this for files larger than the 25 MB inline upload cap.
- upload_data_source
Create a new data source from an inline base64-encoded file (CSV, TSV, JSON, Excel, TXT, PDF). The file goes through the same validation and preprocessing as a web upload. Returns the data_source_id you can pass to run_analysis as soon as preprocessing completes (poll get_data_source_schema for readiness or pass wait_seconds to block here).
- get_audit_pdf
Return a signed download URL for the branded PDF report for a given audit id. If no PDF has been rendered yet, queues a render and returns `status: queued` — poll the same tool again, or fetch the URL directly once ready. Requires an API key.