The OpenRouter for tools. One MCP connection gives any AI agent 254 hosted tools, pay per call.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
List all billing contexts (personal + teams) or get detail on one. No slug → summary list. With slug → full detail including team members, role, subscription status, and pointers to the team's connectors, credentials, keys, and files.
Account slug for detail view. Omit to list all.
List all billing contexts (personal + teams) or get detail on one. No slug → summary list. With slug → full detail including team members, role, subscription status, and pointers to the team's connectors, credentials, keys, and files.
| Argument | Type | Description |
|---|---|---|
| slug | string | Account slug for detail view. Omit to list all. |
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Account slug for detail view. Omit to list all."
}
}
}Read or write billing preferences (auto-reload, budget cap, default context). Pass action: "get" to read, action: "set" with fields to write.
| Argument | Type | Description |
|---|---|---|
| action* | string | "get" to read preferences, "set" to update them. |
| budget_limit | number | null | Monthly spending cap in USD, or null to remove (set only). |
| auto_reload_amount | number | Amount (USD) to reload when triggered (set only, max 500). |
| auto_reload_enabled | boolean | Enable or disable auto-reload (set only). |
| auto_reload_threshold | number | Balance threshold (USD) that triggers a reload (set only). |
| default_billing_context | string | Default account to bill (set only). "personal" or "team:<id>". |
{
"type": "object",
"required": [
"action"
],
"properties": {
"action": {
"enum": [
"get",
"set"
],
"type": "string",
"description": "\"get\" to read preferences, \"set\" to update them."
},
"budget_limit": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Monthly spending cap in USD, or null to remove (set only)."
},
"auto_reload_amount": {
"type": "number",
"maximum": 500,
"minimum": 1,
"description": "Amount (USD) to reload when triggered (set only, max 500)."
},
"auto_reload_enabled": {
"type": "boolean",
"description": "Enable or disable auto-reload (set only)."
},
"auto_reload_threshold": {
"type": "number",
"minimum": 0,
"description": "Balance threshold (USD) that triggers a reload (set only)."
},
"default_billing_context": {
"type": "string",
"description": "Default account to bill (set only). \"personal\" or \"team:<id>\"."
}
}
}Initialize or re-check your account, provision it when needed, and return your user ID and plan. CALL THIS FIRST when the user asks to set up ToolRouter, connect their account, check their account status, or get started.
No arguments.
{
"type": "object",
"properties": {}
}Set the active billing context. Accepts a slug (e.g. "personal", "team:nd7fx…") or team ID.
| Argument | Type | Description |
|---|---|---|
| context* | string | Account slug or team ID to switch to (e.g. "personal", "team:nd7fx…"). |
{
"type": "object",
"required": [
"context"
],
"properties": {
"context": {
"type": "string",
"description": "Account slug or team ID to switch to (e.g. \"personal\", \"team:nd7fx…\")."
}
}
}Create a new brain page. Knowledge you add here will be available to all future tool calls. Optional wing/room/hall organise the page in the MemPalace hierarchy for sharper retrieval.
| Argument | Type | Description |
|---|---|---|
| hall | string | Optional. One of "fact", "event", "discovery", "preference", "advice". Defaults to "fact". |
| room | string | Optional. Sub-area within the wing (e.g. "databases", "deploy"). Defaults to "untagged". |
| tags | array | Tags for categorisation |
| wing | string | Optional. Top-level area (e.g. "engineering", "family", "general"). Auto-classified if omitted. |
| scope | string | Visibility scope. Defaults to personal. |
| title* | string | Page title |
| content* | string | Page content (markdown) |
| load_tier | string | Optional. L0 = operator identity (rare), L1 = always-loaded critical fact, L2 = default on-demand, L3 = cold archive. Omit to default to L2. |
{
"type": "object",
"required": [
"title",
"content"
],
"properties": {
"hall": {
"type": "string",
"description": "Optional. One of \"fact\", \"event\", \"discovery\", \"preference\", \"advice\". Defaults to \"fact\"."
},
"room": {
"type": "string",
"description": "Optional. Sub-area within the wing (e.g. \"databases\", \"deploy\"). Defaults to \"untagged\"."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tags for categorisation"
},
"wing": {
"type": "string",
"description": "Optional. Top-level area (e.g. \"engineering\", \"family\", \"general\"). Auto-classified if omitted."
},
"scope": {
"enum": [
"personal",
"team"
],
"type": "string",
"description": "Visibility scope. Defaults to personal."
},
"title": {
"type": "string",
"description": "Page title"
},
"content": {
"type": "string",
"description": "Page content (markdown)"
},
"load_tier": {
"enum": [
"L0",
"L1",
"L2",
"L3"
],
"type": "string",
"description": "Optional. L0 = operator identity (rare), L1 = always-loaded critical fact, L2 = default on-demand, L3 = cold archive. Omit to default to L2."
}
}
}Brain admin operations. Pass action: "lint" | "link" | "promote" | "rebuild_index" | "team_sleep". team_sleep enables/disables/runs the nightly team consolidation cycle — pass sub_action "enable" (with optional timezone), "disable", "status", or "run_now". Team admin role required for team_sleep actions.
| Argument | Type | Description |
|---|---|---|
| label | string | Human-readable relationship label (for link). |
| action* | string | Admin operation to perform. |
| page_id | string | Source brain page ID (for link/promote). |
| team_id | string | Team to promote to (for promote). Auto-resolved if on one team. |
| timezone | string | IANA timezone for team_sleep enable (e.g. "Europe/London"). Defaults to UTC. Sleep fires at 3 AM local time. |
| sub_action | string | Required for action="team_sleep". "enable" turns on nightly sleep for the team; "disable" turns it off; "status" shows last run and schedule; "run_now" triggers an immediate sleep cycle. |
| to_page_id | string | Target page ID (for link). |
| relationship | string | Relationship type (for link, e.g. relates_to, derived_from). |
Archive a brain page. It will no longer appear in searches or tool consultations.
| Argument | Type | Description |
|---|---|---|
| page_id* | string | Brain page ID (bp_...) to archive |
{
"type": "object",
"required": [
"page_id"
],
"properties": {
"page_id": {
"type": "string",
"description": "Brain page ID (bp_...) to archive"
}
}
}Retrieve the verbatim source text (a "drawer") linked from a brain page. Use this when a summary lacks specifics you need — drawers contain the original tool output, redacted for credentials. Returns 404 if the page has no linked drawer (not all pages do — drawers are a Step 4 feature for allowlisted tools only).
| Argument | Type | Description |
|---|---|---|
| page_id* | string | Brain page ID (bp_...) whose drawer to expand. |
{
"type": "object",
"required": [
"page_id"
],
"properties": {
"page_id": {
"type": "string",
"description": "Brain page ID (bp_...) whose drawer to expand."
}
}
}Run maintenance checks on your brain: find stale pages, orphaned knowledge, and other issues.
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}Search your knowledge brain for relevant information. Returns pages ranked by relevance. Optional wing/hall narrow the search to a slice of the brain (e.g. wing="engineering", hall="preference").
| Argument | Type | Description |
|---|---|---|
| hall | string | Optional. Restrict to a hall: "fact", "event", "discovery", "preference", or "advice". |
| wing | string | Optional. Restrict to a specific wing (top-level area like "engineering", "family"). |
| as_of | string | Optional. ISO-date string (e.g. "2026-01-15"). When set, returns pages that were valid at that point in time — including superseded versions. Useful for "what did we know in January?" queries. |
| limit | number | Max results. Defaults to 10. |
| query | string | Search query. Omit to list all pages by recency. |
| scope | string | Which brain scope to search. Defaults to all. |
| include_drawer_previews | boolean | Optional. When true, each result includes the first ~400 chars of its linked drawer (raw source text) if one exists. Useful to decide whether to call brain_expand for the full text. |
View and toggle your brain settings. Currently supports: drawers_enabled (store raw tool output alongside summaries for richer recall).
| Argument | Type | Description |
|---|---|---|
| value | boolean | New value (required for "set"). |
| action* | string | "get" lists current settings; "set" toggles a named setting. |
| setting | string | Setting name (required for "set"). Currently: "drawers_enabled". |
{
"type": "object",
"required": [
"action"
],
"properties": {
"value": {
"type": "boolean",
"description": "New value (required for \"set\")."
},
"action": {
"enum": [
"get",
"set"
],
"type": "string",
"description": "\"get\" lists current settings; \"set\" toggles a named setting."
},
"setting": {
"type": "string",
"description": "Setting name (required for \"set\"). Currently: \"drawers_enabled\"."
}
}
}View brain page counts and recent pages for your personal and team brain.
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}Edit an existing brain page's content or metadata. wing/room/hall can be patched to re-file a page. scope can be changed to move a page between your personal and team brain — useful when an auto-ingested page landed in the wrong place. Moving a page to team scope requires team admin role.
| Argument | Type | Description |
|---|---|---|
| hall | string | Optional. Change hall: fact / event / discovery / preference / advice. |
| room | string | Optional. Re-file under a different room. |
| tags | array | New tags |
| wing | string | Optional. Re-file under a different wing. |
| scope | string | Optional. Move the page between your personal and team brain. Moving TO team requires team admin role and a team billing context. Moving FROM team to personal is allowed if you own the page or are an admin. |
| title | string | New title |
| content | string | New content (replaces existing) |
| page_id* | string | Brain page ID (bp_...) |
| load_tier | string | Optional. Change load tier. L1 promotes a page to always-loaded; L3 sends it to cold archive. |
List the wings of your brain — the top-level areas your knowledge is organised under (e.g. "engineering", "family"). For each wing returns the rooms and halls inside, page count, and last-updated time. Use this to discover the right wing/hall to pass to brain_query.
| Argument | Type | Description |
|---|---|---|
| include_team | boolean | If true, also count team-scope pages. Default false (personal only). |
{
"type": "object",
"required": [],
"properties": {
"include_team": {
"type": "boolean",
"description": "If true, also count team-scope pages. Default false (personal only)."
}
}
}Connect a new OAuth account or MCP server. For OAuth: pass type: "oauth", kind: "slack". For MCP catalog: pass catalog_slug. For custom MCP: pass url + auth_type.
| Argument | Type | Description |
|---|---|---|
| url | string | MCP server endpoint URL (custom MCP). |
| kind | string | OAuth connector kind (e.g. "slack", "notion"). Required for type: "oauth". |
| slug | string | Short identifier for the connection. |
| type | string | Type of connector to add. |
| billing | string | Scope: "personal" (default), "team" (auto-resolves), a team slug, or "team:<id>". |
| auth_type | string | Auth type (custom MCP). Default: none. |
| auth_token | string | Auth token or API key. |
| header_name | string | Custom header name (for header_key auth). |
| catalog_slug | string | MCP catalog slug for one-click connect. |
| display_name | string |
List connected accounts and MCP servers (summary) or detail on one connector. Pass slug for detail including every tool the connector exposes. Optional type: "oauth" | "mcp" filter. Pass include_available: true to also see available catalog MCPs you can connect.
| Argument | Type | Description |
|---|---|---|
| slug | string | Connector slug for detail view. Omit to list all. |
| type | string | Filter by connector type. |
| context | string | Scope: "personal" (default) or "team:<id>" for a team. |
| include_available | boolean | When true, also include catalog MCPs you have not connected yet. |
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Connector slug for detail view. Omit to list all."
},
"type": {
"enum": [
"oauth",
"mcp"
],
"type": "string",
"description": "Filter by connector type."
},
"context": {
"type": "string",
"description": "Scope: \"personal\" (default) or \"team:<id>\" for a team."
},
"include_available": {
"type": "boolean",
"description": "When true, also include catalog MCPs you have not connected yet."
}
}
}View or set permissions for tools on a connected MCP server — which tools are allowed, rate limits, budget caps, argument restrictions. Pass the connector slug (from connector_list) and action: "list" to see current rules, or action: "set" with tool_name + rules to update one. Team scope requires admin role.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Connector slug. |
| action | string | Omit to list permissions for all tools. Pass "set" with tool_name + rules to update one. |
| allowed | boolean | Whether the tool is allowed (for set). |
| billing | string | Scope: "personal", "team" (auto-resolves if on one team), a team slug, or "team:<id>". |
| tool_name | string | Tool name (for set). Use "*" for all tools on this connector. |
| cost_per_call | number | Cost in millicents per call (for set). |
| budget_per_day | number | Max daily spend per user, in millicents (for set). |
| nl_filter_mode | string | How to enforce NL rules: strict (block on violation) or advisory (log only). Default: strict. |
Disconnect a connector. Pass slug.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Connector slug to disconnect. |
| type | string | Type of connector (mcp or oauth). Default: mcp. |
| billing | string | Scope: "personal" (default), "team" (auto-resolves), a team slug, or "team:<id>". |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Connector slug to disconnect."
},
"type": {
"enum": [
"oauth",
"mcp"
],
"type": "string",
"description": "Type of connector (mcp or oauth). Default: mcp."
},
"billing": {
"type": "string",
"description": "Scope: \"personal\" (default), \"team\" (auto-resolves), a team slug, or \"team:<id>\"."
}
}
}Set the default value for a multi-value credential.
| Argument | Type | Description |
|---|---|---|
| name* | string | Credential name (e.g. "ios_app_id"). |
| label* | string | Label of the entry to make default (e.g. "Production"). |
| context | string | "personal" or "team:<id>". Defaults to personal. |
{
"type": "object",
"required": [
"name",
"label"
],
"properties": {
"name": {
"type": "string",
"description": "Credential name (e.g. \"ios_app_id\")."
},
"label": {
"type": "string",
"description": "Label of the entry to make default (e.g. \"Production\")."
},
"context": {
"type": "string",
"description": "\"personal\" or \"team:<id>\". Defaults to personal."
}
}
}Remove a saved credential. If label is provided, removes only that specific entry. If no label, removes ALL entries for that credential name.
| Argument | Type | Description |
|---|---|---|
| name* | string | Credential name to delete (e.g. "ios_app_id"). |
| label | string | Label of the specific entry to delete. Omit to remove all entries for this credential name. |
| context | string | "personal" or "team:<id>". Defaults to personal. |
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Credential name to delete (e.g. \"ios_app_id\")."
},
"label": {
"type": "string",
"description": "Label of the specific entry to delete. Omit to remove all entries for this credential name."
},
"context": {
"type": "string",
"description": "\"personal\" or \"team:<id>\". Defaults to personal."
}
}
}Get setup instructions for a specific credential.
| Argument | Type | Description |
|---|---|---|
| name* | string | Credential name (e.g. "ios_app_id", "play_store_app_id", "domain"). |
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Credential name (e.g. \"ios_app_id\", \"play_store_app_id\", \"domain\")."
}
}
}List saved credentials (summary) or detail on one. Pass name for detail view. Pass show_available: true to include the full credential catalog.
| Argument | Type | Description |
|---|---|---|
| name | string | Credential name for detail view. Omit to list all saved. |
| context | string | "personal" or "team:<id>". Defaults to personal. |
| show_available | boolean | Include the full catalogue of available BYOK options. Default false. |
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Credential name for detail view. Omit to list all saved."
},
"context": {
"type": "string",
"description": "\"personal\" or \"team:<id>\". Defaults to personal."
},
"show_available": {
"type": "boolean",
"description": "Include the full catalogue of available BYOK options. Default false."
}
}
}Save a credential (BYOK provider API key). Saved keys persist across sessions and are used automatically.
| Argument | Type | Description |
|---|---|---|
| name* | string | Credential name from the tool requirements (e.g. "ios_app_id", "openai"). |
| label | string | Human-readable label to identify this value (e.g. "MyApp", "Staging"). Required when saving multiple values for the same credential. |
| value* | string | The credential value to save. |
| context | string | "personal" or "team:<id>". Defaults to personal. |
| is_default | boolean | Set this value as the default for this credential. |
{
"type": "object",
"required": [
"name",
"value"
],
"properties": {
"name": {
"type": "string",
"description": "Credential name from the tool requirements (e.g. \"ios_app_id\", \"openai\")."
},
"label": {
"type": "string",
"description": "Human-readable label to identify this value (e.g. \"MyApp\", \"Staging\"). Required when saving multiple values for the same credential."
},
"value": {
"type": "string",
"description": "The credential value to save."
},
"context": {
"type": "string",
"description": "\"personal\" or \"team:<id>\". Defaults to personal."
},
"is_default": {
"type": "boolean",
"description": "Set this value as the default for this credential."
}
}
}Current balance, plan tier, rate limits, and any negative-balance warnings for the active context.
No arguments.
{
"type": "object",
"properties": {}
}Usage summary or history. Pass scope: "me" | "team" and detail: "tool" | "skill". Sorted by cost with _others rollup.
| Argument | Type | Description |
|---|---|---|
| limit | number | Number of top tools/skills to return. Remaining rolled into "_others". Default 10. |
| scope | string | Whose usage to show. "me" for personal, "team" for team-wide. |
| detail | string | Detail level. "tool" groups by tool, "skill" adds per-skill breakdown. |
| offset | number | Records to skip for pagination (history mode). Default 0. |
| period | string | Time period to summarize. 'all' covers the last 30 days (the maximum window). |
{
"type": "object",
"properties": {
"limit": {
"type": "number",
"maximum": 500,
"minimum": 0,
"description": "Number of top tools/skills to return. Remaining rolled into \"_others\". Default 10."
},
"scope": {
"enum": [
"me",
"team"
],
"type": "string",
"description": "Whose usage to show. \"me\" for personal, \"team\" for team-wide."
},
"detail": {
"enum": [
"tool",
"skill"
],
"type": "string",
"default": "tool",
"description": "Detail level. \"tool\" groups by tool, \"skill\" adds per-skill breakdown."
},
"offset": {
"type": "number",
"minimum": 0,
"description": "Records to skip for pagination (history mode). Default 0."
},
"period": {
"enum": [
"day",
"week",
"month",
"all"
],
"type": "string",
"default": "all",
"description": "Time period to summarize. 'all' covers the last 30 days (the maximum window)."
}
}
}Find the right ToolRouter tool for your task. Describe what you need in plain language. Examples: "analyze a website", "research competitors", "find prospect companies", "check DNS records". Exact tool name (e.g. "seo") returns full schemas and examples. Flow: prefer route({ intent }) to pick and run a tool. Use discover when you need schemas or a listing, then call use_tool(tool, skill, input). Every discover response also includes a top-level `connectors` array listing SaaS accounts the user has already connected (LinkedIn, Google, Notion, etc.). Use that to pick the right tool and account without asking — e.g. if `connectors` shows LinkedIn, the linkedin-post tool is ready to use. Categories: data, media, search, marketing, development, communication, analytics, productivity, ai, finance, security, infrastructure
| Argument | Type | Description |
|---|---|---|
| query* | string | What you want to do (e.g. "scrape a webpage"), a category (e.g. "security"), or "*" to list everything. |
| category | string | Filter by category |
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"description": "What you want to do (e.g. \"scrape a webpage\"), a category (e.g. \"security\"), or \"*\" to list everything."
},
"category": {
"enum": [
"data",
"media",
"search",
"marketing",
"development",
"communication",
"analytics",
"productivity",
"ai",
"finance",
"security",
"infrastructure"
],
"type": "string",
"description": "Filter by category"
}
}
}Report a ToolRouter platform bug that blocks you from completing the user's task. Use this when you suspect the issue is on our side — a tool crashed, returned malformed data, timed out unexpectedly, or behaved inconsistently. Include the relevant ToolRouter errors, call IDs, non-sensitive input shape, retries, and expected behavior. Do not include chat history, unrelated conversation text, uploaded file contents, personal data, API keys, or secrets. Reports are stored and reviewed within hours. Skip this for expected errors like invalid input, missing credentials, insufficient balance, rate limits, or genuine "not found" results — those aren't bugs. Limit: 5 reports per hour.
| Argument | Type | Description |
|---|---|---|
| tool | string | Tool name that failed (e.g. "web-search"). |
| skill | string | Skill name that failed (e.g. "search"). |
| job_id | string | Job ID for async jobs that failed, if applicable. |
| call_ids | string | ALL call IDs from this interaction (successful and failed), one per line or comma-separated. |
| severity* | string | "blocking" = cannot complete task. "degraded" = partial results or workaround exists. |
| agent_context | string | MCP client name and version, if known. |
| input_summary | string | Summary of what you sent to the failing tool (do NOT include API keys or secrets — describe the shape and intent). |
Ask ToolRouter to build a tool that does not exist yet. Use this when discover returned nothing useful for what the user needs. Describe the capability in plain terms — do not include personal data, API keys, or secrets. Requests go straight to the team. Limit: 5 per hour.
| Argument | Type | Description |
|---|---|---|
| why | string | What the user was trying to accomplish and why existing tools did not fit. |
| what* | string | What the tool should do, in one or two sentences (e.g. "Look up UK company filings by company number"). |
| searched | string | The discover query you tried that came back empty. |
| agent_context | string | MCP client name and version, if known. |
{
"type": "object",
"required": [
"what"
],
"properties": {
"why": {
"type": "string",
"description": "What the user was trying to accomplish and why existing tools did not fit."
},
"what": {
"type": "string",
"description": "What the tool should do, in one or two sentences (e.g. \"Look up UK company filings by company number\")."
},
"searched": {
"type": "string",
"description": "The discover query you tried that came back empty."
},
"agent_context": {
"type": "string",
"description": "MCP client name and version, if known."
}
}
}Submit a review or star rating.
| Argument | Type | Description |
|---|---|---|
| tool* | string | Tool name to review (e.g. "web-search" or "seo"). |
| rating* | number | Star rating 1-5 (1=poor, 3=okay, 5=excellent). |
| review | string | Constructive feedback — what worked well and any specific suggestions to improve. |
{
"type": "object",
"required": [
"tool",
"rating"
],
"properties": {
"tool": {
"type": "string",
"description": "Tool name to review (e.g. \"web-search\" or \"seo\")."
},
"rating": {
"type": "number",
"maximum": 5,
"minimum": 1,
"description": "Star rating 1-5 (1=poor, 3=okay, 5=excellent)."
},
"review": {
"type": "string",
"description": "Constructive feedback — what worked well and any specific suggestions to improve."
}
}
}Delete a file. Cannot be undone. For team files: requires owner/admin role.
| Argument | Type | Description |
|---|---|---|
| file_id* | string | The file ID to delete. |
{
"type": "object",
"required": [
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"description": "The file ID to delete."
}
}
}List or search files. Optional query triggers semantic search. Supports section, tags, plan_status, limit, cursor filters.
| Argument | Type | Description |
|---|---|---|
| tags | array | Filter to files matching ALL of these tags. |
| limit | number | Max results (default 20, max 50). |
| query | string | Natural language search query. Omit to browse. |
| cursor | string | Pagination cursor from a previous file_list response. |
| context | string | "personal" (default) or "team:<id>". |
| section | string | Filter by section. Omit to list all. |
| plan_status | string | Filter plans by status. |
| prompt_type | string | Filter prompts by type (only valid when section is "prompts"). |
{
"type": "object",
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter to files matching ALL of these tags."
},
"limit": {
"type": "number",
"default": 20,
"description": "Max results (default 20, max 50)."
},
"query": {
"type": "string",
"description": "Natural language search query. Omit to browse."
},
"cursor": {
"type": "string",
"description": "Pagination cursor from a previous file_list response."
},
"context": {
"type": "string",
"description": "\"personal\" (default) or \"team:<id>\"."
},
"section": {
"enum": [
"personas",
"plans",
"style_references",
"assets",
"products",
"outfits",
"scenes",
"prompts",
"storyboards"
],
"type": "string",
"description": "Filter by section. Omit to list all."
},
"plan_status": {
"enum": [
"draft",
"active",
"completed",
"archived"
],
"type": "string",
"description": "Filter plans by status."
},
"prompt_type": {
"enum": [
"system",
"user",
"example",
"template",
"script"
],
"type": "string",
"description": "Filter prompts by type (only valid when section is \"prompts\")."
}
}
}Read a file's full content. Text files return content inline. Binary files (images, video) return a download URL.
| Argument | Type | Description |
|---|---|---|
| file_id* | string | The file ID (e.g. "ast_a1b2c3d4e5f67890"). |
{
"type": "object",
"required": [
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"description": "The file ID (e.g. \"ast_a1b2c3d4e5f67890\")."
}
}
}Create or update a file. Pass mode: "create" | "update". Binary uploads: call with binary: true to get an upload_url, then PUT bytes, then call with mode: "finalize".
| Argument | Type | Description |
|---|---|---|
| mode* | string | "create" for new files, "update" to edit existing, "finalize" to complete a binary upload. |
| name | string | File name (required for create, max 200 chars). |
| tags | array | Tags for organization (max 10). |
| content | string | Text content (for .md files). |
| context | string | "personal" (default) or "team:<id>". |
| file_id | string | File ID to update (required for update/finalize). |
| section | string | Which section to file under (required for create). |
| asset_id | string | Existing asset ID to retrieve URL without re-uploading. |
| filename | string | Optional filename for the asset. |
| file_data |
List invoices for the active billing context.
| Argument | Type | Description |
|---|---|---|
| limit | number | Number of invoices to return (default 10, max 20). |
{
"type": "object",
"properties": {
"limit": {
"type": "number",
"maximum": 20,
"minimum": 1,
"description": "Number of invoices to return (default 10, max 20)."
}
}
}Cancel a running job.
| Argument | Type | Description |
|---|---|---|
| job_id* | string | The job ID to cancel. |
{
"type": "object",
"required": [
"job_id"
],
"properties": {
"job_id": {
"type": "string",
"description": "The job ID to cancel."
}
}
}Get job status and result. Returns status: running | completed | failed and result when terminal. Keep polling until you get a terminal status.
| Argument | Type | Description |
|---|---|---|
| job_id* | string | The job ID returned when a long-running tool was called. |
{
"type": "object",
"required": [
"job_id"
],
"properties": {
"job_id": {
"type": "string",
"description": "The job ID returned when a long-running tool was called."
}
}
}List your active and recent jobs. Optional status filter.
| Argument | Type | Description |
|---|---|---|
| limit | number | Max jobs to return (default 20, max 100). |
| status | string | Filter by job status. |
{
"type": "object",
"properties": {
"limit": {
"type": "number",
"maximum": 100,
"minimum": 1,
"description": "Max jobs to return (default 20, max 100)."
},
"status": {
"enum": [
"pending",
"running",
"completed",
"failed",
"cancelled"
],
"type": "string",
"description": "Filter by job status."
}
}
}Create a new API key. Returns the secret once — save it immediately.
| Argument | Type | Description |
|---|---|---|
| name* | string | A name to identify this key (e.g. "Claude Desktop", "Production Bot"). |
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "A name to identify this key (e.g. \"Claude Desktop\", \"Production Bot\")."
}
}
}Revoke an API key. Refuses to revoke the currently-authenticating key.
| Argument | Type | Description |
|---|---|---|
| key_id* | string | The key ID to revoke (from key_list). |
{
"type": "object",
"required": [
"key_id"
],
"properties": {
"key_id": {
"type": "string",
"description": "The key ID to revoke (from key_list)."
}
}
}List API keys (summary) or get detail on one key. Pass key_id for detail view.
| Argument | Type | Description |
|---|---|---|
| key_id | string | Key ID for detail view. Omit to list all. |
{
"type": "object",
"properties": {
"key_id": {
"type": "string",
"description": "Key ID for detail view. Omit to list all."
}
}
}List your outfits.
| Argument | Type | Description |
|---|---|---|
| context | string | "personal" (default) or "team:<id>". |
{
"type": "object",
"properties": {
"context": {
"type": "string",
"description": "\"personal\" (default) or \"team:<id>\"."
}
}
}List your personas.
| Argument | Type | Description |
|---|---|---|
| context | string | "personal" (default) or "team:<id>". |
{
"type": "object",
"properties": {
"context": {
"type": "string",
"description": "\"personal\" (default) or \"team:<id>\"."
}
}
}List your products.
| Argument | Type | Description |
|---|---|---|
| context | string | "personal" (default) or "team:<id>". |
{
"type": "object",
"properties": {
"context": {
"type": "string",
"description": "\"personal\" (default) or \"team:<id>\"."
}
}
}Send a natural-language intent and optionally any dimensions you already know (tool, skill, model, input fields). Fills only the blanks via Jev, then either executes the call or returns a ready-to-run use_tool payload. Explicit values are never overridden. Returns candidates when confidence is low or no tool fits. Flow: route → if confident and complete, result is returned; otherwise use the pre-filled call with use_tool.
| Argument | Type | Description |
|---|---|---|
| tool | string | Optional. Tool name — honoured verbatim when set. |
| input | object | Optional. Partial skill input — explicit fields are never overridden. |
| model | string | Optional. Model override — honoured verbatim when set. |
| skill | string | Optional. Skill name — honoured verbatim when set. |
| intent* | string | What you want to do, in plain language. |
| max_cost | number | Optional. Max USD to spend; above this returns a pre-filled call instead of executing. |
{
"type": "object",
"required": [
"intent"
],
"properties": {
"tool": {
"type": "string",
"description": "Optional. Tool name — honoured verbatim when set."
},
"input": {
"type": "object",
"description": "Optional. Partial skill input — explicit fields are never overridden."
},
"model": {
"type": "string",
"description": "Optional. Model override — honoured verbatim when set."
},
"skill": {
"type": "string",
"description": "Optional. Skill name — honoured verbatim when set."
},
"intent": {
"type": "string",
"description": "What you want to do, in plain language."
},
"max_cost": {
"type": "number",
"description": "Optional. Max USD to spend; above this returns a pre-filled call instead of executing."
}
}
}List your scenes.
| Argument | Type | Description |
|---|---|---|
| context | string | "personal" (default) or "team:<id>". |
{
"type": "object",
"properties": {
"context": {
"type": "string",
"description": "\"personal\" (default) or \"team:<id>\"."
}
}
}Get a Stripe management URL (portal, upgrade, or cancel). Also covers billing portal — returns the URL for the user to open.
| Argument | Type | Description |
|---|---|---|
| tier | string | Which plan to subscribe to (required for "subscribe" action). |
| action* | string | "subscribe" to start a subscription, "manage" to view/cancel existing subscription. |
{
"type": "object",
"required": [
"action"
],
"properties": {
"tier": {
"enum": [
"lite",
"plus"
],
"type": "string",
"description": "Which plan to subscribe to (required for \"subscribe\" action)."
},
"action": {
"enum": [
"subscribe",
"manage"
],
"type": "string",
"description": "\"subscribe\" to start a subscription, \"manage\" to view/cancel existing subscription."
}
}
}Add credits to your account. Returns a Stripe checkout URL — share it with the user to complete payment. Minimum $1.
| Argument | Type | Description |
|---|---|---|
| amount_usd* | number | Amount in USD to add (e.g. 10, 25, 50). Minimum $1. |
{
"type": "object",
"required": [
"amount_usd"
],
"properties": {
"amount_usd": {
"type": "number",
"maximum": 500,
"minimum": 1,
"description": "Amount in USD to add (e.g. 10, 25, 50). Minimum $1."
}
}
}Call a ToolRouter catalogue tool. Prefer `route` with a natural-language intent when you do not already know the tool and skill — it picks them, fills arguments, and runs the call. Use discover when you need schemas or a catalogue listing, then pass the exact tool name and skill here. IMPORTANT: "discover", "route", "credits_balance", and other built-in tools are NOT catalogue tools — call them directly, never through use_tool. Long-running tools return a job_id — poll with job_get. If a skill needs an image_url or file URL and you have a local file or base64 image, use file_write first to get a hosted URL, then pass that URL to the skill. BRAIN: Some tools require you to consult brain_query first. If use_tool returns an error about brain_context, call brain_query with a relevant query, then pass the result text as brain_context in your use_tool input.
| Argument | Type | Description |
|---|---|---|
| tool* | string | Tool reference from discover results, e.g. "web-search" |
| input* | object | Skill input parameters (see discover for schema). For persona-using tools, include persona_file_id from discover or persona_list. For scene-using tools, include scene_file_id from discover or scene_list. For product-using tools, include product_file_id from discover or product_list. For outfit-using tools, include outfit_file_id from discover or outfit_list. For style-reference tools, include style_reference_id (from discover or file_list), style_reference_query (semantic search), or style_reference_prompt (inline prose). For image-composition tools (e.g. generate-image image_to_image), pass any combination of scene_file_id, persona_file_id, product_file_ids[] (from file_list section "products"), outfit_file_ids[] (section "outfits"), and raw image_urls[] — the gateway resolves and merges them into a single image_urls array (max 4 by default). |
| skill* | string |
{
"type": "object",
"required": [
"action"
],
"properties": {
"label": {
"type": "string",
"description": "Human-readable relationship label (for link)."
},
"action": {
"enum": [
"lint",
"link",
"promote",
"rebuild_index",
"team_sleep"
],
"type": "string",
"description": "Admin operation to perform."
},
"page_id": {
"type": "string",
"description": "Source brain page ID (for link/promote)."
},
"team_id": {
"type": "string",
"description": "Team to promote to (for promote). Auto-resolved if on one team."
},
"timezone": {
"type": "string",
"description": "IANA timezone for team_sleep enable (e.g. \"Europe/London\"). Defaults to UTC. Sleep fires at 3 AM local time."
},
"sub_action": {
"enum": [
"enable",
"disable",
"status",
"run_now"
],
"type": "string",
"description": "Required for action=\"team_sleep\". \"enable\" turns on nightly sleep for the team; \"disable\" turns it off; \"status\" shows last run and schedule; \"run_now\" triggers an immediate sleep cycle."
},
"to_page_id": {
"type": "string",
"description": "Target page ID (for link)."
},
"relationship": {
"type": "string",
"description": "Relationship type (for link, e.g. relates_to, derived_from)."
}
}
}{
"type": "object",
"required": [],
"properties": {
"hall": {
"type": "string",
"description": "Optional. Restrict to a hall: \"fact\", \"event\", \"discovery\", \"preference\", or \"advice\"."
},
"wing": {
"type": "string",
"description": "Optional. Restrict to a specific wing (top-level area like \"engineering\", \"family\")."
},
"as_of": {
"type": "string",
"description": "Optional. ISO-date string (e.g. \"2026-01-15\"). When set, returns pages that were valid at that point in time — including superseded versions. Useful for \"what did we know in January?\" queries."
},
"limit": {
"type": "number",
"description": "Max results. Defaults to 10."
},
"query": {
"type": "string",
"description": "Search query. Omit to list all pages by recency."
},
"scope": {
"enum": [
"personal",
"team",
"all"
],
"type": "string",
"description": "Which brain scope to search. Defaults to all."
},
"include_drawer_previews": {
"type": "boolean",
"description": "Optional. When true, each result includes the first ~400 chars of its linked drawer (raw source text) if one exists. Useful to decide whether to call brain_expand for the full text."
}
}
}| material_change | boolean | Optional. When true, creates a new version of the page — the old version is preserved with a timestamp and a "supersedes" link. Use for corrections or significant changes; skip for minor edits. Default false. |
{
"type": "object",
"required": [
"page_id"
],
"properties": {
"hall": {
"type": "string",
"description": "Optional. Change hall: fact / event / discovery / preference / advice."
},
"room": {
"type": "string",
"description": "Optional. Re-file under a different room."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "New tags"
},
"wing": {
"type": "string",
"description": "Optional. Re-file under a different wing."
},
"scope": {
"enum": [
"personal",
"team"
],
"type": "string",
"description": "Optional. Move the page between your personal and team brain. Moving TO team requires team admin role and a team billing context. Moving FROM team to personal is allowed if you own the page or are an admin."
},
"title": {
"type": "string",
"description": "New title"
},
"content": {
"type": "string",
"description": "New content (replaces existing)"
},
"page_id": {
"type": "string",
"description": "Brain page ID (bp_...)"
},
"load_tier": {
"enum": [
"L0",
"L1",
"L2",
"L3"
],
"type": "string",
"description": "Optional. Change load tier. L1 promotes a page to always-loaded; L3 sends it to cold archive."
},
"material_change": {
"type": "boolean",
"description": "Optional. When true, creates a new version of the page — the old version is preserved with a timestamp and a \"supersedes\" link. Use for corrections or significant changes; skip for minor edits. Default false."
}
}
}| Human-readable name (custom MCP). |
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "MCP server endpoint URL (custom MCP)."
},
"kind": {
"type": "string",
"description": "OAuth connector kind (e.g. \"slack\", \"notion\"). Required for type: \"oauth\"."
},
"slug": {
"type": "string",
"description": "Short identifier for the connection."
},
"type": {
"enum": [
"oauth",
"mcp"
],
"type": "string",
"description": "Type of connector to add."
},
"billing": {
"type": "string",
"description": "Scope: \"personal\" (default), \"team\" (auto-resolves), a team slug, or \"team:<id>\"."
},
"auth_type": {
"enum": [
"none",
"bearer",
"header_key"
],
"type": "string",
"description": "Auth type (custom MCP). Default: none."
},
"auth_token": {
"type": "string",
"description": "Auth token or API key."
},
"header_name": {
"type": "string",
"description": "Custom header name (for header_key auth)."
},
"catalog_slug": {
"type": "string",
"description": "MCP catalog slug for one-click connect."
},
"display_name": {
"type": "string",
"description": "Human-readable name (custom MCP)."
}
}
}| arg_schema_rules |
| string |
| JSON Schema validating tool arguments (for set). Example: {"properties":{"channel":{"enum":["#general"]}}} |
| rate_limit_per_day | number | Max calls per day, per user (for set). |
| rate_limit_per_hour | number | Max calls per hour, per user (for set). |
| team_budget_per_day | number | Max daily spend team-wide, in millicents (for set). |
| team_rate_limit_per_day | number | Max calls per day, team-wide (for set). |
| team_rate_limit_per_hour | number | Max calls per hour, team-wide (for set). |
| arg_natural_language_rules | string | Plain English rules for argument filtering (for set). Example: "Only allow queries for the last 90 days." |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Connector slug."
},
"action": {
"enum": [
"list",
"set"
],
"type": "string",
"description": "Omit to list permissions for all tools. Pass \"set\" with tool_name + rules to update one."
},
"allowed": {
"type": "boolean",
"description": "Whether the tool is allowed (for set)."
},
"billing": {
"type": "string",
"description": "Scope: \"personal\", \"team\" (auto-resolves if on one team), a team slug, or \"team:<id>\"."
},
"tool_name": {
"type": "string",
"description": "Tool name (for set). Use \"*\" for all tools on this connector."
},
"cost_per_call": {
"type": "number",
"description": "Cost in millicents per call (for set)."
},
"budget_per_day": {
"type": "number",
"description": "Max daily spend per user, in millicents (for set)."
},
"nl_filter_mode": {
"enum": [
"strict",
"advisory"
],
"type": "string",
"description": "How to enforce NL rules: strict (block on violation) or advisory (log only). Default: strict."
},
"arg_schema_rules": {
"type": "string",
"description": "JSON Schema validating tool arguments (for set). Example: {\"properties\":{\"channel\":{\"enum\":[\"#general\"]}}}"
},
"rate_limit_per_day": {
"type": "number",
"description": "Max calls per day, per user (for set)."
},
"rate_limit_per_hour": {
"type": "number",
"description": "Max calls per hour, per user (for set)."
},
"team_budget_per_day": {
"type": "number",
"description": "Max daily spend team-wide, in millicents (for set)."
},
"team_rate_limit_per_day": {
"type": "number",
"description": "Max calls per day, team-wide (for set)."
},
"team_rate_limit_per_hour": {
"type": "number",
"description": "Max calls per hour, team-wide (for set)."
},
"arg_natural_language_rules": {
"type": "string",
"description": "Plain English rules for argument filtering (for set). Example: \"Only allow queries for the last 90 days.\""
}
}
}| error_messages* | string | ALL error messages received during this interaction — not just the last one. Include the full text of every error response from ToolRouter, separated by newlines. |
| interaction_log | string | Chronological log limited to the relevant ToolRouter calls: tool/skill names, non-sensitive input shape, response status, errors, retries, and job polling. Do not include chat history, unrelated conversation text, uploaded file contents, personal data, API keys, or secrets. |
| expected_behavior | string | What you expected to happen vs what actually happened. |
{
"type": "object",
"required": [
"error_messages",
"severity"
],
"properties": {
"tool": {
"type": "string",
"description": "Tool name that failed (e.g. \"web-search\")."
},
"skill": {
"type": "string",
"description": "Skill name that failed (e.g. \"search\")."
},
"job_id": {
"type": "string",
"description": "Job ID for async jobs that failed, if applicable."
},
"call_ids": {
"type": "string",
"description": "ALL call IDs from this interaction (successful and failed), one per line or comma-separated."
},
"severity": {
"enum": [
"blocking",
"degraded"
],
"type": "string",
"description": "\"blocking\" = cannot complete task. \"degraded\" = partial results or workaround exists."
},
"agent_context": {
"type": "string",
"description": "MCP client name and version, if known."
},
"input_summary": {
"type": "string",
"description": "Summary of what you sent to the failing tool (do NOT include API keys or secrets — describe the shape and intent)."
},
"error_messages": {
"type": "string",
"description": "ALL error messages received during this interaction — not just the last one. Include the full text of every error response from ToolRouter, separated by newlines."
},
"interaction_log": {
"type": "string",
"description": "Chronological log limited to the relevant ToolRouter calls: tool/skill names, non-sensitive input shape, response status, errors, retries, and job polling. Do not include chat history, unrelated conversation text, uploaded file contents, personal data, API keys, or secrets."
},
"expected_behavior": {
"type": "string",
"description": "What you expected to happen vs what actually happened."
}
}
}| string |
| Base64-encoded binary data (for images, video). |
| image_url | string | Public URL to download and host permanently. |
| image_data | string | Base64-encoded image. Alternative to image_url when the bytes are already local. |
| description | string | Optional summary (max 500 chars). |
| plan_status | string | Plan status (only for plans section). |
| prompt_meta | object | Prompt metadata (only for prompts section). |
| content_type | string | MIME type. Defaults to "text/markdown" for content, "image/png" for file_data. |
{
"type": "object",
"required": [
"mode"
],
"properties": {
"mode": {
"enum": [
"create",
"update",
"finalize"
],
"type": "string",
"description": "\"create\" for new files, \"update\" to edit existing, \"finalize\" to complete a binary upload."
},
"name": {
"type": "string",
"description": "File name (required for create, max 200 chars)."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tags for organization (max 10)."
},
"content": {
"type": "string",
"description": "Text content (for .md files)."
},
"context": {
"type": "string",
"description": "\"personal\" (default) or \"team:<id>\"."
},
"file_id": {
"type": "string",
"description": "File ID to update (required for update/finalize)."
},
"section": {
"enum": [
"personas",
"plans",
"style_references",
"assets",
"products",
"outfits",
"scenes",
"prompts",
"storyboards"
],
"type": "string",
"description": "Which section to file under (required for create)."
},
"asset_id": {
"type": "string",
"description": "Existing asset ID to retrieve URL without re-uploading."
},
"filename": {
"type": "string",
"description": "Optional filename for the asset."
},
"file_data": {
"type": "string",
"description": "Base64-encoded binary data (for images, video)."
},
"image_url": {
"type": "string",
"description": "Public URL to download and host permanently."
},
"image_data": {
"type": "string",
"description": "Base64-encoded image. Alternative to image_url when the bytes are already local."
},
"description": {
"type": "string",
"description": "Optional summary (max 500 chars)."
},
"plan_status": {
"enum": [
"draft",
"active",
"completed",
"archived"
],
"type": "string",
"description": "Plan status (only for plans section)."
},
"prompt_meta": {
"type": "object",
"properties": {
"type": {
"enum": [
"system",
"user",
"example",
"template",
"script"
],
"type": "string"
}
},
"description": "Prompt metadata (only for prompts section)."
},
"content_type": {
"type": "string",
"description": "MIME type. Defaults to \"text/markdown\" for content, \"image/png\" for file_data."
}
}
}| Skill name from discover results, e.g. "search" |
| backend | object | Route the same model through interchangeable providers. order prioritises providers; only restricts; ignore excludes; allow_fallbacks defaults true. |
| billing | string | Which account to bill. "personal", "team" (auto-resolves if on one team), a team slug ("humanleap"), or a team ID ("team:m57df8c..."). Omit to use your default. |
| brain_context | string | Brain knowledge from brain_query. Pass at the top level of use_tool (alongside "tool", "skill", "input") — NOT inside input. Call brain_query first, then paste the result text here to clear the brain gate. |
| response_format | string | Response verbosity. "concise" (default) strips noise, returns essential data only. "detailed" returns everything including raw metadata. |
{
"type": "object",
"required": [
"tool",
"skill",
"input"
],
"properties": {
"tool": {
"type": "string",
"description": "Tool reference from discover results, e.g. \"web-search\""
},
"input": {
"type": "object",
"description": "Skill input parameters (see discover for schema). For persona-using tools, include persona_file_id from discover or persona_list. For scene-using tools, include scene_file_id from discover or scene_list. For product-using tools, include product_file_id from discover or product_list. For outfit-using tools, include outfit_file_id from discover or outfit_list. For style-reference tools, include style_reference_id (from discover or file_list), style_reference_query (semantic search), or style_reference_prompt (inline prose). For image-composition tools (e.g. generate-image image_to_image), pass any combination of scene_file_id, persona_file_id, product_file_ids[] (from file_list section \"products\"), outfit_file_ids[] (section \"outfits\"), and raw image_urls[] — the gateway resolves and merges them into a single image_urls array (max 4 by default)."
},
"skill": {
"type": "string",
"description": "Skill name from discover results, e.g. \"search\""
},
"backend": {
"type": "object",
"properties": {
"only": {
"type": "array",
"items": {
"type": "string"
},
"description": "Restrict the call to these providers."
},
"order": {
"type": "array",
"items": {
"type": "string"
},
"description": "Provider slugs to try first, in order."
},
"ignore": {
"type": "array",
"items": {
"type": "string"
},
"description": "Exclude these providers."
},
"allow_fallbacks": {
"type": "boolean",
"description": "Try the next provider after an outage, timeout, or rate limit. Defaults to true."
}
},
"description": "Route the same model through interchangeable providers. order prioritises providers; only restricts; ignore excludes; allow_fallbacks defaults true.",
"additionalProperties": false
},
"billing": {
"type": "string",
"description": "Which account to bill. \"personal\", \"team\" (auto-resolves if on one team), a team slug (\"humanleap\"), or a team ID (\"team:m57df8c...\"). Omit to use your default."
},
"brain_context": {
"type": "string",
"description": "Brain knowledge from brain_query. Pass at the top level of use_tool (alongside \"tool\", \"skill\", \"input\") — NOT inside input. Call brain_query first, then paste the result text here to clear the brain gate."
},
"response_format": {
"enum": [
"concise",
"detailed"
],
"type": "string",
"default": "concise",
"description": "Response verbosity. \"concise\" (default) strips noise, returns essential data only. \"detailed\" returns everything including raw metadata."
}
}
}