Subject resolution
Every multi-tenant tool accepts an optional user_id argument. When omitted, the call
resolves to the API key’s default tenant user. The user_id is validated against the
key’s company — a cross-tenant id returns not_found (never leaked). Tool availability
and execution are gated by the resolved user’s AccountKit.
Connections (3rd-party apps)
| Tool | Description |
|---|
naive_connections_list | List toolkits + status for a user (kit-filtered). Optional user_id. |
naive_connections_connect | Start an OAuth/API-key flow → redirect URL. Blocked if the kit disallows the toolkit. |
naive_connections_disconnect | Disconnect a toolkit (purge to delete). |
naive_connections_tools | List a toolkit’s tools + input schemas. |
naive_connections_execute | Execute a tool. Gated by the kit’s toolkit + per-tool filter. |
Vault
| Tool | Description |
|---|
naive_vault_put | Store/replace an encrypted value for a user. |
naive_vault_get | Decrypt + return a value (errors if locked/expired). |
naive_vault_list | List entry keys (values masked). |
rotate and delete are REST/SDK-only (PATCH/DELETE /v1/users/{user_id}/vault/{key}, or vault.rotate() / vault.delete() in the SDK). They are intentionally not exposed as MCP tools, so an agent cannot destroy or re-key a stored credential.
Logs
| Tool | Description |
|---|
naive_logs_query | Query a user’s recent activity events. |
AccountKit filtering may reject a connection tool with forbidden and a reason of
toolkit_not_allowed, tool_not_allowed, or primitive_disabled_by_kit. Surface the
error rather than retrying.
Browser
Cloud browser sessions a user’s agents drive, plus autonomous signup/login backed by the Vault. Every tool takes an optional user_id and is gated by the user’s AccountKit (browser primitive).
| Tool | Description |
|---|
naive_browser_create_session | Open a live session scoped to allowed_domains (returns a session_id). 0 credits (time floor billed at close). |
naive_browser_navigate | Navigate the session to a URL (allowlist + SSRF enforced). 1 credit. |
naive_browser_act | Natural-language action (click/fill/scroll). Writes require allow_writes. 1 credit. |
naive_browser_extract | Extract structured data from the page (read-only). 1 credit. |
naive_browser_observe | List candidate elements/actions (read-only). 1 credit. |
naive_browser_screenshot | Capture the page → short-lived signed URL. 1 credit. |
naive_browser_signup | Autonomous account creation: generates + vaults a password, fills + submits. Sensitive (may return pending_approval). 4 credits. |
naive_browser_login | Autonomous re-login from the vaulted credential. 3 credits. |
naive_browser_save_login | Persist a completed human login as a reusable saved context. |
naive_browser_close_session | Close a session and release the browser (idempotent). Bills a time floor of 1–3 credits by elapsed time (≤5 / ≤15 / ≤30 min). |
Credentials never reach the model: signup/login fill the password server-side via variable substitution. There is no agent-facing revoke (destroying a shared saved login is human-only). The live-view URL is never returned to an agent.
Storing a known credential and the user’s profile email are REST/SDK-only (no MCP tool): use POST /v1/users/{user_id}/browser/credentials (saveCredential) to vault an email/password before a later naive_browser_login, and PATCH /v1/users/{user_id} (profile.setEmail) to point the user’s account email at a provisioned inbox so signup verification mail can be received.
Auth & Identity
| Tool | Description |
|---|
naive_whoami | Get current auth context |
naive_list_companies | List available companies |
naive_identity | Full identity summary |
naive_list_emails | List email inboxes |
naive_list_resources | All provisioned resources |
Registration, linking, and company selection are REST-only operations (not exposed via MCP). Agents connect to MCP after they already have a key.
Orchestration tools (CEO, tasks, objectives, employees, cron, memory) are available via the REST API and CLI only. They are not exposed as MCP tools because orchestration requires stateful conversation flows that don’t map well to single tool calls.
The following are also REST/SDK (and where noted, CLI) only and have no MCP tools: AccountKits, tenant Users CRUD, Approvals (approve/deny), Sessions, Templates and Template Apps, the profile primitive, and the browser save_credential route. Agents act within a kit/session that an operator has already configured; managing those objects is a control-plane concern.
Domains
| Tool | Description |
|---|
naive_list_domains | List all domains for the company (includes app_connect_status) |
naive_connect_domain | Connect a custom domain (BYOD) |
naive_resend_setup_records | Get the email-provider setup records the user must add at their registrar to pass verification (read-only) |
naive_verify_domain | Trigger DNS verification |
naive_search_domain | Check domain availability and price |
naive_purchase_domain | Purchase a domain via checkout |
naive_list_dns_records | List every DNS record on the live DNS zone (with provider record IDs) |
naive_set_dns_record | Create or replace a DNS record (A/AAAA/CNAME/MX/TXT/CAA). Apex A/AAAA writes flip the domain to agent_managed. |
naive_delete_dns_record | Delete a DNS record by its provider record ID |
The DNS edit tools (naive_list_dns_records, naive_set_dns_record, naive_delete_dns_record) are gated behind AGENT_DNS_EDIT_ENABLED=true on the API. They enforce a strict allowlist (A/AAAA/CNAME/MX/TXT/CAA), block DMARC/DKIM/inbound records, refuse system domains, and rate-limit at 5/min and 20/hr per company.
naive_set_dns_record
{
"domain_id": "UUID of the domain (required)",
"type": "A | AAAA | CNAME | MX | TXT | CAA (required)",
"name": "Record name; '@' or omitted for apex (optional)",
"value": "Record value (required)",
"ttl": "TTL in seconds, 60-86400 (optional)",
"priority": "MX priority 0-65535 (required for MX)",
"mode": "replace (default) | append (optional)",
"acknowledge_unowned": "boolean — required when overwriting a record not created by Naive"
}
naive_delete_dns_record
{
"domain_id": "UUID of the domain (required)",
"record_id": "Provider record ID from naive_list_dns_records (required)",
"acknowledge_unowned": "boolean — required when deleting a record not created by Naive"
}
Email
| Tool | Description |
|---|
naive_email_inboxes | List sendable inboxes |
naive_create_inbox | Create a new email inbox on company domain |
naive_delete_inbox | Delete (deactivate) an email inbox |
naive_send_email | Send email from inbox |
naive_email_inbox | List received emails |
naive_get_email | Get full email body |
Search
| Tool | Description |
|---|
naive_web_search | Search the web |
naive_read_url | Fetch + extract from URL |
naive_research | Multi-source deep research |
LLM
OpenRouter-backed chat completions across 300+ models. Billed in Naive credits by the model’s token cost.
| Tool | Description |
|---|
naive_llm_chat | Run a chat completion (model + messages, optional models fallback chain, temperature, max_tokens) |
naive_llm_models | List the models OpenRouter can route to (optional search filter) — free |
Images
| Tool | Description |
|---|
naive_generate_images | Generate images using AI models |
naive_image_status | Check image job status |
naive_stock_search | Search stock photos |
naive_image_models | List available models |
Video
| Tool | Description |
|---|
naive_generate_video | Generate video using AI models |
naive_video_status | Check video job status |
naive_video_models | List available models |
Video Clipping
| Tool | Description |
|---|
naive_create_clips | Extract short-form clips from a YouTube video (4 credits) |
naive_clips_status | Check clipping or editing job status |
naive_edit_clip_video | Add captions, effects, zooms, and B-roll (3 credits) |
| Tool | Description |
|---|
naive_media_list | List and filter media assets (auto-populated from clipping and generation jobs) |
naive_media_get | Get a single asset by ID |
naive_media_upload_url | Upload media from a public URL |
naive_media_update | Update asset title, description, tags |
naive_media_delete | Delete an asset |
Social
| Tool | Description |
|---|
naive_social_status | Check activation + connected accounts |
naive_social_activate | Activate social media for company |
naive_social_connect | Get OAuth URL for a platform |
naive_social_portal | Get portal URL for multi-platform connect |
naive_social_accounts | List connected accounts |
naive_social_disconnect | Disconnect an account |
naive_social_label | Set a label on an account |
naive_social_sync | Sync connected accounts |
naive_social_upload | Upload media from URL |
naive_social_create_post | Create a post (draft or publish) |
naive_social_list_posts | List social posts |
naive_social_get_post | Get post details |
naive_social_edit_post | Edit a draft post |
naive_social_delete_post | Delete a post |
naive_social_publish_post | Publish a draft |
naive_social_post_analytics | Get post analytics |
naive_social_post_comments | Get post comments |
naive_social_account_analytics | Get account analytics |
Verification
| Tool | Description |
|---|
naive_start_verification | Start KYC for members with ownership percentages and responsible party designation |
naive_list_verifications | List all verification requests for the company |
naive_get_verification | Get verification status + member statuses + ready_for_formation flag |
naive_complete_member_verification | Submit verification validation token for a member |
naive_resend_verification_link | Resend/regenerate a member’s KYC link |
| Tool | Description |
|---|
naive_list_naics_codes | List NAICS industry codes for formation |
naive_submit_formation | Step 1: Validate KYC + create $249 hosted checkout |
naive_retry_formation_payment | Generate fresh checkout URL if original expired |
naive_execute_formation | Step 2: Submit for filing after payment is complete |
naive_list_formations | List all formation requests |
naive_get_formation | Get formation status and details |
naive_formation_documents | List formation documents |
naive_formation_document_download | Get document download URL |
Apps
Vercel-backed Next.js apps with an optional Supabase database (fullstack). Fully standalone — no orchestration required: the create response includes a starter-template clone command, and local projects deploy via tarball upload (REST/CLI — naive_apps_deploy itself deploys the agent’s container workspace). When a company container exists, a dedicated engineer agent is provisioned on creation. Beyond the curated tools, naive_apps_vercel_api and naive_apps_supabase_api proxy any Vercel REST API / Supabase Management API operation, scoped to the app’s own project with credentials injected.
| Tool | Description |
|---|
naive_apps_list | List all apps |
naive_apps_create | Create an app (frontend_only or fullstack — provisions Vercel + optional Supabase; optional template variant; returns the template clone command) |
naive_apps_templates | List starter templates (GitHub repo + clone commands) |
naive_apps_get | Get app details (Vercel project, Supabase project, secrets, domains, deployments) |
naive_apps_delete | Delete an app and all its infrastructure |
naive_apps_deploy | Deploy workspace code to Vercel (preview) |
naive_apps_publish | Promote a deployment to production |
naive_apps_deployments | List deployment history |
naive_apps_retry | Re-run failed Vercel/Supabase provisioning |
naive_apps_secrets_list | List env var keys |
naive_apps_secrets_set | Set an env var (preview / production), synced to Vercel |
naive_apps_secrets_delete | Delete an env var (removed from Vercel too) |
naive_apps_secrets_reveal | Reveal an env var value |
naive_apps_domains_list | List app domains |
naive_apps_domains_add | Add a custom domain to the Vercel project |
naive_apps_domains_remove | Remove a domain |
naive_apps_domains_set_primary | Set the primary production domain |
naive_apps_connect_domain | Connect a company domain as the app’s production domain |
naive_apps_disconnect_domain | Disconnect a company domain |
naive_apps_verify_domain_dns | Verify DNS for a connected company domain |
naive_apps_db_tables | List database tables (fullstack only) |
naive_apps_db_query | Run a SQL query (fullstack only) |
naive_apps_vercel_api | Call any Vercel REST API operation (scoped to the app’s project) |
naive_apps_supabase_api | Call any Supabase Management API operation (scoped to the app’s project) |
Jobs
| Tool | Description |
|---|
naive_list_jobs | List async jobs |
naive_get_job | Get job details |
naive_cancel_job | Cancel a job |
Status
| Tool | Description |
|---|
naive_status | Agent status + credits |
naive_usage | Credit usage history |
naive_generate_images
{
"model": "fal-ai/flux/schnell (optional, default)",
"input": { "prompt": "required", "image_size": "optional", "num_images": "optional", "seed": "optional" }
}
naive_stock_search
{
"query": "required",
"count": "number (optional, default 10, max 80)",
"orientation": "landscape | portrait | square (optional)",
"color": "red | orange | yellow | green | turquoise | blue | violet | pink | brown | black | gray | white (optional)",
"size": "large | medium | small (optional)"
}
naive_send_email
{
"from_inbox": "UUID of inbox to send from (required)",
"to": "Recipient email address (required)",
"subject": "Email subject (required)",
"body": "Email body — plain text or HTML (required)"
}
naive_web_search
{
"query": "Search query (required)",
"count": "Number of results, default 5, max 20 (optional)"
}
naive_generate_video
{
"model": "Model ID (required)",
"input": { "prompt": "required", "duration": "optional", "aspect_ratio": "optional", "image_url": "for image-to-video" }
}
| Tool | Description |
|---|
naive_list_plans | List subscription plans with pricing |
naive_subscribe | Create subscription checkout (7-day trial for first-time) |
naive_upgrade_plan | Upgrade existing subscription |
naive_billing_status | Check subscription + credit balance |
naive_billing_portal | Get billing portal URL |
naive_list_packs | List credit top-up packs (10−100) |
naive_topup_credits | Buy more credits |
naive_social_connect
{
"platform": "TWITTER | LINKEDIN | INSTAGRAM | FACEBOOK | TIKTOK | YOUTUBE | THREADS | PINTEREST | REDDIT | BLUESKY",
"redirect_url": "URL the user returns to after connecting (required)"
}
naive_social_create_post
{
"content": "Post text content (required)",
"title": "Post title (optional, auto-generated from content)",
"platforms": ["TWITTER", "LINKEDIN"],
"platform_data": { "REDDIT": { "sr": "subreddit", "title": "..." } },
"media_urls": ["https://example.com/video.mp4"],
"account_ids": ["uuid (optional, specific accounts to post from)"],
"youtube_type": "SHORT | VIDEO (optional, default SHORT)",
"publish_now": "boolean (optional, default false = draft). Costs 1 credit.",
"scheduled_at": "ISO 8601 datetime (optional). Costs 1 credit."
}
naive_start_verification
{
"members": [
{
"first_name": "required",
"last_name": "required",
"email": "required",
"phone_number": "optional (E.164)",
"ownership_percentage": "integer 0-100 (required, must sum to 100)",
"role": "primary | secondary (required, exactly one primary)",
"is_responsible_party": "boolean (required, exactly one true)"
}
]
}
naive_complete_member_verification
{
"member_id": "UUID of the member (required)",
"validation_token": "verification validation token from onComplete (required)"
}
{
"verification_id": "UUID (required)",
"entity_type": "llc (required)",
"state": "US state code, e.g. WY (required)",
"naics_code_id": "NAICS code ID (required)",
"description": "Business description (required)",
"name_options": [{ "name": "Acme", "entity_type_ending": "llc" }]
}
SEO
| Tool | Description |
|---|
naive_seo_discover | Find the right SEO endpoint using natural language |
naive_seo_execute | Execute any SEO endpoint (Live mode — instant results) |
naive_seo_execute_async | Execute any SEO endpoint (Standard mode — async task) |
Supports Keywords Data (Google, Bing, Trends), Backlinks, and SEO Labs (Google, Bing, Amazon).
App Data
| Tool | Description |
|---|
naive_app_data_discover | Find the right App Data endpoint using natural language |
naive_app_data_execute | Execute any App Data endpoint (Live mode) |
naive_app_data_execute_async | Execute any App Data endpoint (Standard mode — async task) |
Supports Google Play and App Store — app searches, listings, info, and reviews.
Business Data
| Tool | Description |
|---|
naive_business_discover | Find the right Business Data endpoint using natural language |
naive_business_execute | Execute any Business Data endpoint (Live mode — instant results) |
naive_business_execute_async | Execute any Business Data endpoint (Standard mode — async task) |
Supports Google My Business, Hotels, Reviews, Q&A, Trustpilot, TripAdvisor, and social media engagement.
AEO (AI Optimization)
| Tool | Description |
|---|
naive_aeo_discover | Find the right AEO endpoint using natural language |
naive_aeo_execute | Execute any AEO endpoint (Live mode — instant results) |
naive_aeo_execute_async | Execute any AEO endpoint (Standard mode — async task) |
Supports LLM Responses (ChatGPT, Claude, Gemini, Perplexity), LLM Scraper, AI Keywords, and LLM Mentions.
E-commerce
| Tool | Description |
|---|
naive_ecommerce_discover | Find the right E-commerce endpoint using natural language |
naive_ecommerce_execute | Execute any E-commerce endpoint (Live mode) |
naive_ecommerce_execute_async | Execute any E-commerce endpoint (Standard mode — async task) |
Supports Google Shopping and Amazon — product searches, info, sellers, and reviews.
Cards
| Tool | Description |
|---|
naive_cards_cardholder | Get the company’s virtual card cardholder |
naive_cards_create_cardholder | Create a virtual card cardholder (required for managed cards) |
naive_cards_update_cardholder | Update cardholder details |
naive_cards_list | List all virtual cards |
naive_cards_create | Create a virtual card — returns checkout URL for funding |
naive_cards_details | Get card credentials (PAN/CVC or redeem code) |
naive_cards_check_payment | Check if funding checkout completed and issue card |
naive_cards_retry_issue | Retry issuance for a card that failed after payment |
naive_cards_topup | Top up a card’s spending limit — returns checkout URL |
naive_cards_refund | Refund a failed card’s payment |
naive_cards_cancel | Cancel/deactivate a card |
naive_cards_assignments | List agents assigned to a card |
naive_cards_assign | Assign an agent to a card |
naive_cards_unassign | Remove an agent’s card assignment |
naive_cards_log_transaction | Log a manual spend transaction |
naive_cards_transactions | List card transactions |
naive_cards_create
{
"name": "Marketing Card (required)",
"spending_limit_cents": 10000,
"provider": "prepaid_gift | managed_virtual (optional, default prepaid_gift)",
"agent_id": "optional UUID"
}
naive_cards_create_cardholder
{
"first_name": "required",
"last_name": "required",
"billing_line1": "required",
"billing_city": "required",
"billing_state": "required (2-letter code)",
"billing_postal_code": "required",
"dob_day": 15,
"dob_month": 6,
"dob_year": 1990,
"email": "optional",
"phone": "optional"
}
naive_cards_topup
{
"card_id": "UUID of the card (required)",
"amount_cents": 5000
}
Trading
Link a brokerage account via OAuth and trade stocks, options & crypto. The order symbol
decides the market (AAPL, BTC/USD, AAPL241213C00250000).
| Tool | Description |
|---|
naive_trading_connect | Begin the brokerage OAuth flow — returns an authorize URL to open |
naive_trading_connections | List connected environments (paper/live) and status |
naive_trading_account | Get the connected brokerage account (buying power, equity) |
naive_trading_assets | List tradable assets (filter by asset_class) |
naive_trading_positions | List open positions |
naive_trading_position | Get one open position by symbol |
naive_trading_orders | List orders (open/closed/all) |
naive_trading_get_order | Get one order by id |
naive_trading_quote | Latest quote(s) for symbols |
naive_trading_create_order | Place an order — sensitive (may require approval) |
naive_trading_cancel_order | Cancel an open order — sensitive |
naive_trading_close_position | Close (liquidate) a position — sensitive |
naive_trading_create_order
{
"symbol": "BTC/USD (required)",
"side": "buy | sell (required)",
"notional": "25 (use notional OR qty)",
"qty": "0.5 (use qty OR notional)",
"type": "market | limit | stop | stop_limit | trailing_stop (default market)",
"time_in_force": "day | gtc | opg | cls | ioc | fok (crypto: gtc|ioc)",
"limit_price": "for limit/stop_limit",
"env": "paper | live (optional)"
}