Clone a public app’s repo snapshot into a new app you own. Pass source_app_id and optionally name and region. Returns { job_id, status: "pending" }.
get_clone_job
Poll the status of a clone job by job_id. Returns status (pending, completed, or failed), dest_app_id when completed, and error_message when failed.
set_clone_webhook
Configure a webhook that fires when someone clones this app. Pass webhook_url and webhook_secret, or clear_webhook: true to remove.
get_env
Read the app-level environment variable key names (values are never returned). Returns { keys: string[], updated_at }. See Environment variables.
update_env
Merge app-level env vars in one call. Pass env: { KEY: "value" } to set/upsert, or env: { KEY: null } to delete. Values live for every function in the app via ctx.env.<KEY>. Response reports updated_keys plus the list of functions whose cache was invalidated. Keys matching /^BUTTERBASE_/i are rejected as reserved.
Push, pull, inspect, or wipe your app’s repo (content-addressed code snapshots). MCP pushes are capped at ~1 MB; for larger snapshots shell out to butterbase repo push.
Update function-level environment variables (overrides app-level values on collision). For env vars shared across every function in the app, use manage_app.update_env instead. See Environment variables.
Poll a video job’s status. Pass job_id. Returns the current job state including content_urls (absolute) and charged_credits_usd when status === 'completed'.
configure_meetings_webhook
Configure where Butterbase forwards meeting-bot events for this app. Pass forward_url and optionally rotate_secret: true to mint a fresh signing-secret identifier (returned once). The stored hash is used in the x-bb-key-id header so your handler can detect post-rotation staleness.
usage_meetings
List recent meeting-bot usage rows for this app — actor_id, dimension (recording or transcription), seconds, usd_charged, created_at. Last 100 rows ordered by time desc.
For the full HTTP request/response shapes and end-to-end video example, see the AI API reference.
Search for people and companies using structured filters or natural-language queries, enrich profiles by LinkedIn URL (with 30-day cache), and queue async work-email lookups. All metered against the user’s Butterbase credits at platform pricing. See People API for HTTP shapes, response payloads, and pricing details.
Each action is routed to one of two configurable backends (primary or secondary); routing is operator-controlled at deploy time and not visible to MCP callers.
All actions take { app_id, action, ... } where action selects the operation.
Action
Description
search_person
Search for people using structured filters, a free-form query, or both. When query is set it takes priority; otherwise structured filters are used. Structured filters: current_role_title, past_role_title, current_company_name, current_company_industry, country, region, city, education_school_name, education_degree_name, education_field_of_study, plus page_size, next_token. Boolean operators in structured fields are honored as ranking hints. Empty searches are free.
search_company
Search for companies using structured filters, a free-form query, or both. Filters: industry, country, employee_count_max, plus page_size, next_token.
get_profile
Fetch a full profile by LinkedIn URL with cache. Pass linkedin_profile_url. Optional live_fetch: "force" skips cache. 2 credits on a cache miss, 0 on a hit (cache TTL: 30d for hits, 7d for not-found, 1h for failed).
queue_email_lookup
Queue an async work-email lookup. Pass linkedin_profile_url. Returns lookup_id and status: "pending". Poll with get_email_lookup. Charged ~3 credits at queue time and 1 more when the webhook resolves.
get_email_lookup
Poll an email lookup by id. Returns { status, email, credits_consumed }.
Costs vary by which provider the operator routes the action to. Numbers below are typical defaults; actual cost is always reported in the x-people-* response headers and the usage body. See People API for the full table.
Caching saves real money. Repeated get_profile calls against the same normalized LinkedIn URL within 30 days cost $0. Treat the cache as durable and feel free to re-fetch on render.
Searches return 0 credits when there are 0 results — use a page_size: 1 probe to preview cost (look at data.totalResultCount) before paginating.
Async email is genuinely async. The queue call returns immediately; the email lands minutes later via webhook. Plan your UI for a pending state.
All substrate operations are routed through the single manage_substrate MCP tool. Pass { action, ... } where action selects the operation. The agent’s calling user is implicit — there is no app_id and no substrate_user_id; every call operates on the substrate that belongs to the caller.
Tool
Description
manage_substrate
Read/write the caller’s substrate: propose/approve/reject actions, browse the ledger, look up entities and source artifacts, search memory, manage outbox and attention rules, read snapshots, toggle yolo. See manage_substrate actions below.
Writes — every substrate write (decisions, commitments, learnings, entities, source artifacts, side-effects) goes through propose with the appropriate capability.
Reject a pending action. Pass action_id, optional reason.
Action ledger.
Action
Description
list_actions
List ledger rows. Optional status (proposed | executed | rejected), capability, source_app_id, source_rule_id, limit (1–500, default 100), before (ISO timestamp).
get_action
Fetch one action by action_id.
Entities.
Action
Description
find_entities
List/search entities. Optional type (person | company | fund | workspace | team | project | event | agent | self), q (display-name search), limit (1–200, default 50).
get_entity
Fetch one entity by entity_id.
Source artifacts — durable source material (meeting transcripts, email threads, call recordings, documents) that decisions, commitments, and learnings can link back to.
Action
Description
list_source_artifacts
List/search artifacts. Optional kind, q (FTS over title+summary+content), limit, count (true to include total).
get_source_artifact
Fetch one artifact by artifact_id, including its full content.
Memory.
Action
Description
search_memory
Full-text search across long-form memory. Pass q; optional kinds (any subset of decisions, commitments, learnings, source_artifacts — defaults to all of them), limit.
Outbox.
Action
Description
list_outbox
List outbox deliveries. Optional status, limit.
retry_outbox
Retry a failed delivery by outbox_id.
cancel_outbox
Cancel a pending delivery by outbox_id.
Attention rules.
Action
Description
list_rules
List rules. Optional enabled filter.
get_rule
Fetch one rule by rule_id.
create_rule
Create a rule. Pass rule (see Substrate API for the body shape).
update_rule
Update a rule. Pass rule_id and rule.
delete_rule
Delete a rule by rule_id.
enable_rule
Enable a rule by rule_id.
disable_rule
Disable a rule by rule_id.
list_rule_firings
List firings for a rule. Pass rule_id; optional status, limit, before.
Snapshots & settings.
Action
Description
snapshots
List daily substrate snapshots. Optional days (default 7).
These tools are listed whenever any hackathon’s submission window is open. Multiple hackathons can be open simultaneously; tools that target one require an explicit hackathon_slug. See Hackathon.
Tool
Description
prep_and_submit_hackathon_entry
Two-step flow. action: "prep" resolves the hackathon from your submission_code and returns its field_schema plus a next_call template — a fully-formed example submit invocation with a placeholder per field. action: "submit" sends the confirmed data (use matched.slug from prep as hackathon_slug). First submission also needs submission_code. Pass app_id (from manage_applist) so automated scoring can award feature points and judges can verify your app.