MCP Tools
Generated from the live tool registry — these match exactly what tools/list returns.
beat_desk
Beat: what is on the calendar, what is waiting on you, and what is stuck and why. One call for the whole picture. Needs beat:read.
Input schema
{
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "ISO start of the window. Defaults to now."
},
"to": {
"type": "string",
"description": "ISO end. Defaults to thirty days out."
}
},
"additionalProperties": false
} beat_piece
Beat: one piece in full, with its per-channel copy and the state of each post. Needs beat:read.
Input schema
{
"type": "object",
"properties": {
"pieceId": {
"type": "string"
}
},
"required": [
"pieceId"
],
"additionalProperties": false
} beat_queue
Beat: recent posts and what happened to them, with the reason anything was held. Needs beat:read.
Input schema
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"default": 50
}
},
"additionalProperties": false
} beat_channels
Beat: connected accounts and their health. A channel with no connection still works; you paste it at the slot. Needs beat:read.
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
} beat_beats
Beat: the recurring themes pieces are written against. Needs beat:read.
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
} beat_create_piece
Beat: file a new idea. Always lands as an idea, never approved. Needs beat:write.
Input schema
{
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Working title. Not the hook."
},
"body": {
"type": "string",
"description": "Canonical body every channel starts from."
},
"channels": {
"type": "array",
"items": {
"type": "string",
"enum": [
"linkedin",
"x",
"facebook",
"instagram",
"threads"
]
}
},
"seriesId": {
"type": "string",
"description": "Which beat it belongs to. See beat_beats."
}
},
"required": [
"title"
],
"additionalProperties": false
} beat_update_piece
Beat: edit a piece, its channels, its slot or its link. Needs beat:write.
Input schema
{
"type": "object",
"properties": {
"pieceId": {
"type": "string"
},
"title": {
"type": "string"
},
"body": {
"type": "string"
},
"linkUrl": {
"type": "string",
"description": "A schemed link bills 13x on X. Write the domain bare."
},
"channels": {
"type": "array",
"items": {
"type": "string",
"enum": [
"linkedin",
"x",
"facebook",
"instagram",
"threads"
]
}
},
"slotLocal": {
"type": "string",
"description": "Wall clock, e.g. 2026-09-12T09:00."
},
"timeZone": {
"type": "string",
"description": "IANA zone the slot is written in."
}
},
"required": [
"pieceId"
],
"additionalProperties": false
} beat_plan
Beat: fill a horizon with ideas across your active beats. Costs 12c, or free while the daily three last. Needs beat:write.
Input schema
{
"type": "object",
"properties": {
"weeks": {
"type": "integer",
"minimum": 1,
"maximum": 6,
"default": 2
},
"themes": {
"type": "string",
"description": "What is on your mind. Read alongside the last 60 days so it does not repeat an angle."
},
"timeZone": {
"type": "string"
}
},
"additionalProperties": false
} beat_draft
Beat: write one piece into every channel it targets, in your voice for each. Costs 2c. Needs beat:write.
Input schema
{
"type": "object",
"properties": {
"pieceId": {
"type": "string"
},
"channels": {
"type": "array",
"items": {
"type": "string",
"enum": [
"linkedin",
"x",
"facebook",
"instagram",
"threads"
]
}
},
"notes": {
"type": "string",
"description": "Anything extra: a link, a number, an angle."
}
},
"required": [
"pieceId"
],
"additionalProperties": false
} beat_rework
Beat: rewrite one channel of one piece against a note. Costs 1c, cheap so you iterate. Needs beat:write.
Input schema
{
"type": "object",
"properties": {
"pieceId": {
"type": "string"
},
"channel": {
"type": "string",
"enum": [
"linkedin",
"x",
"facebook",
"instagram",
"threads"
]
},
"note": {
"type": "string",
"description": "What to change. \"Cut the second paragraph.\""
}
},
"required": [
"pieceId",
"channel",
"note"
],
"additionalProperties": false
} beat_atomize
Beat: break a long piece into several posts. Costs 6c, cheaper than drafting them one at a time. Needs beat:write.
Input schema
{
"type": "object",
"properties": {
"pieceId": {
"type": "string"
},
"source": {
"type": "string",
"description": "Long text to break up. Defaults to the piece body."
}
},
"required": [
"pieceId"
],
"additionalProperties": false
} beat_approve
Beat: approve one piece so it goes out at its slot. One at a time, never in bulk. Needs beat:publish, which is a separate scope from beat:write on purpose.
Input schema
{
"type": "object",
"properties": {
"pieceId": {
"type": "string"
}
},
"required": [
"pieceId"
],
"additionalProperties": false
} beat_mark_posted
Beat: record that you posted something by hand on a manual channel. Beat keeps no permalink, because it did not send it. Needs beat:publish.
Input schema
{
"type": "object",
"properties": {
"postId": {
"type": "string"
}
},
"required": [
"postId"
],
"additionalProperties": false
} search_skills
Search the AI Coach skill library by free text and/or category.
Input schema
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Free-text search query (matches name/description/tags)"
},
"category": {
"type": "string",
"description": "Filter by category slug (e.g. \"engineering\")"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"default": 20
},
"offset": {
"type": "integer",
"minimum": 0,
"default": 0
}
},
"additionalProperties": false
} get_skill
Fetch a single skill including its full SKILL.md content, install command, and capabilities.
Input schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Skill slug, e.g. \"code-reviewer\""
}
},
"required": [
"slug"
],
"additionalProperties": false
} install_skill
Returns a copy-paste install command for a given skill, tailored to the target agent (Claude Code, Cursor, Codex, Zed, or generic).
Input schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Skill slug to install"
},
"client": {
"type": "string",
"enum": [
"claude-code",
"cursor",
"codex",
"zed",
"generic"
],
"default": "generic",
"description": "Target agent — controls which install snippet is returned"
}
},
"required": [
"slug"
],
"additionalProperties": false
} search_marketplace
Search the AI Coach marketplace — MCP servers and curated AI products.
Input schema
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Free-text search query"
},
"kind": {
"type": "string",
"enum": [
"mcp",
"product",
"all"
],
"default": "all",
"description": "Filter results by item kind"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 20
}
},
"additionalProperties": false
} create_marketplace_sku
Create or update a sellable marketplace SKU (admin only). Also add it to src/data/marketplace-skus.json, or the next deploy drops it.
Input schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable SKU code, lowercase with dashes, e.g. \"ac-audit-pro\""
},
"productSlug": {
"type": "string",
"description": "Catalog slug this SKU attaches to, e.g. \"website-audit\""
},
"name": {
"type": "string",
"description": "Display name shown in the buy box"
},
"summary": {
"type": "string"
},
"fulfilment": {
"type": "string",
"enum": [
"external",
"digital",
"license_key",
"lead"
],
"description": "external = tracked outbound link (no payment here); digital = instant download/entitlement; license_key = a code drawn from stock; lead = order recorded and fulfilled by a human"
},
"priceCents": {
"type": "integer",
"minimum": 0,
"description": "Whole cents. Must be 0 for external SKUs, and at least 50 otherwise."
},
"compareAtCents": {
"type": "integer",
"description": "Strikethrough price. Must exceed priceCents."
},
"priceNote": {
"type": "string",
"description": "e.g. \"one-time\", \"per seat / mo\""
},
"ctaLabel": {
"type": "string"
},
"badge": {
"type": "string"
},
"externalUrl": {
"type": "string",
"description": "Required for fulfilment=external. Must be https."
},
"affiliateParams": {
"type": "string",
"description": "Query string appended to externalUrl, e.g. \"ref=aicoach\""
},
"deliveryPayload": {
"type": "object",
"description": "What the buyer gets: downloadUrl, instructions, redeemUrl. Required for paid digital SKUs.",
"properties": {
"downloadUrl": {
"type": "string"
},
"instructions": {
"type": "string"
},
"redeemUrl": {
"type": "string"
}
}
},
"stock": {
"type": "integer",
"minimum": 0,
"description": "Omit for unlimited."
},
"sellerUserId": {
"type": "integer",
"description": "Third-party seller who earns 60%. Omit for house SKUs."
},
"sortOrder": {
"type": "integer"
},
"isActive": {
"type": "boolean",
"default": true
}
},
"required": [
"id",
"productSlug",
"name",
"fulfilment"
],
"additionalProperties": false
} list_marketplace_skus
List marketplace SKUs with price, stock and fulfilment (admin only).
Input schema
{
"type": "object",
"properties": {
"activeOnly": {
"type": "boolean",
"default": false
}
},
"additionalProperties": false
} draft_marketplace_entry
Read a vendor URL and draft a catalog entry plus a suggested SKU for review (admin only). Never invents a price.
Input schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Vendor product page to read"
}
},
"required": [
"url"
],
"additionalProperties": false
} list_models
List the LLMs available through AI Coach (read-only catalog metadata: provider, context window, costs, capabilities).
Input schema
{
"type": "object",
"properties": {
"provider": {
"type": "string",
"description": "Filter by provider id (anthropic, openai, google-ai-studio, deepseek, groq, mistral, workers-ai, ai-gateway)"
}
},
"additionalProperties": false
} compare_models
Compare two or more models side-by-side. Returns context windows, max output, per-million-token costs, and capability flags.
Input schema
{
"type": "object",
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 2,
"maxItems": 6,
"description": "Catalog ids to compare side-by-side"
}
},
"required": [
"ids"
],
"additionalProperties": false
} run_tool
Execute a sync nano-app tool against the user's input. Requires a Bearer key with the mcp:tools scope. Returns the tool's text output. Pay-per-use tools debit the wallet; insufficient balance returns a payment_required content block.
Input schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Tool slug (from search_tools) — e.g. \"text-summarizer\", \"ai-post-maker\", \"markdown-to-pdf\""
},
"input": {
"type": "string",
"description": "Free-text input to the tool. The tool decides how to interpret it."
}
},
"required": [
"slug",
"input"
],
"additionalProperties": false
} search_tools
List or search the AI Coach nano-app tools (text summarizer, post maker, persona creator, markdown→PDF, etc.). Each result includes whether the tool is free, free-metered, or pay-per-use.
Input schema
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Free-text search query (matches name/description/category)"
},
"category": {
"type": "string",
"description": "Filter by category (converter|generator|analyzer|formatter|other)"
}
},
"additionalProperties": false
} run_model_bakeoff
Send the same prompt to multiple models in parallel and return their outputs side-by-side with per-model latency and tokens. Free tier: ≤3 models, ≤8k output. Paid: up to 6 models. Requires mcp:bakeoff scope.
Input schema
{
"type": "object",
"properties": {
"prompt": {
"type": "string",
"description": "The prompt to send to every model"
},
"models": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 2,
"maxItems": 6,
"description": "Catalog ids — get from list_models"
},
"system": {
"type": "string",
"description": "Optional system prompt sent to every model"
},
"maxOutputTokens": {
"type": "integer",
"minimum": 64,
"maximum": 8192,
"default": 1024,
"description": "Output token cap per model"
}
},
"required": [
"prompt",
"models"
],
"additionalProperties": false
} share_model_report
Persist a bake-off as a public report and return a shareable URL (https://aicoach.pw/share/r/<id>).
Input schema
{
"type": "object",
"properties": {
"reportId": {
"type": "string",
"description": "Report id returned by run_model_bakeoff"
}
},
"required": [
"reportId"
],
"additionalProperties": false
} publish_skill
Publish a skill to the caller's AI Coach catalog in one shot: create (or reuse) the skill record, reserve a new version, upload the bundle bytes, and finalize after server-side validation. Requires an API key with the publisher:write scope. Bundle is gzipped tarball, markdown-only payload (SKILL.md + optional references/, assets/, LICENSE), ≤ 5 MB.
Input schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Skill slug, kebab-case, 1–64 chars. Must match the `name:` in SKILL.md frontmatter."
},
"displayName": {
"type": "string",
"description": "Human-readable name shown in search results."
},
"descriptionShort": {
"type": "string",
"description": "One-liner shown in search results, max 200 chars."
},
"descriptionLong": {
"type": "string",
"description": "Optional long-form description (markdown)."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional tag strings."
},
"iconUrl": {
"type": "string",
"description": "Optional icon URL."
},
"visibility": {
"type": "string",
"enum": [
"private",
"unlisted",
"public"
],
"default": "private",
"description": "private = only you; unlisted = anyone with the link; public = discoverable."
},
"pricingModel": {
"type": "string",
"enum": [
"free",
"one_time"
],
"default": "free"
},
"priceCents": {
"type": "integer",
"minimum": 100,
"maximum": 100000,
"description": "Required when pricingModel=\"one_time\". Between $1.00 and $1000.00."
},
"semver": {
"type": "string",
"description": "Version of this bundle. e.g. \"0.1.0\". Must be strictly greater than the previous finalized version."
},
"changelog": {
"type": "string",
"description": "Optional changelog for this version."
},
"bundleBase64": {
"type": "string",
"description": "The skill bundle (gzipped tarball, ≤ 5 MB after base64-decode), base64-encoded. Must contain SKILL.md at the root."
}
},
"required": [
"slug",
"displayName",
"descriptionShort",
"semver",
"bundleBase64"
],
"additionalProperties": false
} list_my_skills
List skills published by the authenticated publisher. Requires the publisher:read or publisher:write scope.
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
} update_skill
Change a skill you publish: name, descriptions, tags, category, visibility or price. Does not touch the published bundle — use publish_skill for a new version.
Input schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Slug of a skill you publish"
},
"displayName": {
"type": "string"
},
"descriptionShort": {
"type": "string"
},
"descriptionLong": {
"type": "string"
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 20
},
"iconUrl": {
"type": "string"
},
"visibility": {
"type": "string",
"enum": [
"private",
"unlisted",
"public"
]
},
"pricingModel": {
"type": "string",
"enum": [
"free",
"one_time"
]
},
"priceCents": {
"type": "integer",
"minimum": 100,
"maximum": 100000
},
"taglineShort": {
"type": "string"
},
"category": {
"type": "string"
}
},
"required": [
"slug"
],
"additionalProperties": false
} list_skill_versions
Every version of one of your skills, with its state, size, checksum and which one is currently latest.
Input schema
{
"type": "object",
"properties": {
"slug": {
"type": "string"
}
},
"required": [
"slug"
],
"additionalProperties": false
} deprecate_skill_version
Retire an older version of your skill. Refuses the latest version, since that is the one people are installing.
Input schema
{
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"versionId": {
"type": "string",
"description": "Version id from list_skill_versions"
}
},
"required": [
"slug",
"versionId"
],
"additionalProperties": false
} submit_skill_for_review
Ask AI Coach to review a skill for public listing. Publishing is already live on an unlisted link; this is what puts it in public search.
Input schema
{
"type": "object",
"properties": {
"slug": {
"type": "string"
}
},
"required": [
"slug"
],
"additionalProperties": false
} list_my_purchases
Skills you have bought, with what you paid and whether each is still available.
Input schema
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"default": 50
}
},
"additionalProperties": false
} list_runbooks
List runbooks. scope="mine" needs a token; scope="public" browses the shared catalog anonymously.
Input schema
{
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"mine",
"public"
],
"default": "mine"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"default": 50
}
},
"additionalProperties": false
} get_runbook
Full detail of one runbook, including its instructions and declared inputs.
Input schema
{
"type": "object",
"properties": {
"id": {
"type": "string"
}
},
"required": [
"id"
],
"additionalProperties": false
} create_runbook
Create a runbook: a stored agent brief with instructions, skills, tools and a budget. Starts private.
Input schema
{
"type": "object",
"properties": {
"title": {
"type": "string"
},
"instructions": {
"type": "string",
"description": "What the agent should do, in prose"
},
"role": {
"type": "string",
"description": "Who the agent is acting as"
},
"outcome": {
"type": "string",
"description": "What a finished run should produce"
},
"skillSlugs": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 20
},
"toolIds": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 20
},
"model": {
"type": "string"
},
"budgetCents": {
"type": "integer",
"minimum": 0,
"maximum": 100000
},
"maxIterations": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"visibility": {
"type": "string",
"enum": [
"private",
"unlisted",
"public"
],
"default": "private"
}
},
"required": [
"title",
"instructions"
],
"additionalProperties": false
} update_runbook
Change a runbook you own. Pass only the fields you want changed.
Input schema
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"instructions": {
"type": "string"
},
"role": {
"type": "string"
},
"outcome": {
"type": "string"
},
"skillSlugs": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 20
},
"toolIds": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 20
},
"model": {
"type": "string"
},
"budgetCents": {
"type": "integer",
"minimum": 0,
"maximum": 100000
},
"maxIterations": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"visibility": {
"type": "string",
"enum": [
"private",
"unlisted",
"public"
]
}
},
"required": [
"id"
],
"additionalProperties": false
} archive_runbook
Archive a runbook you own. It stops appearing and cannot be run.
Input schema
{
"type": "object",
"properties": {
"id": {
"type": "string"
}
},
"required": [
"id"
],
"additionalProperties": false
} list_runbook_runs
Your recent runbook runs with state, cost and a preview of the outcome.
Input schema
{
"type": "object",
"properties": {
"runbookId": {
"type": "string",
"description": "Only runs of this runbook"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"default": 50
}
},
"additionalProperties": false
} get_runbook_run
One run in full, including the finished outcome.
Input schema
{
"type": "object",
"properties": {
"runId": {
"type": "string"
}
},
"required": [
"runId"
],
"additionalProperties": false
} start_runbook_run
Start a run and wait for it. This spends the account balance, so it needs the runbooks:run scope. Returns the outcome, or a run id to poll when the engine is handling execution.
Input schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Runbook id"
},
"inputs": {
"type": "object",
"description": "Values for the runbook's declared inputs"
}
},
"required": [
"id"
],
"additionalProperties": false
}